目前我正在开发适用于Android手机的应用。我们想要检测脸部的特征。该程序应该能够检测到眼睛,鼻子,嘴巴和脸部边缘的位置。
准确性应该没问题,但不一定要完美。可以放松一些准确性以加快速度。所有的面都是正面的,我们之前会知道这些特征的大致位置。我们不需要实时检测。应从保存的图像中提取要素。检测时间应该只要不影响用户体验。所以即使2或3秒也可以。
有了这个假设,找到一个能让我们实现这个目标的库不应该太难。但我的问题是,最好的方法是什么?你的建议是什么?这是我第一次为Android开发,我不想跑错方向。对我们来说一个库是个好主意还是我自己实现一些现有算法更好(更快/更高准确度)?
我google了很多,我发现了很多有趣的东西。 Android API中还有面部检测功能。但是返回的面部类(http://developer.android.com/reference/android/media/FaceDetector.Face.html)仅包含眼睛的位置。这对我们的应用来说更少。然后还有适用于Android或JavaCV的OpenCV。您认为合作的好主意是什么?对于哪个库有好的文档,教程?
答案 0 :(得分:8)
OpenCV有a tutorial for this purpose,遗憾的是只有C ++,因此您必须将其转换为Android。
如果要检测来自drawable或SD卡图像的图像,您还可以在Android中尝试使用FaceDetection API this is a simple example。或者与摄像机图像一起使用的最新Camera.Face API。
如果您希望动态时的相机图像比首次阅读How to take picture from camera.,但我建议您查看官方OpenCV Android样本并使用它们。
<强>更新强>
Mad Hatter示例使用Camera with 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
}
}
}
}
}
答案 1 :(得分:4)
我正在开展一个类似的项目。我使用FaceDetection API进行了一些测试,可以告诉你,如果你想检测眼睛,鼻子,嘴巴和边缘,它不会帮助你。此API仅允许您检测眼睛。如果你想实现面部识别是没用的,因为在面部检测部分你需要的功能不仅仅是眼睛。
对您的第一个回复发表评论:您确实需要进行面部检测。查找要素是人脸检测的一部分,获取这些功能是人脸识别应用程序的第一步。使用OpenCV,您可以使用 Haar-like功能来获取这些功能(眼睛,鼻子,嘴巴等)。
但是我发现将openCV函数与单独的.cpp文件一起使用有点复杂。有一个名为JNIEXPORT的东西,它允许您在.cpp文件中编辑带有OpenCV函数的Android图库图像。 OpenCV有一个类似Haar的特征检测.cpp文件,可以用于人脸检测(和其他算法的第二步识别)。
您是在Windows或Linux上开发的吗?我正在使用Windows并且没有设法使用您链接的教程来设置OpenCV。但是我在Eclipse中有一个工作的Windows OpenCV环境,并且从OpenCV 2.3.1开始工作。也许我们可以互相帮助并分享一些信息/结果?请告诉我。
答案 2 :(得分:2)
我找到了一个很好的解决方案,可以解决这个Microsoft API提供的面部情感检测。此API返回JSON响应和情感图。您可以尝试使用此API以获得良好的结果。
Emotion API
情感识别 识别图像中一个或多个人表达的情感,并返回一个边框。 面对。检测到的情绪是快乐,悲伤,惊讶,愤怒, 恐惧,蔑视,厌恶或中立。
- 支持的输入图像格式包括JPEG,PNG,GIF(第一帧),BMP。图像文件大小不应大于4MB。
- 如果用户已调用Face API,则可以将面部矩形作为可选输入提交。否则,Emotion API将首先出现 计算矩形。
- 可检测的脸部尺寸范围为36x36至4096x4096像素。超出此范围的面将无法检测到。
- 对于每个图像,检测到的最大面部数量为64,并且面部按面部矩形大小按降序排列。如果不 检测到face,将返回一个空数组。
- 由于技术挑战,可能无法检测到某些面部,例如:非常大的面角(头部姿势),大的咬合。正面和 近前脸有最好的效果。 - 情绪蔑视和 厌恶是实验性的。
https://www.microsoft.com/cognitive-services/en-us/emotion-api
答案 3 :(得分:0)
这是一个很好的查询。我想如果你得到眼睛的特征点,那么我们也可以通过知道眼睛中其他点的估计距离来计算其他点。
请参阅此文章,详细了解我想说的内容:http://klucv2.googlecode.com/svn/trunk/docs/detection%20of%20facial%20feature%20points%20using%20anthropometric%20face%20model.pdf
我希望这会有所帮助。
答案 4 :(得分:0)
看看新的Android face API,其中包括面部地标检测。这里有一个教程: