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.