Tôi đã phát triển một ứng dụng để phát hiện khuôn mặt bằng cách sử dụng tính năng dò tìm khuôn mặt HAAR của OpenCVs. Thuật toán hoạt động tốt, tuy nhiên mỗi lần trong một thời gian Nó tìm thấy các mẫu trên tường hoặc ather những thứ mà không phải đối mặt.
Tôi muốn chạy kiểm tra bổ sung trên đối tượng bị nghi ngờ là khuôn mặt nhưng tôi chỉ muốn làm điều đó trên các đối tượng mà tôi không tự tin rằng họ đang đối mặt. Có cách nào để có được một mức độ "tự tin" cho một khuôn mặt được phát hiện bằng cách dò tìm khuôn mặt HAAR?Có cách nào để đo lường mức độ tin cậy khi sử dụng tính năng dò tìm khuôn mặt haar sử dụng OpenCV không?
Trả lời
OpenCV thực sự tìm thấy nhiều kết quả cho bất kỳ đối tượng cụ thể nào, mỗi khu vực được phát hiện phần lớn chồng lên nhau; sau đó chúng được nhóm lại với nhau và tạo thành một số 'hàng xóm'. Con số này được gọi là sự tự tin.
Khi bạn thực hiện phát hiện đối tượng, một trong các tham số là hàng xóm tối thiểu trước khi lần truy cập được trả lại. Tăng nó làm giảm dương tính giả, nhưng cũng làm giảm số lượng khuôn mặt có thể phát hiện.
Tại sao không chạy nhiều thác rừng (được đào tạo khác) so với cùng một hình ảnh và xem chúng có tạo ra kết quả tương tự không? Yêu cầu họ bầu chọn, như vậy. Vì vậy, nếu chỉ có một thác tìm thấy một khuôn mặt nhất định và những người khác thì không, điều đó sẽ cho bạn ít tự tin hơn trong khuôn mặt đó.
Tôi đã có thể chạy 3 thác cùng một lúc trên nguồn cấp dữ liệu video của iPhone trong thời gian thực, do đó hiệu suất không phải là vấn đề trong nhiều trường hợp bình thường. Thêm ở đây: http://rwoodley.org/?p=417
OpenCV cung cấp sự tự tin thông qua các đối số "trọng lượng" trong chức năng "detectMultiScale" từ lớp CascadeClassifier, bạn cần phải đặt lá cờ "outputRejectLevels" true
Không phải là một câu trả lời trực tiếp câu hỏi của bạn nhưng điều này có thể giúp giảm phát hiện sai.
Bạn có thể nhận được ít phát hiện sai hơn bằng cách tinh chỉnh các giá trị MinNeibhbours, CV_HAAR_FIND_BIGGEST_OBJECT và Kích thước.
int MinNeighbours = 7;
face_cascade.detectMultiScale (frame_gray, khuôn mặt, 1,1, MinNeighbours, CV_HAAR_FIND_BIGGEST_OBJECT, Kích thước (60, 60));
là thông số này có sẵn cho API OpenCV C++ không? Tôi chỉ nhìn thấy nó trong API python?!? Ví dụ, có một cách không có giấy tờ để sử dụng tham số cờ cho mục đích này? – Micka
[Rõ ràng] (http://code.opencv.org/issues/3064) có một hàm không có giấy tờ trong API C++. 'Khoảng trống CascadeClassifier :: detectMultiScale (const Mat & hình ảnh, vector & đối tượng, vector & rejectLevels, vector & levelWeights, scaleFactor đôi, int minNeighbors, int cờ, Kích minObjectSize, Kích maxObjectSize, outputRejectLevels bool) ' –
sietschie