วิธีการใช้ OCR จากบรรทัดคำสั่งใน Linux


30

ฉันมีหน้าหนังสือสแกนหลายพันหน้า แต่ละหน้าจะได้รับการบันทึกเป็น JPG การเขียนมีความชัดเจน แต่แบบอักษรแตกต่างกันไปและหน้าต่างๆจะมีรูปภาพและภาพประกอบ

ฉันต้องการสร้างรายการคำทั้งหมดที่ปรากฏในไฟล์ JPG แต่ละไฟล์ มีเครื่องมือบรรทัดคำสั่งสำหรับสแกนรูปภาพที่แสดงคำที่ปรากฏหรือไม่ ไม่จำเป็นต้องมีการสแกนที่สมบูรณ์แบบเพียงแค่การประมาณการ


github.com/tesseract-ocr/tesseract/wiki/Command-Line-Usage - นั่นคือเอ็นจิ้น ocrmypdf และโดยทั่วไปจะช่วยให้คุณมีขั้นตอนน้อยลงในการตั้งค่าของคุณ
oakad

4
มีความเป็นไปได้ที่ซ้ำกันของOCR บนระบบ Linux
อยากรู้อยากเห็น

2
ที่ซ้ำกันเป็นบิตเก่าสิ่ง neweer อาจมีอยู่ ฉันจะลงคะแนนเปิดทิ้งไว้
Archemar

คำตอบ:


25

tesseractน่าจะเป็นทางออกที่ใช้มากที่สุดที่นี่ มันมีอยู่ในที่เก็บแพคเกจส่วนใหญ่เช่น

sudo apt install tesseract-ocr

และสามารถใช้กับ

tesseract input.png out.txt

19

ติดตั้งimagemagick, pdftotext(ที่พบในแพคเกจที่มีชื่อpoppler-utilsที่อยู่ในแพคเกจผู้จัดการบางคน) และocrmypdf สิ่งหลังคือสิ่งที่รวดเร็ว (ocr ใช้ cpu จำนวนมากและมีการกำหนดค่าให้ใช้คอร์ทั้งหมดของคุณ), โอเพนซอร์ซและโอเพ่นซอร์สซอฟต์แวร์ OCR วิธีนี้อาจ overkill เพราะจริง ๆ แล้วพยายามกำหนดสายอักขระให้แต่ละคำแทนเพียงแค่ติดป้ายคำ แต่ฉันมีปัญหามากมายในการค้นหาซอฟต์แวร์โอเพ่นซอร์ส OCR ทั่วไปที่ดีและใช้งานง่าย จากนั้นในไดเรกทอรีที่คุณบันทึก 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 และลบข้อความดิบออกได้
Michael

คุณสามารถใช้ไฟล์ bash เพื่อทำบรรทัดคำสั่งทั้งหมดให้คุณ
projetmbc

7

ไฟล์ภาพสุดหรู. png ขึ้น 480%, เปลี่ยนเป็น greyscale, backfill ด้วยสีขาว, เพิ่มความคมชัดแล้วแยกโดยใช้ 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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.