使用Android SDK进行人脸识别而不是OpenCV

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)

问题在于我不知道如何使用这些方法,也找不到任何教程或示例源代码。问题是,我应该使用eyesDistance()来区分人员吗?例如,Sarah的眼距=6.51厘米,而John的为6.82。当代码计算一个人的眼距并且它是6.82时,它是否告诉你“这是约翰”是识别人的方法?还是有其他算法?或者我应该使用欧拉常数?以什么方式?我想我将使用这些方法进行人脸识别,但我不知道如何使用它。

或者您能建议另一种面部识别的解决方案吗? 任何帮助都将不胜感激。


2
能否请点踩的人留下反馈?这样我可以改进问题。 - Ayse
你可以使用这个链接,它可能对你有帮助。 http://www.edumobile.org/android/android-programming-tutorials/face-detection-example-tutorials-in-android/ - anupam sharma
2个回答

17
“FaceDetector”类并不是你想象中的那样。具体来说,“它不执行面部识别,而是面部检测”(因此这是类名)。

An example of Facial Detection

它分析图像并返回图像中发现的“Face”。除了眼睛之间的距离之外,它不区分“Face”(您无法确定它是John的“Face”还是Sarah的“Face”),但这并不是一个有效的比较点。它只会提供找到的面孔和对象确实是“Face”的置信度。
例如:
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
}

谢谢您的回复。我想也许有一个公式,我们可以使用欧拉或眼距来识别一个人。您能否为这个问题提供任何解决方案? - Ayse
@aysealmac 我认为仅凭姿势和眼睛之间的距离无法唯一识别面部,但我也不是面部识别科学方面的专家。 - Tushar
Tushar,你有这个的演示吗? - Ronak Mehta

8
正如Tushar所说,FaceDetector只能检测脸部,但无法识别它们。眼距输出以像素为单位,而不是以厘米或英寸为单位。它表示位于位图图像内的脸部的大小。欧拉角应该表示头部的三维旋转。但是,如果您的应用程序在14之前使用任何api,则欧拉角值始终为0.0(不计算)。因此,请注意此问题。
如果您想进行人脸识别,可以使用OpenCV。我自己没有使用过,但我认为它可以在Android上使用。 Face Recognition in 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 祝你好运!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接