2011-09-10 13 views
5

मैं सी # में HttpHandler लिख रहा हूं जो आकार बदलती छवियों और ब्ला ब्ला ब्लाह की सेवा करता है ... कोई परेशानी नहीं है, हमारे पास लाखों हैंडलर संदर्भ के रूप में उपयोग करने के लिए हैं।सी # - चेहरे और फसल छवि का पता लगाएं

समस्या यह है कि मेरे पास "पारंपरिक" आकारों के साथ 4: 3 और 16: 9 के रूप में मेरे उपयोगकर्ताओं की तस्वीरें हैं। लेकिन इस हैंडलर को फोटो आईडी आकार (4 सेमी से 3 सेमी) में तस्वीर की सेवा करने की आवश्यकता होगी और स्पष्ट रूप से उपयोगकर्ता चेहरे के आसपास फसल की आवश्यकता है। चेहरे की स्थिति बहुत भिन्न होती है (हमेशा चित्र केंद्र पर नहीं होती है)।

तो, चेहरे के केंद्र का पता लगाने के लिए मैं किस प्रकार का एल्गोरिदम उपयोग कर सकता हूं और फिर इस बिंदु के आसपास छवि को फसल कर सकता हूं?

उत्तर

8

आप इस उदाहरण चलाने के लिए EmguCV (OpenCV की डॉटनैट बंदरगाह) http://www.emgu.com/wiki/index.php/Face_detection

नोट्स में HaarCascade वर्ग का उपयोग कर सकते हैं:

  • एक Windows प्रपत्र अनुप्रयोग
  • एक PictureBox जोड़े बनाएँ और एक टाइमर (और इसे सक्षम करें) - इसे x86 सिस्टम
  • पर चलाएं सुनिश्चित करें कि आपके पास निष्पादित कोड में ओपनसीवी प्रासंगिक डीएलएस (इमू सीवी डाउनलोड के साथ शामिल) है तों।
  • Haarcascade एक्सएमएल (कोड की अंतिम पंक्ति) को खोजने के लिए
using System; 
using System.Windows.Forms; 
using System.Drawing; 
using Emgu.CV; 
using Emgu.Util; 
using Emgu.CV.Structure; 
using Emgu.CV.CvEnum; 

namespace opencvtut 
{ 
    public partial class Form1 : Form 
    { 
       private Capture cap; 
       private HaarCascade haar; 

     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void timer1_Tick(object sender, EventArgs e) 
     { 
       using (Image<Bgr, byte> nextFrame = cap.QueryFrame()) 
       { 
         if (nextFrame != null) 
         { 
           // there's only one channel (greyscale), hence the zero index 
           //var faces = nextFrame.DetectHaarCascade(haar)[0]; 
           Image<Gray, byte> grayframe = nextFrame.Convert<Gray, byte>(); 
           var faces = 
             grayframe.DetectHaarCascade(
               haar, 1.4, 4, 
               HAAR_DETECTION_TYPE.DO_CANNY_PRUNING, 
               new Size(nextFrame.Width/8, nextFrame.Height/8) 
               )[0]; 

           foreach (var face in faces) 
           { 
             nextFrame.Draw(face.rect, new Bgr(0,double.MaxValue,0), 3); 
           } 
           pictureBox1.Image = nextFrame.ToBitmap(); 
         } 
       } 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      // passing 0 gets zeroth webcam 
         cap = new Capture(0); 
      // adjust path to find your xml 
         haar = new HaarCascade(
       "..\\..\\..\\..\\lib\\haarcascade_frontalface_alt2.xml"); 
     } 
    } 
} 

यहाँ नमूना मैंने लिखा http://www.overroot.com/blog/wp-content/uploads/2011/03/FaceRecognition.zip

1

एक example on CodeProject है, ऐसा लगता है कि यह शुरू करने के लिए एक बहुत अच्छी जगह होगी।

+0

यह लेख अब CodeProject पर उपलब्ध है के रूप में यह एक और काम का एक सीधा प्रतिकृति ऑनलाइन है (लिंक की जाँच)। –

1

आप चेहरे का पता लगाने और फसल का एक उदाहरण देख सकते हैं पथ को समायोजित करें http://deteksiwajah.blogspot.com/ पर सॉफ़्टवेयर। यह ओपन सोर्स और ओपनसीवी लाइब्रेरी का उपयोग कर रहा है।

1

यदि आप अपनी छवि को क्रॉप करने की तलाश में हैं, तो आप फेस एपीआई नामक माइक्रोसॉफ्ट संज्ञानात्मक सेवा का उपयोग कर सकते हैं जो आपकी तस्वीर पर सभी लोगों का चेहरा सीमित करता है, यह आपको एक JSON वापस देता है जिसमें तत्व आपको आयताकार संरचना वापस लौटाते हैं , तो आप अपनी छवि को क्रॉप और आकार बदल सकते हैं जैसा आप चाहते हैं।

यहाँ आप इसके बारे में अधिक informationa देख सकते हैं: FaceAPI

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