如何在 Firebase ML kit Android 中正确绘制检测到的人脸边界框?

Posted

技术标签:

【中文标题】如何在 Firebase ML kit Android 中正确绘制检测到的人脸边界框?【英文标题】:How can I correctly draw bouding box on detected face In Firebase ML kit Android? 【发布时间】:2021-05-07 14:53:21 【问题描述】:

我正在开发一个使用 CameraX 和 Firebase ML 套件在实时摄像头中检测微笑的应用程序。 我面临的问题是我无法在检测到的面上绘制边界框。 我已将从边界框返回的点转换到我的视图中,但它不起作用,因为提供给 Firebase 模型的图像已旋转,与视图中的图像不同。

翻译和绘制边界框的代码:

    // Draws a bounding box around the face.
    float left= (float) 0.0;
    float right=(float) 0.0;
    if(facing== LENS_FACING_FRONT)
        left=canvas.getWidth()-translateX(boundingBox.left);
        right=canvas.getWidth()-translateX(boundingBox.right);
    
    else if(facing== CameraSelector.LENS_FACING_BACK) 
        left = translateX(boundingBox.left);
        right =translateX(boundingBox.right);
    
    float top =translateY(boundingBox.top);
    float bottom=translateY(boundingBox.bottom);


    canvas.drawRect(left,top,right,bottom,boxPaint);

发送到 Firebase 模型的图像代码:

FirebaseVisionImage image = FirebaseVisionImage.fromMediaImage(mediaImage, rotation1);

计算旋转:

CameraManager cameraManager = (CameraManager) context.getSystemService(CAMERA_SERVICE);
            int sensorOrientation=0 ;
            try 
                sensorOrientation = cameraManager
                        .getCameraCharacteristics(String.valueOf(lensFacing))
                        .get(CameraCharacteristics.SENSOR_ORIENTATION);
             catch (CameraAccessException e) 
                e.printStackTrace();
            

            int adjustedorientation;
            adjustedorientation=(orientation/90)*90;
            adjustedorientation=adjustedorientation+sensorOrientation;

            rotation1=(4-((adjustedorientation%360)/90))%4;

【问题讨论】:

【参考方案1】:

我们对 Firebase ML Kit 进行了一些更改,以更好地区分设备端 API 和基于云的 API。 “ML Kit”(没有 firebase 品牌)包含所有设备上的 API。 Here's 从 firebase mlkit 到 mlkit 的迁移指南。所有进一步的改进和新的 API 将仅与新的 ML Kit 一起发布。要将 mlkit 人脸检测与 CameraX 一起使用,您可以在此处查看示例代码 (https://github.com/googlesamples/mlkit/blob/master/android/vision-quickstart/app/src/main/java/com/google/mlkit/vision/demo/java/CameraXLivePreviewActivity.java),了解如何为人脸绘制叠加层。

【讨论】:

【参考方案2】:

这里是一个简单的好例子:https://github.com/happysingh23828/CameraX-FaceDetection-MlKit

【讨论】:

以上是关于如何在 Firebase ML kit Android 中正确绘制检测到的人脸边界框?的主要内容,如果未能解决你的问题,请参考以下文章

Firebase ML Kit 无法检测到人脸

SwiftUI:在 Firebase ML Kit 识别的元素周围绘制矩形

通过 Firebase ML Kit 人脸检测检测多张人脸的轮廓

无法使用 Firebase ML Kit Vision 文本检测器编译 iOS React Native 应用程序

Firebase ML套件:预训练模型

无法使用 firebase ML 套件检测眨眼事件