2010-05-14 4 views
6

मैं EmguCV का उपयोग करके कुछ चेहरे की पहचान करने की कोशिश कर रहा हूं। मैं सोच रहा था कि क्या मैं इस कार्य के लिए EigenObjectRecognizer का उपयोग कर सकता हूं? क्या कोई मुझे बता सकता है कि इसका उपयोग कैसे करें? क्योंकि अगर कोई नो-मैच फोटो नहीं है, तो यह भी एक मूल्य देता है। यहाँ एक उदाहरण है:EigenObjectRecognizer का उपयोग

Image<Gray, Byte>[] trainingImages = new Image<Gray,Byte>[5]; 
     trainingImages[0] = new Image<Gray, byte>("brad.jpg"); 
     trainingImages[1] = new Image<Gray, byte>("david.jpg"); 
     trainingImages[2] = new Image<Gray, byte>("foof.jpg"); 
     trainingImages[3] = new Image<Gray, byte>("irfan.jpg"); 
     trainingImages[4] = new Image<Gray, byte>("joel.jpg"); 
String[] labels = new String[] { "Brad", "David", "Foof", "Irfan" , "Joel"} 
    MCvTermCriteria termCrit = new MCvTermCriteria(16, 0.001); 

    EigenObjectRecognizer recognizer = new EigenObjectRecognizer(
     trainingImages, 
     labels, 
     5000, 
     ref termCrit); 
     Image<Gray,Byte> testImage = new Image<Gray,Byte>("brad_test.jpg"); 

    String label = recognizer.Recognize(testImage); 
    Console.Write(label); 

यह "ब्रैड" रिटर्न .लेकिन अगर मैं testimage में तस्वीर बदल यह भी कुछ नाम देता है या यहाँ तक कि यह अच्छा Brad.Is चेहरा पहचानने इस विधि का उपयोग करने के लिए? या क्या कोई बेहतर तरीका है?

+1

आप अन्य छवियों के सभी के साथ-साथ प्रशिक्षित करने के लिए नहीं है? ऐसा लगता है कि आप केवल ब्रैड की तलाश में इसे प्रशिक्षित करते हैं। –

+0

वह छवियों की एक सरणी और उनके पहचानकर्ता को लेबल की एक सरणी गुजर रहा प्रतीत होता है। आपको क्यों लगता है कि वह उन सभी को प्रशिक्षण नहीं दे रहा है? – Blindy

+0

मैंने इसे ब्रैड की तलाश करने के लिए प्रशिक्षित किया क्योंकि मैं डेटा बेस के साथ छवि स्वाद लेना चाहता हूं। जैसा कि मेरे पास 1 व्यक्ति की तस्वीर है और मैं यह जानना चाहता हूं कि यह कौन है? – Ercan

उत्तर

1

मैंने कुछ अभ्यास किया और पाया कि जब यह नहीं मिलता है कि यह खाली स्ट्रिंग देता है। मूल्य 5000 से 1000 में बदलना यह अधिक करीबी मूल्य देता है लेकिन यदि आप परीक्षण के लिए वेब कैमरा का उपयोग कर रहे हैं और डेटाबेस में लगभग समान होना चाहिए।

+0

मैंने यह भी अभ्यास किया है, ऐसा लगता है कि मेरे पास एक टेस्ट चेहरे है, तो यह परीक्षण चेहरे के लिए रखे गए लेबल के रूप में सभी चेहरों को लेबल करता है। मैं अलग-अलग चेहरों को पहचानना चाहता हूं क्योंकि उन्हें लेबल किया गया है। यह अभी तक काम नहीं कर सका। – Rick2047

0

ठीक है, मुझे इमू सीवी नहीं पता, लेकिन मुझे लगता है कि रॉबर्ट हार्वे क्या कहता है सही है। आपको अपने तंत्रिका नेटवर्क को प्रशिक्षित करना होगा। इसके अलावा, तंत्रिका नेटवर्क हमेशा एक परिणाम लौटाएंगे, इससे कोई फर्क नहीं पड़ता। यदि परिणाम गलत है, तो इसका मतलब है कि आपने अपने नेटवर्क को पर्याप्त प्रशिक्षित नहीं किया है।

+0

से नीचे एर्केन द्वारा नोट किया गया है, लेकिन मुझे कोई भी मैच देखने के लिए गलत परिणाम की भी आवश्यकता है। और रिपोर्ट जो नहीं मिली.लेकिन अगर यह कुछ चीज देता है तो मैं इसे कैसे बना सकता हूं? – Ercan

+0

मैं निश्चित रूप से इन चीजों में एक विशेषज्ञ नहीं हूं, लेकिन मुझे लगता है कि आप मानक हां/नहीं, 1/0, "पाया/नहीं मिला" तंत्रिका नेटवर्क प्रोग्रामिंग (जैसे चेहरा पहचान है) के साथ प्रोग्रामिंग भ्रमित कर रहे हैं। एक "नहीं मिला" मुद्दा एक तंत्रिका नेटवर्क में नहीं हो सकता है ... शायद आपको एक "अज्ञात" छवि जोड़नी है, और इसे अपने नेटवर्क को डिफ़ॉल्ट रूप से पहचानने के लिए प्रशिक्षित करना है ?? मुझे नहीं पता ... http://www.google.be/search?source=ig&hl=nl&rlz=&q=neural+networks&btnG=Google+zoeken&meta= http://www.google।हो/खोज? स्रोत = ig और hl = nl & rlz = & q = fuzzy + logic & btnG = Google + zoeken और meta = –

0
recognizer.Recognize(testImage) RETURN EigenObjectRecognizer.RecognitionResult 

तो आप की कोशिश कर सकते हैं:

EigenObjectRecognizer.RecognitionResult helo = recognizer.Recognize(result); 
Console.Write(helo.lable); 
0

आप की तरह Emgu.CV.EigenObjectRecognizer के समारोह पहचानो ओवरलोड सकता है:

public String Recognize(Image<Gray, Byte> image, out float distance) 
     { 
      int index; 
      float eigenDistance; 
      String label; 
      FindMostSimilarObject(image, out index, out eigenDistance, out label); 
      distance = eigenDistance; 
      return (_eigenDistanceThreshold <= 0 || eigenDistance < _eigenDistanceThreshold) ? _labels[index] : String.Empty; 
     } 

Idea constructed on Overload Snippet from Codeproject

और इस तरह से प्राप्त

जैसे चलने वाली अंतिम व्युत्पन्न दूरी
float last_distance =0; 
label = recognizer.Recognize(testImage, out last_distance); 

यह आपको मूल्य का एक बेहतर विचार बस एक लेबल के लिए यह पाइपिंग और मानों की श्रेणी पर एक नज़र होने के माध्यम से

MCvTermCriteria termCrit = new MCvTermCriteria(trainingImages.count, 0.001); 

EigenObjectRecognizer recognizer = new EigenObjectRecognizer(
         trainingImages.ToArray(), 
         labels.ToArray(), 
         <<good max val derived from last_distance>>, 
         ref termCrit); 

में डालने के लिए देना होगा।

3 or 4 thousand maybe...

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