Bài viết này chia sẻ source code phần mềm nhận diện khuôn mặt C# sử dụng Visual Studio 2015. Chương trình giới thiệu các thuật toán, cách sử dụng module FaceComp.dll để nhận diện khuôn mặt. Với source code example đơn giản các bạn có thể tùy biến tùy ý.
Module FaceComp sử dụng thuật toán Deep Learning để nhận diện khuôn mặt. Nguyên lý nhận diện tuân thủ các nguyên tắc sau:
- Đặc trưng của khuôn mặt gọi là landmark, mỗi landmark có 128 điểm tạo thành 1 vector
- Landmark được save thành file *.bin cùng tên với ảnh khuôn mặt
- 2 khuôn mặt được xem là cùng 1 người khi tỉ lệ giống nhau từ 60% trở lên (khoảng cách 2 vector landmark dưới 0.4)
- Cùng 1 ảnh nhưng khi resize thì tỉ lệ giống vẫn dưới 100%, chỉ khi nào so sánh cùng 1 ảnh mới được 100%
- Tốc độ tìm landmark thì lâu hơn tốc độ so sánh gấp nhiều lần, do đó khi lấy ảnh mẫu thì save kèm landmark
- Hình ảnh khi chụp từ webcam sẽ so sánh với các ảnh, ảnh nào giống nhất có tỉ lệ trên 60% thì xem là giống
- Nếu hình ảnh nào nhận diện sai thì bổ sung ảnh đó vào ảnh mẫu
Chuẩn bị
- Source code: https://github.com/viscomsolution/FaceComp
- Visual studio 2015: phiên bản community là được. Nếu bạn cài bản mới hơn (2017, 2019) thì nhớ chọn platform toolset v140 như hình dưới
Trong source code có 3 example solution dùng để điểm danh khuôn mặt:
- FaceComp_example_x86.sln: phiên bản có tốc độ chậm nhất
- FaceComp_example_x64.sln: phiên bản có tốc độ nhanh hơn khoảng 30-50% so với x86
- FaceComp_example_CUDA.sln: phiên bản tốc độ cao nhất, yêu cầu máy phải có CUDA 11.2
Giao diện và cách sử dụng
Nguyên lý làm việc của chương trình điểm danh khuôn mặt như sau:
- Hình ảnh của mỗi người lưu trong 1 folder (person folder), các folder này đặt trong parent folder
- Mỗi person folder lưu nhiều ảnh của cùng 1 người, không giới hạn ảnh trong 1 folder
- Khi chạy chương trình thì chỉ định parent folder, chương trình sẽ load ảnh từ person folder vào array. Nếu ảnh có file landmark kèm theo thì load landmark, nếu ảnh chưa có landmark thì sẽ tạo file landmark.
- Khi chụp ảnh thì gọi hàm tìm khuôn mặt giống nhất trong array, kết quả trả về sẽ có đầy đủ thông tin cần thiết
- Việc khởi tạo FaceComp sẽ tốn vài giây nên cần để trong background worker tránh ảnh hưởng UI thread
- Tùy theo cấu hình máy tính mà thời gian giao động từ vài trăm milisecond đến 2000 milisecond
- Chương trình sử dụng thư viện Aforge để bật webcam
Kết quả nhận diện sẽ trả về là 1 class FacialRecognized, trong đó có chứa:
- Facial: là 1 class chứa khuôn mặt đã crop, vị trí hình chữ nhật chứa khuôn mặt trong ảnh
- percent: tỉ lệ giống nhau giữa ảnh input với ảnh giống nhất
- error: thông báo lỗi
- mostSimilarImagePath: đường dẫn đến ảnh giống nhất
- imageDir: folder chứa ảnh giống nhất, bạn lấy tên folder là lấy được định danh người vào
- errorCode: mã lỗi
- elapsedMilisecond: thời gian nhận diện
- isMatch: khi percent lớn hơn hoặc bằng 60
Source code có kèm theo ảnh 1 số khuôn mặt example trong folder Image. Khi chạy chương trình lần đầu tiên các bạn cần chỉ ra parent folder trong form Danh sách khuôn mặt. Trong form này các bạn có thể thêm ảnh người mới và lưu vào folder.
Khi close form Danh sách khuôn mặt thì form Webcam sẽ hiện ra, các bạn chọn webcam để play. Sau đó ấn nút chụp ảnh để nhận diện, nếu lượt vào thành công thì số lần vào sẽ tăng lên.
Một số lưu ý
- Phiên bản miễn phí chỉ nhận diện tối đa 10 người, 1 người có thể lưu nhiều ảnh mẫu
- Có 1 số hàm khác bạn có thể test thử như tìm ảnh giống nhất
- Khi chụp ảnh thì mỗi ảnh chỉ được xuất hiện 1 khuôn mặt, nhiều khuôn mặt sẽ chỉ lấy 1 khuôn mặt duy nhất
- Chương trình có giao diện đơn giản, bạn cần tùy biến lại cho thẩm mỹ hơn
Nếu có vấn đề gì trong quá trình sử dụng vui lòng liên hệ qua zalo ở footer cuối trang web.