2009-05-25 46 views
19

Tôi đang tìm một thuật toán/thư viện phát hiện khuôn mặt mạnh mẽ, tốt nhất là trong C (C++ cũng được, các ngôn ngữ khác tôi có thể chuyển nếu cần). Tôi đã sử dụng thực hiện OpenCV trong quá khứ, nhưng tôi không nghĩ rằng nó bất biến để quay. Không cần phải là thời gian thực, nhưng nó không phải là chậm khủng khiếp hoặc (có thể một hoặc hai giây cho mỗi bức ảnh là tốt). Tìm kiếm độ tin cậy cao, và không có nhiều sai tích cực. Có ai biết về bất kỳ triển khai tốt nào không?Phát hiện khuôn mặt mạnh mẽ trong C/C++?

+4

@mark: "Bạn có thể nhanh chóng, giá rẻ hoặc chính xác; Chọn bất kỳ hai" nó thực sự trông giống như bạn đang yêu cầu mặt trăng. – Tarrant

+5

@Wergan: Tôi * không * yêu cầu nhanh và rẻ. Phát hiện khuôn mặt chính xác có thể được thực hiện trong vòng dưới 50 ms. Tôi nói rằng nó có thể mất đến khoảng năm 2000. Đó không phải là yêu cầu nhiều ở tất cả. – mpen

+1

Nhận dạng mẫu là một chủ đề rất khó, đặc biệt nếu bạn làm việc từ một góc nhìn đơn như một bức ảnh. Nó sẽ bị đánh trúng và bỏ lỡ tất cả các cách: (hợp lý) okay cho mug-shot; (khó tin) khó chụp ảnh toàn màu. – slashmais

Trả lời

9

Kiểm tra trang này trên OpenCV Wiki về phát hiện khuôn mặt bằng cách sử dụng Haar-like features.

@floppydisk: Cùng một người đăng một số khác project triển khai các tính năng tương tự Haar này để phát hiện khuôn mặt.

Khái niệm này không khó hiểu và thậm chí bạn có thể tự mình thực hiện nó. Có lẽ phần khó khăn nhất là xây dựng các đợt phân loại tăng (! Nhưng OpenCV có tất cả điều đó dễ dàng thực hiện)

Một số phương pháp khác có thể được sử dụng trong nhận diện khuôn mặt mà có thể được thực hiện bất biến để affine biến đổi bao gồm:

  • Eigenfaces với SVD/PCA
  • mô tả Fourier
  • mô hình hình dạng thống kê (this paper nói riêng)
1

Điều duy nhất tôi đã làm việc là Visionics FaceIt. Nó hoạt động khá tốt, nhưng cuối cùng tôi biết là rất, rất, rất xa được tự do (hoặc là trong bia hoặc như trong lời nói).

+1

Nên có đề cập "miễn phí" là tốt quá. FaceIt có vẻ là phần mềm nhận dạng khuôn mặt .... Tôi đang tìm một thuật toán mã nguồn mở. – mpen

5

Bạn có thể thử dùng một cái nhìn tại thư viện này:

http://vasc.ri.cmu.edu/NNFaceDetector/

Nó cho thấy một trong các trường hợp thử nghiệm những gương mặt được xoay. Như bạn có thể thấy, nó đã được thực hiện như một luận án, vì vậy bạn cũng có thể đọc bài báo đó, nếu bạn thích.

+0

Hm ... chỉ thu hồi khoảng 80%, nhưng sai số dương thấp (độ chính xác cao). Tôi không chắc liệu điều đó có tốt hay không? Oh well, điều này là đủ tốt để bắt đầu nếu tôi có thể làm cho nó để biên dịch. Cảm ơn :) – mpen

+0

- độ chính xác cao là quan trọng hơn với tôi anyway. 20% còn lại có thể được gắn thẻ theo cách thủ công nếu cần thiết, nhưng tôi đã có thể đoán rằng chúng tôi có thể nhận được tỷ lệ trên 95% ngay bây giờ. Có lẽ tôi đã nhầm. – mpen

+0

OK, điều này không thích biên dịch trên Ubuntu 64 bit. – mpen

2

Ngoài dự án mã, ai đó đã đăng detailed description của dự án nhận dạng khuôn mặt cũng như một số mã nguồn C++ cho dự án và liên kết tới thư viện mà anh đã sử dụng. Thuật toán của ông tập trung vào việc sử dụng các khác biệt màu sắc để tìm các mảng da và sau đó kiểm tra xem hình ảnh 19x19 pixel có khớp với khuôn mặt hay không. Tôi không quen thuộc với tất cả các thư viện để nhận dạng khuôn mặt nhưng đọc qua một số mã của anh ấy, nhiều phương pháp và chức năng có CV trong tên, vì vậy anh ấy có thể đang sử dụng thư viện OpenCV nhưng tôi không quen với nó nên tôi ' m không chắc chắn 100%. Tuy nhiên, anh ấy cung cấp nhiều giải thích về ứng dụng của anh ấy và các tệp nguồn để nó có thể là một điểm khởi đầu tốt.

+1

Anh ấy có thể đang cố xây dựng thư viện cv của riêng mình. Tôi nghĩ anh ấy có thể đã trích xuất các phần của opencv ra, nhưng không có gì thực sự chỉ ra điều đó. Anh ta tự hào có độ chính xác 98%, nhưng điều đó chủ yếu được đào tạo và thử nghiệm trên khuôn mặt của chính mình, vì vậy điều đó không nói nhiều. Không đề cập đến bất cứ điều gì về luân phiên ... Tôi ước anh ấy đưa ra một đánh giá chi tiết hơn. Đường cong thu hồi chính xác thật tuyệt vời. Oh well, cảm ơn vì điều này. Tôi có thể thử nó ... có thể rất tốt cho tất cả những gì tôi biết. – mpen

+1

Tôi đã có một số liệu thống kê tốt hơn rằng anh chàng tuyên bố chính xác 98%. 99,99999999999% hes nói dối hoặc đã qua đào tạo. Nhận diện khuôn mặt không ở đâu gần chính xác, ngay cả những hệ thống tốt nhất cũng không chính xác. – monksy

3

Mark - bạn nói rằng OpenCV có thể không bất biến để xoay

Điều gì sẽ ngăn cản bạn làm bốn so sánh, xoay 90 ° sau mỗi lần so sánh?

+0

Không có gì ngăn cản điều đó. Đây là câu trả lời hợp lệ;) – mpen

1

Tôi đã không sử dụng các tính năng Haar để phát hiện khuôn mặt, nhưng từ những gì tôi nhớ nó có thể hiệu quả hơn trong việc phát hiện một khuôn mặt so với eigenfaces/pca.

Tôi đã gặp sự cố về các vấn đề xoay vòng với khuôn mặt. Suy nghĩ của tôi là có thể bạn có thể thử hình dạng phù hợp và cố gắng sửa chữa các đối tượng. Hãy thử và định hướng nó cho tỷ lệ khung hình đầu bình thường.Tôi chưa bao giờ đạt được điều đó trong dự án của mình với Eigenface, nhưng hãy cho tôi biết cách nó hoạt động ra sao. Điều đó sẽ dễ dàng trong MATLAB. : P

Các vấn đề liên quan