2012-12-20 7 views
13

मैं ओपनसीवी में वाहनों का पता लगाने के लिए MIT cars dataset से प्रशिक्षित एक हायर कैस्केड क्लासिफायर का उपयोग कर रहा हूं (ओपनसीवी के साथ प्रदान की गई यूटिलिटीज का उपयोग करके प्रशिक्षित)। यह डीबग मोड में संकलित होने पर उचित रूप से अच्छी तरह से काम करता है, लेकिन जब रिलीज मोड में संकलित किया जाता है तो कैस्केड कोई भी विचलन नहीं करता है। नीचे दी गई टेस्ट छवि पर निम्न कोड चलाना डीबग मोड में एक पहचान देता है लेकिन रिलीज मोड में कुछ नहीं (यह व्यवहार मेरे डेटा अनुक्रम में सभी छवियों के माध्यम से जारी रहता है)।रिलीज/डीबग मोड में जब हायर कैस्केड के साथ अलग-अलग परिणाम

क्या आप सुझाव दे सकते हैं कि ऐसा क्यों होता है और, सबसे महत्वपूर्ण बात यह है कि रिलीज मोड में चलते समय डिस्कनेक्शन प्राप्त करने के लिए मैं क्या कर सकता हूं?:

Cascade File

कोड

cv::Mat testImage = cv::imread("testImage.png",0); 
cv::equalizeHist(testImage, testImage); 

cv::CascadeClassifier vehicleCascade; 
vehicleCascade.load("cars3.xml"); 

// Detect vehicles 
std::vector<cv::Rect> cars; 
vehicleCascade.detectMultiScale(
    testImage,     // Input image 
    cars,     // Output bounding boxes 
    1.1,     // scale factor - how much image size is reduced at each scale 
    5,      // min neighbours - how many neighbours required to maintain rect 
    0|CV_HAAR_SCALE_IMAGE, // Not used 
    cv::Size(30,30),  // Min poss object size 
    cv::Size()    // Max poss object size 
    ); 

std::cout << "Found " << cars.size() << " objects.\n"; 

for (int i=0; i<cars.size(); ++i) 
    cv::rectangle(testImage, cars.at(i), CV_RGB(255,0,0), 3); 

cv::namedWindow("Haar cascade"); 
cv::imshow("Haar cascade", testImage); 
cv::waitKey(0); 
cv::imwrite("output.png", testImage); 

TestImage

testImage

+0

छवि और कैस्केड फ़ाइलें ठीक से लोड होती हैं, मेरे वास्तविक कोड में मैं पूर्ण निर्देशिका पथ का उपयोग करता हूं। जहां तक ​​मैं कह सकता हूं, किसी भी मोड में कोई त्रुटि नहीं है, केवल अंतर अंतर वस्तुओं की संख्या होने के कारण MultiScale रिटर्न। – Chris

+0

ठीक है:/मैंने अपनी पहली टिप्पणी हटा दी है क्योंकि पीएनजी के बारे में हिस्सा प्रासंगिक नहीं था। –

+0

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

उत्तर

3
  1. यह अजीब बात है, लेकिन मेरे लिए आप दोनों मोड में कोड ठीक काम कर रहे हैं। मैं विंडोज 7 32 बिट पर विजुअल स्टूडियो 2010 का उपयोग कर रहा हूं। यहां मेरा प्रोजेक्ट है - https://www.dropbox.com/s/5kubn5tlu7k6ziy/opencvhw.rar, इसलिए आप निष्पादन योग्य (रिलीज और डीबग निर्देशिका) देख सकते हैं। यदि आप विजुअल स्टूडियो का उपयोग कर रहे हैं और इसे स्वयं बनाना चाहते हैं तो आपको लाइब्रेरी में पथ बदलना होगा और दोनों मोड के लिए निर्देशिकाएं शामिल करनी होंगी (निर्देशिका पथ शामिल है, लाइब्रेरी निर्देशिका पथ अलग है)। (प्रोजेक्ट -> ... गुण -> कॉन्फ़िगरेशन गुण -> vC++ निर्देशिकाएं)

  2. आम तौर पर मैं वास्तव में सावधानीपूर्वक प्रोजेक्ट कॉन्फ़िगरेशन की जांच करने की अनुशंसा करता हूं। छोटी गलती करना वास्तव में आसान है जो बहुत अजीब व्यवहार कर सकता है। कभी-कभी सबसे अच्छा विकल्प एक बार फिर से स्क्रैच से सब कुछ कॉन्फ़िगर करना है।

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

  4. यह भी ध्यान दें कि आपने jpg फ़ाइल अपलोड की है, इसलिए मुझे इसका नाम बदलना और परिवर्तित करना था - शायद इस फ़ाइल में रूपांतरणों के दौरान कुछ बदल गया है, इसलिए हम बिल्कुल उसी फाइल पर आपके कोड का परीक्षण नहीं कर रहे हैं - आपको पीएनजी अपलोड करें ड्रॉपबॉक्स पर फ़ाइल करें ताकि मैं इसका परीक्षण कर सकूं।

+0

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

2

इस post देखेंइस प्रकार की त्रुटि रिलीज मोड में opencv की डीबग लाइब्रेरी से लिंक करके हो सकती है।

+0

मैंने इसे पढ़ लिया है, लेकिन मुझे xml फ़ाइल लोड करने या कोड चलाने के साथ कोई समस्या नहीं है, यह केवल आउटपुट है जो अलग है। इसके अलावा, सही ओपनसीवी डीएल लोड हो रहे हैं - डीबग के लिए डीबग, रिलीज के लिए रिलीज। – Chris

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