我想在非相机应用程序中使用一些 Android 4 API。
API 包括一些非常好的人脸检测类,包括Camera.Face
自 API 14 以来可用的类。我想应用相同的人脸检测类,以便对保存在设备上的图像实现人脸检测。我更愿意使用它来处理存储在设备本身上的图片(例如:社交标签、面部图像处理等)
我需要有关如何完成此重用任务的指导。
我想在非相机应用程序中使用一些 Android 4 API。
API 包括一些非常好的人脸检测类,包括Camera.Face
自 API 14 以来可用的类。我想应用相同的人脸检测类,以便对保存在设备上的图像实现人脸检测。我更愿意使用它来处理存储在设备本身上的图片(例如:社交标签、面部图像处理等)
我需要有关如何完成此重用任务的指导。
如果您需要检测设备上存储的图像中的人脸,您绝对可以在不破解 android 源代码的情况下做到这一点!
FaceDetector
自 API 1 起,包下就有一个API android.media
,它接受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
}
您可以在此处下载完整的项目示例,该示例在本文使用 Android API 进行人脸检测中进行了说明
如果你想要更高级的东西,你应该考虑使用 OpenCV
FaceDetectionListener 是您想要用来检测人脸的工具,但它只在相机上进行侦听。这是它唯一的本机功能。如果您真的想在用户设备上的图片上使用它,我建议您只需下载相机 API 的源代码并根据您的需要调整您想要的方法。
您可以在此处找到所有库存 android 代码的来源: https ://android.googlesource.com/
祝你好运!
你知道FaceDetector类吗?它自 API v1 以来就存在,并且运行良好。如果您需要更高级的东西,您可以随时使用一些专用框架,例如OpenCV(还提供了一些 Java 绑定,以便轻松集成到 Android 应用程序中)
您可以查看我前段时间与一位同事撰写的几篇(有点过时,但仍然有用)的文章: