¿Cómo usar OCR desde la línea de comandos en Linux?

30

Tengo varios miles de páginas de libros escaneados. Cada página se guarda individualmente como un JPG. La escritura es clara, pero las fuentes varían, y las páginas incluyen imágenes e ilustraciones.

Necesito crear una lista de todas las palabras que aparecen en cada archivo JPG. ¿Existe una herramienta de línea de comando para escanear una imagen que enumere las palabras que aparecen? No necesita tener un escaneo perfecto, solo una estimación.

Pueblo
fuente
github.com/tesseract-ocr/tesseract/wiki/Command-Line-Usage : ese es el motor detrás de ocrmypdf y, en general, le permitirá tener menos pasos en su configuración.
oakad
44
Posible duplicado de OCR en sistemas Linux
curiousdannii
2
el duplicado es un poco viejo, pueden existir cosas nuevas. Voy a votar dejar abierto.
Archemar

Respuestas:

25

tesseract es probablemente la solución más utilizada aquí. Está disponible en la mayoría de los repositorios de paquetes, por ejemplo,

sudo apt install tesseract-ocr

y se puede usar con

tesseract input.png out.txt
Nico Schlömer
fuente
19

Instalar imagemagick, pdftotext(que se encuentra en un paquete llamado poppler-utilsdentro de algunos gestores de paquetes) y ocrmypdf . Este último es un software de OCR de código abierto y actualizado con frecuencia (ocr toma mucha CPU y está configurado para usar todos sus núcleos). Este enfoque es posiblemente excesivo, ya que en realidad trata de asignar una cadena a cada palabra en lugar de simplemente etiquetar una palabra, pero he tenido muchos problemas para encontrar un software OCR de código abierto bueno y fácil de usar en general. Luego, en el directorio donde ha guardado todos sus JPG:

$ convert *.jpg pictures.pdf
$ ocrmypdf pictures.pdf scanned.pdf
$ pdftotext scanned.pdf scanned.txt
$ wc -w scanned.txt
rien333
fuente
2
fwiw, esto usa el Tesseract mencionado a continuación.
exic
ocrmypdfhizo mi día
Astronauta todos los días
La idea de tener que convertir a PDF primero es una tontería. ¿por qué no puedo simplemente ingresar un archivo jpg y obtener un texto sin formato?
Michael
Puede usar un archivo bash para hacer todas las líneas de comando por usted.
projetmbc
7

Upscale image file.png en un 480%, cambie a escala de grises, rellene con blanco, agudice y luego extraiga utilizando tesseract OCR. Funciona bien la mayor parte del tiempo para mí, excepto las fuentes muy grandes y el blanco sobre negro. Si las fuentes son muy grandes, solo aumenta el 200% o 300%

 convert -colorspace gray -fill white  -resize 480%  -sharpen 0x1  file.png file.jpg
 tesseract file.jpg file

El resultado está en file.txt.

Eamonn Kenny
fuente
Esto es lo que funcionó para mí con un texto muy pequeño que no está en inglés con un tamaño de fuente muy pequeño. Asombroso.
Avio
0

TL; DR

for i in /path_to/*.jpg;do ./myocr.sh $i $(basename $i .jpg);done

#!/bin/bash
# PROGRAM=myocr.sh
if [ "$1" ] && [ -e "$1" ]; then
  TMPF=$(mktemp myocr.sh.XXXXXXXX.tif)
  DEST="$2"
  if [ ! "$DEST" ]; then
    DEST="${1%.*}.txt"
    if [ -e "$DEST" ]; then
      echo "$DEST already exists; please provide a new textfile name" >&2
      exit 1
    fi
  fi
  /usr/bin/convert "$1" -colorspace Gray -depth 8 -resample 200x200 -flatten -alpha Off $TMPF \
  && /usr/bin/tesseract $TMPF "$DEST"
  EX=$?
  /bin/rm -f $TMPF
  [ $EX -eq 0 ] && [ "$TERM" ] && echo "created $DEST"
  exit $EX
else
  echo "Usage: $0 imagefile [textfile]" >&2
  echo " creates a plain text file with the text found in imagefile" >&2
  exit 1
fi

Fuente: https://help.ubuntu.com/community/OCR

Antonio Feitosa
fuente