लिनक्स पर एक पीडीएफ से ओसीआर के साथ टेक्स्ट कैसे निकालें?


43

मैं एक पीडीएफ से पाठ कैसे निकालूं जो एक सूचकांक के साथ नहीं बनाया गया था? यह सब पाठ है, लेकिन मैं कुछ भी खोज या चयन नहीं कर सकता। मैं कुबंटू चल रहा हूं, और ओकुलर में यह सुविधा नहीं है।


इसे भी देखें: softwarerecs.stackexchange.com/q/3412/26815

जवाबों:


25

मुझे Cuneiform OCR सिस्टम के BSD- लाइसेंस प्राप्त लिनक्स पोर्ट के साथ सफलता मिली है।

कोई बाइनरी पैकेज उपलब्ध नहीं लगता है, इसलिए आपको इसे स्रोत से बनाने की आवश्यकता है। ImageMagick C ++ पुस्तकालयों को अनिवार्य रूप से किसी भी इनपुट छवि प्रारूप के लिए समर्थन स्थापित करने के लिए सुनिश्चित करें (अन्यथा यह केवल बीएमपी स्वीकार करेगा)।

हालांकि यह एक संक्षिप्त README फ़ाइल के अलावा अनिवार्य रूप से अनिर्दिष्ट प्रतीत होता है, मैंने OCR परिणामों को काफी अच्छा पाया है। इसके बारे में अच्छी बात यह है कि यह एचसीआर प्रारूप में ओसीआर पाठ के लिए स्थिति की जानकारी को आउटपुट कर सकता है , ताकि पीडीएफ फाइल की छिपी परत में पाठ को सही स्थिति में वापस लाना संभव हो सके। इस तरह से आप "खोज योग्य" PDF बना सकते हैं जिससे आप टेक्स्ट कॉपी कर सकते हैं।

मैंने मूल छवि-केवल PDF और OCR परिणामों में से PDF को पुनः बनाने के लिए hocr2pdf का उपयोग किया है । अफसोस की बात है कि यह प्रोग्राम मल्टी-पेज पीडीएफ बनाने के लिए समर्थन नहीं करता है, इसलिए आपको उन्हें संभालने के लिए एक स्क्रिप्ट बनानी पड़ सकती है:

#!/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"

कृपया ध्यान दें कि उपरोक्त लिपि बहुत ही अल्पविकसित है। उदाहरण के लिए, यह किसी भी पीडीएफ मेटाडेटा को बरकरार नहीं रखता है।


मान्यता चरण में त्रुटियों को सही करने के लिए वर्तनी-जाँच चरण जोड़ने के लिए इस स्क्रिप्ट को बेहतर बनाने के लिए कोई विचार?
गोखन गंभीर

@ गोखर सेवर, क्या आपका मतलब इंटरैक्टिव वर्तनी-जाँच को जोड़ना है जहाँ उपयोगकर्ता को गलत वर्तनी / अज्ञात शब्दों के प्रतिस्थापन के लिए प्रेरित किया जाता है? मुझे लगता है कि आप ऐसा कर सकते हैं कि aspell check --mode=html "$base.html"क्यूनिफॉर्म चलाने के ठीक बाद स्क्रिप्ट में कुछ जोड़कर ।
जुक्का मतिलीनन

यह एक उपाय है। हालाँकि पाठ के पूरे संदर्भ को देखे बिना सुधार करना कठिन है। यह ocrfer के भीतर बने एक इंटरफ़ेस को देखने के लिए अच्छा होगा।
गोखर सीवर

1
वैसे, मैं वर्ण पहचान के लिए Tesseract का उपयोग करें: के साथ कीलाकार लाइन की जगह: Tesseract "$ पेज" "$ आधार" hocr
Gökhan Sever

1
छोटा सुधार: अंग्रेजी की तुलना में अन्य भाषाओं के लिए कम से कम टेसरैक्ट के लिए लाइन, यहाँ उदाहरण के लिए जर्मन (= deu) है: `tesseract" $ पेज "" $ base "-l deu hocr` (निश्चित रूप से आपको `` हटाना है) ।
कीक्स डॉस

14

देखें कि क्या pdftotext आपके लिए काम करेगा। यदि यह आपकी मशीन पर नहीं है, तो आपको poppler-utils पैकेज स्थापित करना होगा

sudo apt-get install poppler-utils 

आपको उपयोग का pdf टूलकिट भी मिल सकता है ।

विकिपीडिया पर यहाँ पीडीएफ सॉफ्टवेयर की पूरी सूची है ।

संपादित करें: चूंकि आपको ओसीआर क्षमताओं की आवश्यकता है, इसलिए मुझे लगता है कि आपको एक अलग तरह की कोशिश करनी होगी। (यानी मैं एक Linux pdf2text कनवर्टर नहीं पा सकता जो OCR करता है)।

  • एक छवि के लिए पीडीएफ कन्वर्ट
  • OCR टूल का उपयोग करके इमेज को टेक्स्ट में स्कैन करें

पीडीएफ को इमेज में बदलें

  • gs: नीचे दिए गए कमांड को मल्टीफ़िगर पीडीएफ को अलग-अलग टिफ़ फ़ाइलों में बदलना चाहिए।

    gs -SDEVICE = tiffg4 -r600x600 -sPAPERSIZE = letter -sOutputFile = फ़ाइल नाम_% 04d.tif -dNOPAUSE -dBATCH - filename

  • ImageMagik उपयोगिताओं : ImageMagik का उपयोग करने के बारे में SuperUser साइट पर अन्य प्रश्न हैं जिनका उपयोग आप रूपांतरण करने में मदद करने के लिए कर सकते हैं।

    foo.pdf को बदलिए foo.png

छवि को ओसीआर के साथ पाठ में बदलें

विकिपीडिया की OCR सॉफ्टवेयर की सूची से लिया गया


2
क्या यह कार्यक्रम हस्तलिखित पाठ दस्तावेजों के लिए भी काम करता है?
Ivo फ्लिप्से

1
नहीं, मुझे नहीं लगता कि इसमें ओसीआर क्षमताएं हैं। यह बस पीडीएफ में एम्बेडेड पाठ को निकाल सकता है। मैन पेज: linux.die.net/man/1/pdftotext
nagul

हाँ, यह पीडीएफ दस्तावेजों के लिए काम करता है जो पहले से ही पाठ के साथ आते हैं। मेरा मामला ठीक एक है जहाँ यह नहीं है।
हेलडर एस रिबेरो

1
@ obvio171 सबसे अच्छा विकल्प है जो मुझे आपके मामले में ओसीआर प्राप्त करने के लिए मिल सकता है।
नगुल

12

Google डॉक्स अब आपकी अपलोड की गई छवि / पीडीएफ दस्तावेजों को पाठ में बदलने के लिए ओसीआर का उपयोग करेगा । मुझे इसके साथ अच्छी सफलता मिली है।

वे ओसीआर प्रणाली का उपयोग कर रहे हैं जो कि विशाल Google पुस्तक परियोजना के लिए उपयोग की जाती है ।

हालांकि, यह ध्यान दिया जाना चाहिए कि प्रसंस्करण के लिए केवल 2 एमबी के आकार के पीडीएफ को स्वीकार किया जाएगा।

अद्यतन
1. इसे आज़माने के लिए, वेब ब्राउज़र से Google डॉक्स पर <2MB का PDF अपलोड करें।
2. अपलोड किए गए दस्तावेज़ पर राइट क्लिक करें और "Google डॉक्स के साथ खोलें" पर क्लिक करें।
... Google डॉक्स एक ही नाम से टेक्स्ट और आउटपुट को एक नई फ़ाइल में बदल देगा लेकिन Google डॉक्स एक ही फ़ोल्डर में टाइप होता है।


इसका उत्तर वास्तव में उबंटू-विशिष्ट नहीं है, लेकिन मैं वास्तव में आपको धन्यवाद देना चाहता हूं: संक्षिप्त समाधान! :)
पिटो

यह वास्तव में उपयोगी था :) मैंने कल एक 50 एमबी फाइल अपलोड की और यह काम किया। लगता है कि उन्होंने आकार सीमा बढ़ा दी है।
गौरव

2

गीज़ा कोवाक्स ने एक उबंटू पैकेज बनाया है जो मूल रूप से एक स्क्रिप्ट का उपयोग hocr2pdfकरता है जैसा कि जुक्का ने सुझाव दिया था, लेकिन चीजों को सेटअप करने के लिए थोड़ा तेज़ बनाता है।

पैकेज पर विवरण के साथ गीज़ा के उबंटू फोरम पोस्ट से ...

रिपॉजिटरी को जोड़ना और उबंटू में स्थापित करना

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इसका उपयोग करने के लिए सबसे अच्छा और आसान तरीका है कि यह पीडीएफ नहीं बदलता है

pypdfocr your_document.pdf

अंत में आपके पास एक your_document_ocr.pdfऔर तरीका होगा जिसे आप खोजे गए पाठ के साथ चाहते हैं। एप्लिकेशन छवि की गुणवत्ता को नहीं बदलता है। ओवरले टेक्स्ट को जोड़कर फ़ाइल का आकार थोड़ा बढ़ाता है।

अपडेट 3 नवंबर 2018:

pypdfocr2016 के बाद से अब समर्थित नहीं है और मैंने मानसिक रूप से नहीं होने के कारण कुछ समस्याओं पर ध्यान दिया। ocrmypdf( मॉड्यूल ) एक सहज काम करता है और इस तरह से इस्तेमाल किया जा सकता है:

ocrmypdf in.pdf out.pdf

स्थापित करने के लिए:

pip install ocrmypdf

या

apt install ocrmypdf

1

PDFBeads मेरे लिए अच्छा काम करता है। यह धागा " एक पीडीएफ फाइल में कनवर्ट की गई छवियाँ बदलें " मुझे मिला और चल रहा है। B & w पुस्तक स्कैन के लिए, आपको निम्न करने की आवश्यकता है:

  1. पीडीएफ के हर पृष्ठ के लिए एक छवि बनाएं; या तो जी एस उदाहरण ऊपर काम करना चाहिए
  2. प्रत्येक पृष्ठ के लिए hOCR आउटपुट उत्पन्न करें; मैंने टेसरैक्ट का उपयोग किया (लेकिन ध्यान दें कि क्यूनिफॉर्म बेहतर काम करता है)।
  3. छवियों और hOCR फ़ाइलों को एक नए फ़ोल्डर में ले जाएं; फ़ाइल नाम के अनुरूप होना चाहिए, इसलिए file001.tif को file001.html, file002.tif file002.html आदि की जरूरत है।
  4. नए फ़ोल्डर में, चलाएं

    pdfbeads * > ../Output.pdf
    

यह माता-पिता की निर्देशिका में कोलाकृत, OCR'd PDF डाल देगा।


1

टेसेरेक्ट का उपयोग कर एक और स्क्रिप्ट:

#!/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 लाइब्रेरी लिनक्स के अधिकांश संस्करणों पर काम करता है। यह पीडीएफ इनपुट और आउटपुट को खोज पीडीएफ के रूप में ले सकता है।

यह एक वाणिज्यिक पैकेज है। के एक मुक्त प्रतिलिपि डाउनलोड यहाँ लिनक्स के लिए Asprise ओसीआर एसडीके और यह इस तरह से चलाएँ:

aocr.sh input.pdf pdf

नोट: स्टैंडअलोन 'पीडीएफ' आउटपुट फॉर्मेट को निर्दिष्ट करता है।

अस्वीकरण: मैं उत्पाद के ऊपर उत्पादन करने वाली कंपनी का कर्मचारी हूं।


इस पोस्ट में कहा गया है कि उत्पाद वह कर सकता है, जो एक सहायक संकेत है जिसे टिप्पणी के रूप में पोस्ट किया जाना चाहिए। यह नहीं समझाता है कि वास्तव में समस्या को कैसे हल किया जाए, जो कि जवाब देना चाहिए। क्या आप अपने उत्तर का विस्तार कर सकते हैं ताकि कोई यह देख सके कि समाधान कैसे किया जाए?
फिक्सर 1234

धन्यवाद @ fixer1234, मैंने इसे कमांड शामिल करने के लिए संपादित किया है।
Asprise सपोर्ट

0

PDF फ़ाइल से पाठ सामग्री निकालने के लिए Apache PDFBox की कोशिश करें। पीडीएफ फाइलों में एम्बेडेड छवियों के मामले में पाठ को निकालने के लिए लिनक्स के लिए एबीबीवाई फाइनएयर इंजन सीएलआई का उपयोग करें।


मैंने पाया कि एबीबीवाई ओसीआर काफी दयनीय है, मैंने कोशिश की है कि कम से कम सक्षम कार्यक्रमों में से एक। यह विशिष्ट बॉडी टेक्स्ट आकार के मानक फ़ॉन्ट टेक्स्ट की साफ-सुथरी छवि के साथ पर्याप्त हो सकता है, जिसमें कोई मिश्रित फोंट, मिश्रित आकार, जटिल लेआउट, ग्राफिक्स, लाइनें, आदि नहीं हैं
फिक्सर 1234

हां मैंने भी कोशिश की, यह ठीक काम करता है। मुझे कुछ संदेह है, क्या आप मेरी मदद कर सकते हैं?
प्रवीण कुमार KR

यदि आपको यहां अन्य उत्तरों में शामिल होने की आवश्यकता नहीं है, तो सबसे अच्छी बात यह है कि आप अपना प्रश्न पूछें। इससे उसे बहुत सारी आँखों के संपर्क में आएगा।
फिक्सर 1234
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.