Raspberry Pi Thiên Lý Nhãn (Phần 3): Khóa thông minh nhận dạng khuôn mặt với Raspberry Pi và OpenCV

Mô tả dự án: 

Trong bài trước tui đã giới thiệu về việc nhận diện khuôn mặt với Raspberry Pi và webcam. Tuy nhiên bài chỉ dừng lại ở việc Raspberry Pi có thể nhận diện được khuôn mặt của bất kỳ ai đứng trước webcam mà thôi. Bài toán đặt ra là làm thế nào để Raspberry Pi nhận được khuôn mặt của chính bạn? Đây là một bài toán khó và thú vị. Khó là vì chúng ta cần thuật toán và khả năng xử lí hình ảnh mạnh. Thú vị là do ta có thể "chế cháo" kết hợp với các hệ thống bảo mật khác như vân tay, mật khẩu để tăng tính an ninh cho đề án của bạn. Vì độ phức tạp của đề án này nên tui sẽ chia ra làm 2 phần.

  • Phần đầu tiên là "phần mềm": chúng ta sẽ ghi lại khoảng 200 tấm hình webcam với khuôn mặt của bạn và huấn luyện máy tính với thuật toán chính diện (eigenfaces) của OpenCV. Do tài nguyên của Pi hạn hẹp nên bạn cần chạy phần này trên máy tính của mình. 
  • Phần tiếp theo là "phần cứng": ta nối Pi với relay và cho webcam chụp ảnh. Nếu Pi nhận diện được chính khuôn mặt của bạn thì sẽ kích relay.

Lưu ý là các bạn phải tải OpenCV về trên cả Pi và máy tính. Các bạn vào đây để download code và các tập tin cần thiết nữa: https://github.com/johnkimdinh/Facial-recognition-Raspberry-Pi-OpenCV

Chuẩn bị Webcam

Đầu tiên ta phải dò xem OpenCV và máy tính của bạn giao tiếp qua webcam ID nào. Các bạn cắm webcam và chạy python multiple_camera.py. Nếu webcam hiện lên thì ok. Bấm phím q để thoát. Nếu báo lỗi thì thay webcamID bằng 0,1,2 etc để tìm được ID. Thông thường thì ID mặc định sẽ là 0 nếu dùng webcam có sẵn trên laptop và 1 nếu dùng USB webcam. Nếu bạn lười thì chỉnh thành -1 để chọn camera đầu tiên máy nhận được.

Các bạn cũng có thể dùng module này để chỉnh sửa vị trí của webcam làm sao cho khuôn mặt bạn nằm gọn trong khung hình.

Sau đó các bạn mở tập tin python config.py và sửa lại webcamID vừa tìm được.

Thu thập dữ liệu

Các bạn giải nén tập tin training.zip rồi chạy capture-positives.py. Webcam sẽ liên tục chụp lại hình của bạn và thông báo xem có nhận được khuôn mặt của các bạn hay không. Nếu báo "NO FACE DETECTED!" thì các bạn di chuyển mặt mình 1 chút để thay đổi góc chụp. 

Nếu bạn muốn xem trước khi camera chụp hình thi uncomment 3 dòng sau trong capture_positives.py. Webcam sẽ hiện lên khung hình để bạn chỉnh sửa tư thế ngồi. Bạn sau đó phải bấm 1 phím bất kỳ để webcam chụp lại hình.

Chương trình sẽ tự động dừng lại khi webcam đã thu thập được 200 tấm. Bạn có thế chỉnh sửa thông số này với MAX_NUMBER_OF_IMAGES trong tập tin config.py

Các tấm ảnh chụp xong sẽ được lưu vào tập tin \training\positive. Bạn có thế chạy chương trình này nhiều lần với các điều kiện ánh sáng, trang phục mũ nón tóc tai khác nhau để tăng thêm tính chính xác. Tuy nhiên hình càng nhiều thì thời gian training càng lâu. 

Tập tin \training\negative chứa 400 khuôn mặt của 40 người khác nhau dùng để train cho thuật toán. Các bạn có thể đọc thêm ở đây.

Training

Các bạn chạy module python train.py và chờ khoảng 5-10 phút tùy số lượng hình bạn thu thập được. Python sẽ so sánh từng hình trong thư mục \training\positive với các khuôn mặt định sẵn trong thư mục \training\negative và xuất ra các thông số cần thiết:

mean: đây là khuôn mặt trung bình của tui sau 200 tấm hình cool
positive: Đây là điểm khác nhau giữa khuôn mặt của tui với 400 tấm hình mẫu. Nếu webcam chụp được hình nào gần giống với tấm này thì sẽ cho kết quả dương tính và mở chìa.
negative: Đây là điểm giống nhau giữa khuôn mặt tui với 400 hình mẫu. Nếu webcam chụp được hình nào gần giống với tấm này thì cho kết quả âm tính và không cho mở chìa.

Ngoài ra OpenCV còn xuất ra 1 tập dữ liệu khá lớn tên training.xml (~175MB cho 200 tấm hình training). Tập dữ liệu này chứa kết quả training mà Raspberry Pi sẽ dùng để đoán khuôn mặt của bạn. 

Căn chỉnh

Để xem chương trình hiệu quả đến mức nào, ta chạy tập tin python box.py 

Tui chạy 2 lần và python cho ra 2 kết quả như sau:

Lần đầu tiên python so sánh hình webcam chụp giống với tui (POSITIVE) nhưng không đủ tự tin (confidence > 2000) => không nhận diện khuôn mặt

Lần thứ 2 python nhận ra hình webcam chụp giống với tui (POSITIVE) và với mức tự tin dưới ngưỡng (confidence < 2000) => nhận diện khuôn mặt.

Với logic này thì các bạn có thể có thể suy ra cho trường hợp NEGATIVE ha!

Các bạn có thể chỉnh ngưỡng này trong tập tin config.py:

Lưu ý: nếu code box.py báo lỗi thi có nghĩa là webcam không chụp được mặt của bạn để so sánh. Bạn chỉnh lại sao cho mặt mình nằm trọn trong khung hình với tập tin python multiple_camera.py. Chúc các bạn thành công!

Mời các bạn đọc bài kế tiếp để tạo dự án hoàn chỉnh đầy đủ phần mềm và phần cứng. 

lên
3 thành viên đã đánh giá bài viết này hữu ích.
Từ khóa: 
Các dự án được truyền cảm hứng

Bộ điều khiển PID - ứng dụng phần 2 - xe dò line dùng thuật toán PID

Tiép nối bài viết về xe dò line cảm ơn Đỗ Hữu Toàn đã viết hộ mình phần 4. hôm nay mình sẽ làm cho chiếc xe dò line đi mượt và có hồn hơn 

lên
34 thành viên đã đánh giá bài viết này hữu ích.
Các bài viết cùng tác giả

(Phòng chống) Nghệ thuật hắc ám với ESP8266 - Phần 5: Bầu ơi thương lấy Bí cùng với ESP32

Bài trước tui đã hướng dẫn các bạn hô biến chiếc Casio huyền thoại thành thiết bị nhận phao wifi từ xa để thủ khoa đại học. Thể theo truyền thống "Bầu ơi thương lấy Bí cùng" của người Việt Nam chúng ta, các bạn sau khi chắc chắn 100% thủ khoa thì cũng nên ra tay nghĩa hiệp giúp đỡ các đồng môn trong thi trường hoàn thành bài thi đại học. Vì vậy, trong bài này, tui sẽ hướng dẫn các bạn làm một bộ đàm Casio để liên lạc thả thính trong phòng thi. Lưu ý là các bạn nên chế cháo cẩn thận, chớ nên buôn bán thiết bị nếu không muốn bị Công An gõ cửa hỏi thăm.

lên
20 thành viên đã đánh giá bài viết này hữu ích.
Từ khóa: 

Thâm cung bí sử Raspberry Pi - Quá trình hình thành Raspberry Pi

Đây là một bài đọc tìm hiểu thêm vài điều bất ngờ về Raspberry Pi mà bạn có thể chửa biết.

lên
16 thành viên đã đánh giá bài viết này hữu ích.
Từ khóa: