14

Hiện tại tôi đang làm việc trên một ứng dụng cho điện thoại Android. Chúng tôi muốn phát hiện các tính năng của khuôn mặt. Chương trình sẽ có thể phát hiện vị trí của mắt, mũi, miệng và mép của khuôn mặt.Android - Tính năng phát hiện khuôn mặt

Độ chính xác sẽ ổn nhưng không cần phải hoàn hảo. Không sao để giảm độ chính xác để tăng tốc độ. Tất cả các khuôn mặt sẽ là mặt trước và chúng tôi sẽ biết vị trí gần đúng của các tính năng trước đây. Chúng tôi không cần phát hiện trực tiếp. Các tính năng cần được trích xuất từ ​​các hình ảnh đã lưu. Thời gian phát hiện sẽ chỉ miễn là nó không phân biệt trải nghiệm người dùng. Vì vậy, có lẽ thậm chí 2 hoặc 3 giây là okay.

Với giả định này, không quá khó để tìm một thư viện cho phép chúng tôi đạt được điều này. Nhưng câu hỏi của tôi là, cách tiếp cận tốt nhất là gì? Đề nghị của bạn là gì? Đây là lần đầu tiên tôi phát triển cho Android và tôi không muốn chạy sai hướng. Đó là một ý tưởng tốt cho chúng tôi một thư viện hoặc là nó tốt hơn (nhanh hơn/độ chính xác cao hơn) để thực hiện một số thuật toán hiện tại của riêng tôi?

Tôi googled rất nhiều và tôi tìm thấy nhiều điều thú vị. Ngoài ra còn có một phát hiện khuôn mặt trong API Android. Nhưng lớp mặt trả lại (http://developer.android.com/reference/android/media/FaceDetector.Face.html) chỉ chứa vị trí của mắt. Điều này là ít hơn cho applicaton của chúng tôi. Sau đó, cũng có OpenCV cho Android hoặc JavaCV. Bạn nghĩ gì là một ý tưởng tốt để làm việc cùng? Đối với thư viện nào có tài liệu, hướng dẫn tốt?

+1

Hãy cậu có bất kỳ thành công trong nghiên cứu của bạn? Tôi đang cố gắng làm một cái gì đó tương tự. Làm ơn cho tôi biết! –

Trả lời

8

OpenCV có a tutorial for this purpose, thật không may là C++ chỉ vì vậy bạn sẽ phải chuyển đổi nó sang Android.

Bạn cũng có thể thử API FaceDetection trong Android, this is a simple example nếu bạn đang phát hiện hình ảnh từ hình ảnh có thể vẽ hoặc sdcard. Hoặc gần đây hơn Camera.Face API hoạt động với hình ảnh của máy ảnh.

Nếu bạn muốn hình ảnh từ máy ảnh của bạn ở thời gian động hơn lần đầu tiên đọc How to take picture from camera., nhưng tôi khuyên bạn nên kiểm tra các mẫu Android OpenCV chính thức và sử dụng chúng.

Cập nhật:

Mad Hatter Ví dụ sử dụng cách tiếp cận của Camera SurfaceView. Nó hứa hẹn nhanh chóng. Hãy xem Mad Hatter.

Mã liên quan, trong trường hợp liên kết đi xuống, là thế này:

public class FaceDetectionListener implements Camera.FaceDetectionListener { 
    @Override 
    public final void onFaceDetection(Face[] faces, Camera camera) { 
     if (faces.length > 0) { 
      for (Face face : faces) { 
       if (face != null) { 
        // do something 
       } 
      } 
     } 
    } 
} 
+0

Cảm ơn bạn đã phản hồi nhanh chóng. Thực ra tôi không cần phát hiện khuôn mặt. Những hình ảnh tôi sẽ xử lý chỉ chứa các khuôn mặt. Phần quan trọng nhất là, để tìm các tính năng. Mắt, mũi, miệng và đâu là cạnh của khuôn mặt (nơi bắt đầu nền, nơi bắt đầu tóc). Tôi chỉ cần áp dụng điều này cho hình ảnh được lưu trữ chứ không phải thời gian thực trên máy ảnh. Bạn có biết giới thiệu tốt về điều này không? Có lẽ OpenCV hay một thuật toán thay thế? – tschoartschi

+1

FaceDetection API phát hiện khuôn mặt trên cơ sở của Khoảng cách bw mắt và tính năng khác như vậy. Hãy thử khám phá.Nếu không tìm thấy bất kỳ may mắn sau đó đi cho OpenCV – Sameer

+0

Tôi thấy rằng trong tài liệu hướng dẫn. Nhưng tôi đã suy nghĩ nếu nó thực sự dễ dàng hơn để trích xuất các tính năng khác nếu tôi biết vị trí của đôi mắt. Android 4 cung cấp cho bạn cũng coords cho bướm đêm. Vì vậy, tôi đã tìm kiếm một cái gì đó như thế – tschoartschi

4

Tôi đang làm việc trên một dự án tương tự. Tôi đã làm một số thử nghiệm với API FaceDetection và có thể cho bạn biết rằng nó sẽ không giúp bạn nếu bạn muốn phát hiện mắt, mũi, miệng và các cạnh. API này chỉ cho phép bạn phát hiện mắt. Nó là vô dụng nếu bạn muốn thực hiện nhận diện khuôn mặt bởi vì bạn cần nhiều tính năng hơn chỉ là đôi mắt trong khuôn mặt phát hiện một phần.

Nhận xét về câu trả lời đầu tiên của bạn: bạn thực sự cần phát hiện khuôn mặt. Tìm các tính năng là một phần của phát hiện khuôn mặt và nhận các tính năng này là bước đầu tiên trong ứng dụng nhận dạng khuôn mặt. Với OpenCV, bạn có thể sử dụng Các tính năng giống Haar để nhận các tính năng này (mắt, mũi, miệng, v.v.).

Tuy nhiên, tôi thấy nó hơi phức tạp khi sử dụng các hàm openCV với tệp .cpp riêng biệt. Có một thứ gọi là JNIEXPORT cho phép bạn chỉnh sửa hình ảnh thư viện Android với các hàm OpenCV bên trong tệp .cpp. OpenCV có một mẫu Haar giống như tính năng phát hiện .cpp tập tin có thể được sử dụng để phát hiện khuôn mặt (và công nhận như là một bước thứ hai với một thuật toán khác).

Bạn đang phát triển trên cửa sổ hoặc Linux? Tôi đang sử dụng các cửa sổ và chưa quản lý để sử dụng hướng dẫn bạn đã liên kết để thiết lập OpenCV với nó. Tuy nhiên, tôi có một môi trường làm việc của OpenCV trong Eclipse và lấy tất cả các mẫu từ OpenCV 2.3.1 làm việc. Có lẽ chúng ta có thể giúp đỡ lẫn nhau và chia sẻ một số thông tin/kết quả? làm ơn cho tôi biết.

+0

Đối với API FaceDetection, dường như chỉ phát hiện ra giữa mắt và khoảng cách giữa chúng, nhưng liệu có thể đi đến từng mắt? Hoặc là có thể biết rằng khuôn mặt được nghiêng? –

0

nó là một truy vấn tốt đẹp. Tôi đoán nếu bạn nhận được các điểm đặc trưng cho mắt thì chúng tôi có thể tính toán các điểm khác cũng bằng cách biết khoảng cách ước tính của các điểm khác từ mắt.

Xem bài viết này để biết thêm về những gì tôi đang cố gắng để nói: http://klucv2.googlecode.com/svn/trunk/docs/detection%20of%20facial%20feature%20points%20using%20anthropometric%20face%20model.pdf

Tôi hy vọng điều này sẽ giúp.

2

Tôi đã tìm thấy một giải pháp tốt cho nhận diện khuôn mặt cảm xúc được cung cấp bởi Microsoft API này. API này trả về biểu đồ cảm xúc và biểu đồ cảm xúc JSON. Bạn có thể thử API này để có kết quả tốt.

Emotion API

Emotion Recognition Nhận những cảm xúc thể hiện bằng một hoặc nhiều người trong một hình ảnh, cũng như lợi nhuận một hộp bounding cho khuôn mặt . Những cảm xúc được phát hiện là hạnh phúc, buồn bã, bất ngờ, giận dữ, sợ hãi, khinh miệt và ghê tởm hoặc trung lập.

  • Các định dạng hình ảnh đầu vào được hỗ trợ bao gồm JPEG, PNG, GIF (khung đầu tiên), BMP. Kích thước tệp hình ảnh không được lớn hơn 4MB.
  • Nếu người dùng đã gọi API khuôn mặt, họ có thể gửi hình chữ nhật khuôn mặt làm đầu vào tùy chọn. Nếu không, API cảm xúc trước tiên sẽ là tính toán hình chữ nhật.
  • Phạm vi kích thước khuôn mặt có thể phát hiện là 36x36 đến 4096x4096 pixel. Các khuôn mặt nằm ngoài phạm vi này sẽ không được phát hiện.
  • Đối với mỗi hình ảnh, số khuôn mặt tối đa được phát hiện là 64 và các khuôn mặt được xếp theo kích thước hình chữ nhật khuôn mặt theo thứ tự giảm dần. Nếu không phát hiện khuôn mặt , một mảng trống sẽ được trả lại.
  • Một số khuôn mặt có thể không được phát hiện do các thách thức kỹ thuật, ví dụ: góc nhìn rất lớn (đầu tư thế), tắc nghẽn lớn. Mặt trước và các mặt gần phía trước có kết quả tốt nhất. -Các cảm xúc khinh miệt và ghê tởm là thử nghiệm.

https://www.microsoft.com/cognitive-services/en-us/emotion-api

+0

Trong khi liên kết này có thể trả lời câu hỏi, tốt hơn nên bao gồm các phần thiết yếu của câu trả lời ở đây và cung cấp liên kết để tham khảo. Câu trả lời chỉ liên kết có thể trở thành không hợp lệ nếu trang được liên kết thay đổi. - [Từ đánh giá] (/ đánh giá/chất lượng thấp-posts/12160409) –

+1

Thanks @LucaDetomi –

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