11 มิถุนายน 2558

Published 6/11/2558 by with 0 comment

ทำระบบตรวจจับใบหน้าด้วย OpenCV กับภาษา Python

สวัสดีผู้อ่านทุกท่านครับ บทความนี้ผมจะพาผู้อ่านไปทำระบบตรวจจับใบหน้าด้วย OpenCV กับภาษา Python แบบง่าย ๆ กันครับ

ในการตรวจจับใบหน้าด้วย OpenCV กับภาษา Python เราต้องใช้ Cascade Classification เป็นระบบจัดกลุ่มรูปแบบเพื่อใช้ในการตรวจจับวัตถุครับ เนื่องบทความผมจะพาผู้อ่านไปใช้ Cascade Classifier เพื่อทำระบบตรวจจับใบหน้า ยังไม่ได้พาสร้าง Cascade Classification ครับ (พับโครงการ)

เนื่องจาก Cascade Classification จำพวก ตา ใบหน้า ร่างกาย ได้มีคนทำข้อมูล Cascade Classification ไว้แล้ว ผมจึงนำมาใช้เลยครับ

มีคำสั่งที่ควรรู้ดังนี้

[python]
cv2.CascadeClassifier(ไฟล์ Cascade Classification)[/python]

เป็นคำสั่งสำหรับใช้ดึงข้อมูล Cascade Classification เข้ามา

[python]detectMultiScale()[/python]

เป็นคำสั่งสำหรับใช้ตรวจจับวัตถุตามข้อมูลในไฟล์ Cascade Classification




เรามาเขียนโปรแกรมตรวจจับใบหน้าด้วย OpenCV กับภาษา Python กันครับ
ให้ทำการโหลดไฟล์ Cascade Classification ที่ชื่อว่า haarcascade_frontalface_alt2.xml

จาก https://raw.githubusercontent.com/Itseez/opencv/master/data/haarcascades/haarcascade_frontalface_alt2.xml

มาเก็บไว้กับโฟลเลอร์เดียวกันกับไฟล์โค้ด Python ครับ

[python]
import cv2

img = cv2.imread("brothers-457237_1280.jpg")
hc = cv2.CascadeClassifier("haarcascade_frontalface_alt2.xml")
faces = hc.detectMultiScale(img)

for face in faces:
cv2.rectangle(img, (face[0], face[1]), (face[0] + face[2], face[0] + face[3]), (255, 0, 0), 2)

cv2.imwrite("Face4.jpg", img)
[/python]

รูปภาพ brothers-457237_1280.jpg

รูปภาพ brothers-457237_1280.jpg

ผลลัพธ์
รูปภาพ Face4.jpg

ทำระบบตรวจจับใบหน้าด้วย OpenCV กับภาษา Python

จะเห็นขอบสีน้ำเงินเป็นส่วนที่ระบบตรวจจับพบครับ

นำมาใช้กับกล้องหรือเว็บแคม

[python]
import cv2
cam = cv2.VideoCapture(0)
name = 'detect'
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_alt2.xml')
while True:
s, img = cam.read()
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray)
for (x,y,w,h) in faces:
img = cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2) # ถ้าต้องการใช้ภาพสี อย่าใช้โทนสีเทา
cv2.imshow(name, img)
cv2.waitKey(0)
cv2.destroyAllWindows()
[/python]

ผลลัพธ์

ทำระบบตรวจจับใบหน้าจากกล้องหรือเว็บแคมด้วย OpenCV กับภาษา Python

จะเห็นได้ว่า ระบบจะจับภาพมาประมวลผลแต่ไม่ได้ประมวลผลตลอด ลองนำโค้ดไปแต่งดูนะครับ




เพิ่มเติมเนื้อหา 5/8/58

หากต้องการตรวจจับใบหน้าตลอดเวลาที่รันโค้ดสามารถทำได้โดยการใส่ตัวเลขลงไปแทนเลข 0

[python]cv2.waitKey(0)[/python]

ตัวอย่างโค้ดการตรวจจับใบหน้าตลอดเวลา

[python]
import cv2

cam = cv2.VideoCapture(0)

name = "ระบบตรวจจับใบหน้า"

hc = cv2.CascadeClassifier('haarcascade_frontalface_alt2.xml')

cv2.namedWindow(name, cv2.WINDOW_AUTOSIZE)

while True:
i = 0
s, img = cam.read()
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = hc.detectMultiScale(gray, 1.3, 5)
for (x,y,w,h) in faces:
img = cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
cv2.imshow(name, img)
cv2.waitKey(10) # ใส่เลข 10 ลงไปแทนเลข 0
[/python]





ที่มา

http://docs.opencv.org/master/d7/d8b/tutorial_py_face_detection.html

ขอขอบคุณรูปภาพสวย ๆ จากเว็บ pixabay.com ครับ

ปรับปรุงครั้งที่ 1 เพิ่มที่มา 11/6/58

ขอขอบคุณสำหรับคำแนะนำที่สุภาพครับ ความจริงแล้วผมไม่ได้อยากเขียนบทความนี้ต่อครับ แต่เนื่องจากผมอยากรู้และอยากแบ่งปันครับ ขออภัยที่ผิดพลาดไปครับ

Open soure

  • php

  • wp

  • notepad

  • mysql

  • python 3.4.3

  • เว็บแคมธรรมดา ๆ ที่ติดกับโน้ตบุค 2 ล้านพิกเซล


อ่านเอกสารเพิ่มเติมทั้งหมดได้ที่ http://docs.opencv.org

ติดตามบทความต่อไปนะครับ
ขอบคุณครับ

0 ความคิดเห็น:

แสดงความคิดเห็น

แสดงความคิดเห็นได้ครับ :)