PDF ला OCR आवश्यक आहे का? पूर्ण री-ओळखण्याऐवजी पृष्ठ-दर-पृष्ठ प्रीफ्लाइट करण्यासाठी PyMuPDF वापरा
जर तुम्हाला PDF OCR करायची असेल तर संपूर्ण PDF पुन्हा ओळखण्याची गरज नाही. मजकूर स्तर आहे की नाही आणि ती पूर्ण-पृष्ठ प्रतिमा आहे की नाही हे पृष्ठानुसार निर्धारित करण्यासाठी PyMuPDF वापरा आणि केवळ ओळखण्यासाठी खरोखर आवश्यक असलेली पृष्ठे पाठवा. चालवण्यायोग्य नमुने, फिरवत पृष्ठ चाचण्या आणि शाखा सीमा सूचना संलग्न आहेत.
जेव्हा अनेक संघ PDF भाषांतर किंवा संग्रहण हाताळत असतात, तेव्हा त्यांना प्रवेशद्वारावर संपूर्ण दस्तऐवज "स्कॅन केलेले" किंवा "कॉपी करण्यायोग्य" म्हणून लेबल करण्याची सवय असते. 300-पृष्ठ PDF मध्ये मजकूर स्तरांसह पहिली 280 पृष्ठे असू शकतात आणि फक्त शेवटची 20 पृष्ठे स्कॅन केलेल्या संलग्नक म्हणून असू शकतात. संपूर्ण भागांनुसार वर्गीकरण केल्यास, संपूर्ण OCR प्रतीक्षा वेळ वाढवेल आणि मूळ बरोबर संख्या चुकीची ओळखू शकते. दुसरीकडे, जर तुम्ही फक्त मुख्यपृष्ठावरील मजकूर कॉपी करू शकता आणि सर्व पृष्ठांवर OCR वगळू शकता, तर ते देखील धोकादायक आहे.
प्रीफ्लाइटच्या परिणामांसह प्रत्येक पृष्ठाला पुढील चरणावर जाणे हा अधिक विश्वासार्ह दृष्टीकोन आहे. हा लेख एक पुराणमतवादी त्रि-मार्गी विभाजन लागू करतो: थेट निष्कर्षण, OCR उमेदवार रांगेत पाठवणे आणि मॅन्युअल तपासणी. हे एक व्याख्या करण्यायोग्य अभियांत्रिकी ह्युरिस्टिक आहे, मजकूर गुणवत्तेचे मूल्यांकन करण्यासाठी सार्वत्रिक वर्गीकरण नाही. वाचल्यानंतर, तुम्ही रन करण्यायोग्य पृष्ठ-दर-पृष्ठ प्रीफ्लाइट प्रोग्राम, तसेच डायव्हर्जन सीमा आणि सामान्य दोष हाताळणी कल्पना मिळवू शकता.
एका वाक्याचा निष्कर्ष
PDF ला OCR आवश्यक आहे की नाही हे ठरवण्याची गरज नाही. पृष्ठानुसार पृष्ठ पूर्व-तपासण्यासाठी PyMuPDF वापरा आणि केवळ ओसीआरला खरोखर ओळखण्याची आवश्यकता असलेली पृष्ठे पाठवा.
| तुमची परिस्थिती | शिफारस केलेल्या पद्धती | कारण |
|---|---|---|
| एका पृष्ठावरून किमान 40 नॉन-व्हाइटस्पेस वर्ण काढा | थेट उतारा (TEXT_CANDIDATE) | आधीच पुरेशी वर्ण आहेत, परंतु तरीही लपविलेले खराब OCR स्तर तपासणे आवश्यक आहे |
| 40 पेक्षा कमी शब्द आणि किमान 70% पृष्ठ व्यापणारी एकच प्रतिमा | OCR उमेदवार रांगेत पाठवा | पूर्ण-पृष्ठ स्कॅन ओळखण्यासाठी योग्य आहेत, परंतु शुद्ध फोटो देखील पुरेसे असतील. |
| रिक्त पृष्ठ, वेक्टर प्रकार, विरळ शीर्षक किंवा जटिल कोडे | मॅन्युअल तपासणी (पुनरावलोकन) | या परिस्थिती पहिल्या दोन श्रेणींमध्ये विश्वासार्हपणे वर्गीकृत केल्या जाऊ शकत नाहीत आणि आपोआप वगळल्या किंवा टाकल्या जाऊ शकत नाहीत. |
| 300-पानांचा संकरित दस्तऐवज | प्रीफ्लाइट पृष्ठानुसार पृष्ठ, प्रक्रिया पूर्ण नाही | काही स्कॅन केलेल्या संलग्नकांमुळे सर्व पृष्ठे ओसीआर करणे टाळा किंवा मुख्यपृष्ठावर मजकूर असल्यामुळे सर्व ओसीआर टाळा. |
टीप: चित्रातील सामग्री खालील कोडद्वारे व्युत्पन्न केलेल्या संश्लेषित PDF मधून येते, ग्राहक फाइल किंवा OmniDoc इंटरफेसमधून नाही. प्रतिमा पृष्ठावरील मजकूर रास्टर पिक्सेल आहे; मजकूर पृष्ठावरील मजकूरात वास्तविक मजकूर स्तर असतो.
आधी काय तपासायचे ते ठरवा
येथे दोन सिग्नल वापरले आहेत: व्हाइटस्पेस काढून टाकल्यानंतर मजकूर वर्णांची संख्या आणि पृष्ठावरील सर्वात मोठ्या चित्राने व्यापलेल्या पृष्ठ क्षेत्राचे प्रमाण. पूर्वीची उत्तरे "पुरेशी अक्षरे काढली गेली आहेत का?" आणि नंतरचे पूर्ण पृष्ठ स्कॅन आणि रिक्त पृष्ठामध्ये फरक करण्यास मदत करते. पृष्ठावरील प्रतिमा वाढवण्याचे प्रमाण ओलांडू नये म्हणून प्रतिमा क्षेत्र प्रथम क्रॉपिंग बॉक्सला छेदेल.
| निरीक्षण | या लेखाचे वळण | तरीही लक्ष देण्याची गरज आहे |
|---|---|---|
| किमान 40 नॉन-व्हाइटस्पेस वर्ण | TEXT_CANDIDATE | लपविलेल्या वाईट OCR स्तरांमध्ये देखील बरेच शब्द असू शकतात |
| 40 पेक्षा कमी शब्द आणि किमान 70% कव्हर करणारी एकच प्रतिमा | OCR_CANDIDATE | शुद्ध फोटो देखील अटींची पूर्तता करतील, ओसीआर अर्थपूर्ण असू शकत नाही |
| बाकी प्रकरणे | पुनरावलोकन करा | व्हाईट स्पेस, वेक्टर प्रकार, विरळ शीर्षके आणि जटिल कोडी येथे सर्व शक्य आहेत |
40 आणि 0.70 च्या थ्रेशोल्डचा हेतू चाचण्यांच्या या संचाचे ऑडिट करणे सोपे करणे आहे, क्रॉस-लँग्वेज मानके नाही. चिनी, सूत्रे, कव्हर आणि शॉर्ट फॉर्म स्वतंत्रपणे लेबल केले पाहिजेत. येथे, केवळ ओव्हरलॅपिंग प्रतिमांचे क्षेत्र जोडण्याऐवजी क्षेत्रफळानुसार सर्वात मोठी प्रतिमा घेतली जाते. म्हणूनच, एकाधिक प्रतिमांनी बनविलेले स्कॅन केलेले पृष्ठ पुनरावलोकनात समाप्त होऊ शकते. ही मुद्दाम जतन केलेली सीमा आहे.
पूर्ण धावण्यायोग्य नमुना
नमुना PyMuPDF==1.28.0 वापरतो, टेसेरॅक्टवर अवलंबून नाही आणि कोणत्याही ऑनलाइन ओसीआर किंवा भाषांतर सेवांना कॉल करत नाही. example.py म्हणून जतन करा आणि रिक्त निर्देशिकेत चालवा. त्याने तयार केलेले फाईलचे नाव routing-fixture.pdf वर निश्चित केले आहे. वास्तविक प्रकल्पांसाठी, कृपया इनपुट फायली अधिलिखित करू नका.
import json
import pymupdf
def inspect_page(page):
chars = len("".join(page.get_text().split()))
bounds = page.cropbox
# 图片坐标与文本坐标都是未旋转坐标;不要混用旋转后的 page.rect。
bounds = pymupdf.Rect(0, 0, bounds.width, bounds.height)
ratios = []
for image in page.get_image_info():
rect = pymupdf.Rect(image["bbox"]) & bounds
ratios.append(max(0, rect.get_area()) / bounds.get_area())
largest = max(ratios, default=0.0)
route = ("TEXT_CANDIDATE" if chars >= 40 else
"OCR_CANDIDATE" if largest >= 0.70 else "REVIEW")
return {"page": page.number + 1, "chars": chars,
"largest_image_ratio": round(largest, 3), "route": route}
with pymupdf.open() as source:
page = source.new_page(width=360, height=480)
page.insert_text((28, 60), "Sample invoice 2026-09-26", fontsize=16)
page.insert_text((28, 100), "Quantity 12 Unit price USD 15.00", fontsize=12)
page.insert_text((28, 132), "Amount USD 180.00 Checked manually", fontsize=12)
scan = page.get_pixmap(matrix=pymupdf.Matrix(2, 2)).tobytes("png")
page = source.new_page(width=360, height=480)
page.insert_image(page.rect, stream=scan)
source.new_page(width=360, height=480)
source.save("routing-fixture.pdf")
with pymupdf.open("routing-fixture.pdf") as pdf:
result = [inspect_page(page) for page in pdf]
assert [r["route"] for r in result] == [
"TEXT_CANDIDATE", "OCR_CANDIDATE", "REVIEW"]
assert result[1]["chars"] == 0
assert result[1]["largest_image_ratio"] == 1.0
pdf[1].set_rotation(90)
assert inspect_page(pdf[1])["route"] == "OCR_CANDIDATE"
print(json.dumps(result, indent=2))
ओसीआरमध्ये प्रवेश करताना, टेक्स्टपेजचे कॅशे करा, यश चिन्हक नाही
PyMuPDF चा OCR इंटरफेस page.get_textpage_ocr(...) आहे. टेसरॅक्ट आणि त्याच्याशी संबंधित भाषा डेटा स्वतंत्रपणे तयार करणे आवश्यक आहे. टेक्स्टपेज प्राप्त केल्यानंतर, त्याच पृष्ठावर डुप्लिकेट ओळख टाळण्यासाठी त्यानंतरच्या निष्कर्षणाने ते textpage पॅरामीटर म्हणून पास केले पाहिजे. विशिष्ट स्थापना पद्धती आणि पॅरामीटर्ससाठी, कृपया PyMuPDF OCR दस्तऐवज चा संदर्भ घ्या.
हा लेख ओसीआर इंजिन चालवत नाही, म्हणून चाचणी परिणाम केवळ हे सिद्ध करतात की वितरण तर्क आणि समन्वय वापर योग्य आहे आणि चीनी ओळख दर, टेबल पुनर्प्राप्ती दर किंवा भाषांतर गुणवत्तेचे प्रतिनिधित्व करत नाही. उत्पादनामध्ये, ओसीआर इंजिन आवृत्ती, भाषा पॅक, पृष्ठ क्रमांक, इनपुट फाइल सारांश आणि मॅन्युअल नमुना परिणाम रेकॉर्ड केले पाहिजेत. फक्त अंतिम स्ट्रिंग ठेवू नका, अन्यथा संख्या कोणत्या पृष्ठावरून आली आहे हे समजविणे कठीण आहे.
तीन प्रकारचे दोष सर्वात सहजपणे दुर्लक्षित केले जातात
लपविलेले मजकूर थर विकृत मजकूर असू शकतात. वर्ण संख्या पूर्ण करणे म्हणजे "आपण काढण्याचा प्रयत्न करणे सुरू ठेवू शकता." आपल्याला हे देखील तपासणे आवश्यक आहे की बदललेले वर्ण, डुप्लिकेट ओळी आणि की फील्ड रेंडरिंगशी संबंधित आहेत की नाही. करार क्रमांक आणि रक्कम यासारख्या महत्त्वाच्या वस्तूंची यादृच्छिकपणे तपासणी करणे आवश्यक आहे.
वेक्टर मार्गाने काढलेला मजकूर मजकूर किंवा प्रतिमा नाही. ते पुनरावलोकन प्रविष्ट करतील. पृष्ठे स्वयंचलितपणे रिक्त म्हणून चिन्हांकित करू नका आणि शांतपणे पृष्ठे सोडू नका.
दस्तऐवज बंद केल्यानंतर पृष्ठ वापरल्याने अवैध ऑब्जेक्ट होईल. कृपया with pymupdf.open(...) ची व्याप्ती ठेवा आणि फाईल पूर्व-तपासणी, रेंडरिंग आणि काढल्यानंतरच सोडा. निर्देशांक, प्रतिमा माहिती आणि पृष्ठ जीवनचक्रांबद्दल अधिक तपशीलांसाठी, PyMuPDF Page API पहा.
अविश्वसनीय पीडीएफने स्टँडअलोन प्रक्रियेमध्ये फाइल आकार, पृष्ठ संख्या, रेंडर पिक्सेल, वेळ आणि मेमरी मर्यादा देखील सेट केल्या पाहिजेत. हे उदाहरण केवळ लहान फायलींची चाचणी करते आणि दुर्भावनापूर्ण फायलींसाठी सँडबॉक्स प्रदान करत नाही. PyMuPDF तयार करणे आणि वापरण्यापूर्वी आपण त्याच्या परवाना अटी आणि आपली वितरण पद्धत देखील सत्यापित केली पाहिजे.
प्रवाहातून भाषांतर कार्यप्रवाहात संक्रमण
एक पात्र आउटपुट मजकूराची स्ट्रिंग नाही, परंतु पृष्ठ क्रमांक आणि निर्णयाच्या कारणांसह एक रेकॉर्ड आहे. भाषांतर करण्यापूर्वी, कोणती पृष्ठे विश्वासार्हपणे काढली जाऊ शकतात याची पुष्टी करा; भाषांतरानंतर आशय, संख्या आणि मांडणी यांचे पुनरावलोकन केले जाते. आपण ओम्नीडॉक उत्पादन प्रवेश वर दस्तऐवज प्रक्रिया सेवा पाहू शकता. या लेखातील स्थानिक प्रोग्राम स्वतंत्रपणे चालतो आणि ओम्नीडॉक खात्यावर अवलंबून नसतो किंवा याचा अर्थ असा नाही की तो अंतर्गत उत्पादन अल्गोरिदम आहे.
📊 कोर तुलना
| मार्ग | ट्रिगर अटी | योग्य पान | मोठे धोके |
|---|---|---|---|
| थेट निष्कर्षण (TEXT_CANDIDATE) | कमीतकमी 40 नॉन-स्पेस्ड वर्ण | विद्यमान मजकूर स्तराचे मुख्य पृष्ठ | लपविलेल्या खराब ओसीआर थरांमध्ये विकृत मजकूर असू शकतो |
| ओसीआर उमेदवार (OCR_CANDIDATE) | 40 शब्दांपेक्षा कमी, एका प्रतिमेसह किमान 70% कव्हर | पूर्ण पृष्ठ स्कॅन केलेली प्रत | शुद्ध फोटो देखील आवश्यकता पूर्ण करतात, परंतु ओसीआर परिणाम अर्थपूर्ण असू शकत नाहीत |
| मॅन्युअल तपासणी (पुनरावलोकन) | हे वरील दोन श्रेणींची पूर्तता करत नाही | रिक्त पृष्ठे, वेक्टर मजकूर, विरळ शीर्षके, जटिल कोडी | मॅन्युअल निर्णय आवश्यक आहे; वगळणे किंवा टाकून देणे स्वयंचलितपणे केले जाऊ शकत नाही |
🎯 कोणती पद्धत आपल्याला अनुकूल आहे?
जर आपण ......
- पुढील आणि मागील पृष्ठांमधील मोठ्या गुणवत्तेच्या फरकांसह मिश्रित दस्तऐवज हाताळले: पृष्ठ दर पृष्ठ पूर्व-तपासणी, प्रत्येक भिन्न मार्ग प्रविष्ट करतो.
- प्रामुख्याने करार, आर्थिक कागदपत्रे आणि मुख्य क्रमांक असलेली इतर कागदपत्रे हाताळा: पृष्ठ TEXT_CANDIDATE साठी, संख्या आणि रेंडरिंग यांच्यातील पत्रव्यवहार यादृच्छिकपणे तपासा.
- स्कॅनची बॅच प्रोसेसिंग: सुलभ ट्रेसबिलिटीसाठी ओसीआर परिणामांसाठी इंजिन आवृत्त्या, भाषा पॅक आणि पृष्ठ क्रमांक रेकॉर्ड करा.
- अज्ञात स्त्रोतांकडून पीडीएफ प्राप्त करणे: स्वतंत्र प्रक्रियेमध्ये संसाधन मर्यादा निश्चित करा; मुख्य प्रक्रियेत थेट त्यावर प्रक्रिया करू नका.
❓ वारंवार विचारले जाणारे प्रश्न (FAQ)
1. मुख्यपृष्ठ मजकूर कॉपी करू शकते; मी संपूर्ण पीडीएफसाठी ओसीआर प्रक्रिया वगळू शकतो का?
नाही, आपण करू शकत नाही. पहिल्या पानावर मजकूराचा थर असण्याचा अर्थ असा नाही की त्यानंतरच्या पानांवर देखील ते आहेत; आपण पृष्ठानुसार पृष्ठ न्याय केला पाहिजे.
2. फक्त प्रतिमा क्षेत्र थेट का जोडू नये?
क्षेत्रानुसार ओव्हरलॅपिंग प्रतिमा जोडल्यास कव्हरेज दर जास्त होईल. हा लेख क्षेत्रफळानुसार सर्वात मोठी प्रतिमा घेतो, म्हणून एकाधिक प्रतिमांमधून एकत्र केलेली स्कॅन केलेली पृष्ठे पुनरावलोकन विभागात येऊ शकतात, जी एक जाणीवपूर्वक सीमा आहे.
3. जर वर्णांची संख्या 40 पर्यंत पोहोचली तर याचा अर्थ असा आहे की मजकूराची गुणवत्ता चांगली आहे?
असा निष्कर्ष काढता येत नाही. लपलेल्या खराब ओसीआर थरांमध्ये अनेक वर्ण देखील असू शकतात, म्हणून आपल्याला अद्याप बदली वर्ण, डुप्लिकेट ओळी आणि स्पॉट की फील्ड तपासण्याची आवश्यकता आहे.
4. वेक्टर मार्गांमध्ये काढलेला मजकूर कसा हाताळला पाहिजे?
ते मजकूर किंवा प्रतिमा नाहीत, पुनरावलोकन प्रविष्ट करतात आणि व्यक्तिचलितपणे त्यांचे परीक्षण केले जाते; ते स्वयंचलितपणे रिक्त किंवा शांतपणे सोडलेली पृष्ठे म्हणून चिन्हांकित केले जाऊ नयेत.
5. स्थानिक प्रोग्राम ओम्नीडॉक खात्यावर अवलंबून आहे का?
अवलंबून नाही. या लेखातील स्थानिक कार्यक्रम स्वतंत्रपणे चालतो आणि कोणत्याही ऑनलाइन ओसीआर किंवा भाषांतर सेवांना कॉल करत नाही.
📝 सारांश
प्रथम, ओसीआर आयोजित करायचे की नाही हे ठरविण्यापूर्वी पुरावे पृष्ठाद्वारे पृष्ठ सोडा. अनिश्चित परिणामांना यश म्हणून लपविण्यापेक्षा अनिश्चित पृष्ठे रांगेत सोडणे अधिक प्रभावी आहे.
आता अनुभव घ्या: मूळ स्वरूपन जतन करून भाषांतर सुरू करण्यासाठी आपला दस्तऐवज अपलोड करा


