Detectar en texto escaneado los grados necesarios para rotarlo y pasar OCR

Los procesos OCR requieren a ser posible de un trabajo previo. El trabajo previo es el que se encarga de auto-rotar imágenes escaneadas, pasarlas a una paleta de colores de 1 bit (blanco y negro), eliminar ruido, eliminar bordes, …

Em este post solo voy a comentar una forma de auto-rotar imágenes.

Instalamos Tesseract en Debian así:

# apt get install python-skimage python3-skimage pdftk
# apt-get install tesseract-ocr tesseract-ocr-spa

Obtenemos una página de un documento en castellano así:

$ wget "http://lavapies.linuxinthenight.com/libros/tecnicos/La_biblia_de_C-Spanish-MegageM.pdf"
$ pdftk La_biblia_de_C-Spanish-MegageM.pdf cat 09-09 output 9.pdf
$ convert -density 150 -trim 9.pdf -quality 100 -flatten -sharpen 0x1.0 9.png 

Hacemos la pasada OCR así:

$ tesseract 9.png 9.txt -l spa+eng

Obtendremos el texto en un archivo llamado 9.txt

Detectar si necesita el texto rotación

Pongamos el mismo ejemplo pero rotado -5 grados (lo he rotado con gimp):

Si nos bajamos este script en python vamos a poder detectar los grados de rotación que necesitamos para corregir un texto escaneado. El tema es que es muy importante a la hora de realizar un OCR disponer del texto bien recto sin rotaciones no necesarias.

$ cp -pRv 9.png skew-linedetection.png
$ wget "https://gist.githubusercontent.com/endolith/334196bac1cac45a4893/raw/248cc6da84d284a3d80b12b2adde29fb740acd01/rotation_spacing.py"

Si todo va bien tendríamos que poder usar convert (que viene en imagemagick) para rotar la imagen los grados necesarios.

Deja un comentario

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