14

目前我正在为Android手机开发应用程序。我们想要检测脸部的特征。程序应该能够检测眼睛,鼻子,嘴巴和脸部边缘的位置。Android - 脸部特征检测

准确性应该很好,但不一定要完美。放松一些准确性来加快速度是可以的。所有的面都是正面的,我们会知道以前功能的大概位置。我们不需要实时检测。这些功能应该从保存的图像中提取。检测时间应该只要不影响用户体验。所以,甚至2或3秒都可以。

有了这个假设应该不会太难找一个库,它使我们能够实现这一目标。但我的问题是,最好的方法是什么?你有什么建议?这是我第一次为Android开发,我不想朝错误的方向发展。对我们来说一个图书馆是一个好主意,还是更好(更快/更高的准确性)来自己实现一些现有的算法?

我GOOGLE了很多,我发现了很多有趣的事情。 Android API中还有人脸检测。但返回的面孔类(http://developer.android.com/reference/android/media/FaceDetector.Face.html)仅包含眼睛的位置。这对于我们的应用来说更少。然后还有Android或JavaCV的OpenCV。你认为与合作的好主意是什么?什么图书馆有很好的文件,教程?

+1

请你在你的研究没有成功?我正在尝试做类似的事情。请告诉我! – 2013-02-05 11:16:16

回答

8

OpenCV的a tutorial for this purpose,不幸的是,C++只有那么你就必须把它转换到Android。

您也可以尝试人脸检测API在Android中,this is a simple example如果你是从一个绘制或SD卡图像检测图像。或者是最近的Camera.Face API,它可以处理相机图像。

如果你想从你的相机在动态的时间比第一次读How to take picture from camera.图像,但我会建议你检查OpenCV的Android的官方样片并使用它们。

更新:

疯帽子实施例使用照相机的方法与SurfaceView。它前途很快。看看Mad Hatter

相关的代码,以防链路出现故障,是这样的:

public class FaceDetectionListener implements Camera.FaceDetectionListener { 
    @Override 
    public final void onFaceDetection(Face[] faces, Camera camera) { 
     if (faces.length > 0) { 
      for (Face face : faces) { 
       if (face != null) { 
        // do something 
       } 
      } 
     } 
    } 
} 
+0

感谢您的快速回复。其实我不需要脸部检测。我将处理的图像只包含脸部。最重要的部分是,找到功能。哪里是眼睛,鼻子,嘴巴和脸部边缘(哪里开始背景,头发在哪里)。我只需要将其应用于存储的图像,而不是实时在相机上。你知道这个介绍吗?也许OpenCV或其他算法? – tschoartschi 2012-03-20 11:55:03

+1

FaceDetection API检测基于距离bw眼睛和其他功能的基础上的面孔。所以试图探索。如果没有找到任何运气,然后去OpenCV – Sameer 2012-03-20 12:08:14

+0

我在文档中看到。但是我想如果我知道眼睛的位置是否真的更容易提取其他特征。 Android 4还为您提供了飞蛾的坐标。所以我正在寻找类似的东西 – tschoartschi 2012-03-20 12:14:43

4

我工作的一个类似的项目。我用FaceDetection API做了一些测试,可以告诉你,如果你想检测眼睛,鼻子,嘴巴和边缘,它不会帮助你。这个API只允许你检测眼睛。如果你想实现人脸识别,这是没有用的,因为在人脸检测部分你需要更多的特征而不仅仅是眼睛。

你的第一个回复注释:你实际上需要面对检测。寻找特征是人脸检测的一部分,获取这些特征是人脸识别应用的第一步。使用OpenCV,您可以使用类似Haar的功能获取这些功能(眼睛,鼻子,嘴巴等)。

但是我发现它有点复杂,有一个单独的.cpp文件使用OpenCV的功能。有一种叫做JNIEXPORT的东西,它允许你在.cpp文件中用OpenCV函数编辑Android图库图像。 OpenCV有一个样本Haar特征检测.cpp文件,可用于人脸检测(并将识别作为其他算法的第二步)。

您是在windows还是linux上开发?我正在使用Windows,并没有设法使用您链接的教程来设置OpenCV。不过,我在Eclipse中确实有一个工作的Windows OpenCV环境,并从OpenCV 2.3.1中获得了所有示例。也许我们可以互相帮助,分享一些信息/结果?请告诉我。

+0

对于FaceDetection API,它似乎只能检测到眼睛和距离的中间部分在他们之间,但有可能找到个人的眼睛?或者是否有可能知道脸部是倾斜的? – 2014-07-26 11:27:39

2

我发现这个微软提供的API用于面部情感检测一个很好的解决方案。这个API返回一个JSON响应和情感图。你可以试试这个API来获得好的结果。

情绪API

情感识别确认对图像中的一个或更多的人,以及返回 面边框所表达的情感。检测到的情绪是快乐,悲伤,惊喜,愤怒,恐惧,鄙视和厌恶或中立。

  • 支持的输入图像格式包括JPEG,PNG,GIF(第一帧),BMP。图像文件大小不应大于4MB。
  • 如果用户已经调用了Face API,他们可以提交面部矩形作为可选输入。否则,Emotion API将首先计算矩形 。
  • 可检测的面部尺寸范围是36x36至4096x4096像素。超出此范围的面不会被检测到。
  • 对于每幅图像,检测到的人脸的最大数量是64,并且脸部按脸部矩形大小按降序排列。如果没有检测到 脸部,将返回一个空数组。
  • 由于技术挑战,可能无法检测到某些人脸。非常大的脸部角度(头部姿势),大的遮挡。 Frontal和 近前脸的效果最好。 - 情感轻蔑和厌恶是实验性的。

https://www.microsoft.com/cognitive-services/en-us/emotion-api

+0

尽管这个链接可能回答这个问题,但最好在这里包含答案的重要部分,并提供供参考的链接。如果链接页面更改,则仅链接答案可能会失效。 - [来自评论](/ review/low-quality-posts/12160409) – 2016-04-27 07:08:40

+1

Thanks @LucaDetomi – 2016-04-27 07:32:14