最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

RK3568-USB攝像頭實時AI物品識別

2023-05-10 22:39 作者:碼農(nóng)愛學習-B站  | 我要投稿

RK3568具有1TOPS算力的NPU,可以在板子上進行AI計算。飛凌OK3568板子資料中自帶了一些AI識別的例子,但只是對一張圖片進行識別,且需要單獨使用圖片查看工具查看識別結果。

為了更直觀的體驗RK3568的AI算力,將AI識別例程與攝像頭功能結合起來,對攝像頭的每一幀圖像進行物品識別,這里使用的是RK提供的SSD模型。

1 SSD模型介紹

SSD,全稱為Single Shot MultiBox Detector,是Wei Liu在ECCV 2016上提出的一種目標檢測算法,屬于一階段One Stage方法,SSD 模型利用不同尺度的特征圖進行目標的檢測,其模型結構圖如下:

SSD具有如下主要特點:

  • 從YOLO中繼承了將detection轉化為regression的思路,同時一次即可完成網(wǎng)絡訓練

  • 基于Faster RCNN中的anchor,提出了相似的prior box

  • 加入基于特征金字塔(Pyramidal Feature Hierarchy)的檢測方式,相當于半個FPN思路

SSD網(wǎng)絡結構圖如下:

其算法步驟為:

  • 將圖像輸入預訓練好的分類網(wǎng)絡(基于VGG16-Atrous)得到不同大小的特征映射

  • 分別提取Conv4_3、Conv7、Conv8_2、Conv9_2、Conv10_2、Conv11_2層的特征映射feature map,在每個特征映射的每個點構造6個不同大小尺度的bounding box,進行檢測和分類來生成一些列bounding box

  • 采用NMS處理不同特征映射的bounding box,刪掉部分重疊或者不正確的bounding box,得到最終的檢測框

OK3568-C開發(fā)板中自帶了已訓練好的AI模型,位于/userdata/model目錄下的ssd_inception_v2.rknn,我們直接用就可以了。

2 USB攝像頭實現(xiàn)物品識別代碼

先來看下整個代碼的項目結構,然后再來分別介紹各個功能模塊。

  • imageutil.h:圖像類型轉換相關函數(shù)

  • myvideosourceface.cpp/h:用于USB攝像頭圖像顯示

  • qtcamera.cpp/h:qt界面

  • rknn_ssd_process.cpp/h:用于SSD模型進行AI物品識別的接口函數(shù)

  • rknn_ssd.cpp/h:SSD模型相關函數(shù)

3 按幀獲取USB攝像頭圖像

Qt讀取并顯示USB攝像頭,需要3個基本元素:

  • QCamera:它是用于讀取攝像頭視頻信號的接口函數(shù)

  • QCameraInfo:它提供相機設備的常規(guī)信息,可以用來查詢系統(tǒng)上當前可用的相機設備

  • QCameraViewfinder:它提供了一個相機取景器的小部,該類繼承于QVideoWidget類,用于顯示多媒體類提供的視頻

3.1 USB相機獲取圖像

查找USB相機

3.2 改為自己的Viewfinder

上面的USB攝像頭顯示程序,使用的是Qt的QCameraViewfinder用來顯示攝像頭圖像,為了能獲取到每一幀的圖像,可以自己實現(xiàn)一個Viewfinder,然后在m_camera->setViewfinder時設置為自己的,并添加槽函數(shù)rcvFrame,當獲取到一幀圖像時,會觸發(fā)此函數(shù)。

4 圖像類型的轉換與顯示

4.1 QImage轉Mat

Qt是QCamera創(chuàng)建的USB攝像頭,獲取到的圖片格式是QImage類型,而使用OpenCV進行圖像處理,需要轉換為cv::Mat類型,轉換的方式如下:

4.2 Mat轉QImage

OpenCV進行圖像處理完成后,比如進行AI物品識別完成,并將識別的信息標記到圖像上后,需要再轉成QImage的類型用于在Qt中顯示出來,轉換的方式如下:

4.3 QImage轉QPixmap

QImage在Qt中還不能直接顯示出來,還需要再轉為QPixmap類型,轉換的方式如下:

4.4 圖像的顯示

這里創(chuàng)建一個QLabel用于顯示圖像,調(diào)用setPixmap方法即可將圖像顯示出來,最后的adjustSize用來自動調(diào)整大小。

5 RKNN例程移植

飛凌OK3568-C開發(fā)板資料中,自帶了ssd模型的測試程序,代碼位置如下,ssd的測試代碼是這3個文件:

測試代碼,需要在執(zhí)行時,輸入模型的目錄位置和測試圖片的位置,AI物品識別之后會產(chǎn)生一個輸出圖片,需要再使用圖片查看器查看結果。

為了方便功能的調(diào)用,這里將fltest_opencv_rknn_ssd_main.cc改寫為rknn_ssd_process.cpp,并將具體功能進行拆分,封裝為C++的形式。

5.1 按功能封裝為C++形式

自己封裝的RknnSsdModel類定義:

5.1.1 RKNN初始化

主要功能是根據(jù)傳入的rknn模型進行相關的初始化

5.1.2 RKNN運行

傳入一張Mat格式的圖片(一幀視頻圖像),經(jīng)過AI識別,并將識別的信息標注到圖片上后,將識別結果也以Mat格式傳出:

5.2 AI識別調(diào)用

OK3568-C開發(fā)板中自帶了已訓練好的AI模型,位于/userdata/model目錄下的ssd_inception_v2.rknn,在程序初始化時需要用到。

AI識別的代碼邏輯為:先在qtCamera初始化時調(diào)用RKNN的初始化,然后打開USB攝像頭,USB獲取到每幀圖像后, 調(diào)用DoRknnSsd進行AI物品識別,最后將識別的結果通過setPixmap方法展示出來

5.3 編譯

需要注意下Qt工程的配置文件,要把opencv的一些庫鏈接進去

qcamera.pri

qcamera.pro

最后的編譯腳本還和之前的一樣:

6 總結

本篇介紹了在飛凌OK3568-C開發(fā)板中,外接USB攝像頭,利用Qt和RKNN進行AI物品識別,通過已訓練好的SSD模型,進行攝像頭畫面的實時AI物品檢查的代碼實現(xiàn)原理。


RK3568-USB攝像頭實時AI物品識別的評論 (共 條)

分享到微博請遵守國家法律
秀山| 濉溪县| 南城县| 巴南区| 海林市| 罗田县| 曲松县| 嘉兴市| 宜都市| 胶南市| 惠安县| 西峡县| 浑源县| 五峰| 汾西县| 图木舒克市| 荆州市| 桦甸市| 双鸭山市| 塔城市| 晋宁县| 上林县| 库尔勒市| 麟游县| 沙坪坝区| 临邑县| 黄梅县| 清远市| 大英县| 岱山县| 广元市| 禄丰县| 沾化县| 汶上县| 许昌县| 灵璧县| 阳谷县| 大埔县| 瑞金市| 日土县| 二连浩特市|