Hướng dẫn xây dựng hệ thống phát hiện và nhận diện khuôn mặt

Giải pháp dựa trên Computer vision và Deep Neural Network

Áp dụng các kỹ thuật machine learning vào các giải pháp bảo mật sinh trắc học (biometric security) là một trong những xu hướng AI mới nở rộ. Hôm nay tôi muốn chia sẻ một số ý tưởng về cách phát triển hệ thống nhận dạng sinh trắc học dựa trên nhận dạng khuôn mặt bằng thư viện OpenCV, DLib và phát trực tuyến thời gian thực qua camera ghi hình.

Để hệ thống hoạt động, cần thực hiện ba bước. Đầu tiên, nó phải phát hiện được khuôn mặt. Sau đó, nó phải nhận ra khuôn mặt đó là ai gần như ngay lập tức. Cuối cùng, phải thực hiện được bất kỳ hành động nào được yêu cầu, chẳng hạn như cấp phép truy cập cho những người được phép.

Giải pháp hạ tầng Deep Learning, Trí tuệ Nhân tạo - AI

Quá trình phát hiện và nhận diện khuôn mặt

Quá trình nhận dạng khuôn mặt bắt đầu bằng một trình ứng dụng cho camera, được cài đặt trên bất kỳ thiết bị tương thích nào và được kết nối với máy ảnh nói trên. Ứng dụng này được lập trình bằng Golang và hoạt động với cả Raspbian và Ubuntu dưới dạng một ứng dụng local console. Khi ứng dụng được khởi chạy lần đầu tiên, nó yêu cầu được cấu hình bằng tệp cấu hình JSON với Local Camera ID và Camera Reader type.

Ứng dụng này sau đó có thể sử dụng thị giác máy tính (computer vision) và mạng thần kinh sâu (deep neural network) để tìm ra một khuôn mặt tiềm năng trong luồng hình ảnh. Có hai cách hiệu quả chính để làm như vậy: Cách thứ nhất là dùng TensorFlow object detection model và cách thứ hai là dùng Caffe face tracking. Cả hai phương thức này đều hoạt động tốt và là một phần của thư viện OpenCV.

Khi một khuôn mặt được chụp lại, hình ảnh cắt khung sẽ được chuyển tiếp bằng HTTP form gửi đến backend. Hình ảnh khuôn mặt này sau đó được lưu bởi API, cả trên hệ thống file cục bộ và trong nhật ký phát hiện, và được gắn thêm một personID.

Ở phía backend, thuật toán xác định các bản ghi trong đó ‘Classified = false’ và sử dụng hàm Dlib để tạo vectơ 128 chiều chi tiết các thuộc tính của khuôn mặt này. Thuật toán sau đó tham chiếu chéo vectơ này với tất cả các mục nhập khuôn mặt trong cơ sở dữ liệu bằng khoảng cách Euclide (Euclide distance) để khám phá xem khuôn mặt mới này có khớp với bất kỳ khuôn mặt nào trong bản ghi hay không.

Hình dưới đây là một đại diện cho mã của hàm Dlib, với các điểm chỉ số tương ứng với các phần của khuôn mặt.

Sau khi tính toán khoảng cách Euclide, thuật toán sẽ tạo một personID mới cho một loại người không xác định (nếu khoảng cách lớn hơn 0,6) hoặc đánh dấu khuôn mặt là được phân loại và khớp với personID (nếu khoảng cách nhỏ hơn 0,6).

Khi một khuôn mặt xuất hiện dưới dạng không xác định, hình ảnh này có thể được chuyển tiếp đến người quản lý hoặc người giám sát cùng với thông báo qua chatbot trong chương trình nhắn tin hoặc một số phương tiện khác. Người quản lý hoặc người giám sát sẽ được trình bày với một loạt các tùy chọn về cách xử lý tình huống từ thời điểm đó trở đi.

Việc triển khai một hệ thống cảnh báo chatbot đơn giản mất khoảng hai đến năm ngày và có thể được tạo bằng các tiện ích như Errbot (dựa trên Python) hoặc Bot Framework của Microsoft.

Hồ sơ khuôn mặt có thể được quản lý sau đó thông qua Admin Panel. Không gian này sẽ chứa một liên kết của tất cả các hình ảnh được ghi lại với ID của họ. Có thể tạo cơ sở dữ liệu về tất cả các hình ảnh khuôn mặt của nhân viên có liên quan, có thể được đưa vào cơ sở dữ liệu trước khi hệ thống hoạt động.

Một vấn đề có khả năng phát sinh là vấn đề quy mô. Trong trường hợp của chúng tôi là có khoảng 200 mục trong cơ sở dữ liệu, vì vậy hệ thống có thể xử lý liền mạch và nhận diện khuôn mặt ngay lập tức. Mọi thứ trở nên phức tạp hơn khi cơ sở dữ liệu đạt đến hàng chục ngàn mục, hoặc khi sử dụng nhiều camera cùng lúc. Tốc độ xử lý sẽ chậm lại nếu không có biện pháp đối phó.

May mắn thay, khả năng xử lý song song cung cấp một giải pháp. Có thể tạo một bộ cân bằng tải và nhiều nhân viên Web có thể làm việc cùng một lúc. Điều này cho phép cơ sở dữ liệu được chia thành các phần phụ, tạo ra kết quả tìm kiếm nhanh hơn đáng kể.

Sau đây là bản tóm tắt của cả hai công nghệ được triển khai và cấu trúc tổng thể của giải pháp nhận diện khuôn mặt này.

Các yêu cầu API trong giải pháp sử dụng API RESTful và data collection của nhân viên phía backend sử dụng MongoDB Collection và Golang. Có thể sử dụng một thiết lập máy trạm thông thường để test giải pháp.

Điều quan trọng cần lưu ý là việc hỗ trợ các biện pháp đo lường bảo mật có thể sẽ cải thiện khả năng nhận diện khuôn mặt. Hình ảnh khuôn mặt dễ lấy hơn nhiều so với quét võng mạc hoặc dấu vân tay. Nếu nhu cầu bảo mật là đủ quan trọng, thực hiện các biện pháp chống giả mạo mặt đảm bảo rằng không ai có thể đánh bại hệ thống nhận dạng khuôn mặt bằng một bức ảnh hoặc hình ảnh khuôn mặt.

Số lượng dữ liệu đáng kể có thể được làm việc qua giải pháp này, hoặc giải pháp tương tự khác. Giả sử một doanh nghiệp có thể phối hợp với các nhu cầu kinh doanh rõ ràng, các công ty về khoa học dữ liệu sẽ có thể cung cấp những hiểu biết kinh doanh. Việc phát triển phần mềm nhận dạng khuôn mặt đang được quan tâm và sẽ quyết định tương lai của ứng dụng AI .

Nhận dạng khuôn mặt chỉ là khởi đầu của việc thực hiện phương pháp này. Một khuôn mặt người chỉ là một trong những đối tượng được phát hiện. Các đối tượng khác có thể được xác định theo cách tương tự. Ví dụ, nó có thể là phương tiện di chuyển, vật dụng nội thất, hoa, động vật, nếu một mô hình DS được tạo ra và huấn luyện về dữ liệu với các đối tượng.

Ngoài ra, có thể phát triển hệ thống sinh trắc học đa phương thức, kết hợp hai hoặc nhiều thông tin sinh trắc học, ví dụ: nhận dạng khuôn mặt và giọng nói hoặc nhận dạng mã ID dựa trên OCR.

Nguồn Serhii Maksymenko – TowardsDataScience

____
Bài viết liên quan

Góp ý / Liên hệ tác giả