Tesseract OCR, selección de texto reconocido en la imagen

Es bastante fácil leer la imagen, guardar el texto, procesar el texto y obtener el resultado. Quiero decirle cómo mostrar el resultado para el usuario en una imagen leída previamente, por ejemplo, seleccione un fragmento de texto que contenga una oración de destino. Tal tarea será útil para resaltar una parte importante del informe y demostrárselo a la gerencia.





Puede dibujar en la imagen por coordenadas, pero necesita obtener las coordenadas al leer el texto. Puede obtenerlos usando un tipo de salida especial:





pd_dataframe = pytesseract.image_to_data(image, output_type=Output.DATAFRAME)
      
      



Entonces, veamos un ejemplo. Tomemos un informe financiero disponible públicamente de Internet, leamos una de sus páginas (la usaremos a continuación) y observemos el marco de datos resultante con texto.





result output_type = Output.DATAFRAME
result output_type = Output.DATAFRAME
Descripción detallada de columnas (eng)
  • level = 1/2/3/4/5, el nivel del elemento actual.





  • page_num: el índice de página del elemento actual. En la mayoría de los casos, una imagen solo tiene una página.





  • block_num: el elemento de bloque del elemento actual. cuando tesseract OCR Image, dividirá la imagen en varios bloques de acuerdo con los parámetros de PSM y algunas reglas. Las palabras en una línea a menudo en un bloque.





  • par_num: el índice de párrafo del elemento actual. Son los resultados del análisis de la página.





  • line_num: el índice de línea del elemento actual. Son los resultados del análisis de la página.





  • word_num: el índice de palabras en un bloque.





  • left/top/width/height:the top-left coordinate and the width and height of the current word.





  • conf: the confidence of the current word, the range is -1~100.. The -1 means that there is no text here. The 100 is the highest value.





  • text: the word ocr results.





, ( ), , , , .





diferencia de bloques de párrafos (bloque vs par_num)
(block vs par_num)

, . :





left -





top -





width - ( )





height - ( )





Para un bloque o párrafo para todas las palabras, tomamos el mínimo a la izquierda y arriba, y el ancho y alto máximo, como resultado obtenemos las coordenadas para el texto seleccionado:





Habiendo recibido un dataframe con las coordenadas de cada palabra, se puede crear un dataframe con las coordenadas de bloques, párrafos, líneas, oraciones… depende del problema que se resuelva. Para dibujar (formas geométricas, insertar texto adicional, etc.) usando estas coordenadas, necesitará obtener una imagen del texto y dibujar sobre él, si lo aumentó artificialmente para reconocer y obtener coordenadas, no olvide aumentarlo en de la misma manera al dibujar.





El código para leer texto, dibujar cv2.rectangle por coordenadas se publicará en GitHub








All Articles