Jak korzystać z OCR z wiersza poleceń w systemie Linux?


30

Mam kilka tysięcy stron zeskanowanych stron książek. Każda strona jest zapisywana osobno jako JPG. Pismo jest jasne, ale czcionki różnią się, a strony zawierają zdjęcia i ilustracje.

Muszę utworzyć listę wszystkich słów pojawiających się w każdym pliku JPG. Czy istnieje narzędzie wiersza polecenia do skanowania obrazu z listą pojawiających się słów? To nie musi mieć idealnego skanowania, tylko oszacowanie.


github.com/tesseract-ocr/tesseract/wiki/Command-Line-Usage - to jest silnik stojący za ocrmypdf i ogólnie pozwoli ci mieć mniej kroków w konfiguracji.
oakad

4
Możliwy duplikat OCR w systemach Linux
ciekawynii

2
duplikat jest nieco stary, mogą istnieć nowe rzeczy. Głosuję, zostawię otwarty.
Archemar,

Odpowiedzi:


25

tesseract jest prawdopodobnie najczęściej stosowanym rozwiązaniem tutaj. Jest dostępny w większości repozytoriów pakietów, np.

sudo apt install tesseract-ocr

i może być używany z

tesseract input.png out.txt

19

Zainstaluj imagemagick, pdftotext(znaleziony w pakiecie o nazwie poppler-utilsw niektórych menedżerach pakietów) i ocrmypdf . Ten ostatni jest szybki (ocr zajmuje dużo procesora i jest skonfigurowany do używania wszystkich rdzeni), jest oprogramowaniem typu open source i często aktualizowanym oprogramowaniem OCR. To podejście jest prawdopodobnie przesadne, ponieważ faktycznie próbuje przypisać ciąg do każdego słowa zamiast po prostu oznaczać słowo, ale miałem wiele problemów ze znalezieniem dobrego i łatwego w użyciu oprogramowania OCR typu open source. Następnie w katalogu, w którym zapisałeś wszystkie swoje pliki JPG:

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

2
fwiw, używa to wspomnianego poniżej Tesseract.
exic

ocrmypdfzrobił mój dzień
codzienny astronauta

pomysł, aby najpierw przekonwertować na pdf, jest po prostu głupi. dlaczego nie mogę po prostu wprowadzić pliku jpg i uzyskać trochę surowego tekstu?
Michael

Możesz użyć pliku bash, aby wykonać wszystkie wiersze poleceń.
projetmbc

7

Skaluj plik obrazu.png o 480%, zmień na skalę szarości, wypełnij białym kolorem, wyostrz, a następnie wyodrębnij za pomocą tesseract OCR. Przez większość czasu działa dobrze, z wyjątkiem bardzo dużych czcionek i koloru białego na czarnym. Jeśli czcionki są bardzo duże, skaluj tylko 200% lub 300%.

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

Wynik znajduje się w pliku.txt.


To właśnie działało dla mnie z bardzo małym fragmentem tekstu w języku innym niż angielski z niewielkim rozmiarem czcionki. Niesamowity.
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

Źródło: https://help.ubuntu.com/community/OCR

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.