如何在RK3588上面使用摄像头实时实现物体识别?

  • 1.硬件环境:Neardi LPA3588开发板,USB camera(或者其它camera),  软件环境: RK3588 SDK + Neardi LPA3588 Ubuntu image。
  • 2.在LPA3588开发板下载rknpu2(https://github.com/rockchip-linux/rknpu2)。
  • 3.在LPA3588上面安装OpenCV, 如下:
  • sudo apt install libopencv-dev libopencv-videoio-dev  libopencv-video-dev libopencv-imgproc-dev libopencv-highgui-dev
  • 4.在此以rknn_ssd_demo上进行更改, 进入rknn_ssd_demo目录, 修改CMakeLists.txt, 如下:
  • 如何在RK3588上面使用摄像头实时实现物体识别?_第1张图片

 

sample code使用的是OpenCV 3的库, 在此我们注释了以便使用我们安装的OpenCV 4的库。

5.Rockchip原始的rknn_ssd_demo是对图片进行分析, 因此使用单线程; 在此是从摄像头获取数据进行物体识别, 单线程有点卡, 因此使用多线程来实现。

首先, 创建queue数据结构, 代码如附件queue.hpp。

6.修改main.cc:

1). 添加新的头文件, 如下:

如何在RK3588上面使用摄像头实时实现物体识别?_第2张图片

 2). 创建2个全局变量, _idleimgbuf & _imgdata, 用于保存从camera获取的image, 并且定义最大长度是300, 如下:

如何在RK3588上面使用摄像头实时实现物体识别?_第3张图片

 3). 添加线程函数, 从camera读取数据image, 如下:

如何在RK3588上面使用摄像头实时实现物体识别?_第4张图片

 

这里我们读取camera第一帧数据, 以便知道camera frame的大小。

4). 更改输入参数, 并启动线程代码, 如下:

如何在RK3588上面使用摄像头实时实现物体识别?_第5张图片

 5). 主函数更改读取数据部分:

如何在RK3588上面使用摄像头实时实现物体识别?_第6张图片

 

完整的代码, 请参考附件的源代码。

   6). 最后是释放资源, 如下:

如何在RK3588上面使用摄像头实时实现物体识别?_第7张图片

 

7.编译及运行rknn_ssd_demo:

         ./rknn_ssd_demo ./model/RK3588/ssd_inception_v2.rknn 41

         这里的41是/dev/video41设备的索引, 需要根据实际camera输入, 设别结果如下: 

 如何在RK3588上面使用摄像头实时实现物体识别?_第8张图片

源代码:neardi-ssd-demo.src.tar.gz-Linux文档类资源-CSDN下载 

你可能感兴趣的:(c++,c#,r语言,git)