如何在Linux中从命令行使用OCR?


30

我有几千页的扫描书页。每个页面分别保存为JPG。文字清晰,但字体不同,页面上确实包含图片和插图。

我需要创建一个出现在每个JPG文件中的所有单词的列表。是否有用于扫描图像的命令行工具,列出出现的单词?它不需要进行完美的扫描,只需进行估算即可。


github.com/tesseract-ocr/tesseract/wiki/Command-Line-Usage-这是ocrmypdf的引擎,通常,您可以减少设置步骤。
奥卡德


2
重复项有点旧,可能存在较新的内容。我将投票开放。
Archemar

Answers:



19

安装imagemagickpdftotext(在一个叫包中找到poppler-utils一些包管理器内)ocrmypdf。后者速度很快(ocr需要大量cpu,并且配置为使用您的所有内核),开源且经常更新的OCR软件。这种方法可能过大,因为它实际上试图为每个单词分配一个字符串,而不仅仅是给单词加上标签,但是我在寻找良好且易于使用的开源OCR软件方面遇到了很多麻烦。然后,在保存所有JPG的目录中:

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

2
首先,这使用下面提到的Tesseract。
exic

ocrmypdf决定了我的一天
每天的宇航员

首先必须转换为pdf的想法真是愚蠢。为什么我不能只输入一个jpg文件并获取一些原始文本?
Michael

您可以使用bash文件为您执行所有命令行。
projetmbc

7

将图像image.png放大480%,更改为灰度,用白色回填,锐化,然后使用tesseract OCR提取。对于我来说,大多数时候效果都很好,除了非常大的字体和黑底白字。如果字体很大,则仅高档200%或300%。

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

结果在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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.