2011-09-29 15 views
6

विजुअल स्टूडियो 2010 में ओपनसीवी \ नमूने \ सी फ़ोल्डर में facedetect.cpp संकलित करने का प्रयास कर रहा है। प्रोजेक्ट संकलित करता है और ठीक ठीक शुरू होता है, मेरे कैमरे का पूर्वावलोकन दिखाता है , और फिर जैसे ही यह चेहरे का पता लगाता है, cascade.detectMultiScale() पर दुर्घटनाग्रस्त प्रतीत होता है। मैंने निष्कर्ष निकाला कि ओपनसीवी सोचता है कि मैं बहुत बदसूरत हूं।ओपनसीवी 2.1: faceetect.cpp क्रैश होता है जब उसे बदसूरत चेहरा

Unhandled exception at 0x100342bf in HeadTrackerExample.exe: 0xC0000005: Access violation writing location 0x00000000.

दुर्भाग्य से डिबग जानकारी मुझे गहरी जांच नहीं देता। मैं cv210.lib के खिलाफ लिंक कर रहा हूँ; cxcore210.lib; highgui210.lib; डिबग संस्करणों में काम करेंगे नहीं:

LDR: LdrpWalkImportDescriptor() failed to probe D:\OpenCV2.1\bin\cv210d.dll for its manifest, ntstatus 0xc0150002

मैं ऐनी हैथवे का एक प्रिंटआउट साथ वर्गीकारक करवाने की कोशिश करते जा रहा हूँ, लेकिन मैं अन्य सुझावों के लिए खुला रहा हूँ।

https://code.ros.org/trac/opencv/browser/trunk/opencv/samples/c/facedetect.cpp

+2

कोई सुराग नहीं मिला है, लेकिन विनोद की भावना रखने के लिए +1 है। –

+0

क्या आप हमें कोड दिखा सकते हैं ताकि हम आपकी कॉल को 'cascade.detectMultiScale()' पर देख सकें? या कोड भी बदसूरत है? :-) – SSteve

+0

कोड अब प्रश्न में जुड़ा हुआ है! जैसा कि आप देख सकते हैं, यह सिर्फ शामिल नमूना कोड है, इसलिए शायद मेरे सिस्टम या मेरे प्रोजेक्ट कॉन्फ़िगरेशन में कुछ गड़बड़ है। –

उत्तर

0

मैंने इसे ठीक करने का प्रयास करने का दिन बिताया। कौन जानता है कि यह क्यों दुर्घटनाग्रस्त हो रहा था? मैं डीबग डीएलएल से लिंक नहीं कर सका इसलिए हम कभी नहीं जानते। मैंने ओपनसीवी-2.1.0-win32-vs2008.exe वितरण डाउनलोड किया। और मैं इसलिए विजुअल स्टूडियो 2010 का उपयोग कर रहा, exe

LDR: LdrpWalkImportDescriptor() failed to probe D:\OpenCV2.1\bin\cv210d.dll for its manifest, ntstatus 0xc0150002 Debugger:: An unhandled non-continuable exception was thrown during process load The program '[5172] HeadTrackerExample.exe: Native' has exited with code -1072365566 (0xc0150002).

साथ दुर्घटनाग्रस्त हो गया था इस "0xc0150002 त्रुटि" है। निर्भरता वाकर के अनुसार, ओपनसीवी डीबग डीएलएल msvcr90d.dll और msvct90d.dll, विजुअल स्टूडियो 2008 डीबग रनटाइम डीएलएल खोजने की कोशिश कर रहे हैं। खैर, मैंने इन्हें प्राप्त किया और यह अभी भी काम नहीं कर रहा है, इसलिए यह गूढ़ विंडोज साइडबिसाइड और मैनिफेस्ट सामान में हो जाता है।

मैंने ओपनसीवी-2.3.1-win-superpack.exe वितरण पर स्विच किया और अब यह काम कर रहा है।

1

मैं मैं बेहतर आप से देख रहा हूँ, क्योंकि यह यहाँ (ओएस एक्स के तहत) काम कर रहा है लगता है। क्या आप वाकई एक्सएमएल फाइलों को सफलतापूर्वक लोड कर रहे हैं? क्या आप डिफ़ॉल्ट एक्सएमएल फाइलों का उपयोग कर रहे हैं (haarcascade_frontalface_alt.xml और haarcascade_eye_tree_eyeglasses.xml)?

यह सुनिश्चित करता है कि आपके पास शून्य सूचक है। cascade.detectMultiScale() पर कॉल पर ब्रेकपॉइंट सेट करने का प्रयास करें और cascade, smallImg, smallImg.data, और faces के मानों की जांच करें।

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

void HaarClassifierCascade::detectMultiScale(const Mat& image, 
         Vector<Rect>& objects, double scaleFactor, 
         int minNeighbors, int flags, 
         Size minSize) 
{ 
    MemStorage storage(cvCreateMemStorage(0)); 
    CvMat _image = image; 
    CvSeq* _objects = cvHaarDetectObjects(&_image, cascade, storage, scaleFactor, 
              minNeighbors, flags, minSize); 
    Seq<Rect>(_objects).copyTo(objects); 
} 

यह छू faces वेक्टर नहीं कर रहा है अंतिम पंक्ति के अंत के बाद सभी का पता लगाने में किया जाता है: faces वेक्टर

पॉप्युलेट यहाँ detectMultiScale कोड है। यदि आप साहसी हैं, तो आप cvHaarDetectObjects पूरा कर रहे हैं और यदि यह शून्य सूचक लौटा रहा है, तो आप यहां कुछ printf कथन फेंक सकते हैं।

+0

हाँ, एक्सएमएल लोड ठीक है। अच्छी डीबग टिप, मैं कोशिश करूंगा। हालांकि, detectMultiScale कॉल सफलतापूर्वक पूरा हो जाता है * जब तक यह एक चेहरा नहीं पाता है, जो मुझे लगता है कि यह एक समस्या है जब यह 'चेहरे' वेक्टर (संदर्भ द्वारा उपयोग) को पॉप्युलेट करने की कोशिश करता है –

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