FastCV是高通专门定制的一个CV库,为了提高在ARM芯片乃至晓龙芯片的图像处理算法效率。网上有人专门对比过和opencv大部分算法的处理时间,接近十倍于opencv的速度。所以很值得尝试把原来OpenCV的接口改用FastCV来实现。
库有两个版本:
- 一个运行在ARM处理器上被称为“FastCV for ARM”
- 一个运行在高通Snapdragon芯片上被称为“FastCV for Snapdragon”
Github上面搜索到FastCV的demo,地址如下:
https://github.com/dongxiawu/FastcvDemo
拉下代码后,顺利编译,在Android7.1和8系统的设备上测试,发现由于Android相机接口的更改,在高版本系统上不兼容,导致程序相机回调无法正常运行,调用马上崩溃。于是决定新建个工程,自己调动fastcv的接口进行测试。
还没细看官方的文档,觉得github上的demo已经可以正常编译,直接把必要的代码抽离出来即可。
-
首先用AndroidStudio新建个支持C++开发的工程
工程里面自动生成了CMakeLists.txt
和native.cpp
-
把FastCV Demo里的静态库和头文件加进工程
拷贝libfastcv.a
放置在工程jniLibs
目录下(可以根据不同芯片架构放置)
拷贝fastcv.h
放置在cpp
目录下 -
修改Cmake文件
在工程src
目录下的CMakeLists.txt
里添加以下代码
# 添加 fastcv 静态库
add_library(fastcv-lib STATIC IMPORTED)
set_target_properties( fastcv-lib
PROPERTIES IMPORTED_LOCATION
"${CMAKE_SOURCE_DIR}/src/main/jniLibs/libfastcv.a"
)
# 包含头文件目录
include_directories("${CMAKE_SOURCE_DIR}/src/main/cpp/")
# 添加fastcv-lib引用
target_link_libraries( native-lib
fastcv-lib
${log-lib} )
- 编写c++测试接口
修改系统自动生成的native.cpp
文件,在接口方法里添加测试代码
#include "fastcv.h"
extern "C" JNIEXPORT jstring
JNICALL
Java_com_test_fastcv_MainActivity_stringFromJNI(
JNIEnv *env,
jobject /* this */,
jbyteArray data) {
std::string hello = "Hello from C++";
char* szStr= new char[307200];
uint32_t corners[1000];
uint32_t numCorners;
fcvCornerFast9u8( (uint8_t*)szStr,
640,
480,
0,
0,
7,
corners,
300,
&numCorners);
LOGI("get corners :%d",numCorners);
delete []szStr;
return env->NewStringUTF(hello.c_str());
}
- 完成
运行代码,能输出log“get corners :0”
表示fastcv接口顺利调用
FastCV接口文档:
https://developer.qualcomm.com/docs/fastcv/api/index.html