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");

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


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

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

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


मुझे टेसरेक्ट बहुत ज्यादा नहीं पता, लेकिन मेरे पास ओसीआर के बारे में कुछ जानकारी है। ये रहा।

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

उम्मीद है की यह मदद करेगा।


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

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


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

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

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







tesseract