ผมได้มีโอกาสพัฒนา 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()