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ả

"Đi học dzìa": Phần 2 - Sử dụng PIR để kiểm tra người về nhà

Đây là phần 2 của tutorial "Đi học dzìa" giúp các bạn làm quen với Pizero và Python. Hôm qua có bạn hỏi tui: "Nếu hem có wifi, dùng 3G hoặc là đạo chích KID 1412 thì sao?" Với các ca khó đỡ này thì ta sẽ dùng cảm biến hồng ngoại PIR nha.

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

(Phòng chống) Nghệ thuật hắc ám với ESP8266 - Phần 4: Thủ khoa đại học có khó?

Trong bài đầu tiên tui đã hướng dẫn các bạn hack kỳ thi quốc gia với module ESP8266. Dĩ nhiên là không ai cho các bạn cầm theo điện thoại vào phòng thi để mà các bạn mở lên tìm beacon đáp án. Tuy nhiên không ai cấm các bạn mang máy tính casio vào phòng thi cả. Bài này tui sẽ hướng dẫn các bạn gắn wifi vào chiếc máy tính casio huyền thoại để nhận phao thi từ bất kỳ nơi nào trên thế giới. Lưu ý là các bạn nên chế cháo có trách nhiệm, chớ nên kinh doanh buôn bán thành quả nếu các bạn không muốn cục tình báo C2 gõ cửa hỏi thăm. 

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