最近,我正在与谷歌ML工具包人脸检测库。我成功地实现了它,并且能够通过它检测到我的脸。玩等高线点,在额头上画一个小的边框。
在人脸检测中,它从图像代理中提供图像帧。不,我的问题是,我每秒只能得到6-7帧。我想增加帧数大约。每秒25-30帧。
我试图把目标分辨率从640x480降低到一半,然后我面临两个问题:
请帮助我增加帧数每秒。
下面是我用来完成这个任务的库和代码。
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)
}请查看以下图片以供参考

发布于 2022-05-12 16:17:57
您是否尝试过将选项设置为PERFORMANCE_MODE_FAST?它说,它将增加回报FPS,实际上我有同样的问题,但我没有机会尝试。
发布于 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源代码,做同样的事情。
发布于 2022-09-27 22:41:40
https://stackoverflow.com/questions/72196341
复制相似问题