2012-02-26 26 views
5

Tôi đang làm việc trên một dự án mà tôi nên thiết kế một ứng dụng có thể phát hiện tất cả các khuôn mặt của những người đi qua ... Tôi có một cơ sở dữ liệu rất lớn bao gồm một số người nổi tiếng ... Tôi đã sử dụng EigenObjectRecognizer để nhận ra khung hình được chụp bởi webcam ... Nhưng vấn đề đôi khi nó nhận ra một số người sai .... Vì vậy, nếu có được giá trị niềm tin của trận đấu mặt này ... Sau đó tôi có thể viết một vòng lặp điều kiện để nếu nó lớn hơn hơn 75%, sau đó chỉ phát hiện ra anh ta nếu không. Ngoài ra tôi biết rằng nhận dạng dựa trên PCA là cơ bản, tôi chắc chắn sẽ chuyển sang các thuật toán mới khác. Nhưng do thời hạn của dự án, tôi nên gửi nó nhanh chóng ... .Vui lòng cho tôi biết cách nhận giá trị độ tin cậy của nhận dạng khuôn mặt EigenObjectRecognizer này ....Làm thế nào để có được giá trị Niềm tin trong nhận dạng khuôn mặt bằng EMGU CV?

Trả lời

7

Không có giá trị độ tin cậy chính xác nào ere là một thang đo thay đổi có thể được sử dụng và được hiểu là khoảng cách Eigen.

Giá trị phân loại là thay đổi phù hợp tốt theo lượng dữ liệu bạn có và thông số đào tạo, do đó bạn sẽ phải kiểm tra các giá trị với các khuôn mặt khác nhau để tính ngưỡng của bạn.

Bạn sẽ phải thêm hàm vào lớp Eigen để nhận giá trị này. Đầu tiên chúng ta sẽ ghi đè lên EigenObjectRecognizer mà chúng ta sử dụng. Điều này thực sự đơn giản là xóa tập tin EigenObjectRecognizer.cs, nó nằm trong thư mục \ EMGU Installation \ Emgu.CV hoặc khi bạn trích xuất các tập tin, bạn sẽ có thể xóa nó vì nó nằm trong cùng thư mục với thư mục bin với tất cả các .dll bạn sử dụng.

Thêm tệp vào dự án của bạn bằng cách nhấp chuột phải vào tên dự án trong trình khám phá giải pháp trong nghiên cứu thị giác và chọn Thêm> Mục hiện có ... Điều hướng đến tệp và thêm tệp. Dự án của bạn sẽ tự động sử dụng điều này thay vì dự án được tổ chức với EMGU.CV.dll trong tài liệu tham khảo của bạn.

Mở EigenObjectRecognizer.cs ngay trong dự án của bạn, đừng lo lắng đó là bản sao của bản gốc nên mọi thay đổi bạn thực hiện sẽ không ảnh hưởng đến nguồn gốc. Để bắt đầu làm cho mọi việc trở nên dễ dàng hơn bằng cách giữ phím Ctrl, nhấn phím m, sau đó là phím o, điều này sẽ thu gọn tất cả các trường phương thức.

Để bắt đầu, chúng tôi cần ghi đè lên không gian tên mà tôi gọi là Emgu.Custom.

Bây giờ ở phía trên cùng của mã Thêm biến sau đây dưới những người khác

private float eigenDistance; 

Thêm phương pháp sau vào lớp,

/// <summary> 
    /// Get the calculated Eignen Distance for the last proceessed frame 
    /// </summary> 
    public float GetEignenDistance 
    { 
     get { return eigenDistance; } 
    } 

Bạn có thể đặt này bất cứ nơi nào bạn nhưng rõ ràng là trong lớp và bên ngoài một phương pháp, bây giờ là bit quan trọng. Chúng tôi đã tạo ra eigenDistance toàn cầu nhưng nó được tạo riêng tư khi chúng ta gọi phương thức .Recognize (Image image).

Tìm phương pháp này trong vòng EigenObjectRecognizer.cs và thay đổi

float eigenDistance; 

để

eigenDistance = -1; 

bạn có thể xóa các phao eigenDistance; nhưng tôi muốn đảm bảo rằng nó được ghi đè bằng một giá trị mà tôi có thể quan sát vì một lỗi vì nó phải luôn luôn dương nếu nhận dạng được áp dụng chính xác.Bạn sẽ nhận thấy rằng phần sau của mã bao gồm:

FindMostSimilarObject(image, out index, out eigenDistance, out label); 
  • index
  • eigenDistance
  • nhãn

Có phải tất cả kết quả đầu ra có sẵn để sử dụng với một chút mã hóa thêm.

Chúng tôi không cần phải chỉ biến nhận dạng Eigen của chúng tôi đến ghi một:

Emgu.Custom.EigenObjectRecognizer recognizer; 

Bây giờ chúng ta có thể có được EigenDistance với cuộc gọi chức năng này:

float EigenDistance = recognizer.GetEignenDistance; 

Hy vọng điều này xóa mọi thứ lên,

Chúc mừng,

Chris

+0

Thưa bạn, trong trình nhận dạng mã của tôi là tên của tham chiếu đến EigenObjectRecognizer ... Tôi đã thử sử dụng recognizer.Get_Eigen_Results. Nhưng tôi không thể tìm thấy bất kỳ thành viên nào có tên "Get_Eigen_Results". Tôi có thiếu thêm một tham chiếu ở đây không? –

+0

Xin chào, Xin lỗi Surya đó là chức năng tôi đã thêm vào lớp Eigen Tôi sẽ cập nhật câu trả lời cho phù hợp – Chris

+0

Xin chào, bạn có nghĩ rằng nó có thể hoạt động nếu tôi muốn so sánh với hình ảnh nếu có cùng một người. một, so với khác và cuối cùng so sánh khoảng cách này? Hoặc bất kỳ cách nào để so sánh 2 hình ảnh của người mà không phải là trong cơ sở dữ liệu? –

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