【问题标题】:Eye blink detection - how to?眨眼检测 - 如何?
【发布时间】:2019-10-21 23:11:34
【问题描述】:

我想检测眨眼,眨眼后我想捕捉帧并将其保存为位图。

我使用 Firebase Ml 套件示例 link 进行面部重新定位,以检测眨眼及其工作,但它正在暂停视频帧,因为它正在处理帧以检测中间的人脸。

我想要一个解决方案,可以通过高质量视频检测眨眼,然后想要捕获帧。

任何帮助都将不胜感激。

【问题讨论】:

    标签: android


    【解决方案1】:

    据我了解,您已经破解了密码,一切正常。您也可以得到想要的结果。手头的唯一问题是使用主/后台线程概念有效地完成整个任务,这样您的代码就不会冻结应用程序 UI。

    由于您没有提供任何应用程序的代码参考,我假设您已使用 Kotlin 作为您的应用程序的编程语言。 Kotlin 使用 coroutines 提供了一种出色且简单的方式来执行后台任务。

    在您的应用中使用协程的步骤(使用 anko):

    • 将此库包含在应用级build.gralde
    implementation "org.jetbrains.anko:anko-coroutines:$anko_version"
    

    有关此库的最新版本,请参阅 documentation

    • 无论您想在哪里执行需要大量后台资源的任务,请执行以下操作:
    doAsync {
        // do background task such as computations here
        uiThread {
            // after the background task is completed, and you have some results, interact with the UI here to show the results to the user.
        }
    }
    

    请认真尝试此解决方案,我相信您的问题会得到解决。几个月前,我制作了一个类似的应用程序模块,我需要实时处理来自相机馈送的帧并显示结果。这是我最终使用的解决方案。它快速、高效且精确。

    【讨论】:

    • 我试过了,但我无法打破该级别的代码来处理不同线程中的帧,因为我们还需要处理相机。除此之外,在这种情况下,我将不得不在某些数据结构中缓冲帧,这可能会导致内存不足异常。
    • 协程是轻量级线程。轻量级线程意味着它不会映射到本机线程上,因此它不需要处理器上的上下文切换,因此它们更快。您可以通过这种方式使用多个协程。示例:kotlin doAsync { uiThread { doAsync { uiThread { } } } }
    • 基本上,我想说的是(1)您不需要在不同的线程中执行此操作,因为您将使用协程,以及(2)为什么您会觉得缓冲的框架将是必需的? Firebase ML 在从相机源提供帧时是否需要花费太多时间来返回结果?
    • 不确定它是否会这样工作,因为它们的支持类是在 java 中的,并且它们都是为了共同工作而设计的。请查看示例项目 github.com/firebase/quickstart-android/tree/master/mlkit 以获得完整的理解
    猜你喜欢
    • 2015-11-27
    • 1970-01-01
    • 2015-12-11
    • 2012-11-01
    • 2011-10-28
    • 2023-04-02
    • 2020-11-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多