Chào mừng toàn thể anh em Mì Ai. Hôm nay chúng ta sẽ cùng nhau sử dụng OpenCV để “truy tìm” các nụ cười trong ảnh nhé (smile detection).
Trước tiên, trên thềm năm cũ sắp qua, năm mới sắp đến, thay mặt Mì AI Blog xin cảm ơn sự ủng hộ nhiệt tình của anh em trong năm vừa qua và chúc cho anh em Mì AI sang một năm mới hạnh phúc, thành công và an khang thịnh vượng.
Trong những ngày Tết, ngày du xuân thì có một điều chắc chắn là anh em sẽ chụp rất nhiều ảnh. Giả sử giờ anh em được đặt một nhiệm vụ là chỉ giữ lại các ảnh có nụ cười thật tươi còn lại là xóa hết cho dỡ nặng máy 😀 (giả sử thôi), anh em sẽ làm như nào? Vài nghìn ảnh mà ngồi duyệt tay thì mỏi lắm nên phải Mì AI thôi.
Chúng ta sẽ cùng nhau xây dựng một chương trình nhận diện nụ cười trong ảnh một cách vui vẻ đầu xuân. Anh em có thể áp dụng tìm nụ cười vào các việc riêng của mình như:
- Lọc ảnh, chỉ giữ lại ảnh có nụ cười chẳng hạn
- Hoặc lập trình phần mềm chụp ảnh tự động, khi nào tất cả các khuôn mặt trong ảnh đều cười thì máy sẽ tự chụp. Thế là chụp ảnh khỏi lo bạn mếu, bạn tươi 😀
- ….
Rồi, bắt đầu nhé! Hôm nay Tết nhất rồi nên mình làm một bài toán vui vẻ, nhẹ nhàng thôi 😀
Tải mã nguồn
Các bạn clone mã nguồn từ git của mình về cho tiện nha:
git clone https://github.com/thangnch/MiAI_Smile_Detection .
Sau khi tải xong, các bạn cài đặt các thư viện cần thiết bằng lệnh
pip install -r setup.txt
Đợi một chút là xong, sang bước tiếp theo.
Hiểu mã nguồn
Đại khái bài này mình sẽ sử dụng HaarCascade để detect face, detect eye và detect nụ cười từ ảnh đầu vào là webcam.
def load_model():
cascade_face = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
cascade_eye = cv2.CascadeClassifier('haarcascade_eye.xml')
cascade_smile = cv2.CascadeClassifier('haarcascade_smile.xml')
return cascade_face, cascade_eye,cascade_smile
Sau đó, nếu như phát hiện được nụ cười thì mình sẽ vẽ thêm tý hiệu ứng mặt cười vào miệng, 2 mắt và hiển thị HAPPY NEW YEAR cho vui vui.
# Detect cac smile trong ROI
smile_lst = smile_detect.detectMultiScale(ri_grayscale, 1.7, 35)
smiled = False
for (x_smile, y_smile, w_smile, h_smile) in smile_lst:
# Ve mat cuoi
draw_smile(ri_color, (x_smile + w_smile // 2, y_smile + h_smile // 4), radius=w_smile // 3)
smiled = True
# Neu co smile thi
if smiled:
eye = eye_detect.detectMultiScale(ri_grayscale, 1.3, 9)
for (x_eye, y_eye, w_eye, h_eye) in eye:
draw_eye(ri_color,(x_eye+w_eye//2, y_eye+h_eye//2),radius=w_eye//3)
cv2.putText(img,"HAPPY NEW YEAR!!",(100,100),cv2.FONT_HERSHEY_SIMPLEX,1.5,(0,0,255),5)
Cũng khá đơn giản nhưng rất hiệu quả và do dùng OpenCV nên khá nhẹ nhàng, có thể chạy trên Pi và các thiết bị nhúng khác.
Chạy chương trình tìm nụ cười
Các bạn chạy file smile.py và đưa mặt vào webcam rồi cười một chút nhá 😀
Như vậy, mình đã guide các bạn cách phát hiện nụ cười trong ảnh. Tết này hãy cười thật nhiều nhé anh em Mì AI.
Đây sẽ là bài viết cuối cùng trong năm Hợi, chào năm Canh Tý chúc anh em thành công và thành công hơn nữa. Hẹn gặp lại!
Hãy join cùng cộng đồng Mì AI nhé!
Fanpage: http://facebook.com/miaiblog
Group trao đổi, chia sẻ: https://www.facebook.com/groups/miaigroup
Website: https://miai.vn
Youtube: http://bit.ly/miaiyoutube
Cảm ơn bài viết tham khảo cực hay của tác giá Rohan Gupta
tại đây.