2013-02-05 36 views
11

Tôi muốn sử dụng một số API Android 4 trong ứng dụng không phải Camera.Làm cách nào để có thể sử dụng API Android Camera trong các ứng dụng không phải Camera?

API bao gồm một số lớp Khuôn mặt phát hiện rất đẹp, bao gồm lớp Camera.Face có sẵn từ API 14. Tôi muốn áp dụng cùng các lớp Phát hiện khuôn mặt để thực hiện dò tìm khuôn mặt trên hình ảnh được lưu trên thiết bị. Tôi muốn sử dụng điều này để xử lý ảnh được lưu trữ trên chính thiết bị (ví dụ: gắn thẻ xã hội, thao tác hình ảnh khuôn mặt, v.v.)

Tôi yêu cầu hướng dẫn về cách thực hiện tác vụ này.

Trả lời

3

FaceDetectionListener là những gì bạn muốn sử dụng để phát hiện khuôn mặt, nhưng nó chỉ nghe trên máy ảnh. Đó là chức năng duy nhất của nó. Nếu bạn thực sự muốn sử dụng nó trên hình ảnh trên thiết bị của người dùng, tôi khuyên bạn chỉ nên tải xuống mã nguồn cho API máy ảnh và điều chỉnh phương pháp bạn muốn theo nhu cầu của mình.

Bạn có thể tìm ra nguồn cho tất cả các mã cổ phiếu android đây: https://android.googlesource.com/

Chúc may mắn!

+0

Cảm ơn, nhưng tôi đã không thể thực sự tìm thấy mã nguồn cho API Camera (tôi đã tìm kiếm). Bất kỳ trợ giúp về điều này đánh giá cao. –

+0

Hãy thử xem qua mã tại đây: https://android.googlesource.com/platform/packages/apps/Camera/+/master Nếu nó không có trong đó, nó rất có thể sẽ nằm trong khung phần cứng. Cho tôi biết làm thế nào nó đi. – NathanTempelman

+0

Thực ra không có gì trong: http://code.google.com/a/eclipselabs.org/p/face-recognition-android/source/browse/ Cảm ơn anyway –

2

Bạn có biết lớp học FaceDetector không? Nó có từ API v1 và nó hoạt động khá tốt. Nếu bạn cần một cái gì đó hơn tiên tiến bạn luôn có thể sử dụng một số khuôn khổ chuyên dụng, như OpenCV (được cung cấp với một số bindings Java là tốt, để dễ dàng tích hợp trong ứng dụng Android)

Bạn có thể kiểm tra một vài (ít ngày , nhưng vẫn hữu ích) điều tôi đã làm đôi trước với một đồng nghiệp:

  1. Face Detection on Andriod Part-I
  2. Face Detection on Andriod Part-II
+0

Cảm ơn bạn! Tôi biết về lớp 'FaceDetector', nhưng như bạn có thể biết nó chỉ phát hiện khuôn mặt, mắt và giữa mắt. Không phải mũi và miệng. Về OpenCV, nó thực sự là những gì tôi đang nhìn vào ngay bây giờ! –

+1

Tôi thấy, bạn cần thứ gì đó mạnh mẽ hơn. OpenCV là lựa chọn tốt nhất sau đó.Chỉ cần lưu ý: bạn có thể sử dụng cùng một phân loại tầng (dựa trên Haar là chính xác nhất) cùng với một tập hợp toàn bộ các bộ đào tạo để xác định các tính năng khuôn mặt khác nhau. –

6

Nếu những gì bạn cần là để phát hiện khuôn mặt trong hình ảnh được lưu trữ trên thiết bị, bạn chắc chắn có thể làm điều này mà không cần hack mã nguồn của Android!

Có một API FaceDetector đó được phát hành theo gói android.media từ API 1, mà chấp nhận Bitmap như là đầu vào (định dạng trong 565 định dạng) và cung cấp cho bạn vị trí của khuôn mặt trong bức tranh đó.

Dưới đây là các bước bạn cần:

1- Nạp Bitmap và chuyển nó sang 565 format (giả sử bạn có facesPicture tập tin dưới nguồn drawable của bạn)

Bitmap originalBitmap = 
      BitmapFactory.decodeResource(getResources(),R.drawable.facesPicture); 

Bitmap bitmap = originalBitmap .copy(Bitmap.Config.RGB_565, true); 

originalBitmap .recycle(); // allow the GC to collect this object 

2- Xác định Face mảng để chứa thông tin khuôn mặt được phát hiện và khởi tạo số FaceDetector

int MAX_FACES = 20; // assuming that the image will have maximum 20 faces 

FaceDetector.Face[] faces = new FaceDetector.Face[MAX_FACES]; 

FaceDetector faceDetector = 
      new FaceDetector(bitmap.getWidth(), bitmap.getHeight(), MAX_FACES); 

3- Tìm kiếm cho khuôn mặt và xử lý kết quả

int facesCount = faceDetector.findFaces(bitmap, faces); 

for(int i=0; i<facesCount; i++) { 
    FaceDetector.Face face = faces[i]; 

    float detectionConfidence = face.confidence(); // over 0.3 is OK 

    PointF eyesMidPoint = new PointF(); 

    face.getMidPoint(eyesMidPoint); 

    float eyesDistance = face.eyesDistance(); 

    float rotationX = face.pose(FaceDetector.Face.EULER_X); 

    float rotationY = face.pose(FaceDetector.Face.EULER_Y); 

    float rotationZ = face.pose(FaceDetector.Face.EULER_Z); 

    // Do something with these values 

} 

Bạn có thể tải trọn vẹn một ví dụ dự án here đó được giải thích trong bài viết này Face Detection with Android APIs

Nếu bạn muốn một cái gì đó cao cấp hơn, bạn nên xem xét sử dụng OpenCV

+0

Cảm ơn bạn! nhưng như bạn có thể thấy trong bình luận ở trên, tôi cũng đang tìm kiếm phát hiện mũi và miệng, cái mà 'FaceDetector' không thể cung cấp. –

+1

Bạn có thể sử dụng 'OpenCV' hoặc cố gắng thực hiện thuật toán phát hiện mũi và miệng cho biết bạn biết vị trí của mắt. Bạn thấy mã từ OpenCV để có ý tưởng – iTech

+0

thực sự đó là những gì tôi hiện đang làm. Cảm ơn! –

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