Como usar o OCR na linha de comando no Linux?

30

Eu tenho vários milhares de páginas de páginas de livros digitalizados. Cada página é salva individualmente como um JPG. A escrita é clara, mas as fontes variam e as páginas incluem figuras e ilustrações.

Preciso criar uma lista de todas as palavras que aparecem em cada arquivo JPG. Existe uma ferramenta de linha de comando para digitalizar uma imagem listando as palavras que aparecem? Não precisa ter uma digitalização perfeita, apenas uma estimativa.

Aldeia
fonte
github.com/tesseract-ocr/tesseract/wiki/Command-Line-Usage - esse é o mecanismo por trás do ocrmypdf e, em geral, permitirá que você tenha menos etapas na sua configuração.
oakad
4
Possível duplicado de OCR em sistemas Linux
curiousdannii
2
duplicate é um pouco antigo, podem existir coisas mais recentes. Vou votar deixar em aberto.
Archemar

Respostas:

25

O tesseract é provavelmente a solução mais usada aqui. Está disponível na maioria dos repositórios de pacotes, por exemplo,

sudo apt install tesseract-ocr

e pode ser usado com

tesseract input.png out.txt
Nico Schlömer
fonte
19

Instalar imagemagick, pdftotext(encontrado em um pacote chamado poppler-utilsdentro de alguns gestores de pacotes) e ocrmypdf . O último é rápido (o ocr exige muita CPU e está configurado para usar todos os seus núcleos), um software de OCR de código aberto e atualizado com freqüência. Essa abordagem é possivelmente um exagero, pois na verdade tenta atribuir uma string a cada palavra, em vez de apenas rotular uma palavra, mas tive muitos problemas para encontrar o software OCR de código-fonte bom e fácil de usar em geral. Em seguida, no diretório em que você salvou todos os seus JPGs:

$ convert *.jpg pictures.pdf
$ ocrmypdf pictures.pdf scanned.pdf
$ pdftotext scanned.pdf scanned.txt
$ wc -w scanned.txt
rien333
fonte
2
fwiw, isso usa o Tesseract mencionado abaixo.
Exic 13/0318
ocrmypdffez o meu dia
Astronauta Diário
a idéia de ter que converter primeiro em pdf é simplesmente pateta. por que não consigo inserir um arquivo jpg e obter algum texto bruto?
Michael
Você pode usar um arquivo bash para executar todas as linhas de comando para você.
projetmbc 13/07
7

Upscale image file.png em 480%, altere para escala de cinza, preencha com branco, afie e extraia usando o OCR tesseract. Funciona bem na maioria das vezes para mim, exceto para fontes muito grandes e branco sobre preto. Se as fontes forem muito grandes, apenas upscale 200% ou 300%.

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

O resultado está em file.txt.

Eamonn Kenny
fonte
Isso foi o que funcionou para mim com um pedaço muito pequeno de texto em inglês com tamanho de fonte minúsculo. Surpreendente.
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

Antonio Feitosa
fonte