ios - लाइसेंस प्लेटों को पहचानने के लिए टेस्सेक्ट का उपयोग करना




objective-c opencv (4)

मैं एक ऐप विकसित कर रहा हूं जो लाइसेंस प्लेट्स (एएनपीआर) को पहचान सकता है। पहला कदम छवि से लाइसेंस प्लेटों को निकालना है। मैं चौड़ाई / ऊंचाई अनुपात के आधार पर प्लेटों का पता लगाने के लिए ओपनसीवी का उपयोग कर रहा हूं और यह बहुत अच्छी तरह से काम करता है:

लेकिन जैसा कि आप देख सकते हैं, ओसीआर परिणाम बहुत खराब हैं।

मैं अपने Objective C (आईओएस) पर्यावरण में tesseract का उपयोग कर रहा हूँ। इंजन शुरू करते समय ये मेरे init चर हैं:

// init the tesseract engine.
    tesseract = new tesseract::TessBaseAPI();
    int initRet=tesseract->Init([dataPath cStringUsingEncoding:NSUTF8StringEncoding], [language UTF8String]);
    tesseract->SetVariable("tessedit_char_whitelist", "BCDFGHJKLMNPQRSTVWXYZ0123456789-");
    tesseract->SetVariable("language_model_penalty_non_freq_dict_word", "1");
    tesseract->SetVariable("language_model_penalty_non_dict_word ", "1");
    tesseract->SetVariable("load_system_dawg", "0");

मैं परिणामों को कैसे सुधार सकता हूं? क्या मुझे ओपनसीवी को और अधिक छवि कुशलता देने की ज़रूरत है? या क्या कुछ ऐसा है जो मैं टेस्सेक्ट के साथ सुधार सकता हूं?


अब लाइसेंस प्लेट आसानी से mlmodel द्वारा पहचाना जा सकता है। मैंने मूल मॉडल बनाया है जिसे आप here पा सकते हैं। आपको दृष्टि फ्रेमवर्क के माध्यम से 28 * 28 रिज़ॉल्यूशन में वर्णों को विभाजित करने की आवश्यकता है और इस छवि को नीचे दिए गए जैसे VNImageRequestHandler को भेजें-

let handler = VNImageRequestHandler(cgImage: imageUI.cgImage!, options: [:])

आपको मेरे कोर एमएलएमडेल का उपयोग करके वांछित परिणाम मिलेंगे। बेहतर स्पष्टीकरण के लिए this लिंक का उपयोग this लेकिन लाइसेंस प्लेट पहचान में बेहतर परिणामों के लिए मेरे मॉडल का उपयोग करें। मैंने लाइसेंस प्लेट पहचान के लिए here भी बनाया है।


दो चीजें इसे पूरी तरह से ठीक कर देंगी:

  1. छवि से पाठ नहीं है जो सब कुछ हटा दें। प्लेट क्षेत्र को खोजने के लिए आपको कुछ सीवी का उपयोग करने की आवश्यकता है (उदाहरण के लिए रंग, आदि) और फिर सभी पृष्ठभूमि को मुखौटा करें। आप इनपुट को काले और सफेद होने के लिए टेसरेक्ट करना चाहते हैं, जहां पाठ काला है और बाकी सब कुछ सफेद है

  2. स्काई निकालें (जैसा कि ऊपर फ्रैंकपीआई द्वारा उल्लिखित है)। टेसरेक्ट वास्तव में स्कू के साथ ठीक काम करना चाहिए (आर स्मिथ द्वारा " टेसेरैक्ट ओसीआर इंजन " अवलोकन देखें) लेकिन दूसरी ओर यह हमेशा काम नहीं करता है , खासकर अगर आपके पास कुछ पैराग्राफ के विपरीत एक पंक्ति है। इसलिए मैन्युअल रूप से पहले मैन्युअल रूप से स्कू को हटा देना हमेशा अच्छा होता है, अगर आप इसे विश्वसनीय रूप से कर सकते हैं। आपको शायद चरण 1 से प्लेट के बाउंडिंग ट्रैपेज़ॉयड का सटीक आकार पता चलेगा, इसलिए यह बहुत कठिन नहीं होना चाहिए। स्काई को हटाने की प्रक्रिया में, आप परिप्रेक्ष्य को भी हटा सकते हैं: सभी लाइसेंस प्लेट्स (आमतौर पर) में एक ही फ़ॉन्ट होता है, और यदि आप उन्हें समान (परिप्रेक्ष्य मुक्त) आकार देते हैं तो अक्षर आकार बिल्कुल वही होंगे, जो मदद करेगा पाठ पहचान

कुछ और संकेतक ...

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

पीएस भी, यदि संभव हो तो उच्च रिज़ॉल्यूशन छवि के साथ शुरू करना बेहतर है। ऐसा लगता है कि आपके उदाहरण में टेक्स्ट लगभग 14 पिक्सेल लंबा है। टेसरेक्ट 300 डीपीआई पर 12 प्वाइंट टेक्स्ट के साथ बहुत अच्छी तरह से काम करता है, यह लगभग 50 पिक्सेल लंबा है, और यह 600 डीपीआई पर काफी बेहतर काम करता है। अपने अक्षर का आकार कम से कम 50 अधिमानतः 100 पिक्सल बनाने का प्रयास करें।

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


मेरे पुराने पावर मीटर से ओसीआर को आजमाने के साथ मेरा वास्तविक विश्व उदाहरण यहां दिया गया है। मैं आपके ओपनसीवी कोड का उपयोग करना चाहता हूं ताकि ओपनसीवी छवि की स्वचालित फसल कर सके, और मैं छवि सफाई स्क्रिप्ट करूँगा।

  • पहली छवि मूल छवि है (फसल पावर मीटर संख्या)
  • दूसरी छवि जीआईएमपी में छवि को थोड़ा साफ कर देती है, टेसरेक्ट में लगभग 50% ओसीआर सटीकता
  • तीसरी छवि पूरी तरह से साफ छवि है - बिना किसी प्रशिक्षण के 100% ओसीआर मान्यता प्राप्त!


मैं आईओएस ऐप पर काम कर रहा हूं, अगर आपको परिणामों को बेहतर बनाने की जरूरत है तो आपको टेस्सेक्टैक्ट ओसीआर को प्रशिक्षित करना चाहिए, यह मेरे लिए 9 0% बेहतर है। ट्रैनिंग से पहले, ओसीआर के परिणाम बहुत खराब थे।

इसलिए, मैंने अतीत में इस gist उपयोग लाइसेंस प्लेट फ़ॉन्ट के साथ टेसेरैक्ट ओआरसी को प्रशिक्षित करने के लिए किया था।

यदि आप रुचि रखते हैं, तो मैंने कुछ हफ्ते पहले इस परियोजना को github पर खोल दिया था





tesseract