这个问题是关于在Android上使用Google's Mobile Vision Face API。
我正在尝试实现一个功能,可以检测相机视图中的面部,并在这些面上覆盖图像。
现在,我已经使用Mobile Vision API Face Detection 成功实现了此功能。它的机制是这样的:
Bitmap
问题是,上述过程显然需要花费太多时间。我只能每秒更新覆盖图像位置3-5次,在较慢的设备上更不频繁。
通过观察剖析,令人惊讶的是,最重的方法是步骤3(面部剔除)。执行一次平均需要100毫秒 第二种方法是将NV21帧转换为Bitmap对象,大约需要90ms 总结一切现在我得到3~5的更新FPS。
但除此之外,每件事情都很完美 - 图像可以在高质量中捕获,自动对焦和捏缩放。< / p>
另一方面,Mobile Vision API提供了另一种API - Face Tracking。
在Google的示例应用中,跟踪速度非常快,几乎可以立即跟踪相机预览中的人脸。如文件中所述,这是因为机制完全不同 - 一旦检测到面部,就不会检测每个框架上的面部,只需跟踪其移动位置而不执行任何面部检测。
但事实上这种机制在我的用例中已经足够了!
但是,通过查看示例代码,看起来我必须使用其内置的CameraSource
实现。这可以在下面的代码中找到:
mCameraSource = new CameraSource.Builder(context, detector)
.setRequestedPreviewSize(640, 480)
.setFacing(CameraSource.CAMERA_FACING_BACK)
.setRequestedFps(30.0f)
.build();
detector
是此处的主角,只有在传递给CameraSource
时才会使用它。 看来我必须坚持使用此CameraSource
。
但是,虽然此相机来源采用takePicture()
方法,但我找不到任何方法来实施自动对焦和缩放。
我的最终目标是实现我在开头提到的功能,具有以下要求:
1-3可以使用人脸检测完成,但不能使用4; 虽然4可以使用Face Tracker完成,但不能使用1-3。
有没有办法完成所有1-4?我欢迎任何建议,即使是使用另一个库而不是Mobile Vision。
感谢您阅读这么久的问题直到最后!