2011-01-16 34 views
16

का उपयोग कर किसी छवि से संख्याओं और अक्षरों को पढ़ें, मैं C++ में opencv का उपयोग करके छवि से अक्षरों और संख्याओं को पढ़ने के लिए एक एप्लिकेशन विकसित कर रहा हूं। मैंने पहली बार दिए गए रंग छवि और रंग टेम्पलेट को बाइनरी छवि में बदल दिया, फिर विधि cvMatchTemplate() कहा जाता है। इस विधि ने उन क्षेत्रों को हाइलाइट किया जहां टेम्पलेट मेल खाता है .. लेकिन स्पष्ट नहीं है .. मैं बस क्षेत्र को देखना नहीं चाहता हूं .. मुझे छवि से अक्षर (अक्षर नंबर) को पार्स करने की आवश्यकता है। मैं ओपनसीवी के लिए नया हूँ। क्या कोई परिणाम प्राप्त करने के लिए किसी अन्य विधि को जानता है ??ओपनसीवी

alt text

छवि कैमरे से लिया जाता है। नमूना छवि ऊपर दिखाया गया है। मुझे एलईडी डिस्प्ले (130 और डेल्फ़्ट तंथफ) से सभी ग्रंथों को प्राप्त करने की आवश्यकता है।

दोस्तों मैंने चेहरे का पता लगाने के नमूना आवेदन के साथ प्रयास किया, यह चेहरों का पता लगाता है। हार्कास्केड फ़ाइल ओपनसीवी के साथ प्रदान की जाती है। मैंने बस उस फाइल को लोड किया और विधि cvHaarDetectObjects() को बुलाया; अक्षरों का पता लगाने के लिए मैंने ओपनसीवी द्वारा प्रदान किए गए आवेदन letter_recog.cpp का उपयोग कर xml फ़ाइल बनाई है। लेकिन जब मैं इस फ़ाइल को लोड करता हूं, तो यह कुछ त्रुटि दिखाता है (ओपनसीवी त्रुटि: अनपेक्षित त्रुटि> अज्ञात फ़ंक्शन में, फ़ाइल ........ \ ocv \ opencv \ src \ cxcore \ cxpersistence.cpp, लाइन 4720)। मैंने इस त्रुटि के लिए वेब में खोज की और उपयोग की गई lib फ़ाइलों के बारे में जानकारी प्राप्त की। मैंने ऐसा किया, लेकिन त्रुटि अभी भी बनी हुई है। क्या मेरी एक्सएमएल फाइल के साथ त्रुटि है या इस एक्सएमएल फ़ाइल को लोड करने के लिए विधि को कॉल करना ((सीवीएचएआर क्लासिफायर कैस्केड *) सीवीएलओडी ("निर्मित एक्सएमएल फ़ाइल नाम", 0,0,0);) ?? कृपया मदद ...

अग्रिम

उत्तर

4

धन्यवाद How to read time from recorded surveillance camera video? को मेरा उत्तर देखें आप/cvMatchTemplate() का उपयोग करना चाहिए कर सकते हैं कि क्या करना है।

+0

लेकिन छवि भिन्न हो सकते हैं में अंकों की स्थिति, तो छवि के विशिष्ट स्थिति के लिए तुलना नहीं कर सकते। तुलना की गई छवि स्पष्ट नहीं है, तो मुझे छवि से विशेष अंक कैसे प्राप्त होगा ??? – asifkt

+0

@asifkt, फिर अपने आवेदन के बारे में अधिक जानकारी देने के लिए कृपया अपना प्रश्न संपादित करें। छवि स्रोत (वीडियो, स्कैनर इत्यादि) अक्षरों (फ़ॉन्ट्स, आकार, परिप्रेक्ष्य) के बारे में आप और क्या जानते हैं। इससे संभावित समाधानों पर ध्यान केंद्रित करने में मदद मिलेगी। –

+0

मैंने चेहरे का पता लगाने का आवेदन विकसित किया। वास्तव में कैस्केड फ़ाइल haarcascade_frontalface_alt.xml ओपनसीवी के साथ प्रदान की जाती है। पत्र पहचान के लिए मुझे एक एक्सएमएल फ़ाइल बनाने की जरूरत है।इसलिए मैंने इस फ़ाइल को बनाने के लिए opencv_createsamples.exe, opencv_haartraining.exe फ़ाइलों का उपयोग किया। मैंने लोगो को सकारात्मक छवि के रूप में दिया, और एक और 5 छवियां जिनमें लोगो को नकारात्मक छवियों के रूप में शामिल नहीं किया गया है। मुझे इसे प्रशिक्षित करके कोई एक्सएमएल फ़ाइल नहीं मिली। सुनवाई में हायर प्रशिक्षण के लिए कम से कम 3 दिन लगेंगे। क्या यह सच है?? इंटरमीडिएट एक्सएमएल प्राप्त करने के लिए मुझे convert_cascade.exe फ़ाइल का उपयोग करने की आवश्यकता है। अगर मैं इसका इस्तेमाल करता हूं, तो क्या मुझे बेहतर परिणाम मिल जाएगा ??? – asifkt

0

यदि आप बस गंतव्यों के एक निश्चित सेट के साथ काम कर रहे हैं, तो टेम्पलेट मिलान करेगा।

हालांकि, यदि आप सिस्टम को अधिक लचीला होना चाहते हैं, तो मुझे लगता है कि आपको प्रत्येक व्यक्तिगत पत्र के लिए समोच्च/आकार विश्लेषण के कुछ रूप की आवश्यकता होगी।

8

टेम्पलेट मिलान इस तरह के अनुप्रयोग के लिए असंगतता, अभिविन्यास परिवर्तन, स्केल परिवर्तन इत्यादि के कारण मजबूत नहीं होना चाहिए। इस समस्या को हल करने का सामान्य तरीका मशीन सीखना है। आप अपने खुद के बढ़ते वर्गीकरण को प्रशिक्षित करके क्या करने की कोशिश कर रहे हैं एक संभावित दृष्टिकोण है। हालांकि, मुझे नहीं लगता कि आप सही ढंग से प्रशिक्षण कर रहे हैं। आपने उल्लेख किया है कि आपने इसे 1 लोगो को एक सकारात्मक प्रशिक्षण छवि और 5 अन्य छवियों के रूप में दिया है जिसमें लोगो को नकारात्मक उदाहरण के रूप में शामिल नहीं किया गया है? आम तौर पर आपको सैकड़ों या हजारों या उससे अधिक के क्रम में प्रशिक्षण नमूने की आवश्यकता होती है। आप संभवतः 6 प्रशिक्षण नमूने के साथ ट्रेन नहीं कर सकते हैं और इसे काम करने की उम्मीद कर सकते हैं।

आप मशीन सीखने से अपरिचित हैं, यहाँ है मोटे तौर पर आपको क्या करना चाहिए:

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

2) आपको कई नकारात्मक प्रशिक्षण नमूने एकत्र करने की आवश्यकता होगी। उनकी संख्या आपके पास सकारात्मक प्रशिक्षण नमूने की संख्या के समान क्रम में होनी चाहिए।ये उन अन्य वस्तुओं की छवियां हो सकती हैं जो छवियों में दिखाई देती हैं जिन्हें आप अपने डिटेक्टर को चलाएंगे। उदाहरण के लिए, आप बस, सड़क की सतहों, सड़क के किनारे पेड़ आदि के सामने की छवियों को फसल कर सकते हैं और उन्हें नकारात्मक उदाहरणों के रूप में उपयोग कर सकते हैं। यह आपके ऑब्जेक्ट को चलाने वाले चित्र में इन ऑब्जेक्ट्स को वर्गीकृत करने में मदद करने के लिए है। इसलिए, नकारात्मक उदाहरण न केवल ऐसी छवियां हैं जिनमें आप का पता नहीं लगाना चाहते हैं। वे ऑब्जेक्ट्स होनी चाहिए जो उस ऑब्जेक्ट के लिए गलत हो सकती हैं, जिसे आप अपने डिटेक्टर को चलाने वाले चित्रों में पहचानने की कोशिश कर रहे हैं (कम से कम आपके मामले के लिए)। , http://note.sonots.com/SciSoftware/haartraining.html

भले ही आप का उल्लेख किया है कि आप केवल बस में पूरे एलईडी पैनल के बजाय अलग-अलग पात्रों का पता लगाने के लिए चाहते हैं:

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

आशा इस मदद करता है में स्ट्रिंग उन्हें दिखाई देते हैं।

संपादित करें:

मैं मेरा यह पुराने पोस्ट अलग से बाद OpenCV 3 में दृश्य पाठ मॉड्यूल @KaolinFire ने उल्लेख किया खोज पर मौका का क्या हुआ।

जो लोग उत्सुक हैं के लिए, यह ओपी द्वारा दिए गए नमूना छवि पर कि डिटेक्टर चलाने का परिणाम है। ध्यान दें कि डिटेक्टर टेक्स्ट क्षेत्र को स्थानीयकृत करने में सक्षम है, भले ही यह एक से अधिक बाउंडिंग बॉक्स लौटाता हो।

Result of OpenCV 3 text detector.

ध्यान दें कि यह विधि सरल नहीं है (कम से कम इस डिफ़ॉल्ट पैरामीटर साथ OpenCV में कार्यान्वयन)। यह झूठी सकारात्मक उत्पन्न करता है, खासकर जब इनपुट छवि में कई "विचलनकर्ता" होते हैं। यहाँ गूगल स्ट्रीट व्यू डाटासेट पर इस OpenCV 3 पाठ डिटेक्टर का उपयोग कर प्राप्त अधिक उदाहरण हैं: यह समानांतर लाइनों के बीच "पाठ" लगता है की प्रवृत्ति है

Negative result 1 Negative result 2 Negative result 3 Negative result 4

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

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

यहाँ पाठ का पता लगाने के बारे में अधिक संसाधनों (चर्चा + कोड + डेटासेट) कर रहे हैं।

कोड

डेटासेट

आप Google StreetView और MSRA डेटासेट यहाँ मिल जाएगा। यद्यपि इन डेटासेट में छवियां बिल्कुल बसों पर एलईडी संकेतों के समान नहीं हैं, फिर भी वे कई प्रतिस्पर्धी एल्गोरिदमों में से "सर्वश्रेष्ठ" प्रदर्शन करने वाले एल्गोरिदम को चुनने या स्क्रैच से मशीन सीखने वाले एल्गोरिदम को प्रशिक्षित करने में सहायक हो सकती हैं।

http://www.iapr-tc11.org/mediawiki/index.php/Datasets_List

12

OpenCV 3.0 (सक्रिय देव में) के रूप में, आप में निर्मित "दृश्य पाठ" वस्तु का पता लगाने मॉड्यूल का उपयोग कर सकते हैं ~

पाठ का पता लगाने के लिए इन दो पत्रों पर बनाया गया है:

  • [Neumann12] न्यूमन एल, Matas जम्मू .: वास्तविक समय दृश्य पाठ स्थानीयकरण और मान्यता, CVPR 2012 कागज उपलब्ध ऑनलाइन http://cmp.felk.cvut.cz/~neumalu1/neumann-cvpr2012.pdf पर है

  • [Gomez13] गोमेज़ एल और Karatzas डी .: प्राकृतिक दृश्यों से मल्टी स्क्रिप्ट पाठ निष्कर्षण, ICDAR 2013 कागज ऑनलाइन उपलब्ध है पर http://refbase.cvc.uab.es/files/GoK2013.pdf

एक बार जब आपको पता चला कि दृश्य में टेक्स्ट कहां है, तो आप उन स्लाइसों के खिलाफ किसी भी प्रकार के मानक ओसीआर चला सकते हैं (टेसेरैक्ट ओसीआर आम है)। और वहाँ अब opencv में एंड-टू-एंड नमूना Tesseract को OpenCV के नए इंटरफ़ेस का उपयोग कर रहा है:

+0

न तो संदर्भ और न ही उदाहरण –

+2

हम्म उपलब्ध हैं। अजीब बात है कि वे इसे सब ले जाया गया। :/मैं क्या कर सकता हूं अद्यतन कर रहा हूँ। –