Face detection เป็นเทคนิคที่ใช้ตรวจหาใบหน้าคนในรูปภาพ โดยใน emgucv มีฟังค์ชั่นที่สนับสนุนในการทำ face detection อยู่แล้ว โดยในบทความนี้ผมจะขอนำเสนอในส่วนของการใช้ฟังค์ชั่น face detection ของ emgucv เท่านั้น ถ้าอยากศึกษารายละเอียดเพิ่มเติมในเรื่องหลักการ และอัลกอลิทึมที่ในการทำ face detection ให้ลองศึกษาที่นี้ นะครับ <<คลิ๊ก>>   เอาล่ะครับเรามาเข้าเรื่องของเราเลยดีกว่า 

ขั้นแรก เปิดไฟล์ Lab5 ก่อนเลยครับ ถ้าใครยังไม่ได้ทำ Lab5 ให้ <<คลิกที่นี้>> เพื่อศึกษาและทำ Lab5 ก่อนนะครับ

ขั้นที่สอง เข้าไปที่ฟังค์ชั่น process() และแปลงภาพที่เรา capture มาเป็น grayscale นะครับ โดยเพิ่ม โค๊ดส่วนนี้เข้าไป
                   

Image<Gray, byte> grayImg = cameraImage.Convert<Gray, byte>();

ขั้นที่สาม สร้าง haar object ขึ้นมาโดยใช้ไฟล์ XML จาก library นะครับ (ผมลง emguCV ไว้ในไดร์ว C นะครับ)
                   
HaarCascade haar = newHaarCascade("C:\\Emgu\\emgucv-windows-x86 2.4.0.1717\\opencv\\data\\haarcascades\\haarcascade_frontalface_default.xml");

ขั้นที่สี่ เรียกใช้ฟังค์ชั่น DetectHaarCascade ครับ
               
var faces = grayImg.DetectHaarCascade(haar, 1.4,4,HAAR_DETECTION_TYPE.FIND_BIGGEST_OBJECT,new Size(cameraImage.Width / 8, cameraImage.Height / 8))[0];

ขั้นสุดท้าย แสดงผล
       
MCvFont f = newMCvFont(FONT.CV_FONT_HERSHEY_COMPLEX,1.0, 0.5); //ประกาศ font
foreach(var face in faces) 

      int x = face.rect.X; 
      int y = face.rect.Y; 
      int width = face.rect.Width; 
      int height = face.rect.Height;
      cameraImage.Draw(face.rect, new Bgr(0, 0, 255), 1); //วาดสี่เหลี่ยม

     cameraImage.Draw("X : " + x+" ,Y : "+y, ref f, new Point(20, 20), new Bgr(0, 0, 255)); //แสดงค่า X , Y 
     cameraImage.Draw("Width : " + width+" Height : "+height, ref f, new Point(20, 50), new Bgr(0, 0, 255)); //แสดงค่า width , Height 
} 

Output
เราก็จะสามารถรู้ตำแหน่งของใบหน้าแล้วนะครับ โดยดูจากตำแหน่ง X , Y และค่า Width , Height นะครับ



สรุปโค๊ด


หวังว่าบทความนี้จะมีประโยชน์กับผู้ที่กำลังเริ่มต้น เรียนรู้ OpenCV และ emguCV นะครับ   ถ้าหากชอบก็กด Like แต่ถ้าใช่ก็กด แชร์ นะครับ ^_^

10 ความคิดเห็น

January 10, 2013 at 1:38 PM

นายแบบหล่อจุงเบยครับ

Reply
March 26, 2013 at 1:02 PM

น่าสอนใจมากครับ ครับ ผม bookmark เว็บนี้เรียนร้อยแล้ว เดียว ของ ทำ ดู ก่อน ติดตรงไหรเดียว มา ถาม ครับ

Reply
March 26, 2013 at 3:28 PM

ยินดีเลยครับ ^_^

Reply
June 17, 2013 at 2:47 PM

ถ้าจะให้จับหลายๆหน้าต้องเขียนยังไงอ่ะคับ

Reply
July 22, 2013 at 9:46 PM

เวลา รันโปรแกรม มันจะมี กรอบ แดงขึ้นมาเหมือนพี่ไหมครับ แต่ผมรันแล้วมันไม่ขึ้นครับ

Reply
July 22, 2013 at 10:25 PM

เวลารันโปรแกรมแล้วจะมีกรอบสีแดงขึ้นเหมือนผมนะครับ

Reply
August 21, 2013 at 9:58 PM

ของผมก้ไม่ขึ้น -0-

Reply
November 17, 2013 at 12:17 AM

อาห์.. ขอบคุณมากๆครับ รักเลย <3

Reply
September 19, 2014 at 12:37 AM

ขอถามนะครับ ถ้าผมต้องการอวัยวะอื่นที่ไม่ใช่ใบหน้า ต้องไปประยุกต์ตรงที่คำสั่งไหนหรอครับ ผมต้องการเขียนจับการเคลื่อนไหวของรถบนถนนอ่าคับ

Reply
May 25, 2017 at 7:43 PM

กล้องมันกลับด้านอะครับ ทำยังไงดี

Reply

Post a Comment

Templated by Blogger Items