Wie verwende ich OCR von der Kommandozeile in Linux?


30

Ich habe mehrere tausend Seiten gescannter Buchseiten. Jede Seite wird einzeln als JPG gespeichert. Die Schrift ist klar, aber die Schriftarten variieren und die Seiten enthalten Bilder und Illustrationen.

Ich muss eine Liste aller Wörter in jeder JPG-Datei erstellen. Gibt es ein Befehlszeilentool zum Scannen eines Bildes, in dem die angezeigten Wörter aufgelistet sind? Es muss nicht perfekt gescannt werden, sondern nur eine Schätzung.


github.com/tesseract-ocr/tesseract/wiki/Command-Line-Usage - das ist die Engine hinter ocrmypdf und im Allgemeinen können Sie weniger Schritte in Ihrem Setup ausführen.
Oakad

4
Mögliches Duplikat von OCR auf Linux-Systemen
curiousdannii

2
duplizieren ist ein bisschen alt, neuere Sachen könnten existieren. Ich werde Abstimmung offen lassen.
Archemar

Antworten:


25

Tesseract ist hier wahrscheinlich die am häufigsten verwendete Lösung. Es ist in den meisten Paket-Repositorys verfügbar, z.

sudo apt install tesseract-ocr

und kann mit verwendet werden

tesseract input.png out.txt

19

Installieren imagemagick, pdftotext(in einem Paket gefunden namens poppler-utilsinnerhalb einiger Paketmanager) und ocrmypdf . Letzteres ist eine schnelle (ocr benötigt viel CPU und ist so konfiguriert, dass alle Ihre Kerne verwendet werden), quelloffene und häufig aktualisierte OCR-Software. Dieser Ansatz ist möglicherweise übertrieben, da er tatsächlich versucht, jedem Wort eine Zeichenfolge zuzuweisen, anstatt nur ein Wort zu kennzeichnen, aber ich hatte große Probleme, eine gute und einfach zu verwendende OpenSource-OCR-Software im Allgemeinen zu finden. Dann in dem Verzeichnis, in dem Sie alle Ihre JPGs gespeichert haben:

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

2
Hierfür wird der unten genannte Tesseract verwendet.
Exic

ocrmypdfmachte meinen Tag
Everyday Astronaut

Die Idee, zuerst in PDF konvertieren zu müssen, ist einfach doof. warum kann ich nicht einfach eine jpg-datei eingeben und rohen text rausholen?
Michael

Sie können eine Bash-Datei verwenden, um alle Befehlszeilen für Sie zu erledigen.
Projetmbc

7

Bilddatei.png um 480% hochskalieren, zu Graustufen wechseln, mit Weiß auffüllen, schärfen und dann mit tesseract OCR extrahieren. Es funktioniert die meiste Zeit gut, mit Ausnahme von sehr großen Schriftarten und Weiß auf Schwarz. Wenn die Schriftarten sehr groß sind, können Sie nur 200% oder 300% höher skalieren.

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

Das Ergebnis ist in file.txt.


Dies ist, was für mich mit einem sehr kleinen Stück nicht-englischen Text mit winziger Schriftgröße gearbeitet hat. Tolle.
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

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.