Android视觉应用性能优化

本文探讨了在Android上使用计算机视觉技术时遇到的性能挑战,包括相机数据格式转换、算法耗时、异步处理、数据读写优化及图形渲染。通过采用C++实现RGB转换,使用双缓冲提升算法输出帧率,以及合理线程管理和数据复用来优化整体流程。最后,文章建议了一种高效渲染和录制方案,以避免性能损耗。
摘要由CSDN通过智能技术生成

计算机视觉在移动端的应用,典型的如手势识别,人脸识别,流程都差不多,都是利用移动端的相机采集数据,丢给算法层,根据识别的结果来做一些业务,中间可能还要做一些图形的渲染。

本文主要讨论这中间涉及到的一些问题以及优化的思路,算是对过往工作的总结吧。大致问题有以下五点:

一,相机采集数据的格式是NV21,而算法层所需的格式是RGB,这中间需要转换,对于每秒30帧,每帧1920*1080的图像转换的耗时还是不可忽视的。

二,算法层耗时在20ms-80ms不定,这样平均下来算法输出帧率大概在15~20,而相机的原始帧率是30,这会造成明显的延时,所以如何提升算法的输出帧率是个问题。

三,整个流程是异步的,相机数据是异步的,RGB转换是异步的,算法是异步的,渲染也是异步的,如何设计整个系统让数据流稳定地跑起来,要注意线程同步的问题。

四,设计到大量的数据读写,要尽可能减少数据拷贝,尽可能复用对象

五,图形渲染,除了相机每秒30帧的预览数据,还有额外关于人脸和手的渲染效果

先说说第一点,RGB转换用Java实现肯定性能是有问题的,后来改用C++实现了,对于1280*720的帧转换平均要10ms,1920*1080可能要20ms左右了,Neon实现可能效果会好不少,不过没试过。我这里是直接采用GPU来做转换的,可以参考我的Github项目

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风语

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值