Chào mừng anh em quay lại với blog Mì Ai, hôm nay chúng ta sẽ cùng nhau đi tiếp mảng Computer Vision với phương pháp Chống giả mạo bằng ảnh/video trong nhận diện khuôn mặt – Face Anti spoofing.
Chúng ta đã đi qua 2 bài về nhận dạng khuôn mặt với các công cụ từ đơn giản Harrcascade tới phức tạp dùng MTCNN và Facenet tại đây:
- [Face Recognize] Thử làm hệ thống chấm công bằng nhận dạng khuôn mặt
- [Face Recog 2.0] Nhận diện khuôn mặt trong video bằng MTCNN và Facenet
Sau 2 bài đó, chúng ta đã có thể xây dựng được một hệ thống nhận diện khuôn mặt cũng gọi là khá ổn, có thể áp dụng vào thực tế. Tuy nhiên, có một vấn đề nảy sinh là người dùng có thể sử dụng ảnh/video để đưa vào camera nhận diện nhằm “lừa” hệ thống nhận diện của chúng ta. Do vậy hôm nay chúng ta sẽ tìm cách giải quyết vấn đề này.
Phần 1. Các phương thức nhận diện giả mạo bằng ảnh/video
Về vấn đề này, hiện theo hiểu biết của mình thì có nhiều phương pháp như: phát hiện chớp mắt, phát hiện chuyển động đầu, hướng dẫn khách hàng thực hiện một số thao tác ngẫu nhiên khi nhận dạng (nhằm tránh khách hàng quay video trước) và nhận diện ảnh thật/fake bằng CNN Classifier.
Trong bài này mình sẽ guide các bạn làm theo cách CNN Classifier nhé. Cách này có ưu điểm là: nhanh gọn, khách hàng đỡ phiền khi nhận dạng.
Phần 2. Chuẩn bị nguyên liệu
Như thường lệ, chúng ta lại tạo thư mục MiAI_Anti_Fake để lưu các nguyên vật liệu của bài này nhé. Sau khi tạo xong, các bạn chuyển vào thư mục đó và gõ lệnh git quen thuộc:
git clone https://github.com/thangnch/face_anti_spoofing .
Chú ý dấu chấm cuối lệnh nhé các bạn. Sau khi clone xong các bạn sẽ thấy các file của repo trong thư mục MiAI_Anti_Fake là okie.
Tiếp theo các bạn chuẩn bị giúp mình dữ liệu train. Với bài này, dữ liệu train gồm có:
Một video quay thực tế mặt của các bạn bằng webcam của máy tính như video bên dưới của mình. Quay khoảng 60 giây, trong lúc quay thì đầu quay trái, phải, lên xuống đủ các góc nhé. File này các bạn lưu thành file real.mp4 tại thư mục MiAI_Anti_Fake/videos.
Tiếp đó, các bạn gửi cái video vừa quay sang điện thoại di động, các bạn đưa điện thoại vào webcam, bật play file video và thực hiện quay lại mặt các bạn trong điện thoại như video bên dưới. File này các bạn lưu thành file fake.mp4 tại thư mục MiAI_Anti_Fake/videos.
Xong rồi, các bạn hãy chú ý làm sao để các video real.mp4 và fake.mp4 chỉ có 1 khuôn mặt duy nhất nhé. Ví dụ khi quay file fake.mp4 các bạn đừng để khuôn mặt thật của mình lọt vào khung hình, nếu có lọt vào thì các bạn hãy cắt bỏ đoạn ấy đi.
Phần 3. Tiền xử lý dữ liệu
Ở bước trước chúng ta đã có 2 file real.mp4 và fake.mp4 rồi. Sang bước này chúng ta sẽ tiền xử lý để làm 2 việc:
- Tách các video nói trên thành các frame
- Cắt khuôn mặt trong các frame và lưu vào 2 thư mục fake và real riêng để phục vụ công tác train.
Chúng ta tiến hành tiền xử lý file real.mp4 trước bằng lệnh sau:
python face_extract.py --input videos/real.mp4 --output dataset/real
Input là file video, output là thư mục sẽ lưu các khuôn mặt được cắt ra để train, ở đây là dataset/real (các bạn có thể kiểm tra thư mục xem có file chưa nhé).
Tiếp đến file fake.mp4, chúng ta cũng chạy lệnh tương tự thôi:
python face_extract.py --input videos/fake.mp4 --output dataset/fake
Rồi, vậy là xong bước tiền xử lý, chúng ta cùng sang bước sau nhé.
Phần 4. Train model Chống giả mạo
Mọi thứ đã xong, chúng ta đã có 2 thư mục fake và real chứa đầy khuôn mặt trong thư mục MiAI_Anti_Fake/dataset. Và bây giờ là train cho model của chúng ta hiểu đâu là fake, đâu là real thôi. Các bạn chạy lệnh sau:
python train_liveness.py
Rồi, bây giờ các bạn đi pha một ly cafe và thưởng thức đi, hơi “đầu lâu” đấy. Các bạn đợi đến khi nào trên màn hình hiển thị đoạn “INFO] serializing network to ….” là đã train thành công rồi đó. Để ý trong thư mục các bạn sẽ thấy xuất hiện 2 file mới: le.pickle (file nhãn) và liveness.model (file model).
Xong rồi, giờ đến lúc tận hưởng thành quả thôi nào. Chú ý, mình có để sẵn file model để các bạn có thể dùng thử, tuy nhiên mình nghĩ là nó không hiệu quả đâu vì khác nhau về môi trường, camera…
Phần 5. Kiểm thử model Chống giả mạo cái nào
Bây giờ cac bạn chạy file liveness_demo.py bằng lệnh sau:
python liveness_demo.py
Cửa sổ webcam sẽ hiện ra và các bạn có thể test thử nhé.
Chú ý:
- Bài này mình mới train với riêng khuôn mặt của mình để thử nghiệm, các bạn muốn chuẩn hơn thì train với tầm 10 khuôn mặt đủ các giới tính, tuổi tác, màu da khác nhau để model được general hơn nhé.
- Ngoài ra bài này mình chỉ train với video play trên điện thoại, các bạn nên train thêm với trường hợp in ảnh ra giấy nữa nhé. Cách làm cũng tương tự thôi.
Chúc các bạn thành công. Nếu có vướng mắc hay khó khăn gì khi triển khai, các bạn cứ post lên Group Mì Ai để cùng trao đổi, chia sẻ nhé – Group trao đổi, chia sẻ: https://www.facebook.com/groups/miaigroup
Hãy tham gia cùng cộng đồng Mì AI nhé:
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://www.pyimagesearch.com/2019/03/11/liveness-detection-with-opencv
2 Replies to “Chống giả mạo bằng ảnh/video trong nhận diện khuôn mặt – Face Anti spoofing”