该demo是在Toybrick社区下载的,开发环境是 RK3399Pro Linux,实现了简单的物体检测!
RKNN API调用流程:
通过该API去调用NPU(神经网络计算单元),在JNI文件里面. input包括相片和一些数据,output则是ssd nms处理的目标.
1.读取rknn模型文件(使用RKNN模型工具生成的.rknn文件,打在res/raw/ssd.rknn)到内存
2.使用rknn_init进行context初始化,加载rknn模型
3.使用rknn_query获取input,output的属性
4.使用rknn_input_set对inputs进行设置
5.使用rknn_run进行单次推理操作
6.使用rknn_outputs_get获取outputs
7.使用rknn_output-release释放已获取的output
8.返回到第4步骤可进行多次推理
9.程序退出则调用rknn_destroy销毁context卸载rknn模型
demo基本流程:
1.在MainActivity中对GLsurfaceView进行初始化,定义渲染器Render(class CameraSurfaceRender),以及开辟线程用于fps的显示(type=0)和绘制显示default box(type=1).
2.在CameraSurfaceRender的onSurfaceCreate方法中进行startCamera()和startTrack()操作;
startCamera是打开摄像头以及配置相机参数;
startTrack()是创建图像缓冲队列(ImageBufferQueue),同时生成纹理(create_direct_texture)并将纹理保存到帧缓冲区中(重写finalize()方法,在垃圾回收器准备释放资源时会先调用finalize,在该方法中进行释放帧缓冲区和删除纹理操作delete_direct_texture),根据纹理id