วิธีการแยกข้อความด้วย OCR จาก PDF บน Linux?


42

ฉันจะแยกข้อความจาก PDF ที่ไม่ได้สร้างด้วยดัชนีได้อย่างไร มันคือข้อความทั้งหมด แต่ฉันไม่สามารถค้นหาหรือเลือกอะไรก็ได้ ฉันใช้ Kubuntu อยู่และ Okular ไม่มีคุณสมบัตินี้


โปรดดูเพิ่มเติมที่: softwarerecs.stackexchange.com/q/3412/26815

คำตอบ:


25

ฉันประสบความสำเร็จกับพอร์ต Linux ที่ได้รับลิขสิทธิ์ BSD ของระบบCuneiform OCR

ดูเหมือนจะไม่มีแพ็คเกจไบนารีดังนั้นคุณต้องสร้างจากแหล่งที่มา ต้องแน่ใจว่าติดตั้งไลบรารี ImageMagick C ++ เพื่อรองรับรูปแบบภาพอินพุตใด ๆ (ไม่เช่นนั้นจะยอมรับเฉพาะ BMP)

ในขณะที่ดูเหมือนว่าจะไม่มีเอกสารหลักนอกเหนือจากไฟล์ README สั้น ๆ ฉันพบว่าผลลัพธ์ OCR ค่อนข้างดี สิ่งที่ดีเกี่ยวกับมันคือมันสามารถส่งออกข้อมูลตำแหน่งสำหรับข้อความ OCR ในรูปแบบhOCRเพื่อให้สามารถใส่ข้อความกลับเข้าไปในตำแหน่งที่ถูกต้องในเลเยอร์ที่ซ่อนอยู่ของไฟล์ PDF วิธีนี้คุณสามารถสร้าง PDF "ค้นหา" ซึ่งคุณสามารถคัดลอกข้อความ

ฉันใช้hocr2pdfเพื่อสร้าง PDF จากผลลัพธ์ PDF และ OCR แบบรูปภาพต้นฉบับเท่านั้น น่าเศร้าที่โปรแกรมไม่สนับสนุนการสร้าง PDF หลายหน้าดังนั้นคุณอาจต้องสร้างสคริปต์เพื่อจัดการกับพวกเขา:

#!/bin/bash
# Run OCR on a multi-page PDF file and create a new pdf with the
# extracted text in hidden layer. Requires cuneiform, hocr2pdf, gs.
# Usage: ./dwim.sh input.pdf output.pdf

set -e

input="$1"
output="$2"

tmpdir="$(mktemp -d)"

# extract images of the pages (note: resolution hard-coded)
gs -SDEVICE=tiffg4 -r300x300 -sOutputFile="$tmpdir/page-%04d.tiff" -dNOPAUSE -dBATCH -- "$input"

# OCR each page individually and convert into PDF
for page in "$tmpdir"/page-*.tiff
do
    base="${page%.tiff}"
    cuneiform -f hocr -o "$base.html" "$page"
    hocr2pdf -i "$page" -o "$base.pdf" < "$base.html"
done

# combine the pages into one PDF
gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile="$output" "$tmpdir"/page-*.pdf

rm -rf -- "$tmpdir"

โปรดทราบว่าสคริปต์ข้างต้นเป็นพื้นฐานมาก ตัวอย่างเช่นมันไม่ได้เก็บข้อมูลเมตาของ PDF


มีความคิดใดที่จะปรับปรุงสคริปต์นี้เพื่อเพิ่มระยะการตรวจสอบการสะกดคำเพื่อแก้ไขข้อผิดพลาดในขั้นตอนการรู้จำ?
Gökhan Sever

@ Gökhan Sever คุณหมายถึงการเพิ่มการตรวจสอบการสะกดคำแบบโต้ตอบซึ่งผู้ใช้จะได้รับแจ้งให้แทนที่คำที่สะกดผิด / ไม่รู้จักใช่ไหม ฉันคิดว่าคุณสามารถทำได้โดยเพิ่มบางอย่างเช่นaspell check --mode=html "$base.html"ในสคริปต์หลังจากใช้งานฟอร์ม
Jukka Matilainen

นี่คือทางออกหนึ่ง อย่างไรก็ตามโดยที่ไม่เห็นบริบททั้งหมดของข้อความเป็นการยากที่จะทำการแก้ไข มันจะดีกว่าที่จะเห็นส่วนต่อประสานที่สร้างขึ้นภายใน ocrfeeder
Gökhan Sever

1
โดยวิธีการที่ฉันใช้ tesseract สำหรับการรับรู้ของตัวละคร: แทนที่บรรทัด cuneiform ด้วย: tesseract "$ page" "$ base" hocr
Gökhan Sever

1
การแก้ไขเล็กน้อย: บรรทัดสำหรับ tesseract อย่างน้อยสำหรับภาษาอื่น ๆ ที่ไม่ใช่ภาษาอังกฤษที่นี่เช่นเยอรมัน (= deu) คือ: `tesseract" $ page "" $ base "-l deu hocr` (แน่นอนคุณต้องลบ ``) .
Keks Dose

13

ดูว่าpdftotextจะเหมาะกับคุณหรือไม่ หากไม่ได้อยู่ในเครื่องของคุณคุณจะต้องติดตั้งแพ็คเกจ poppler-utils

sudo apt-get install poppler-utils 

คุณอาจพบชุดเครื่องมือการใช้งานแบบpdf

รายการเต็มรูปแบบของซอฟแวร์รูปแบบไฟล์ PDF ที่นี่ในวิกิพีเดีย

แก้ไข:เนื่องจากคุณต้องการความสามารถของ OCR ฉันคิดว่าคุณจะต้องลองใช้วิธีอื่น (เช่นฉันไม่พบตัวแปลง pdf2text ของ linux ที่ทำ OCR)

  • แปลงไฟล์ PDF เป็นรูปภาพ
  • สแกนภาพเป็นข้อความโดยใช้เครื่องมือ OCR

แปลงไฟล์ PDF เป็นรูปภาพ

  • gs: คำสั่งด้านล่างควรแปลงไฟล์ PDF หลายไฟล์เป็นไฟล์ TIFF แต่ละไฟล์

    gs -SDEVICE = tiffg4 -r600x600 -sPAPERSIZE = ตัวอักษร -sOutputFile = filename_% 04d.tif -dNOPAUSE -dBATCH - ชื่อไฟล์

  • ยูทิลิตี้ ImageMagik : มีคำถามอื่น ๆ เกี่ยวกับเว็บไซต์ SuperUser เกี่ยวกับการใช้ ImageMagik ที่คุณอาจใช้เพื่อช่วยในการแปลง

    แปลง foo.pdf foo.png

แปลงภาพเป็นข้อความด้วย OCR

นำมาจากรายการ OCR ของซอฟต์แวร์ Wikipedia


2
โปรแกรมนี้ใช้ได้กับเอกสารข้อความที่เขียนด้วยลายมือด้วยหรือไม่
Ivo Flipse

1
ไม่ฉันไม่คิดว่ามันมีความสามารถใน OCR มันสามารถแยกข้อความที่ฝังอยู่ใน pdf หน้าคน: linux.die.net/man/1/pdftotext
nagul

ใช่มันใช้งานได้กับเอกสาร pdf ที่มีข้อความฝังอยู่แล้ว กรณีของฉันเป็นหนึ่งเดียวที่ไม่ได้
hsribei

1
@ obvio171 เพิ่มตัวเลือกที่ดีที่สุดที่ฉันสามารถหาเพื่อให้ OCR ทำงานในกรณีของคุณ
nagul

12

Google Docsจะตอนนี้ใช้ OCR เพื่อแปลงเอกสารภาพ / pdf ที่คุณอัปโหลดไปยังข้อความ ฉันประสบความสำเร็จเป็นอย่างดี

พวกเขากำลังใช้ระบบ OCR ที่ใช้สำหรับโครงการGoogle หนังสือขนาดยักษ์

อย่างไรก็ตามจะต้องมีการบันทึกไว้ว่าจะยอมรับเฉพาะ PDF ที่มีขนาด 2 MB สำหรับการประมวลผล

อัปเดต
1. ในการทดลองใช้ให้อัปโหลดไฟล์ <2MB ไปยัง Google เอกสารจากเว็บเบราว์เซอร์
2. คลิกขวาที่เอกสารที่อัปโหลดแล้วคลิก "เปิดด้วย Google เอกสาร"
... Google เอกสารจะแปลงเป็นข้อความและส่งออกเป็นไฟล์ใหม่ที่มีชื่อเหมือนกัน แต่พิมพ์ Google เอกสารในโฟลเดอร์เดียวกัน


คำตอบนั้นไม่เฉพาะ Ubuntu จริงๆ แต่ฉันอยากจะขอบคุณจริงๆ: โซลูชัน BRILLIANT! :)
Pitto

สิ่งนี้มีประโยชน์จริงๆ :) ฉันอัปโหลดไฟล์ขนาด 50 MB เมื่อวานนี้และใช้งานได้ ดูเหมือนว่าพวกเขาเพิ่มขีด จำกัด ขนาดแล้ว
Gaurav

2

Geza Kovacs ได้จัดทำแพคเกจ Ubuntu ซึ่งโดยพื้นฐานแล้วเป็นสคริปต์ที่ใช้hocr2pdfตามที่ Jukka แนะนำ แต่ทำให้การติดตั้งเร็วขึ้นเล็กน้อย

จากโพสต์ฟอรัม Ubuntu ของ Geza พร้อมรายละเอียดเกี่ยวกับแพ็คเกจ ...

การเพิ่มที่เก็บและติดตั้งใน Ubuntu

sudo add-apt-repository ppa:gezakovacs/pdfocr
sudo apt-get update
sudo apt-get install pdfocr

รัน ocr บนไฟล์

pdfocr -i input.pdf -o output.pdf

ที่เก็บ GitHub สำหรับรหัส https://github.com/gkovacs/pdfocr/


2

วิธีที่ดีที่สุดและง่ายที่สุดคือการใช้pypdfocrมันไม่ได้เปลี่ยนแปลง PDF

pypdfocr your_document.pdf

ในตอนท้ายคุณจะมีอีกyour_document_ocr.pdfวิธีที่คุณต้องการด้วยข้อความที่ค้นหาได้ แอพไม่เปลี่ยนคุณภาพของภาพ เพิ่มขนาดของไฟล์เล็กน้อยโดยการเพิ่มข้อความซ้อนทับ

อัปเดต 3 พฤศจิกายน 2018:

pypdfocrไม่ได้รับการสนับสนุนอีกต่อไปตั้งแต่ปี 2559 และฉันสังเกตเห็นปัญหาบางอย่างเนื่องจากไม่มีการพูดถึง ocrmypdf( โมดูล ) ทำงานที่คุ้นเคยและสามารถใช้ได้ดังนี้:

ocrmypdf in.pdf out.pdf

ติดตั้ง:

pip install ocrmypdf

หรือ

apt install ocrmypdf

1

PDFBeadsทำงานได้ดีสำหรับฉัน หัวข้อนี้“ แปลงรูปภาพที่สแกนเป็นไฟล์ PDF ไฟล์เดียว ” ช่วยให้ฉันเริ่มทำงานได้ สำหรับการสแกนหนังสือแบบ b & w คุณต้อง:

  1. สร้างภาพสำหรับทุกหน้าของ PDF; ตัวอย่าง gs อย่างใดอย่างหนึ่งด้านบนควรใช้งานได้
  2. สร้างเอาต์พุต hOCR สำหรับแต่ละหน้า; ฉันใช้ tesseract (แต่โปรดทราบว่า Cuneiform ดูเหมือนว่าจะทำงานได้ดีขึ้น)
  3. ย้ายรูปภาพและไฟล์ hOCR ไปยังโฟลเดอร์ใหม่ ชื่อไฟล์จะต้องสอดคล้องดังนั้น file001.tif ต้องการ file001.html, file002.tif file002.html ฯลฯ
  4. ในโฟลเดอร์ใหม่ให้เรียกใช้

    pdfbeads * > ../Output.pdf
    

สิ่งนี้จะใส่ OCR'd PDF ที่ถูกเรียงไว้ในไดเรกทอรีพาเรนต์


1

สคริปต์อื่นที่ใช้ tesseract:

#!/bin/bash
# Run OCR on a multi-page PDF file and create a txt with the
# extracted text in hidden layer. Requires tesseract, gs.
# Usage: ./pdf2ocr.sh input.pdf output.txt

set -e

input="$1"
output="$2"

tmpdir="$(mktemp -d)"

# extract images of the pages (note: resolution hard-coded)
gs -SDEVICE=tiff24nc -r300x300 -sOutputFile="$tmpdir/page-%04d.tiff" -dNOPAUSE -dBATCH -- "$input"

# OCR each page individually and convert into PDF
for page in "$tmpdir"/page-*.tiff
do
    base="${page%.tiff}"
    tesseract "$base.tiff" $base
done

# combine the pages into one txt
cat "$tmpdir"/page-*.txt > $output

rm -rf -- "$tmpdir"

1

Asprise OCR Libraryทำงานบน Linux เกือบทุกรุ่น มันสามารถใช้อินพุตและเอาต์พุต PDF เป็นค้นหา PDF

มันเป็นแพ็คเกจเชิงพาณิชย์ ดาวน์โหลดAsprise OCR SDK สำหรับ Linux ฟรีที่นี่และรันด้วยวิธีนี้:

aocr.sh input.pdf pdf

หมายเหตุ: รูปแบบสแตนด์อโลน 'pdf' ระบุรูปแบบผลลัพธ์

คำเตือน: ฉันเป็นพนักงานของ บริษัท ที่ผลิตผลิตภัณฑ์ดังกล่าว


โพสต์นี้ระบุว่าผลิตภัณฑ์สามารถทำได้ซึ่งเป็นคำแนะนำที่เป็นประโยชน์ที่ควรโพสต์เป็นความคิดเห็น มันไม่ได้อธิบายถึงวิธีแก้ปัญหาจริง ๆ ซึ่งเป็นคำตอบที่ควรทำ คุณสามารถขยายคำตอบเพื่อให้คนอื่นเห็นวิธีแก้ปัญหาได้หรือไม่?
fixer1234

ขอบคุณ @ fixer1234 ฉันได้แก้ไขเพื่อรวมคำสั่ง
การสนับสนุน Asprise

0

ลองApache PDFBoxเพื่อแยกเนื้อหาข้อความจากไฟล์ PDF ในกรณีของภาพที่ฝังอยู่ในไฟล์ PDF ให้ใช้ABBYY FineReader Engine CLI สำหรับ Linuxเพื่อแยกข้อความ


ฉันพบ ABBYY OCR น่าสมเพชทีเดียวหนึ่งในโปรแกรมที่มีความสามารถน้อยที่สุดที่ฉันได้ลอง มันอาจจะเพียงพอกับภาพตัวอักษรมาตรฐานที่สะอาดจริงๆที่มีขนาดตัวอักษรทั่วไปโดยไม่มีแบบอักษรผสมขนาดผสมเค้าโครงที่ซับซ้อนกราฟิกเส้นและอื่น ๆ
fixer1234

ใช่ฉันยังลองใช้งานได้ดี ฉันมีข้อสงสัยคุณช่วยฉันได้ไหม
Praveen Kumar KR

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