我目前正在开发一个实验性相机应用程序。我目前正在考虑实施人脸检测,目前正在权衡我的选择。
我考虑过可用于 Android 的 OpenCV 端口并使用他们的面部检测功能,但从我看到的以前实现的演示中,相机似乎滞后了很多。
考虑到 HTC Desire 上的摄像头支持人脸检测,我知道必须至少有一个半体面的人脸检测系统。我只是想知道是否有人对我如何获得最佳结果有意见......使用可用的库?自己实现一个特定的算法?
我目前正在开发一个实验性相机应用程序。我目前正在考虑实施人脸检测,目前正在权衡我的选择。
我考虑过可用于 Android 的 OpenCV 端口并使用他们的面部检测功能,但从我看到的以前实现的演示中,相机似乎滞后了很多。
考虑到 HTC Desire 上的摄像头支持人脸检测,我知道必须至少有一个半体面的人脸检测系统。我只是想知道是否有人对我如何获得最佳结果有意见......使用可用的库?自己实现一个特定的算法?
在 Android SDK 中试用FaceDetector 。它返回 BMP 中的面部位置和角度。但这不是很快。
这是一个使用 FaceDetector 和 OpenGL(绘制矩形)的实时人脸检测示例,适用于 Android 2.2。
你最好在 Linux 上试试这个(我在 Windows 上试过,但失败了)。
JavaCV(强烈推荐)
有一个使用相机进行实时人脸检测的示例代码。请参阅下载页面上的“javacv-src-*.zip”。
Android SDK 带有一个FaceDetector,可用于在给定的位图中查找人脸。
我自己没有用过,但是面部失真应用程序的开发人员说它与 OpenCV 相比不是很准确。不过,它可能适合您的需求,这可能是 HTC Desire 的相机应用程序所使用的。
这是一个使用FaceDetector类的基本示例
public myView(Context context) {
super(context);
BitmapFactory.Options BitmapFactoryOptionsbfo = new BitmapFactory.Options();
BitmapFactoryOptionsbfo.inPreferredConfig = Bitmap.Config.RGB_565;
myBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.threepoint_shooters_1990, BitmapFactoryOptionsbfo);
imageWidth = myBitmap.getWidth();
imageHeight = myBitmap.getHeight();
myFace = new FaceDetector.Face[numberOfFace];
myFaceDetect = new FaceDetector(imageWidth, imageHeight, numberOfFace);
numberOfFaceDetected = myFaceDetect.findFaces(myBitmap, myFace);
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawBitmap(myBitmap, 0, 0, null);
Paint myPaint = new Paint();
myPaint.setColor(Color.GREEN);
myPaint.setStyle(Paint.Style.STROKE);
myPaint.setStrokeWidth(3);
for (int i = 0; i < numberOfFaceDetected; i++) {
Face face = myFace[i];
PointF myMidPoint = new PointF();
face.getMidPoint(myMidPoint);
myEyesDistance = face.eyesDistance();
canvas.drawRect((int) (myMidPoint.x - myEyesDistance * 2),
(int) (myMidPoint.y - myEyesDistance * 2),
(int) (myMidPoint.x + myEyesDistance * 2),
(int) (myMidPoint.y + myEyesDistance * 2), myPaint);
}
}
在此处下载完整的源代码: https ://github.com/Jorgesys/Android_Face_Detection