9

我目前正在研究android中的人脸识别。我在互联网上花费了合理的时间,并在 Android 中找到了 FaceDetector.Face 类。这些是这个类的实用程序:

 Constants
 float  CONFIDENCE_THRESHOLD
 int    EULER_X The x-axis Euler angle of a face.
 int    EULER_Y The y-axis Euler angle of a face.
 int    EULER_Z The z-axis Euler angle of a face.

 Public Methods
 float   confidence()
 float   eyesDistance()
 void    getMidPoint(PointF point)
 float   pose(int euler)

问题是,我不知道如何使用这些方法,也找不到任何教程或示例源代码。问题是,我应该使用 eyeDistance() 来区分人们吗?例如,莎拉的眼睛距离是 = 6.51 厘米,而约翰的眼睛距离是 = 6.82。当代码计算一个人的眼睛距离并且它是6.82时,它是否告诉你“它是约翰”这是识别人的方式吗?或者它的算法是什么?或者我应该使用 EULER 常量吗?以什么方式?我想我会使用这些方法进行人脸识别,但我不知道如何使用它。

或者你能推荐另一种人脸识别解决方案吗?任何帮助,将不胜感激。

4

2 回答 2

17

FaceDetector门课没有做你认为它做的事情。具体来说,它不做面部识别,而是面部检测(因此是类名)。

面部检测示例

它分析图像并返回Face在图像中找到的 s。除了他们眼睛之间的距离之外,它在 s之间没有区别Face(你无法分辨它是 John'sFace还是 Sarah's Face)——但这并不是一个真正有效的比较点。它只是为您提供找到的面孔以及找到的对象实际上是Faces 的置信度。

前任:

int maxNumFaces = 2; // Set this to whatever you want
FaceDetector fd = new FaceDetector(imageWidth,imageHeight,maxNumFaces);
Faces[] faces = new Faces[maxNumFaces];

try {
  int numFacesFound = fd.findFaces(image, faces);

  for (int i = 0; i < maxNumFaces; ++i) {
     Face face = faces[i];
     Log.d("Face " + i + " found with " + face.confidence() + " confidence!");
     Log.d("Face " + i + " eye distance " + face.eyesDistance());
     Log.d("Face " + i + " pose " + face.pose());
     Log.d("Face " + i + " midpoint (between eyes) " + face.getMidPoint());
  }
} catch (IllegalArgumentException e) {
  // From Docs:
  // if the Bitmap dimensions don't match the dimensions defined at initialization 
  // or the given array is not sized equal to the maxFaces value defined at 
  // initialization
}
于 2013-03-21T08:28:33.833 回答
8

正如 Tushar 所说,FaceDetector 只检测人脸。但是,您无法使用 FaceDetector 识别它们。眼距输出以像素为单位,而不是厘米或英寸。它表示人脸在位图图像中的大小。欧拉角应该代表头部的 3D 旋转。但是,如果您的应用使用 14 之前的任何 api,则欧拉角值将始终为 0.0(不计算它们)。所以,请注意这一点。

如果你想做人脸识别,可以使用opencv。我自己没有使用过,但我认为它可以在 Android 上使用。 OpenCV 中的人脸识别 http://docs.opencv.org/trunk/modules/contrib/doc/facerec/

如果您不想或无法将 OpenCV 添加到您的项目中,您可以自己编写人脸识别程序。这需要一些时间,但并不难。您可以实现特征脸的一些变体:http ://www.youtube.com/watch?v=LYgBqJorF44&list=PLd3hlSJsX_Imk_BPmB_H3AQjFKZS9XgZm&index=16

祝你好运!

于 2013-05-08T07:30:55.217 回答