สวัสดีค่ะ !
บทความนี้เราจะพาไปรู้จักกับการใช้ OpenCV (Open Source Computer Vision Library) เพื่อใช้ในการตรวจจับใบหน้าแบบเรียลไทม์ผ่านกล้องเว็บแคมกัน
โดยเราจะใช้เทคนิค Haar Cascade Classifier ซึ่งเป็นหนึ่งในโมเดลคลาสสิกของ Computer Vision ที่สามารถใช้ได้รวดเร็วและเบาเครื่อง เหมาะสำหรับผู้เริ่มต้น AI และ Deep Learningมากๆเลยค่ะ เพราะทั้งสะดวกและไม่ซับซ้อนด้วย
ตัวอย่างCODE
import cv2
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # แปลงภาพเป็นขาวดำ
faces = face_cascade.detectMultiScale(gray, 1.1, 4)
for (x, y, w, h) in faces:
cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)
cv2.imshow('Face Detection', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
🔍 โค้ดนี้เราใช้ทำอะไร ทำงานอย่างไร?
อันดับแรกนะคะโปรแกรมจะใช้กล้องเว็บแคมเพื่อจับภาพ
จากนั้นจึงตรวจสอบว่ามี “หน้า” ปรากฏอยู่หรือไม่
และสุดท้ายถ้ามีหน้าก็วาดกรอบสีเขียวรอบใบหน้าแบบเรียลไทม์นั่นเองค่ะ
ตัวอย่างภาพ
โค้ดนี้คือการใช้ OpenCV ตรวจจับใบหน้า (Face Detection) แบบเรียลไทม์จาก กล้องเว็บแคม โดยใช้ Haar Cascade Classifier
import cv2
นำเข้าไลบรารี OpenCV ซึ่งใช้ในการประมวลผลภาพและวิดีโอ
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
โหลดโมเดลสำหรับตรวจจับใบหน้าที่ชื่อว่า Haar Cascade Frontal Face
โมเดลนี้คือ .xml ไฟล์ที่ฝึกมาแล้วให้รู้ว่า "ใบหน้า" มีลักษณะอย่างไร
มันทำงานโดยการ สแกนภาพทีละกรอบเล็ก ๆ แล้วประเมินว่าเป็นหน้าคนไหม
cap = cv2.VideoCapture(0)
เปิดกล้องเว็บแคม (อุปกรณ์ที่ index = 0 คือกล้องหลักของเครื่อง)
while True:
ret, frame = cap.read()
เริ่มลูปไม่รู้จบ เพื่ออ่านวิดีโอทีละเฟรม
ret = ผลลัพธ์ว่าอ่านสำเร็จหรือไม่ (True/False)
frame = ภาพจากกล้องในขณะนั้น
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
แปลงภาพจากสี (BGR) เป็นขาวดำ (Grayscale)
→ เพื่อให้โมเดลทำงานเร็วขึ้น เพราะมันไม่ต้องประมวลผลสี
faces = face_cascade.detectMultiScale(gray, 1.1, 4)
ตรวจจับ "ใบหน้า" บนภาพ grayscale
1.1 = scale factor → ขยายภาพทีละนิด (ช่วยหาใบหน้าในหลายขนาด)
4 = minNeighbors → ยิ่งมากยิ่งลด false positive (ค่าแนะนำ 3-6)
ผลลัพธ์คือ ลิสต์ของกรอบใบหน้า ที่เจอในภาพ (x, y, w, h)
for (x, y, w, h) in faces:
cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)
วาดกรอบสีเขียว (RGB = (0, 255, 0)) รอบใบหน้าที่ตรวจเจอ
(x, y) คือมุมบนซ้ายของกรอบ
(x+w, y+h) คือมุมล่างขวาของกรอบ
2 คือความหนาของเส้น
cv2.imshow('Face Detection', frame)
แสดงผลวิดีโอที่วาดกรอบใบหน้าแล้ว ผ่านหน้าต่างชื่อว่า Face Detection
if cv2.waitKey(1) & 0xFF == ord('q'):
break
ถ้าผู้ใช้กดปุ่ม q จะ หยุดการทำงานของลูป
waitKey(1) = รอ 1 มิลลิวินาทีต่อเฟรมเพื่อดูว่ามี key ถูกกดไหม
ord('q') = เช็คว่าเป็นตัว q รึเปล่า
cap.release()
cv2.destroyAllWindows()
หลังจบการทำงาน:
cap.release() ปิดการเชื่อมต่อกับกล้อง
cv2.destroyAllWindows() ปิดหน้าต่างที่เปิดโดย OpenCV
นี่เป็นพื้นฐานของการตรวจจับใบหน้าง่ายๆค่ะ นอกจากนี้เราสามารถนำพื้นฐานเหล่านี้ไปประยุกต์ได้หลากหลาย เช่นการตรวจจับอารมณ์หรือรอยยิ้ม ก็ทำได้อย่างง่าย เพียงแค่เพิ่มโค้ด
# วาดกรอบใบหน้า
cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)
# ตรวจจับรอยยิ้ม
smiles = smile_cascade.detectMultiScale(roi_gray, scaleFactor=1.7, minNeighbors=20)
for (sx, sy, sw, sh) in smiles:
cv2.putText(frame, "Smile 😊", (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (255, 200, 0), 2)
break
แต่ว่าทุกคนต้องติดตั้งเวอร์ชัน Advanced (Face + Smile + Age/Gender + Emotion) สำหรับ0penCVกันก่อนนะคะ !
pip install opencv-python opencv-contrib-python deepface
ตัวอย่างการใช้งานจริง
สถานการณ์ตัวอย่าง:
นำไปใช้ในระบบความปลอดภัย เช่น กล้องวงจรปิด
สร้างระบบเช็คชื่อด้วยใบหน้าในห้องเรียน
ใช้ตรวจจับใบหน้าในแอปพลิเคชันเพื่อทำ Face Filter หรือวัดอารมณ์
หวังว่าทุกคนจะได้รับความรู้และประสบการณ์ที่ดีจากบทความนี้นะคะ หวังว่าแนวทางแนะนำการใช้ OpenCV และ Haar Cascade เพื่อทำ Face Detection แบบเรียลไทม์ ด้วยโค้ดเพียงไม่กี่บรรทัด จะเป็นจุดเริ่มต้นสู่การพัฒนาแอปพลิเคชันด้าน AI และ Computer Vision ที่นำไปใช้งานจริงได้หลากหลายให้กับทุกๆคน และสุดท้ายนี้เราสามารถเพิ่มลูกเล่นเช่น ตรวจจับรอยยิ้ม, ดวงตา หรือแม้แต่ใส่ filter แบบ IG ก็ได้นะ ถ้าทุกคนอยาก level up ต่อไป 🤖✨
References
OpenCV Website : OpenCV
Haar Cascade XML Classifiers : github
(ชุดโมเดลสำหรับตรวจจับใบหน้า รอยยิ้ม ดวงตา และยังมีโมเดลตัวอื่นๆให้ลองศึกษาและใช้ฟรีด้วยนะ)