“7 tuyệt chiêu” chống giả mạo khuôn mặt bằng ảnh/video trong nhận diện

Xin chào tuần mới các anh em Mì Ai, hôm nay chúng ta sẽ tìm hiểu “7 tuyệt chiêu” chống giả mạo khuôn mặt bằng ảnh/video trong nhận diện khuôn mặt nhé!

Nhận diện khuôn mặt ngày càng phổ biến và được ứng dụng nhiều nơi. Và với sự nở rộ của framework, open source thì anh em ta ai ai cũng có thể làm một hệ thống nhận diện khuôn mặt một cách không mấy khó khăn. Trên Mì AI cũng đã có mấy bài về topic này:

Tuy nhiên để các bạn có cái nhìn tổng quan về món chống giả mạo khuôn mặt trong các bài toán nhận diện khuôn mặt thì hôm nay mình xin chia sẻ các hiểu biết của mình về các phương pháp chống giả mạo. Hi vọng sẽ giúp được các bạn phần nào.

Phần 1 – Giả mạo trong nhận diện khuôn mặt

Đây có lẽ là vấn đề đau đầu cho các AIer khi nghiên cứu và xây dựng các hệ thống nhận diện khuôn mặt (NDKM). Người dùng thay vì đưa mặt mình vào hệ thống nhận diện thì sử dụng ảnh chụp trên điện thoại, video quay trên điện thoại hay thậm chí là ảnh in 2D, 3D của người khác để “dí” vào camera cho máy nhận.

chống giả mạo
Nguồn: Tại đây

Việc máy tính nhận nhầm trong các trường hợp này có thể nguy hiểm, cực nguy hiểm hoặc nguy hiểm vê lờ… tuỳ vào bài toán cụ thể. Tuy nhiên trong các trường hợp sử dụng khuôn mặt để mở cửa ra vào thì nhận nhầm là toang ngay lập tức. Kẻ trộm có thể in ảnh của CEO của một công ty và mang đến cửa dí vào camera để mở cửa, sau đó khoắng sạch và đi trong một…nốt nhạc.

Do vậy, các AIer vẫn đang liên tục tìm tòi ra các cách để chống được việc giả mạo này. Hôm nay chúng ta sẽ cùng tìm hiểu sơ qua các phương pháp đó nhé.

Let’s go!

Phần 2 – Phương pháp Eye Blink Check

Như tên của nó, phương pháp này sẽ kiểm tra xem cái mặt trong camera có nháy mắt hay không? Nếu nháy mắt là thật và không nháy mắt thì là fake (ảnh).

Cách làm thì thông thường là :

  • Capture một cơ số frame liên tiếp và kiểm tra độ mở của mắt bằng Facial landscape.
  • Nếu có mắt nhắm -> real = True và tiếp tục công tác nhận dạng khuôn mặt.
eye link detection
Nguồn: Tại đây

Vậy thì chúng ta hãy cùng nhau phân tích Ưu và nhược của phương pháp này:

  • Ưu điểm:
    • Dễ triển khai, chi phí thấp và có thể triển khai trên mobile một cách dễ dàng.
    • Người dùng cũng khá thuận tiện vì không cần thực hiện thêm thao tác gì khi nhận diện.
  • Nhược điểm:
    • Đầu tiên là nó không chống được fake bằng video. nếu hacker quay video khuôn mặt và phát lại thì sẽ quang tèo ngay vì mắt vẫn chớp như bình thường.
    • Thứ hai là dễ bị lừa bằng cách đục lỗ 2 cái mắt trên tấm ảnh và đưa mặt lại gần 2 cái lỗ đó để mắt của hacker khít vào mắt tấm ảnh rồi đưa lại gần camera. Mắt vẫn chớp ầm ầm luôn 😀
    • Thứ ba là sẽ cần capture 1 số lượng lớn frame vì có người chớp nhiều, chớp ít…. không thể biết trước được.

Phần 3 – Phương pháp chống giả mạo bằng Challenge-Response

Với phương pháp này về cơ bản là hệ thống sẽ yêu cầu người dùng thực hiện các thao tác nào đó (Challenge) và người dùng phải thực hiện theo (Response) để phần mềm kiểm tra.

Cụ thể hơn như sau: máy có thể yêu cầu người dùng quay mặt sang trái, phải, lên trên, xuống dưới, há mồm, nhắm mắt….. và người dùng sẽ follow thực hiện đúng như thế.

Trong thực tế thì các thao tác này được random, thay đổi thứ tự để hạn chế việc người dùng quay trước các video để đánh lừa phần mềm. Ví dụ như lúc thì chỉ yêu cầu 2 thao tác: ngửa lên, quay trái nhưng lúc sau thì yêu cầu đủ 5 thao tác: trái, phải, trên, dưới và thẳng….

Với phương án này sẽ có các Ưu, nhược như sau:

  • Ưu điểm:
    • Chi phí triển khai thấp, không cần mua thêm thiết bị.
    • Coding khá đơn giản (khó hơn thằng Eye Blink tý).
    • Có thể triển khai trên Mobile
    • Khá hiệu quả vì check được cả Photo và Video.
  • Nhược điểm:
    • Khách hàng sẽ có trải nghiệm không tốt lắm do phải thực hiện khá nhiều thao tác trước khi được nhận diện.

Phần 4 – Phương pháp sử dụng Local Binary Pattern (LBP) và SVM

Để có dữ liệu ta sẽ trích xuất khuôn mặt thật ngồi trước camera và gán nhãn là REAL. Sau đó ta phát một đoạn video hoặc cầm một tấm ảnh đưa qua đưa lại trước camera để trích xuất khuôn mặt và gán nhãn là FAKE.

Với phương án này khuôn mặt được chia ra thành nhiều vùng nhỏ sau đó tính LBP cho vùng đó. Bạn nào chưa rõ về LBP có thể đọc tại link này.

Sau đó LBP của các vùng được ghép với nhau thành feature cho khuôn mặt. Ta làm tương tự với các mặt fake và mặt thật để có được một chuỗi các face feature vector.

Bây giờ ta đưa chuỗi các face feature vector đó vào bộ phân loại SVM để learn và sau đó dùng để phân loại các khuôn mặt mới trong camera.

LBP
Nguồn: Tại đây

Để ý bạn sẽ thấy đây là một phương án khá thủ công mỹ nghệ nên sẽ vướng phải các ưu nhược như sau:

  • Ưu điểm: Khá dễ triển khai, không cần thiết bị, có thể làm trên mobile.
  • Nhược điểm:
    • Khó áp dụng trong nhiều điều kiện khác nhau về ánh sáng, môi trường, hướng khuôn mặt… Ví dụ với camera này thì nhận đúng, góc độ ánh sáng này thì nhận đúng nhưng lại sai trong các môi trường khác.
    • Khi gặp nhiễu, blur… thì sẽ nhận sai do nhiễu cũng được tính vào là yếu tố trên khuôn mặt…

Phần 5 – Dựa vào CNN Classify trên ảnh 2D

Với phương án này chúng ta sẽ sử dụng một mạng CNN để phân loại đâu là ảnh thật, đâu là ảnh fake.

Để có dữ liệu ta sẽ trích xuất khuôn mặt thật ngồi trước camera và gán nhãn là REAL. Sau đó ta phát một đoạn video hoặc cầm một tấm ảnh đưa qua đưa lại trước camera để trích xuất khuôn mặt và gán nhãn là FAKE.

Đưa tất cả các dữ liệu đã có ở bước trên đó vào mạng CNN để train ta sẽ có một model phân loại ảnh fake và thật dựa vào ảnh input tĩnh 2D. Model sẽ trích xuất các đặc trưng để có thể phân loại ảnh mà chúng ta có thể lờ mờ đoán là: ánh sách, độ phản chiếu, vết hằn của tần số quét màn hình …

Về vấn đề này Mì AI Blog đã có một bài ở phần đầu của bài viết này, bạn nào chưa đọc có thể kéo lên đọc nhé.

chống giả mạo
Nguồn: Tại đây

Vậy phân tích kỹ hơn về phương án này:

  • Ưu điểm:
    • Khá dễ triển khai, không cần thiết bị, có thể làm trên mobile.
    • Nhận tốt hơn LBP vì nó trích đặc trưng và bỏ qua được nhiễu.
  • Nhược điểm:
    • Cần khá nhiều dữ liệu để train
    • Đôi khi vẫn bị Overfit. Có nghĩa là với khuôn mặt đã train thì nhận real/fake khá ổn nhưng đổi mặt khác (da đen hơn, nhăn nheo hơn…) thì ngay lập tức model nhận sai 😀

Phần 6 – Classify kèm với Flash

Phương pháp này cũng same same Phần 5 nhưng khác một chút là thay vì sử dụng trực tiếp ảnh mặt người để train REAL/FAKE thì họ sẽ sử dụng đèn Flash (nói chung thôi nhé, có thể là ánh sáng màn hình với các máy không có đèn Flash trên camera trước) đế “đánh” lên mặt và sử dụng hình ảnh đó làm input cho mạng.

Với khuôn mặt thật thì khi đèn flash đánh lên sẽ nổi khối và sáng trắng hơn phần nền và ngược lại, với ảnh in ra hay màn hình điện thoại thì đèn flash đánh sẽ không thể nổi khối được.

Sau khi có dữ liệu về mặt thật được đánh flash và mặt fake (trên ảnh, mobile) được đánh flash thì tuỳ, có thể sử dụng CNN Classify hoặc các biện pháp CV khác để phân biệt real/fake.

face anti spoofing flash
Nguồn: Tại đây

Với món này thì dễ dàng thấy:

  • Ưu điểm: Dễ triển khai, không cần thêm thiết bị, có thể dùng trên Mobile.
  • Nhược điểm:
    • Một số người dùng khó chịu với ánh đèn flash đánh thẳng vào mặt.
    • Khi ra ngoài trời hoặc các nơi ánh sáng mạnh thì đèn flash mất tác dụng.

Phần 7 – Chống giả mạo bằng CNN Classify kèm với 3D Map

Yeah , cái này mình mới cập nhật nên chia sẻ cùng các bạn luôn. Có nghĩa là thay vì CNN trên 2D Photo thì họ kết hợp luôn 2 bước:

  • Phase 1: Extract các vùng ảnh nhỏ ra khỏi mặt và gán nhãn real/fake để train một mạng nhận diện riêng dựa vào các vùng ảnh đó. Kết quả phase 1 sẽ là tổng hợp probability real/fake của các vùng ảnh nhỏ gọi là $P1$
  • Phase 2: Họ sẽ train một mạng Auto Encoder riêng để suy ra 3D Map từ ảnh 2D Input đầu vào. Mạng này được train sao cho với mặt thật thì nổi khối, còn với ảnh và mobile thì hoàn toàn phẳng (flat). Và từ đó sẽ dùng SVM để phân loại real/fake trên 3D Map cuối cùng. Probability cuối cùng gọi là $P2$

Kết hợp $P1$ và $P2$ sẽ cho ra kết quả cuối cùng $P$, ta xét theo threshold để quyết định ảnh đầu vào là real/fake

chống giả mạo khuôn mặt
Nguồn: Tại đây

Cách này được chứng minh là tốt hơn rất nhiều so với các phương pháp CNN nói trên. Tuy nhiên, độ khó của coding cũng nâng lên levelmax mà hiện này mình cũng chưa có cơ hội triển khai thử (vì họ ko public source code).

Phần 8 – Phương án chống giả mạo sử dụng camera 3D, camera Nhiệt

Có lẽ đây là phương án mà coder nhàn thân nhất. Cách làm khá đơn giản là 3D Camera sẽ cho ta 3D Depth của ảnh, cứ có Dept thì là thật, ngược lại là fake, quá easy. Còn ông camera nhiệt thì cứ có nhiệt độ con người là thật, không có thì là fake.

Nguồn: Tại đây

Tuy nhiên đây cũng là phương án tốn kém nhất về mặt chi phí vì phải mua thêm các thiết bị ngoài. Và nó cũng không áp dụng được trên mobile (trừ khi cắm thêm thì lại không triển khai diện rộng được).

Vậy là:

  • Ưu:
    • Code đơn giản, đa phần thiết bị hỗ trợ sẵn.
    • Người dùng không cần làm thêm gì
    • Tốc độ nhận diện nhanh
  • Nhược:
    • Tốn kém chi phí
    • Không triển khai trên mobile được.

Okie, đó là toàn bộ những gì mình biết về chống giả mạo trong nhận diện khuôn mặt. Mỗi phương án đều có ưu nhược riêng, các bạn cân nhắc và lựa chọn tuỳ theo bài toán của mình. Hi vọng giúp được các bạn trong con đường AI.

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

#MìAI

Fanpage: http://facebook.com/miaiblog
Group trao đổi, chia sẻ: https://www.facebook.com/groups/miaigroup
Website: http://miai.vn
Youtube: http://bit.ly/miaiyoutube

Nguyễn Chiến Thắng

Một người đam mê những điều mới mẻ và công nghệ hiện đại. Uớc mơ cháy bỏng dùng AI, ML để làm cho cuộc sống tốt đẹp hơn! Liên hệ: thangnch@gmail.com hoặc facebook.com/thangnch

Related Post

2 Replies to ““7 tuyệt chiêu” chống giả mạo khuôn mặt bằng ảnh/video trong nhận diện”

  1. Các phương pháp bạn nêu thì chỉ có camera 3D là ổn nhất nhưng cũng dễ dàng bị hack. Tóm lại để dùng cho security thì face không khả thi, chỉ dùng cho điểm danh hoặc các ứng dụng khác như quảng cáo…

Leave a Reply

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