Как использовать OCR из командной строки в Linux?

30

У меня есть несколько тысяч страниц отсканированных страниц книг. Каждая страница сохраняется отдельно в формате JPG. Письменность понятна, но шрифты различаются, и на страницах есть картинки и иллюстрации.

Мне нужно создать список всех слов, появляющихся в каждом файле JPG. Существует ли инструмент командной строки для сканирования изображения с перечислением слов, которые появляются? Для этого не нужно совершенное сканирование, просто оценка.

Деревня
источник
github.com/tesseract-ocr/tesseract/wiki/Command-Line-Usage - это движок, стоящий за ocrmypdf, и, в общем, позволит вам сделать меньше шагов в настройке.
дубад
4
Возможная
копия
2
дубликат немного стар, более новые вещи могут существовать. Я буду голосовать оставить открытым.
Архемар

Ответы:

25

Тессеракт , вероятно, является наиболее часто используемым решением здесь. Он доступен в большинстве репозиториев пакетов, например,

sudo apt install tesseract-ocr

и может быть использован с

tesseract input.png out.txt
Нико Шлёмер
источник
19

Установить imagemagick, pdftotext(находится в пакете с именем poppler-utilsв некоторых менеджеров пакетов) и ocrmypdf . Последний является быстрым (ocr требует много ресурсов процессора, и он настроен на использование всех ваших ядер), с открытым исходным кодом и часто обновляемым компонентом программного обеспечения OCR. Этот подход, возможно, излишний, так как он фактически пытается присвоить строку каждому слову вместо простой маркировки слова, но у меня было много проблем с поиском хорошего и простого в использовании программного обеспечения OCR с открытым исходным кодом в целом. Затем в каталоге, где вы сохранили все ваши JPG:

$ convert *.jpg pictures.pdf
$ ocrmypdf pictures.pdf scanned.pdf
$ pdftotext scanned.pdf scanned.txt
$ wc -w scanned.txt
rien333
источник
2
Кстати, это использует ниже упомянутый Тессеракт.
Exic
ocrmypdfсделал мой день
каждый день астронавт
мысль о необходимости сначала конвертировать в pdf просто тупая. почему я не могу просто ввести файл jpg и получить какой-нибудь необработанный текст?
Майкл
Вы можете использовать bash-файл для выполнения всех командных строк за вас.
projetmbc
7

Upscale image file.png на 480%, измените на оттенки серого, залейте белым цветом, заострите, а затем извлеките с помощью оптического распознавания текста. Это хорошо работает большую часть времени для меня, за исключением очень больших шрифтов, и белого на черном. Если шрифты очень большие, только 200% или 300%.

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

Результат находится в файле .txt.

Имонн Кенни
источник
Это то, что сработало для меня с очень маленьким кусочком неанглийского текста с крошечным размером шрифта. Удивительно.
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

Источник: https://help.ubuntu.com/community/OCR

Антонио Фейтоса
источник