使用较小的位图,面部检测器移动视觉速度不会提高

问题描述 投票:0回答:1

摘要:我们的应用程序依赖于面部标志物的高检测速度(=睁眼或闭眼)。因此,我开发了一种算法,该算法从上一帧开始获取人脸的位置,并从下一帧开始裁剪图像。这可以完美工作,并且人脸检测器只需处理四分之一的图像。

但是不会提高检测速度。有人知道为什么吗?

编辑:我的算法正在做的就是基于来自最后一张图像的信息来裁剪图像。但是它不执行ImageRecognition本身。我们正在使用Mobile Vision from Google

重要的代码段:

此摘录在将位图传递到人脸检测器之前执行。它采用前一帧的脸部位置,并且仅通过图像的这一部分:

Bitmap bitmapReturn = Bitmap.createBitmap(bitmap, topLeftX, topLeftY, width, height);

此片段在人脸检测器处理完帧后执行。它为下一帧提供图像的位置:

        float spotY = getSpotY(face);
        float spotX = getRatioX(face);
        int moveX = (int) (((float)bitMapScanWidth / 2) - spotX) ;
        int moveY = (int) (((float)bitMapScanHeight / 2) - spotY);
        moveValues(moveX, moveY);

[还有一些其他代码片段可确保图像值topLeftXtopLeftY不会达到位图大小以外的值,而另一些代码片段可确保人脸在图像上的大小相同。

但是如前所述。算法工作正常,但不再导致速度提高。我不知道为什么,因为它可以大大减少所需的计算时间。谁能解释我为什么不是这种情况?我需要调整一些东西吗?还是有另一种方法可以提高算法速度?

请注意,当我比较两个版本之间的速度(使用裁剪图像的算法和不使用裁剪图像的算法)时,两个版本实际上都是通过所需功能来计算的,以裁剪图像。唯一的区别是,其中一个实际使用值来裁剪图像,而另一个仅在背景中计算了它们。这意味着,我的算法所需的计算不是速度提高缺失的原因。

java android bitmap computer-vision face-detection
1个回答
0
投票

如果您正在构建自己的面部识别算法,则可以尝试更改实际算法并使用适合于移动设备的体系结构。例如MobilNetSSD等,您也可以尝试更改算法的编译方式并将其部署到移动设备上,因为这两种技术都可以提高性能,而不仅仅是简单的裁剪功能即可完成。此外,如果您在共享所使用的实际算法时没有任何问题,我会尽力查看为什么裁剪不适用于您的特定情况。

© www.soinside.com 2019 - 2024. All rights reserved.