यूनिट टेस्ट इमेज प्रोसेसिंग कोड कैसे करें?


14

मैं इमेज प्रोसेसिंग (मुख्य रूप से ओसीआर) में काम कर रहा हूं और मुझे आश्चर्य है कि मुझे अपने विकास में यूनिट परीक्षणों को कैसे एकीकृत करना चाहिए।

मैं पहले से ही अधिक "सामान्य" प्रकार के कोड के लिए यूनिट परीक्षणों का उपयोग कर रहा हूं, लेकिन जब छवि प्रसंस्करण कोड के साथ काम कर रहा हूं तो मुझे यकीन नहीं है कि इसके साथ कैसे निपटें। इस तरह के कोड को हमेशा कुछ छवि डेटा इनपुट / आउटपुट की आवश्यकता होती है और यह स्पष्ट नहीं है। अभी के लिए मैं ज्यादातर एकीकरण परीक्षण कर रहा हूं, लेकिन उन्हें चलाने में थोड़ा समय लगता है और मैं इस तरह के कोड को इकाई परीक्षणों में तोड़ने के तरीके पर कुछ विचार चाहूंगा ताकि मैं उन्हें और अधिक तेज़ी से चला सकूं।

संपादित करें: एक चरित्र का विश्लेषण कई रोटेशन, स्केलिंग और रूपात्मक संचालन से जुड़े कई चरणों से गुजर सकता है। एल्गोरिथ्म के विकसित होने के बाद ये चरण अक्सर बदलते रहते हैं। इस प्रकार इनपुट और अपेक्षित आउटपुट परीक्षण के दौरान बहुत विकसित हो सकते हैं। प्रत्येक वर्ण 100x100 पिक्सेल का हो सकता है इसलिए उन्हें कोड में हार्डकोड करना या उत्पन्न डेटा के साथ काम करना सवाल से बाहर है।


क्या आप एक फ़ंक्शन का उदाहरण स्केच कर सकते हैं जहां आपको यूनिट टेस्ट बनाने में परेशानी होती है?
डॉक्टर ब्राउन

1
एक वास्तविक उत्तर के लिए बहुत कम और वास्तव में इकाई-परीक्षण नहीं: हम डेटा प्रसंस्करण कर रहे हैं (जैसे: नमूना की एक उच्च संख्या के माध्यम से जाना - मैं आमतौर पर ऐसे वर्गीकरण कार्यों के लिए 1000 से आगे जाता हूं, लेकिन यह आपके समग्र नमूना आकार पर निर्भर करता है ) और स्वचालित रूप से हाथ से संसाधित डेटा के लिए अंतिम परिणामों की तुलना करना। मैंने ऐसा करने के लिए एक छोटी रूपरेखा तैयार की है, यह कुछ हफ्तों में खुला स्रोत चला जाएगा, लेकिन यह विवरण है - आप इस प्रक्रिया को क्लोन कर सकते हैं: birgitplays.wordpress.com/2012/09/15/…
Birgit पी।

अपने उदाहरण के लिए, आप आसानी से परीक्षण, स्केलिंग आदि को परीक्षण की छोटी इकाइयों के रूप में देख सकते हैं। दी गई छवि को 45 डिग्री पर घुमाने से अधिक परिवर्तन नहीं होना चाहिए। यह स्केलिंग और रूपात्मक संचालन के लिए भी जाता है। कार्यान्वयन के दौरान अपेक्षित आउटपुट विकसित होने पर किसी चीज़ का परीक्षण करना, हालाँकि, कठिन है। आप एक गुणवत्ता उपाय करने की कोशिश कर सकते हैं, और गुणवत्ता कह सकते हैं = = some_quality। यह सुनिश्चित करने के लिए कि आपकी गुणवत्ता में गिरावट नहीं है, लेकिन यह कठिन भी हो सकता है। इसके अलावा, आपके द्वारा किए जाने वाले सभी परीक्षण ऐसे हो सकते हैं जो आपको साबित करते हैं कि अंतर्निहित हिस्से टूटे नहीं हैं। जैसे स्केल / रोटेट / आदि।
शहीद

@ मार्टिएरट: मैं रोटेशन, स्केलिंग आदि का परीक्षण नहीं कर रहा हूं, क्योंकि मैं इन्हें 3 जी लाइब्रेरी से बुला रहा हूं, जो मुझे विश्वास है कि अच्छी तरह से परीक्षण किया गया है। OCR एल्गोरिथ्म इनमें से कई ऑपरेशन से बना है। लेकिन जैसा कि आप कहते हैं, कुछ का परीक्षण करना जहां एक आउटपुट विकसित होता है, कठिन है। हो सकता है कि यह एक अच्छी चेतावनी हो, हमारे पास एकीकरण परीक्षणों पर निर्भर रहने के अलावा कोई विकल्प नहीं है ...
rold2007

@ बिरजीत पी।: दिलचस्प समाधान। जैसा कि आप कहते हैं कि यह अभी भी एकीकरण परीक्षण है। तुम्हारी तरह एक रूपरेखा होने से इन परीक्षणों को तेजी से स्थापित करने में मदद मिलेगी, लेकिन वे तेजी से नहीं चलेंगे ...
rold2007

जवाबों:


12

मैं वीडियो रिकॉर्डिंग / एनालिटिक्स / स्ट्रीमिंग सॉफ्टवेयर के साथ काम करता हूं और हमें एक समान समस्या का सामना करना पड़ा। नीचे हमारा समाधान था, यह सुनिश्चित नहीं था कि यह लंबे समय तक कैसे काम करेगा लेकिन अब यह काम करने लगता है।

अपने यूनिट टेस्ट प्रोजेक्ट में संसाधनों के रूप में इनपुट / आउटपुट इमेज सेव करें। फिर यूनिट टेस्ट को सत्यापित करें कि जब कोई विशिष्ट इनपुट दिया जाता है, तो वह विशिष्ट आउटपुट उत्पन्न होता है।

9/10 बार जब आप कोड को रिफलेक्टर करते हैं और अन्य कार्यक्षमता को जोड़ते हैं, तो आप उम्मीद करेंगे कि आपकी छवि हैंडलिंग रूटीन के परिवर्तन को न बदले, इसलिए यदि अचानक इकाई परीक्षण विफल होने लगे, तो यह त्रुटि के कारण हो सकता है।

दूसरी ओर, यदि आप वास्तविक एल्गोरिथ्म में परिवर्तन करते हैं, तो इसके परिणामस्वरूप इकाई परीक्षण विफलता भी होगी। इस मामले में, आपको मैन्युअल रूप से / नेत्रहीन रूप से सत्यापित करना होगा कि परिणाम सही हैं और यदि वे अच्छे लगते हैं, तो यूनिट टेस्ट पास करने के लिए छवि संसाधनों को फिर से अपडेट करें।

हमारी परियोजना में, हमने "नकली" (या अगर आप करेंगे) वीडियो स्रोतों को विकसित करना समाप्त कर दिया, जो हमें इनपुट और आउटपुट दोनों के लिए डेटा खिला सकते हैं। लेकिन डेटा स्वयं नकली नहीं है, यह वास्तव में एक चल प्रणाली से सहायक डेटा रिकॉर्डिंग कक्षाओं का उपयोग करके कैप्चर किया गया था जब हमने मैन्युअल परीक्षण चलाए और सत्यापित किया कि सब कुछ काम कर रहा था।


सहमत हैं, अपने परीक्षणों में कुछ ठोस फ़ाइलों पर भरोसा करने के लिए इसका ठीक है जब आप फ़ाइलों के साथ काम कर रहे दिनचर्या का परीक्षण कर रहे हैं (आप एकीकरण के साथ इसे अधिक निष्क्रिय देखें)।
केमोडा

1
यदि आप पूरी प्रोसेसिंग चेन के माध्यम से कुछ इनपुट चलाते हैं और आउटपुट की जांच करते हैं, तो आप यूनिट-टेस्टिंग नहीं बल्कि इंटीग्रेशन-टेस्टिंग कर रहे हैं।
tdammers

@ निर्माता: मैंने इसे पूरी श्रृंखला के माध्यम से चलाने के लिए कभी नहीं कहा। एक "यूनिट" के माध्यम से कुछ इनपुट चलाएं, न कि पूरी श्रृंखला। और यकीन है कि अगर उस का आउटपुट छवियों के अलावा कुछ और होता है, तो आपको केवल इनपुट को छवि संसाधनों के रूप में सहेजना होगा।
DXM

@DXM: मैं आपका समाधान समझता हूं लेकिन मुझे लगता है कि हमारे पास समान बाधा नहीं हो सकती है। एल्गोरिथ्म विकसित होने के दौरान मेरा इनपुट / आउटपुट डेटा बहुत बदल जाता है। आप इन नियमित परिवर्तनों से कैसे निपटेंगे? ओसीआर में मुझे 99% से अधिक सटीकता हो सकती है इसलिए केवल कुछ छवियों पर परीक्षण मुझे सफलता की झूठी भावना दे सकता है, जबकि एकीकरण परीक्षण मुझे बाद में बता सकते हैं कि मैंने वास्तव में एल्गोरिथ्म को खराब कर दिया ...
rold2007
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.