2012-07-25 16 views
21

पर ओसीआर प्रदर्शन में सुधार करना मैं एक ऐसे प्रोजेक्ट पर काम कर रहा हूं जिसमें पीडीएफ प्रारूप में संग्रहीत टेक्स्ट वैज्ञानिक पेपर निकालने शामिल हैं। अधिकांश कागजात के लिए, यह पीडीएफएमनर का उपयोग करके काफी आसानी से पूरा किया जाता है, लेकिन कुछ पुराने कागजात अपने टेक्स्ट को बड़ी छवियों के रूप में संग्रहीत करते हैं। संक्षेप में, एक पेपर स्कैन किया जाता है और वह छवि फ़ाइल (आमतौर पर पीएनजी या जेपीईजी) में संपूर्ण पृष्ठ शामिल होता है।मल्टी-पैराग्राफ स्कैन

मैंने टेसरेक्ट इंजन का उपयोग python-tesseract बाइंडिंग के माध्यम से करने का प्रयास किया, लेकिन परिणाम काफी निराशाजनक हैं।

मेरे पास इस लाइब्रेरी के साथ प्रश्नों में डाइविंग करने से पहले, मैं यह उल्लेख करना चाहता हूं कि मैं ओसीआर पुस्तकालयों के लिए सुझावों के लिए खुला हूं। कुछ देशी पायथन समाधान प्रतीत होते हैं।

Here ऐसी एक छवि (जेपीईजी) है जिस पर मैं टेक्स्ट निकालने की कोशिश कर रहा हूं। मैं उपरोक्त से जुड़े पायथन-टेसेरैक्ट Google कोड पेज पर उदाहरण स्निपेट में प्रदान किया गया सटीक कोड। मुझे जिक्र करना चाहिए कि दस्तावेज थोड़ा विचित्र है, इसलिए यह काफी संभव है कि मेरे कोड में कई विकल्पों में से एक गलत कॉन्फ़िगर किया गया है। कोई सलाह (या गहराई से ट्यूटोरियल के लिंक) की बहुत सराहना की जाएगी।

Here ओसीआर में मेरे प्रयास से आउटपुट है।

  1. वहाँ कोड मैं उपयोग कर रहा हूँ में कुछ भी करने से इनकी है:

    मेरे सवालों का इस प्रकार हैं? क्या ऐसा करने का कोई बेहतर तरीका है? शायद एक अलग पुस्तकालय?

  2. पहचान का सुधार करने के लिए मैं किस प्रकार का प्रीप्रोसेसिंग कर सकता हूं? छवियां सभी बी & डब्ल्यू हैं, लेकिन क्या मुझे शायद एक थ्रेसहोल्ड सेट करना चाहिए और इसके ऊपर कुछ भी एक सिंगल-वैल्यू ब्लैक कलर और उसके नीचे सब कुछ शून्य-मूल्य वाले सफेद रंग में सेट करना चाहिए? और कुछ?
  3. एक और विशिष्ट प्रश्न: एकल शब्दों पर ओसीआर प्रदर्शन करके प्रदर्शन में सुधार किया जा सकता है? यदि हां, तो क्या कोई छवि फ़ाइल में एक शब्द को सीमित करने का एक तरीका सुझा सकता है (उदाहरण: ऊपर से जुड़ा हुआ) और उन्हें अलग-अलग छवियों में निकालने का तरीका जिसे स्वतंत्र रूप से इलाज किया जा सकता है?
  4. पीडीएफ पेज छवि में एम्बेडेड ग्राफ और अन्य छवियों की उपस्थिति ओसीआर में हस्तक्षेप कर सकती है? क्या मुझे इन्हें हटा देना चाहिए? यदि हां, तो क्या कोई भी स्वचालित रूप से उन्हें हटाने के लिए एक विधि सुझा सकता है?

संपादित करें: सादगी के लिए, यहाँ कोड मैं प्रयोग किया जाता है।

import tesseract 
api = tesseract.TessBaseAPI() 
api.Init(".","eng",tesseract.OEM_DEFAULT) 
api.SetPageSegMode(tesseract.PSM_AUTO) 

mImgFile = "eurotext.jpg" 
mBuffer=open(mImgFile,"rb").read() 
result = tesseract.ProcessPagesBuffer(mBuffer,len(mBuffer),api) 
print "result(ProcessPagesBuffer)=",result 

और यहां परिवर्तन कोड है (जिसका परिणाम इस प्रश्न में नहीं दिखाया गया है, हालांकि प्रदर्शन काफी समान प्रतीत होता है)।

import cv2.cv as cv 
import tesseract 

api = tesseract.TessBaseAPI() 
api.Init(".","eng",tesseract.OEM_DEFAULT) 
api.SetPageSegMode(tesseract.PSM_AUTO) 

image=cv.LoadImage("eurotext.jpg", cv.CV_LOAD_IMAGE_GRAYSCALE) 
tesseract.SetCvImage(image,api) 
text=api.GetUTF8Text() 
conf=api.MeanTextConf() 

क्या कोई इन दो स्निपेट के बीच अंतर को समझा सकता है?

उत्तर

12

यदि आप थोड़ा टिंकर करते हैं तो टेसरेक्ट स्वच्छ इनपुट टेक्स्ट (जैसे आपका उदाहरण) पर बहुत अच्छा है। कुछ सुझाव:

  • स्वचालित करने से पहले, कमांड लाइन
  • अपने चरित्र सेट प्रतिबंधित यदि संभव हो तो कम से Tesseract के साथ शुरू (उदाहरण के लिए/usr/स्थानीय/शेयर/tessdata/पर कॉन्फ़िगरेशन में एक बार देख ले।/ अंक - अंग्रेजी अक्षर ऊपरी/निचले मामले आदि) के लिए कॉन्फ़िगर और एक कमांड लाइन तर्क के रूप में इसे प्रदान
  • केवल PNG या TIFF छवियों (पुराने संस्करणों के लिए TIFF) का उपयोग के रूप में जेपीजी अपने पाठ तो छवि upsample कलाकृतियों का परिचय
  • वर्तमान छोटे फ़ॉन्ट से बड़ा है। टेस्सेक्ट लाइन> 10 पिक्सेल उच्च वर्ण (यदि मेमोरी परोसता है), यह निश्चित रूप से छोटे अक्षरों के साथ खराब प्रदर्शन करता है
  • यदि आप पहले से द्वि-स्तर हैं तो थ्रेसहोल्डिंग करने की कोई आवश्यकता नहीं है, लेकिन यदि आप ऐसा करते हैं तो यह आपको चोट नहीं पहुंचाएगा और आप बिल्कुल देख सकते हैं एक ही छवि है कि Tesseract

देखेंगे मैं अगर मैं और अधिक मदद कर सकते हैं लेकिन Tesseract मेलिंग सूची में शामिल कर देखने के लिए यहां वापस जांच करेंगे, वे वास्तव में सहायक रहे हैं।

Sidenote - मैं pytesseract के लिए कुछ पैच जो मैं पात्रों एपीआई (जो दो महीने वापस संभव नहीं था) के माध्यम से & बातें & शब्द प्राप्त करने के लिए प्रकाशित करने के लिए चाहिए। चिल्लाओ अगर वे उपयोगी हो सकता है।

+0

Ozvald के लिए अपने प्रश्न को अग्रेषित करने का स्वागत करते हैं सकता है, बहुत बढ़िया सलाह, धन्यवाद! मैं वास्तव में आपका कोड जांचने में रूचि रखूंगा। क्या आपके पास जिथब रिपोजिटरी या कुछ है? छवि फ़ाइल प्रकार के संबंध में, क्या यह जेपीईजी छवियों को पीएनजी में परिवर्तित करने के लिए स्वीकार्य है, या क्या नुकसान पहले से ही किया गया है? मैं पूछता हूं क्योंकि मैंने जिन पीडीएफ का सामना किया है, वे छवियों को जेपीईजी के रूप में आंतरिक रूप से स्टोर करते हैं, इसलिए यदि समस्या हानिकारक संपीड़न में से एक है, तो मैं अपने पास जो कुछ भी है उसके साथ अटक गया हूं। – blz

+1

कोई जिथब रेपो, मुझे एक मेल भेजें (ianozsvald com पर ian) और मैं इसे खोद दूंगा (मैं वास्तव में इसे गिटूब करने के लिए बाहर ...)। –

+0

यदि यह पहले से ही जेपीईजी है तो मैं इसे * अतिरिक्त * कलाकृतियों को जोड़ने से बचने के लिए इसे टीआईएफएफ के रूप में सहेज दूंगा। अतिरिक्त शोर जोड़ना वह है जिसे आप टालना चाहते हैं। –

6

पहला उदाहरण फ़ाइल को बफर के रूप में पढ़ता है और उसके बाद इसे किसी भी संशोधन के बिना टेस्सेक्ट-ओसीआर में रिले करता है जबकि दूसरा फ़ाइल ओपनसीवी प्रारूप में पढ़ता है जो आपको पक्ष छवि को बदलने जैसे कुछ छवि स्पर्श करने की अनुमति देगा , सीवी पुस्तकालय का उपयोग कर ग्रे पैमाने और आदि। दूसरी विधि बहुत उपयोगी है अगर आप टेसरेक्ट पर छवि को पार करने से पहले छवि मैनिपुलेशन करना चाहते हैं।

बीटीडब्ल्यू, मैं पाइथन-टेसेरैक्ट का मालिक हूं। यू सवाल पूछने के लिए चाहते हैं, तो आप हमेशा http://code.google.com/p/python-tesseract

जो

+0

बहुत बहुत धन्यवाद। मैं वास्तव में सोच रहा था कि ओपनसीवी इस में आया था! मैं आपके पास कोई प्रश्न पूछूंगा, धन्यवाद! – blz

संबंधित मुद्दे