Emotion Detection Version 1.0 (Beta)

ภาพการแสดงผลของ OpenCV (Computer Vision) ภายใต้การทำงานของ Emotion Detection ซึ่งแสดงผลว่า Normal เมื่อใบอยู่ในรูปทรงที่เป็นปกติ

ผมได้มีโอกาสพัฒนา 1 Day Project สั้น ๆ ในช่วงเวลาก่อนขึ้นปีใหม่โดยผมได้ศึกษาเทคโนโลยีที่ผมให้ความสนใจมากที่สุด หรือเทคโนโลยี Computer Vision โดยทำเป็น ระบบตรวจจับความรู้สึก โดยใช้ลักษณะของใบหน้ามาเป็นตัวแปรในการแปรผล ผ่านกลไกลการทำงานของระบบ OpenCV และส่วนเสริมต่าง ๆ ซึ่งผลลัพธ์ประสบความสำเร็จเป็นอย่างดี โดยผมได้มีการเก็บข้อมูลความแม่นยำในการทำงาน และแปรผลออกมาเป็นสถิติโดยมีความแม่นยำอยู่ที่ 85% ของการทำงานใน 1 นาที และพบว่าปัจจัยที่ทำให้ผลลัพธ์เพี้ยน หรือการทำงานผิดพลาดเกิดจากแสงไฟ และรูปทรงใบหน้า โดยทดสอบจากการสลับใบหน้าไปเรื่อย ๆ ซึ่งจะให้ผลลัพธ์ และความแม่นยำที่แตกต่างกันจนสังเกตได้

ทั้งนี้ผมยังจะต้องพัฒนา Emotion Detection ต่อไปเรื่อย ๆ จนกว่าระบบจะสเถียรเพื่อนำความรู้ และประสบการณ์จากจุดเริ่มต้น ไปพัฒนาโครงการต่อไปที่ผมอยากจะทำต่อในอนาคตเช่น ระบบตรวจจับการเกิดอุบัติเหตุ , ระบบตรวจจับสัญญาณมือขอความช่วยเหลือ และระบบตรวจจับความถูกต้องของอาหาร หรือ Food QC เพื่อให้เกิดประโยชน์ต่อทั้งตนเอง และประเทศชาติสืบต่อไปในอนาคต


Code <>

import cv2
import time

# Function to detect smile and display corresponding text
def detect_and_display_emotion(frame, face_cascade, smile_cascade, start_time):
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    faces = face_cascade.detectMultiScale(gray, scaleFactor=1.3, minNeighbors=5, minSize=(30, 30))

    # บรรทัดนี้สำหรับโปรแกรมตรวจพบหน้าปกติ หรือไม่พบหน้ายิ้ม
    emotion = "Normal"

    for (x, y, w, h) in faces:
        cv2.rectangle(frame, (x, y), (x+w, y+h), (255, 0, 0), 2)
        roi_gray = gray[y:y+h, x:x+w]
        smiles = smile_cascade.detectMultiScale(roi_gray, scaleFactor=1.8, minNeighbors=20, minSize=(25, 25))

        # ตรวจสอบว่าพบรอยยิ้ม
        if len(smiles) > 0:
            emotion = "Smile"

    # แสดงผลข้อความ
    text = emotion
    font = cv2.FONT_HERSHEY_SIMPLEX
    font_size = 2
    font_thickness = 3
    text_size = cv2.getTextSize(text, font, font_size, font_thickness)[0]
    text_x = (frame.shape[1] - text_size[0]) // 2
    text_y = (frame.shape[0] + text_size[1]) // 2
    cv2.putText(frame, text, (text_x, text_y), font, font_size, (0, 255, 0), font_thickness, cv2.LINE_AA)

# โหลด XML ข้อมูลมาใช้
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
smile_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_smile.xml')

# Open camera
cap = cv2.VideoCapture(0)

# Record the start time
start_time = time.time()

while True:
    ret, frame = cap.read()

    detect_and_display_emotion(frame, face_cascade, smile_cascade, start_time)

    cv2.imshow('Emotion Detection', frame)

    # Check if 'q' is pressed to exit กด q เพื่อปิดหน้าต่าง หากปิดไม่ได้อาจเป็นที่ Spec คอม
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# Release the camera and close all windows ปิดหน้าต่างทันที
cap.release()
cv2.destroyAllWindows()

Facebook
Twitter

คอนเท้นต์ที่คุณน่าจะสนใจ

Scroll to Top