天天看點

如何在RK3588上面使用攝像頭實時實作物體識别?

步驟如下:

1.硬體環境:Neardi LPA3588開發闆,USB camera(或者其它camera),  軟體環境: RK3588 SDK + Neardi LPA3588 Ubuntu image。

2.在LPA3588開發闆下載下傳rknpu2(GitHub - 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上面使用攝像頭實時實作物體識别?

sample code使用的是OpenCV 3的庫, 在此我們注釋了以便使用我們安裝的OpenCV 4的庫。

5.Rockchip原始的rknn_ssd_demo是對圖檔進行分析, 是以使用單線程; 在此是從攝像頭擷取資料進行物體識别, 單線程有點卡, 是以使用多線程來實作。

首先, 建立queue資料結構, 代碼如附件queue.hpp。

6.修改main.cc:

1). 添加新的頭檔案, 如下:

如何在RK3588上面使用攝像頭實時實作物體識别?

2). 建立2個全局變量, _idleimgbuf & _imgdata, 用于儲存從camera擷取的image, 并且定義最大長度是300, 如下:

如何在RK3588上面使用攝像頭實時實作物體識别?

3). 添加線程函數, 從camera讀取資料image, 如下:

如何在RK3588上面使用攝像頭實時實作物體識别?

這裡我們讀取camera第一幀資料, 以便知道camera frame的大小。

4). 更改輸入參數, 并啟動線程代碼, 如下:

如何在RK3588上面使用攝像頭實時實作物體識别?

         5). 主函數更改讀取資料部分:      

如何在RK3588上面使用攝像頭實時實作物體識别?

          完整的代碼, 請參考附件的源代碼。

6). 最後是釋放資源, 如下:

如何在RK3588上面使用攝像頭實時實作物體識别?

7.編譯及運作rknn_ssd_demo:

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

         這裡的41是/dev/video41裝置的索引, 需要根據實際camera輸入, 設别結果如下:   

如何在RK3588上面使用攝像頭實時實作物體識别?