如何在非相机应用程序中使用Android Camera API?

时间:2013-02-05 09:52:11

标签: android camera android-image face-detection image

我想在非相机应用程序中使用一些Android 4 API。

API包括一些非常好的人脸检测类,包括自API 14以来可用的Camera.Face类。我想应用相同的人脸检测类,以便对保存在设备上的图像进行人脸检测。我更喜欢使用它来处理存储在设备上的图片(例如:社交标记,面部图像处理等)

我需要有关如何完成此重复使用任务的指导。

3 个答案:

答案 0 :(得分:6)

如果您需要检测存储在设备上的图像中的面部,您绝对可以在不破解Android源代码的情况下执行此操作!

自API 1开始, android.media 包下有一个FaceDetector API,它接受Bitmap作为输入(格式化为565格式)并为您提供该图片中面孔的位置。

以下是您需要的步骤:

1-加载Bitmap并将其转换为565 format(假设您的可绘制资源下有facesPicture个文件)

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-定义Face数组以保存检测到的面部信息并初始化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-搜索面孔和处理结果

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

}

您可以下载完整的项目示例here,本文将对此进行说明Face Detection with Android APIs

如果你想要更高级的东西,你应该考虑使用OpenCV

答案 1 :(得分:3)

您需要使用FaceDetectionListener来检测面部,但它只能侦听相机。这是它唯一的原生功能。如果你真的想在用户设备上的图片上使用它,我建议你只需下载相机API的源代码并根据需要调整你想要的方法。

你可以在这里找到所有股票Android代码的来源: https://android.googlesource.com/

祝你好运!

答案 2 :(得分:2)

你知道FaceDetector班吗?它自API v1以来就已经存在并且运行良好。如果您需要更多高级,您可以随时使用一些专用框架,例如OpenCV(也提供一些Java绑定,以便轻松集成到Android应用程序中)

你可以和同事一起查看我之前发过的一些(过时的,但仍然有用的)文章:

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