赞
踩
FastCV是高通免费发布的计算机视觉库,类似一个小一点的OpenCV库。FastCV 最大的特点就是快,这是因为高通公司针对自己的芯片做了特别的优化的缘故。缺点也特别明显,就是 FastCV 是闭源的,只提供 API,并不提供源码,而且只能运行在高通的芯片上。
目前支持的平台:
FastCV官网提供了多种功能的API详见
https://developer.qualcomm.com/docs/fastcv/api/index.html
其中API分为如下几类:
首先在 FastCV 的官网上注册并下载 FastCV SDK
https://developer.qualcomm.com/software/fastcv-sdk
下载sdk后执行文件,执行安装。安装后的文件目录为
构建一个Android studio工程时
ndk_version:ndk16
cmake:cmke3.6.4
build.gradle:3.0.1
android-api:25
gradle:gradle-4.1-all
接下来以sample中最为复杂的fastcvDemo为例进行构建
将如上的manifest文件和jni、res、src文件夹替换构建好的Android工程,并将其中的包名还有cpp、.h文件中的函数名称替换成自己的包名
最后,因为高通官网上给出的sdk中c++编译使用的是.mk文件,兼容性过低,我们将所有的编译脚本更新为CmakeLists.txt
这里要感谢一位大佬已将将demo上传到github
https://github.com/dongxiawu/FastcvDemo
亲测可用,只要你不改变gradle和tool的版本,就是人家的什么环境你都不要动。
fastcv并没有提供源码,但是封装的函数很多,我们从demo出发,以canny边缘检测算法为例,研究fastcv从app层调用到底层实现。
首先在调用时选择filter的类型为CannyFilter,通过jni在底层将滤镜设置为canny
设置完成后,buffer的获取是在Camera的回调中进行更新
在update的jni中调用updateFilter,在这里通过一开始设置的Filter的类型,选择不同的滤镜case访问fastcv的库函数fcvFilterCanny3x3u8,在这里也可以看出,不同的算法的调用,比如上面调用的高斯滤波。
算法执行完成后,要通过render进行渲染在上面的update Jni中,先进行上图的updateFilter,再进行如下图所示的操作,该操作将yuv420数据转为RGB565
以上只是将数据转为合法数据,具体的渲染过程也是在camera的回调中,如上图,在update执行结束后调用requestRender进行渲染
最后来看一下边缘检测的效果
角点检测的算法效果
(上一篇博客有)
fastcv的使用总体来说很方便,官网声明其速度可以比同条件下的opencv快10%-15%。但是我们并没有测试数据,后续有待测试。总体使用很方便(就一个静态库)。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。