สวัสดีค่ะ !
บทความนี้เราจะพาไปรู้จักกับการใช้ 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()

🔍 โค้ดนี้เราใช้ทำอะไร ทำงานอย่างไร?

อันดับแรกนะคะโปรแกรมจะใช้กล้องเว็บแคมเพื่อจับภาพ

จากนั้นจึงตรวจสอบว่ามี “หน้า” ปรากฏอยู่หรือไม่

และสุดท้ายถ้ามีหน้าก็วาดกรอบสีเขียวรอบใบหน้าแบบเรียลไทม์นั่นเองค่ะ

ตัวอย่างภาพ

Image description

โค้ดนี้คือการใช้ 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 หรือวัดอารมณ์

Image description

หวังว่าทุกคนจะได้รับความรู้และประสบการณ์ที่ดีจากบทความนี้นะคะ หวังว่าแนวทางแนะนำการใช้ OpenCV และ Haar Cascade เพื่อทำ Face Detection แบบเรียลไทม์ ด้วยโค้ดเพียงไม่กี่บรรทัด จะเป็นจุดเริ่มต้นสู่การพัฒนาแอปพลิเคชันด้าน AI และ Computer Vision ที่นำไปใช้งานจริงได้หลากหลายให้กับทุกๆคน และสุดท้ายนี้เราสามารถเพิ่มลูกเล่นเช่น ตรวจจับรอยยิ้ม, ดวงตา หรือแม้แต่ใส่ filter แบบ IG ก็ได้นะ ถ้าทุกคนอยาก level up ต่อไป 🤖✨

References

OpenCV Website : OpenCV
Haar Cascade XML Classifiers : github
(ชุดโมเดลสำหรับตรวจจับใบหน้า รอยยิ้ม ดวงตา และยังมีโมเดลตัวอื่นๆให้ลองศึกษาและใช้ฟรีด้วยนะ)