Saltar al contenido

Obtenga la orientación correcta de la imagen mediante la API de Google Cloud Vision (TEXT_DETECTION)

Recuerda que en la informática cualquier problema casi siempere puede tener más de una soluciones, no obstante te enseñaremos lo más óptimo y mejor.

Solución:

Puede aprovechar el hecho de que conocemos la secuencia de caracteres en una palabra para inferir la orientación de una palabra de la siguiente manera (obviamente, una lógica ligeramente diferente para los idiomas que no son LTR):

for page in annotation:
    for block in page.blocks:
        for paragraph in block.paragraphs:
            for word in paragraph.words:
                if len(word.symbols) < MIN_WORD_LENGTH_FOR_ROTATION_INFERENCE:
                    continue
                first_char = word.symbols[0]
                last_char = word.symbols[-1]
                first_char_center = (np.mean([v.x for v in first_char.bounding_box.vertices]),np.mean([v.y for v in first_char.bounding_box.vertices]))
                last_char_center = (np.mean([v.x for v in last_char.bounding_box.vertices]),np.mean([v.y for v in last_char.bounding_box.vertices]))

                #upright or upside down
                if np.abs(first_char_center[1] - last_char_center[1]) < np.abs(top_right.y - bottom_right.y): 
                    if first_char_center[0] <= last_char_center[0]: #upright
                        print 0
                    else: #updside down
                        print 180
                else: #sideways
                    if first_char_center[1] <= last_char_center[1]:
                        print 90
                    else:
                        print 270

Luego puede usar la orientación de palabras individuales para inferir la orientación del documento en general.

La respuesta de Jack Fan funcionó para mí. Esta es mi versión de VanillaJS.

/**
 *
 * @param gOCR  The Google Vision response
 * @return orientation (0, 90, 180 or 270)
 */
function getOrientation(gOCR) 
    var vertexList = gOCR.responses[0].textAnnotations[1].boundingPoly.vertices;

    const ORIENTATION_NORMAL = 0;
    const ORIENTATION_270_DEGREE = 270;
    const ORIENTATION_90_DEGREE = 90;
    const ORIENTATION_180_DEGREE = 180;

    var centerX = 0, centerY = 0;
    for (var i = 0; i < 4; i++) 
        centerX += vertexList[i].x;
        centerY += vertexList[i].y;
    
    centerX /= 4;
    centerY /= 4;

    var x0 = vertexList[0].x;
    var y0 = vertexList[0].y;

    if (x0 < centerX) 
        if (y0 < centerY) 

            return ORIENTATION_NORMAL;
         else 
            return ORIENTATION_270_DEGREE;
        
     else 
        if (y0 < centerY) 
            return ORIENTATION_90_DEGREE;
         else 
            return ORIENTATION_180_DEGREE;
        
    

Como se describe en Public Issue Tracker, nuestro equipo de ingeniería ahora está al tanto de esta solicitud de función y actualmente no hay ETA para su implementación.

Tenga en cuenta que es posible que la información de orientación ya esté disponible en los metadatos de su imagen. Se puede ver un ejemplo de cómo extraer los metadatos en esta biblioteca de terceros.

Una solución amplia sería verificar los "vértices" "boundingPoly" devueltos para las "anotaciones de texto" devueltas. Al calcular el ancho y el alto del rectángulo de cada palabra detectada, puede averiguar si una imagen no está boca arriba si el rectángulo 'alto' > 'ancho' (también conocido como la imagen está de lado).

Te mostramos las reseñas y valoraciones de los usuarios

Al final de todo puedes encontrar los comentarios de otros creadores, tú igualmente eres capaz insertar el tuyo si te gusta.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *