首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ML试剂盒在人脸检测中如何提高每秒帧数

ML试剂盒在人脸检测中如何提高每秒帧数
EN

Stack Overflow用户
提问于 2022-05-11 06:29:00
回答 3查看 277关注 0票数 1

最近,我正在与谷歌ML工具包人脸检测库。我成功地实现了它,并且能够通过它检测到我的脸。玩等高线点,在额头上画一个小的边框。

在人脸检测中,它从图像代理中提供图像帧。不,我的问题是,我每秒只能得到6-7帧。我想增加帧数大约。每秒25-30帧。

我试图把目标分辨率从640x480降低到一半,然后我面临两个问题:

  1. 输入图像质量很差。
  2. 因此,输出图像失去了YUV值,提供了灰绿色图像。

请帮助我增加帧数每秒。

下面是我用来完成这个任务的库和代码。

代码语言:javascript
复制
implementation 'com.google.mlkit:face-detection:16.1.5'
implementation 'androidx.camera:camera-core:1.0.2'
implementation 'androidx.camera:camera-camera2:1.0.2'
implementation 'androidx.camera:camera-lifecycle:1.0.2'
implementation 'androidx.camera:camera-view:1.0.0-alpha32'

private fun getImageBitmap(mediaImage: Image): Bitmap {
    val yBuffer = mediaImage.planes[0].buffer // Y
    val vuBuffer = mediaImage.planes[2].buffer // VU

    val ySize = yBuffer.remaining()
    val vuSize = vuBuffer.remaining()

    val nv21 = ByteArray(ySize + vuSize)

    yBuffer.get(nv21, 0, ySize)
    vuBuffer.get(nv21, ySize, vuSize)

    val yuvImage = YuvImage(nv21, ImageFormat.NV21, mediaImage.width, mediaImage.height, null)
    val outputStream = ByteArrayOutputStream()
    //yuvImage.compressToJpeg(cropRect, 100, outputStream)
    yuvImage.compressToJpeg(Rect(0, 0, yuvImage.width, yuvImage.height), 100, outputStream)
    val imageBytes = outputStream.toByteArray()
    val bitmap = BitmapFactory.decodeByteArray(imageBytes, 0, imageBytes.size)
    val rotated = rotateBitmap(bitmap, 270F)
    val bos = ByteArrayOutputStream()
    rotated.compress(CompressFormat.JPEG, 100, bos) //100 is the best quality possibe
    val square = bos.toByteArray()
    return BitmapFactory.decodeByteArray(square, 0, square.size)
}

请查看以下图片以供参考

EN

回答 3

Stack Overflow用户

发布于 2022-05-12 16:17:57

您是否尝试过将选项设置为PERFORMANCE_MODE_FAST?它说,它将增加回报FPS,实际上我有同样的问题,但我没有机会尝试。

票数 0
EN

Stack Overflow用户

发布于 2022-05-21 17:25:54

您正在代码中进行不必要的格式转换。将YUV图像编码为JPEG,然后解码回RGB将对您的性能造成影响。

CameraX提供了一个将MLKit与CameraX集成的特性。请看MLKitAnalyzer。它还处理像坐标转换这样的困难任务。您可以在这里查看示例:https://github.com/androidx/androidx/blob/androidx-main/camera/integration-tests/viewtestapp/src/main/java/androidx/camera/integration/view/MlKitFragment.kt

如果你想自己做这件事,那么我建议你看看MLKitAnalyzer源代码,做同样的事情。

票数 0
EN

Stack Overflow用户

发布于 2022-09-27 22:41:40

如果你只想在距相机2米范围内检测人脸(自拍使用)。您可以使用人脸网格检测模式尝试新的BOUNDING_BOX_ONLY

它比旧的人脸检测(快速模式)更快:

像素3~14 ms与像素3~60 ms

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72196341

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档