Xây dựng hệ thống nhận diện thủ ngữ – ngôn ngữ ký hiệu tay – để giao tiếp với người khuyết tật

Vui vẻ chào các anh em thích ăn Mì AI, một tuần mới lại đến với vô vàn hứng khởi. Hôm nay chúng ta sẽ cùng nhau đi thêm 1 bài nữa trong Computer Vision là xây dựng hệ thống nhận diện thủ ngữ – ngôn ngữ ký hiệu tay – để giao tiếp với người khuyết tật.

Bài này sẽ áp dụng các công nghệ như: CNN, transfer learning dùng mạng VGG16 nổi tiếng, kỹ thuật xóa nền tách đối tượng…

Bài toán của chúng ta là sẽ xây dựng một hệ thống nhận dạng bàn tay để đoán ra các ký tự mà người khuyết tật muốn nói. Ví dụ trong bài này mình sẽ làm với 5 kí tự sample là: V, L,E,F và B trong bảng thủ ngữ sau:

nhận diện thủ ngữ
Nguồn: DoiSongTrai.net

Phần 1. Chuẩn bị nguyên vật liệu nào

Chúng ta tạo một thư mục MiAI_Hand_Lang để lưu lại các thứ của bài này nhé. Sau khi tạo xong thư mục này, các bạn chuyển vào trong thư mục và gõ lệnh

git clone https://github.com/thangnch/MiAI_Hand_Lang .

Đợi một chút để dữ liệu tải về cho tới khi done nhé. Các bạn tạo thêm các thư mục sau:

  • Thư mục data – chứa ảnh để train
  • Thư mục models – chứa các model sau khi train nhé.

Các bạn tải dữ liệu tại đây và giải nén toàn bộ ảnh bên trong vào thư mục data nhé (chú ý chỉ lấy file ảnh, ko lấy thư mục nếu có nhé)

Sau khi tải xong các bạn tiến hành cài đặt các thư viện cần thiết bằng lệnh

pip install -r setup.txt

Sau đó ngồi uống trà để đợi cho các thư viện cài đặt xong nhé. Khi nào cài xong thì các bạn có thể đi sang phần tiếp theo.

Phần 2. Tư tưởng thuật toán nhận diện thủ ngữ

Bài toán này mình sẽ làm theo các bước như sau nhé:

  1. Train:
    • Ta chuẩn bị sẵn các ảnh đầu vào là các ảnh bàn tay đang thực hiện các ký tự nói trên và lưu trong thư mục Data. Các ảnh được gán nhãn đầy đủ bằng tên file.
    • Ta thực hiện chuyển các ảnh đó về size 224 x224 và đưa qua mạng VGG16 đã được thêm 1 vài layer Dense (Fully Connect) và cuối cùng là 1 lớp softmax để dự đoán kết quả đầu ra.
    • Ta thực hiện train mạng của chúng ta với khoảng hơn 2000 ảnh train và gần 300 ảnh test.
  2. Chạy thử:
    • Ta thực hiện mở Webcam và khoanh 1 vùng sẽ phát hiện bàn tay ở trong vùng đó. Gọi là detection region.
    • Người dùng bỏ tay ra khỏi vùng detection region và nhấn phím B để máy thu nhận nền của vùng. Nếu muốn thu nhận lại nền, người dùng bấm phím R.
    • Người dùng đưa tay vào trong vùng detection (sau khi đã capture nền) và tạo thành các hình ký tự.
    • Model sẽ hiển thị ký tự ra màn hình.
    • Người dùng bấm Q để thoát.

Phần 3. Tiến hành viết code

Để có thể hiểu được các bước trên, các bạn hãy đọc kỹ code của mình trong 2 file train_model.py và detection.py nhé. Mình đã comment từng dòng rồi nhé.

nhận diện thủ ngữ

Nếu bạn có khó khăn gì hoặc cần chỉnh sửa, cải tiến gì mà bị vướng, các bạn cứ post bài trên group Mì AI tại đây nhé Group trao đổi, chia sẻ: https://www.facebook.com/groups/miaigroup 

Phần 4. Tiến hành train model

Chúng ta đã có ảnh input, chúng ta đã có 2 file code train_model.py và detection.py. Bây giờ các bạn chạy lệnh sau để train model:

python train_model.py

Mình đang để train tầm 50 epoch nhé các bạn (vì train đến đó thấy accury tốt lắm rồi), các bạn có thể tăng giảm để trải nghiệm xem model sẽ khác nhau như thế nào nhé.

nhận diện thủ ngữ

Sau khi train xong, trong thư mục models sẽ xuất hiện file mymodel.h5 chính là file saved model của các bạn nhé.

Phần 5. Phần hay nhất, thử nghiệm model nhận diện thủ ngữ

Train đã xong, cũng khá tốn thời gian nếu máy các bạn không có GPU nhưng đợi chờ là hạnh phúc. Bạn nào ngại train thì lấy luôn model sẵn có của mình nhé (tải tại đây) và copy vào thư mục models là xong nhé.

Bây giờ chúng ta tiến hành kiểm thử model nào. Chạy lệnh sau nhé:

python detection.py

Nếu mọi thứ okie thì 1 cửa sổ webcam sẽ hiện ra. Các bạn làm như sau nhé:

  • Né đầu ra khỏi vùng khung hình xanh, làm sao khung hình trống, và không có vật gì chuyển động trong đó.
  • Nhấn phím B để thu nhận nền.
  • Sau đó đưa tay vào trong khu vực khung hình xanh và tạo các ký tự nhé. Máy sẽ hiển thị ký tự lên màn hình.
  • Nhấn Q để thoát hoặc R để lấy lại nền (nếu kết quả nhận ko chính xác)

Video minh họa:

Chú ý: Các bạn nên dùng camera tốt 1 chút để hạn chế nhiễu, ngoài ra nên thực hành tại môi trường đủ ánh sáng để có kết quả tốt nhất nhé!

Rồi, như vậy các bạn đã hoàn thành bài nhận diện thủ ngữ – ngôn ngữ ký hiệu để có thể hiểu được người khuyết tật (câm điếc) giao tiếp rồi. Nếu trong quá trình triển khai có vướng gì các bạn cứ post bài trên group Mì AI tại đây nhé Group trao đổi, chia sẻ: https://www.facebook.com/groups/miaigroup 

Chúc các bạn thành công!

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 tham khảo: https://github.com/athena15/project_kojak

Related Post

10 Replies to “Xây dựng hệ thống nhận diện thủ ngữ – ngôn ngữ ký hiệu tay – để giao tiếp với người khuyết tật”

  1. anh ơi, anh có thể chia sẻ thêm về bài toán extract thông tin từ CMND được không ạ? Em cảm ơn

  2. anh ơi tại sao lại dùng mạng VGG16 vậy a, em khảo sát trong các mang CNN nổi tiengs, VGG16 đã cũ ,nặng… ko pit có ưu điểm j mà anh chọn nó làm tiền xử lý ạ

  3. anh ơi lúc em train nó báo lỗi này thì xử lý như nào ạ
    ImportError: cannot import name ‘VGG16’ from ‘keras.applications’

Leave a Reply

Your email address will not be published. Required fields are marked *