我想在一个非相机应用程序中使用一些Android 4 API。
这些API包括一些非常好的面部检测类,其中包括自API 14以来可用的Camera.Face
类。我想应用相同的面部检测类来实现设备上保存的图像的人脸检测。我更喜欢使用它来处理存储在设备本身上的图片(例如:社交标记,人脸图像操作等)。
我需要指导如何完成此重用任务。
我想在一个非相机应用程序中使用一些Android 4 API。
这些API包括一些非常好的面部检测类,其中包括自API 14以来可用的Camera.Face
类。我想应用相同的面部检测类来实现设备上保存的图像的人脸检测。我更喜欢使用它来处理存储在设备本身上的图片(例如:社交标记,人脸图像操作等)。
我需要指导如何完成此重用任务。
FaceDetector
API就可以在android.media
包下使用,它接受Bitmap
作为输入(以565格式呈现),并提供该图片中人脸的位置。以下是您需要执行的步骤:Bitmap
并将其转换为565格式
(假设您的drawable资源中有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
}
FaceDetector
类,但正如你可能知道的那样,它只检测脸部、眼睛和中间眼点,而不是鼻子和嘴巴。关于OpenCV,这正是我现在正在研究的! - Lisa Anne
FaceDetector
无法提供此功能。 - Lisa AnneOpenCV
,或者尝试实现一个鼻子和嘴巴检测算法,因为你已经知道了眼睛的位置。你可以查看OpenCV的代码来获取灵感。 - iTech