gpt4 book ai didi

android - Mobile Vision API 的面部跟踪(而非检测)能否独立于其 CameraSource 使用?

转载 作者:搜寻专家 更新时间:2023-11-01 09:26:45 28 4
gpt4 key购买 nike

这个问题是关于使用 Google's Mobile Vision Face API在 Android 上。

故事(背景)和我想做的事

我正在尝试实现一个功能,该功能可以检测相机 View 中的人脸,并将图像叠加在这些人脸上。

现在,我已经通过使用 Mobile Vision API 的 Face Detection 成功实现了这样的功能 。它的机制是这样的:

  1. 一个 CameraView(我正在使用 Fotoapparat在这里)那个 可以在回调中传递每个相机帧
  2. 我把那个框架变成了 Bitmap
  3. 将位图传递给 Mobile Vision API 进行人脸检测
  4. 当检测到人脸时,我得到它的位置和大小
  5. 使用该位置信息,在另一个自定义 View 上绘制一些东西。

问题是,上述过程显然花费了太多时间。我每秒只能更新叠加图像位置 3-5 次,在较慢的设备上更新频率更低。

通过看profiling,最重的方法竟然是第3步(人脸检测)。执行一次平均需要100ms。
第二种方法是将 NV21 帧转换为 Bitmap 对象,大约需要 90ms。
现在总结所有内容,我得到 3~5 的更新 FPS。

但除此之外,一切都完美无缺 - 图像可以高质量拍摄,具有自动对焦双指缩放

人脸追踪怎么样?

另一方面,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. 拍摄的高质量图像
  2. 自动对焦
  3. 缩放
  4. 快速面部定位更新(每秒大约 10 次就足够了)

1-3可以用Face Detection来完成,但是4不行;
虽然 4 可以使用 Face Tracker 完成,但 1-3 不行。

是否有办法完成所有 1-4?我欢迎任何建议,即使是使用另一个库而不是 Mobile Vision。

感谢您将这么长的问题看完!

最佳答案

CameraSource.java 可用 on GitHub在宽容下Apache license .随意添加自动对焦和缩放。

关于android - Mobile Vision API 的面部跟踪(而非检测)能否独立于其 CameraSource 使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50066035/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com