Як використовувати OCR з командного рядка в Linux?


30

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

Мені потрібно створити список усіх слів, що містяться у кожному файлі JPG. Чи є інструмент командного рядка для сканування зображення з переліком слів, що з’являються? Тут не потрібно мати ідеальне сканування, а лише оцінка.


github.com/tesseract-ocr/tesseract/wiki/Command-Line-Usage - ось двигун, що стоїть за ocrmypdf, і, як правило, дозволить зробити менше кроків у налаштуванні.
oakad

4
Можливий дублікат OCR в системах Linux
curiousdannii

2
дублікат трохи старий, можливо, існують новіші речі. Я буду голосувати, залишити відкритим.
Архемар

Відповіді:


25

tesseract - це, мабуть, найбільш використовуване рішення тут. Він доступний у більшості сховищ пакетів, наприклад,

sudo apt install tesseract-ocr

і може використовуватися з

tesseract input.png out.txt

19

Встановити imagemagick, pdftotext(знайдено в пакеті, названому poppler-utilsв межах деяких менеджерів пакунків) та ocrmypdf . Останній - швидкий (ocr займає багато процесорних процесів, він налаштований на використання всіх ваших ядер), з відкритим кодом та часто оновлюваним фрагментом програм OCR. Такий підхід, можливо, надмірний, оскільки він насправді намагається призначити рядок кожному слову, а не просто маркувати слово, але у мене виникло багато проблем з пошуком хорошого та простого у користуванні програмного забезпечення OCR open source взагалі. Потім у каталозі, де ви зберегли всі свої JPG:

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

2
fwiw, для цього використовується наведений нижче Tesseract.
exic

ocrmypdfзробив свій день
Щоденний астронавт

ідея спочатку конвертувати в pdf - просто гуфічна. чому я не можу просто ввести jpg-файл і отримати якийсь сирий текст?
Майкл

Ви можете використовувати файл bash, щоб виконати всі командні рядки для вас.
projetmbc

7

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

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

Результат - у file.txt.


Це те, що працювало для мене з дуже невеликим фрагментом тексту, що не є англійською мовою, з невеликим розміром шрифту. Дивовижний.
Авіо


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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.