Rockchip提供了一套RKNN API SDK,该SDK为基于 RK3399Pro Linux/Android 的神经网络NPU硬件的一套加速方案,可为采用RKNN API 开发的AI相关应用提供通用加速支持。
Linux系统
应用程序只需要包含该头文件和动态库,就可以编写相关的AI应用。
Fedora
通过dnf安装rknn-api开发包
sudo dnf install –y rknn-api
使用方式如下:
a. 引用头文件:
#include
b. 在Makefile中添加如下语句链接库文件:
LDFLAGS += -lrknn_api
使用方式如下:
a. 将rknn_api目录拷贝到项目根目录
b. 引用头文件:
#include "rknn_api.h"
c. 在Makefile中添加如下语句设置链接库路径和头文件路径
CFLAGS += -Lrknn_api/lib64 -Irknn_api/include
d. 在Makefile中添加如下语句链接库文件:
LDFLAGS += -lrknn_api
最终参考目录结构如下:
...
├── Makefile
└── rknn_api
├── include
│ └── rknn_api.h
└── lib64
└── librknn_api.so
...
Ubuntu
Android系统
RKNN API支持Android 8.1/Android9.0且由Firefly发布的系统(或从发布的源码中编译的系统)。
RKNN API的动态库路径为lib64/librknn_api.so和lib/librknn_api.so。应用程序只需要包含该头文件和动态库,就可以编写相关的AI应用的JNI库。目前Android上只支持采用JNI的开发方式。
Android Studio具体配置方式如下:
a. 将lib64/librknn_api.so复制到项目jniLibs/arm64-v8a目录下,将lib/librknn_api.so复制到jniLibs/armeabi-v7a目录下。结果目录结果如下:
├── jniLibs
│ └── arm64-v8a
│ └── librknn_api.so
│ └── armeabi-v7a
│ └── librknn_api.so
b. 将rknn_api.h复制到jni源码目录下,如下参考:
├── jni
│ ├── direct_texture.cc
│ ├── direct_texture.h
│ ├── rknn_api.h
│ ├── ssd_image.cc
│ ├── ssd_image.h
│ ├── ssd_native_c_api.cc
│ └── ssd_native_c_api.h
c. 配置CMakeLists.txt,链接librknn_api.so
...
set(link_libs ${CMAKE_SOURCE_DIR}/src/main/jniLibs/${ANDROID_ABI}/librknn_api.so
...
${log-lib}
)
target_link_libraries( rkssd4j
${link_libs} )
...
d. 配置build.gradle只编译arm64-v8a和armeabi-v7a的jni库
android {
compileSdkVersion 28
buildToolsVersion '28.0.3'
defaultConfig {
...
ndk {
abiFilters "arm64-v8a", "armeabi-v7a"
}
}
...
externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}
}
最终目录结构大致如下:
# pwd: $(project_root)/app
.
├── app.iml
├── build
...
├── build.gradle
├── CMakeLists.txt
└── src
└── main
├── AndroidManifest.xml
...
├── jni
│ ├── direct_texture.cc
│ ├── direct_texture.h
│ ├── rknn_api.h
│ ├── ssd_image.cc
│ ├── ssd_image.h
│ ├── ssd_native_c_api.cc
│ └── ssd_native_c_api.h
├── jniLibs
│ └── arm64-v8a
│ └── librknn_api.so
│ └── armeabi-v7a
│ └── librknn_api.so
...
原作者:Firefly Wiki