如何在 Tracker 事件中获取 android 人脸检测器的当前帧(作为位图)?

2023-11-22

我有标准的 com.google.android.gms.vision.Trackerexample在我的 Android 设备上成功运行,现在我需要对图像进行后处理以找到当前脸部的虹膜,该虹膜已在跟踪器的事件方法中通知。

那么,如何获得与我在 Tracker 事件中收到的 com.google.android.gms.vision.face.Face 完全匹配的位图帧? 这也意味着最终位图应与网络摄像头分辨率而不是屏幕分辨率相匹配。

一个糟糕的替代解决方案是每隔几毫秒在我的 CameraSource 上调用 takePicture 并使用 FaceDetector 单独处理这张图片。虽然这有效,但我遇到了视频流在拍照期间冻结的问题,并且我收到大量 GC_FOR_ALLOC 消息,导致单个 bmp 面部检测器内存浪费。


您必须创建自己的面部跟踪器版本,它将扩展 google.vision 面部检测器。在您的 mainActivity 或 FaceTrackerActivity(在谷歌跟踪示例中)类中创建您的 FaceDetector 类版本,如下所示:

class MyFaceDetector extends Detector<Face> {
    private Detector<Face> mDelegate;

    MyFaceDetector(Detector<Face> delegate) {
        mDelegate = delegate;
    }

    public SparseArray<Face> detect(Frame frame) {
        YuvImage yuvImage = new YuvImage(frame.getGrayscaleImageData().array(), ImageFormat.NV21, frame.getMetadata().getWidth(), frame.getMetadata().getHeight(), null);
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        yuvImage.compressToJpeg(new Rect(0, 0, frame.getMetadata().getWidth(), frame.getMetadata().getHeight()), 100, byteArrayOutputStream);
        byte[] jpegArray = byteArrayOutputStream.toByteArray();
        Bitmap TempBitmap = BitmapFactory.decodeByteArray(jpegArray, 0, jpegArray.length);

        //TempBitmap is a Bitmap version of a frame which is currently captured by your CameraSource in real-time
        //So you can process this TempBitmap in your own purposes adding extra code here

        return mDelegate.detect(frame);
    }

    public boolean isOperational() {
        return mDelegate.isOperational();
    }

    public boolean setFocus(int id) {
        return mDelegate.setFocus(id);
    }
}

然后,您必须通过修改 CreateCameraSource 方法将您自己的 FaceDetector 与 CameraSource 结合起来,如下所示:

private void createCameraSource() {

    Context context = getApplicationContext();

    // You can use your own settings for your detector
    FaceDetector detector = new FaceDetector.Builder(context)
            .setClassificationType(FaceDetector.ALL_CLASSIFICATIONS)
            .setProminentFaceOnly(true)
            .build();

    // This is how you merge myFaceDetector and google.vision detector
    MyFaceDetector myFaceDetector = new MyFaceDetector(detector);

    // You can use your own processor
    myFaceDetector.setProcessor(
            new MultiProcessor.Builder<>(new GraphicFaceTrackerFactory())
                    .build());

    if (!myFaceDetector.isOperational()) {
        Log.w(TAG, "Face detector dependencies are not yet available.");
    }

    // You can use your own settings for CameraSource
    mCameraSource = new CameraSource.Builder(context, myFaceDetector)
            .setRequestedPreviewSize(640, 480)
            .setFacing(CameraSource.CAMERA_FACING_FRONT)
            .setRequestedFps(30.0f)
            .build();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Tracker 事件中获取 android 人脸检测器的当前帧(作为位图)? 的相关文章

随机推荐

  • constexpr std::array 与 static_assert

    include
  • C++ 控制台输出中的上标

    I d like to have my program output cm2 cm squared 如何制作上标2 正如 Zan 所说 这取决于您的标准输出支持的字符编码 如果它支持 Unicode 您可以使用 U 00B2 如果它支持源文
  • 生成分段迷宫的算法

    I want to generate a maze that looks like this 也就是说 它由一个方向上的路径组成 然后将这些路径连接起来 我一直在寻找一种算法来生成这样的迷宫 但没有成功 具体来说 我don t想要一个这样的
  • 我应该使用 mySQL 还是 MongoDB [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 目前有很多关于 NoSQL
  • JButton 扩展以占据整个框架/容器

    嘿大家 我正在尝试制作一个带有按钮和标签的 Swing GUI 我使用边框布局 标签 在北场 显示良好 但按钮占据了框架的其余部分 它位于中心场 知道如何解决这个问题吗 您必须将按钮添加到另一个面板 然后将该面板添加到框架 事实证明 Bor
  • Javascript:从数组中随机配对项目而不重复

    我正在尝试制作一个非常基本的 秘密圣诞老人 生成器 作为我的第一个 Javascript 项目之一 我已经搜索了几个小时来寻找这个问题的解决方案 但到目前为止我还没有发现任何有效的方法 我有一系列需要相互配对的名称 我成功地将它们配对 但现
  • 如何在 Windows 7 x64 上使用 Visual C++ 6 进行调试?

    当然答案是 你不能 或 使用 XP 模式 但我想知道是否可能 我遇到的问题是 每当我调试某个应用程序并命中断点时 当我停止调试器时 被调试者仍然卡住 它无法被杀死 我无法附加另一个调试器 它说它已经被调试 在我关闭 Visual C 之前它
  • 使用 Apollo 客户端在第二个查询中使用第一个查询的结果?

    我正在使用 Apollo React 和 Graphcool 我有一个查询来获取登录用户 ID const LoginServerQuery gql query LoginServerQuery loggedInUser id 我需要在另一
  • Console.Writeline 对性能的影响

    我有一个应用程序有 4threads 每个线程实际上是一个Timer并在特定的时间间隔内执行单独的工作 这些线程通过使用显示其日志Console Writeline 性能在此应用中非常重要 我想知道是否删除Console Writeline
  • 事件发射器从引导模式到父模式

    我想将模态事件从模态组件传递到模态的父组件 但由于某种原因 我似乎无法让 EventEmitter 工作 如果有人有想法 将不胜感激 主要代码如下 从 ng bootstrap 演示分叉的 非工作 plunk 在这里 http plnkr
  • 错误:无法卸载“wrap”。安装tensorflow-gpu时~=1.14

    我正在尝试安装以下版本的 TensorFlow GPU 因为 gitrepo 的作者建议了它here jalal goku examples pip install tensorflow gpu 1 14 Collecting tensor
  • Go 1.6 中的供应

    我已经阅读了尽可能多的文档和 StackOverflow 文章 但我没能使用 Go 1 6 中的新供应商功能进行导入 这是我整理的一个示例项目Goji去测试 目录结构是这样的 src main go vendor github com ze
  • Android - 无法找到与目标“Android 1.6”错误兼容的 AVD

    我第一次尝试运行 Android 版 Hello World 应用程序 但我不断收到 Failed to find an AVD compatible with target Android 1 6 当我尝试创建 AVD 时出错 我已尝试以
  • 为什么 git push origin master 会画 ASCII 艺术? [复制]

    这个问题在这里已经有答案了 当我跑的时候git push origin master 我看到了一张非常不寻常的 ASCII 图片 我跑了git push几百次了 以前从未见过这种情况 有什么解释吗 git push origin maste
  • 换行符或“\n”不起作用。

    你能告诉我为什么换行符 n 不起作用吗 itemsToWriteToFile Number 1 12 nNumber 2 13 nNumber 3 13 nNumber 4 14 itemsToWriteToFile str itemsTo
  • 在 LESS css 中增加一个变量

    如何在 LESS css 中增加变量 这是例子 counter 1 someSelector nameOfClass counter counter counter 1 someSelector nameOfClass counter 上面
  • 使用纯 CSS 隐藏一个元素的列表

    如果列表仅包含一个仅使用 CSS 的元素 是否有一种方法可以隐藏列表 奖励 想想 IE8 ul li hide this li ul But ul li show this li li and others li ul 我正在和所有兄弟姐妹
  • 使用 OpenStreetMap 从 data.frame 绘制点

    我对空间数据完全是新手 我有以下代码成功绘制了有界地图 我想添加 作为 data frame 存储的点 我提前道歉 无法从 OpenStreetMap 文档中弄清楚这一点 代码如下 library OpenStreetMap stores
  • AWS Athena JDBC 准备语句

    我无法使 AWS Athena JDBC 驱动程序与PreparedStatement 和绑定变量一起使用 如果我将所需的列值直接放入 SQL 字符串中 它就可以工作 但如果我使用占位符 我用PreparedStatement的setter
  • 如何在 Tracker 事件中获取 android 人脸检测器的当前帧(作为位图)?

    我有标准的 com google android gms vision Trackerexample在我的 Android 设备上成功运行 现在我需要对图像进行后处理以找到当前脸部的虹膜 该虹膜已在跟踪器的事件方法中通知 那么 如何获得与我