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

Select any filter and click on Apply to see results

Các bài viết cùng tác giả

Hướng dẫn làm LED trái tim RGB wifi

Hưởng ứng bài viết Cộng đồng Arduino Việt Nam trong cuộc Cách mạng Công nghiệp lần thứ IV, và cũng chuẩn bị cho lễ Valentine 14/2 sắp tới, Vechai tui hướng dẫn các bạn làm 1 dự án LED trái tim có thể điều chỉnh hiệu ứng điều khiển từ xa qua wifi.  

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

Áo yếm cho em - Cách làm hộp đựng (case) tiêu biểu cho con cưng Arduino

Con người còn có nhu cầu ăn diện, huống chi là "con cưng" arduino của bạn. Ngoài việc tăng tính chuyên nghiệp cho đề án của bạn, case còn là bộ giáp bảo vệ cho board mạch "mồ hôi xương máu" khỏi các tai nạn bất ngờ, đặc biệt là với việc vô tình làm đoản mạch với các dụng cụ kim loại vô tình rơi phải. Bài này tui sẽ hướng dẫn các bạn một số cách làm case tiêu biểu nha!

lên
16 thành viên đã đánh giá bài viết này hữu ích.