Một tuần mới tươi đẹp với tất cả các mem MÌ AI nhé! Hôm nay chúng ta sẽ làm bài toàn Thử làm model “chị Thanh Tâm” dự đoán tâm trạng và xoa dịu người dùng.
Trong bài này mình sẽ xây dựng một model có thể nhìn ảnh và đoán được tâm trạng của người dùng như thế nào. Nếu người dùng đang tức giận, “chị Thanh Tâm” sẽ khuyên bảo “Bình tĩnh nhé bạn, tức giận sẽ mệt mỏi lắm đó”, còn nếu người dùng đang vui, “chị Thanh Tâm” sẽ phát ra âm thanh “Chúc mừng bạn, hãy tiếp tục duy trì niềm vui nhé”!
Rồi, bắt tay vào làm ngay thôi các bạn nhé!
Phần 1. Chuẩn bị nguyên vật liệu
Chúng ta hãy tạo một thư mục MiAI_Emotion_Detection để lưu các dữ liệu, mã nguồn của bài nhé. Sau khi tạo xong, các bạn chuyển vào trong thư mục đó và gõ lệnh sau để lấy mã nguồn về nhé:
git clone https://github.com/thangnch/MiAI_Emotion_Detection .
Đợi một chút các bạn sẽ thấy các file mã nguồn bay ngay về máy. Bây giờ, chúng ta tiến hành tải dữ liệu train về máy.
Trước hết, các bạn tạo thư mục data nằm trong thư mục MiAI_Emotion_Detection để chứa data đã nhé.
Bộ dữ liệu chúng ta sử dụng là bộ FER 2013 trên Kaggle nhé, các bạn tải về tại đây. Để hiểu rõ hơn về dữ liệu các bạn đọc link sau: https://www.kaggle.com/c/challenges-in-representation-learning-facial-expression-recognition-challenge/data.
Sau khi tải xong chúng ta sẽ có 1 file fer2013.tar.gz, các bạn giải nén ra và copy 3 file trong đó vào thư mục data (chú ý là chỉ copy file, ko copy các thư mục nếu có nhé).
Rồi bây giờ bước cuối cùng các bạn cài đặt các thư viện cần thiết cho bài này bằng lệnh quen thuộc:
pip install -r setup.txt
Chú ý khi chạy các bạn phải đứng ở thư mục MiAI_Emotion_Detection, ngoài ra, do các thư viện được cập nhật liên tục nên có thể lúc các bạn triển khai sẽ có lỗi đôi chút. Vướng mắc gì các bạn cứ post lên group Mì Ai để cùng trao đổi nhé, link Group trao đổi, chia sẻ: https://www.facebook.com/groups/miaigroup .
Công cuộc chuẩn bị đã xong, ale hấp sang bước sau nào.
Phần 2. Tư tưởng thuật toán của bài toán dự đoán tâm trạng
Trong bài này các bạn sẽ làm quen với mạng CNN, một mạng thần thánh trong lĩnh vực Computer Vision, xử lý ảnh. Chúng ta sẽ triển khai bài này như sau:
- Train:
- Đọc dữ liệu các hình ảnh từ trong dataset và đưa vào mạng CNN để train với các đầu ra là 7 class: angry (tức giận), disgust (ghê sợ), fear (sợ hãi), happy (hạnh phúc), sad (buồn bã), surprise(ngạc nhiên) và neutral (trung tính)
- Save file train lại thành file model.h5
- Test:
- Với một ảnh đầu vào chúng ta cũng chuẩn hóa, đưa vào mạng CNN.
- Nhận đầu ra là 1 trong 7 class nói trên và hiển thị lên màn hình.
Phần 3. Mã nguồn chương trình dự đoán tâm trạng
Bây giờ các bạn cần chú ý đến các file sau đây trong thư mục mã nguồn:
- train_model.py sẽ dùng để train model dự đoán tâm trạng, file này đại khái sẽ làm bước Train ở Phần 2.
- emotion_detection.py thực hiện nhận đầu vào là một file ảnh và dự đoán tâm trạng của người trong ảnh.
- emotion_detection_webcam.py: đọc ảnh từ webcam của máy tinh và cũng hiển thị tâm trạng người trong webcam kèm theo lời “tư vấn nhẹ nhàng” của “chị Thanh tâm” nhá (Ai FA thì dùng tạm nha kaka).
Mình đã comment kỹ từng dòng trong mã nguồn, các bạn chịu khó đọc phần comment nhé.
Phần 4. Thực hiện train và test model
Bây giờ các bạn thực hiện chạy lệnh sau để train model:
python train_model.py
Do model này xử lý hình ảnh nên sẽ hơi lâu một chút, các bạn đi pha trà hay cà phê uống cho đỡ sốt ruột nhé. Đến khi nào model hiển thị lên màn hình chữ “Model trained” thì là việc train đã xong.
Để kiểm tra model nhận diện trên một ảnh, các bạn chạy lệnh
python emotion_detection.py test.png
Các bạn sẽ thấy tâm trạng của human mà máy dự đoán sẽ in ra màn hình, ví dụ:
Emotion predict= angry
Còn nếu các bạn muốn gặp “chị Thanh Tâm” với giọng tư vấn ngọt ngào hãy chạy lệnh
python emotion_detection_webcam.py
Sau đó các bạn hãy bày tỏ tâm trạng trên webcam để xem chị tư vấn như thế nào nhé. Nếu mọi việc okie thì các bạn sẽ thấy kết quả như sau:
Bài này mình chỉ làm sample 1 câu động viên khi happy thôi nhé, tương tự các bạn sẽ làm với các emotion khác được thôi.
Rồi, như vậy chúng ta đã hoàn thành bài toán Thử làm model “chị Thanh Tâm” dự đoán tâm trạng và xoa dịu người dùng bằng mạng CNN.
Hẹn gặp lại các bạn trong các bài tiếp theo nhé! Nếu trong quá trình triển khai có khó khăn gì các bạn hãy post lên group Mì AI nhé,link Group trao đổi, chia sẻ: https://www.facebook.com/groups/miaigroup .
Hãy tham gia cộng đồng Mì AI để cập nhật các kiến thức mới nhất!
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
Nguồn: https://github.com/serengil/tensorflow-101/blob/master/python/facial-expression-recognition.py
Dự đoán có vẻ không chính xác lắm phải không ạ? Sao em làm thế nào cũng ra happy hết ạ :((
Phải tối ưu nhiều nữa em ah. Cần thêm gì em lên Group trao đổi, chia sẻ: https://facebook.com/groups/miaigroup nhé!