14

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

准确度应该没问题,但不需要完美。可以放松一些准确性以加快速度。所有的脸都是正面的,我们之前会知道特征的大致位置。我们不需要活体检测。应从保存的图像中提取特征。检测时间应该只要不影响用户体验。因此,即使 2 或 3 秒也可以。

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

我google了很多,我发现了很多有趣的东西。Android API 中还有人脸检测功能。但是返回的人脸类(http://developer.android.com/reference/android/media/FaceDetector.Face.html)只包含眼睛的位置。这对我们的应用程序来说是更少的。然后还有适用于 Android 或 JavaCV 的 OpenCV。你认为合作的好主意是什么?什么库有好的文档、教程?

4

5 回答 5

8

OpenCV 有一个为此目的的教程,不幸的是只有 C++,所以你必须将它转换为 Android。

您也可以在 Android 中尝试 FaceDetection API,如果您从可绘制或 sdcard 图像中检测图像,这是一个简单的示例。或者更新的Camera.Face API,它适用于相机图像。

如果您想在动态时间从相机中获取图像,请先阅读如何从相机中拍照。,但我建议您查看官方的 OpenCV Android 示例并使用它们。

更新:

Mad Hatter Example 使用 Camera 和 SurfaceView 的方法。它的速度非常快。看看疯帽子

如果链接断开,相关代码是这样的:

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
                }
            }
        }
    }
}
于 2012-03-20T09:21:58.943 回答
4

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

对您的第一个回复的评论:您实际上确实需要面部检测。寻找特征是人脸检测的一部分,而获得这些特征是人脸识别应用程序的第一步。使用 OpenCV,您可以使用类似 Haar 的特征来获取这些特征(眼睛、鼻子、嘴巴等)。

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

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

于 2012-03-21T11:58:39.470 回答
2

我找到了这个 Microsoft API 提供的面部情绪检测的一个很好的解决方案。此 API 返回 JSON 响应和情绪图。你可以试试这个 API 以获得好的结果。

情感API

Emotion Recognition 识别图像中一个或多个人表达的情绪,并返回面部的边界框。检测到的情绪是快乐、悲伤、惊讶、愤怒、恐惧、蔑视和厌恶或中性。

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

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

于 2016-04-27T05:04:31.957 回答
0

这是一个很好的查询。我想如果你得到眼睛的特征点,那么我们也可以通过知道其他点与眼睛的估计距离来计算其他点。

请参阅本文以了解更多关于我想说的内容:http: //klucv2.googlecode.com/svn/trunk/docs/detection%20of%20facial%20feature%20points%20using%20anthropometric%20face%20model.pdf

我希望这有帮助。

于 2014-04-29T10:29:52.577 回答
0

看看新的 Android 人脸 API,其中包括人脸地标检测。这里有一个教程:

https://developers.google.com/vision/detect-faces-tutorial

于 2015-08-20T16:54:35.683 回答