Come usare l'OCR dalla riga di comando in Linux?


30

Ho diverse migliaia di pagine di libri scansionati. Ogni pagina viene salvata singolarmente come JPG. La scrittura è chiara, ma i caratteri variano e le pagine includono immagini e illustrazioni.

Devo creare un elenco di tutte le parole che compaiono in ogni file JPG. Esiste uno strumento da riga di comando per scansionare un'immagine che elenca le parole che appaiono? Non ha bisogno di una scansione perfetta, solo una stima.


github.com/tesseract-ocr/tesseract/wiki/Command-Line-Usage - questo è il motore dietro ocrmypdf e, in generale, ti permetterà di avere meno passaggi nella tua configurazione.
Oakad,

4
Possibile duplicato di OCR su sistemi Linux
curiousdannii,

2
il duplicato è un po 'vecchio, potrebbe esistere roba più recente. Voterò lasciare aperto.
Archemar,

Risposte:


25

tesseract è probabilmente la soluzione più utilizzata qui. È disponibile nella maggior parte dei repository di pacchetti, ad es.

sudo apt install tesseract-ocr

e può essere usato con

tesseract input.png out.txt

19

Installa imagemagick, pdftotext(presente in un pacchetto denominato poppler-utilsall'interno di alcuni gestori di pacchetti) e ocrmypdf . Quest'ultimo è un veloce (ocr richiede un sacco di CPU, ed è configurato per utilizzare tutti i tuoi core), software open source e aggiornato di frequente. Questo approccio è probabilmente eccessivo poiché in realtà cerca di assegnare una stringa a ogni parola invece di etichettarla, ma ho avuto molti problemi a trovare un software OCR open source buono e facile da usare in generale. Quindi, nella directory in cui hai salvato tutti i tuoi JPG:

$ convert *.jpg pictures.pdf
$ ocrmypdf pictures.pdf scanned.pdf
$ pdftotext scanned.pdf scanned.txt
$ wc -w scanned.txt

2
in seguito, utilizza il Tesseract di seguito indicato.
exic

ocrmypdfreso il mio giorno
Everyday Astronaut

l'idea di dover prima convertire in pdf è solo sciocca. perché non posso semplicemente inserire un file jpg e ottenere del testo grezzo?
Michael

Puoi usare un file bash per fare tutte le righe di comando per te.
projetmbc,

7

Upscale image file.png del 480%, passare alla scala di grigi, riempire con il bianco, affinare e quindi estrarre utilizzando l'OCR tesseract. Funziona bene per la maggior parte del tempo, tranne per i caratteri molto grandi e bianco su nero. Se i caratteri sono molto grandi, aumenta solo il 200% o il 300%.

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

Il risultato è in file.txt.


Questo è ciò che ha funzionato per me con un testo molto piccolo e non inglese con dimensioni minuscole del carattere. Stupefacente.
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

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.