android opencv效率,OpenCV Detect效率研究(ARM平台)

本文探讨了在ARM平台Android设备上,使用OpenCV进行图像检测时,C++与Java代码的效率差异。通过对比实验,发现在相同条件下,Java代码的运行时间大约是C++代码的60%,并且启用TBB库后,两者的差距缩小到约6:10。研究还指出,OpenCV 2.4.10在Android设备上的性能与PC上的表现接近,与CPU的BogoMIPS比率相对应。尽管启用了TBB,但Java调用OpenCV的速度仍然比C++快,原因未明。
摘要由CSDN通过智能技术生成

sam_code@hotmail.com

之前移植过OpenCV2.0到Android平台上(但只支持NativeC调用)。基于OpenCV开发识别程序。

当时不少作算法的同事都对运行效率表示担忧和不解。最为集中的疑问是:

OpenCV计算部分为什么在双核甚至4核 1.2G, 1.6G ARM CPU 会比 4核1.8-2.4G X86

64bit CPU慢如此之多。强烈怀疑是交叉编译OpenCV时出错导致。

Sam当时只能解释虽然从CPU频率来看差距不大,但哪怕的同一架构情况下(如都是X86),也并没有一条确定的公式能够实现主频和实际的运算速度两者之间的数值关系,同主频的AMD和IntelCPU,实际计算能力就差别很大。所以x86

4核 2.4G实际计算能力应该是远超ARM 4核1.2G 的。

但这种说法没有数据验证,无法让只相信数据的工程人员心服(其实连自己也没能完全说服,毕竟精简指令集理论速度也应该快于IA-32吧)。

后来的一些数据,也让我感到很疑惑:在同样的ARM机器上,运行OpenCV2.4.10自带的Android

脸部识别程序(APK),速度竟然能达到10桢以上。这也比我们在NativeC(使用OpenCV2.0交叉编译库)层的速度要快很多。

这段时间再次接触到这一领域,决心把这个问题搞清楚。

0. 准备工作:

0.1: 测试代码的准备:

工欲善其事,比先利其器。Sam首先请同事用C++

和Java分别写了同样流程的程序。利用cv::CascadeClassifier 来做detect

(detectMultiScale).

载入的classifier

xml完全一致,共分析3000张同样的图片(640x480). scale_factor等参数完全相同。

0.2:选定OpenCV2.4.10作为基础对比库:

使用同一版本OpenCV,保证不受OpenCV不同版本效率不同的干扰。

1. 第一步测试数据:

对比项:

A:OpenCV2.4.10 Manager APK + Java例子代码。

B:OpenCV2.4.10 Native C 版本库 + C++例子代码。其中OpenCV2.4.10

Native C库,是Sam通过opencv-2.4.10 Source

Code编译的(http://blog.sina.com.cn/s/blog_602f87700102vdnw.html)

其中platforms/scripts/cmake_android_arm.sh中编译选项为:

cmake -DCMAKE_BUILD_WITH_INSTALL_RPATH=ON

-DBUILD_EXAMPLES=1

-DANDROID_ABI="armeabi-v7a

"

-DCMAKE_TOOLCHAIN_FILE=../android/android.toolchain.cmake

$@ ../..

C++代码采用Release版本(-O2), 并添加了-fomit-frame-pointer

-ffast-math。

A:运行时间为:&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值