Để có thể tạo ra được tập dữ liệu của người dùng thì cần phải phát hiện được khuôn mặt người dùng trong ảnh. Thuật toán được nêu trong này là thuật toán Viola-Jones.
Thuật toán Viola-Jones lần đầu tiên được xuất bản vào năm 2001 bởi Paul Viola và Michael Jones trong bài báo năm 2001 của họ, Rapid Object Detection using a Boosted Cascade of Simple Features, bài báo này đã trở thành một trong những bài báo được trích dẫn nhiều nhất trong tài liệu về computer vision. Trong bài báo này, Viola và Jones đề xuất một thuật toán có khả năng phát hiện các vật thể trong hình ảnh, bất kể vị trí và tỷ lệ của chúng trong một hình ảnh. Hơn nữa, thuật toán này có thể chạy trong thời gian thực, giúp phát hiện các đối tượng trong video stream.
Mặc dù khung Viola-Jones chắc chắn đã mở ra cánh cửa để phát hiện đối tượng, nhưng giờ đây nó đã vượt xa các phương pháp khác, chẳng hạn như sử dụng Histogram of Oriented Gradients (HOG) + Linear SVM và Deep Learning. Nhưng mình vẫn nghĩ rằng điều quan trọng là chúng ta rất quan tâm đến thuật toán này và ít nhất là có sự hiểu biết ở mức độ cao về những gì mà diễn ra bên dưới.
Để có thể phát hiện người trong ảnh, thuật toán trượt một cửa số có kích thước cố định trên hình ảnh của chúng ta ở nhiều tỷ lệ. Tại mỗi giai đoạn này,
Khoa Khoa Học Máy Tính – Lớp 18IT3 Nguyễn Đặng Khuê Văn
Trợ Lý Ảo AI 17 cửa sổ của dừng lại, tính toán một số tính năng và sau đó phân loại khu vực là có khuôn mặt hay không.
Điều này cần đòi hỏi một chút về học máy. Một bộ phân loại được đào tạo để sử dụng các mẫu positive và negative của khuôn mặt. Điểm dữ liệu positive sẽ là các ví dụ khu vực có chứa một khuôn mặt. Các điểm dữ liệu negative sẽ là ví dụ về các vùng không chứa khuôn mặt. Dựa vào những điểm dữ liệu này, chúng ta có thể đào tạo một bộ phân loại để nhận biết liệu một vùng nhất định của hình ảnh có chứa một khuôn mặt hay không.
OpenCv có thể phát hiện khuôn mặt bằng cách sử dụng Haar Cascade được đào tạo trước. Điều này đảm bảo rằng không cần phải cung cấp các mẫu positive và negative của riêng mình, huấn luyện bộ phân loại riêng của chúng tôi hoặc lo lắng về việc điều chỉnh các tham số chính xác. Thay vào đó, người dùng chỉ cần tải lên trình phân loại được đào tạo trước và phát hiện khuôn mặt trong ảnh. Đối với mỗi điểm dừng dọc theo đường dẫn cửa sổ trượt, năm tính năng hình chữ nhật được tính.
Để có được các tính năng cho từng khu vực trong năm hình chữ nhật này, chúng ta chỉ cần trừ tổng số pixel ở vùng trắng cho tổng số pixel ở vùng đen. Thật thú vị, các tính năng này có tầm quan trọng thực sự trong bối cảnh nhận diện khuôn mặt:
- Vùng mắt có xu hướng tối hơn vùng má. - Vùng mũi sáng hơn vùng mắt.
Do đó, với năm vùng hình chữ nhật này, chúng ta có thể tạo thành các đặc điểm có thể phân loại các phần của khuôn mặt. Sau đó, đối với toàn bộ tập hợp các tính năng, chúng ta sẽ sử dụng thuật toán AdaBoost để chọn những tính năng tương ứng với các vùng trên khuôn mặt của hình ảnh.
Để chống lại điều này, Viola và Jones đã đưa ra khái niệm về cascade hoặc stages. Tại mỗi điểm dừng dọc theo đường dẫn cửa sổ trượt, cửa sổ phải vượt qua một loạt các thử nghiệm trong đó mỗi thử nghiệm tiếp theo đắt hơn về mặt tính toán so với trước đó. Nếu bất kỳ một thử nghiệm thất bại, cửa sổ sẽ tự động bị loại bỏ.
Một số lợi ích của Haar cascade là họ rất nhanh trong việc tính toán các Haar-like features, do sử dụng hình ảnh tích hợp (còn được gọi là bảng tổng hợp). Chúng cũng rất hiệu quả để lựa chọn tính năng thông qua việc sử dụng thuật toán AdaBoost. Có lẽ quan trọng nhất, họ có thể phát hiện khuôn mặt trong hình ảnh bất kể vị trí hay quy mô của khuôn mặt. Cuối cùng, thuật toán Viola-Jones để phát hiện đối tượng có khả năng chạy trong thời gian thực.
Khoa Khoa Học Máy Tính – Lớp 18IT3 Nguyễn Đặng Khuê Văn
Trợ Lý Ảo AI 18
Sau khi đã phát hiện được khuôn mặt, việc tiếp theo sẽ chụp lại ảnh khuôn mặt và lưu vào tập dữ liệu.
Chụp lại ảnh người để nhận dạng khuôn mặt sau khi chạy tập lệnh GetData.py. Nó tự động tạo thư mục Train trong thư mục Database có chứa khuôn mặt để được công nhận.
Trong khi tạo cơ sở dữ liệu, hình ảnh khuôn mặt phải có các biểu cảm khác nhau, đó là lý do tại sao sự chậm trễ 0.38 giây được đưa ra để tạo tập dữ liệu. Trong ví dụ này, chúng ta lấy khoảng 100 hình ảnh / một người, chuyển hình ảnh sang màu xám và lưu vào thư mục cơ sở dữ liệu với tên của nó.
Dùng camera để chụp ảnh dữ liệu, nhập thông tin người dùng lưu tập dữ liệu.
Sử dụng thư viện OpenCv để mở camera từ máy tính. Hình ảnh nhận vào, hệ thống xử lý và cắt khuôn mặt ra khỏi hình, chuyển sang hệ màu xám. Hình ảnh khuôn mặt được lưu cùng với thông tin sẽ được lưu vào tập dữ liệu Dataset. Trong quá trình lấy ảnh, người dùng thiết lập lấy 100 tấm ảnh để tăng độ chính xác. Sau khi đã lấy đủ 100 tấm, hệ thống tự động tắt camera.
Khoa Khoa Học Máy Tính – Lớp 18IT3 Nguyễn Đặng Khuê Văn
Hình 23 Phát hiện khuôn mặt bằng Haar Cascade
Trợ Lý Ảo AI 19
Khoa Khoa Học Máy Tính – Lớp 18IT3 Nguyễn Đặng Khuê Văn
Hình 25 Thông tin ảnh của người dùng
Trợ Lý Ảo AI 20