@TOC
目標(biāo)檢測(cè)
本文檔展示了如何使用 lockzhiner_vision_module::vision::PaddleDet 類進(jìn)行目標(biāo)檢測(cè),并通過
lockzhiner_vision_module::vision::Visualize 函數(shù)將檢測(cè)結(jié)果可視化。
1. 基礎(chǔ)知識(shí)講解
1.1 目標(biāo)檢測(cè)的基本介紹
目標(biāo)檢測(cè)是計(jì)算機(jī)視覺領(lǐng)域中的一個(gè)關(guān)鍵任務(wù),它不僅需要識(shí)別圖像中存在哪些對(duì)象,還需要定位這些對(duì)象的位置。具體來說,目標(biāo)檢測(cè)算法會(huì)輸出每個(gè)檢測(cè)到的對(duì)象的邊界框(Bounding Box)以及其所屬類別的概率或置信度得分。
- 應(yīng)用場(chǎng)景:目標(biāo)檢測(cè)技術(shù)廣泛應(yīng)用于多個(gè)領(lǐng)域,包括但不限于安全監(jiān)控、自動(dòng)駕駛汽車、智能零售和醫(yī)療影像分析。
1.2 PaddleDetection 的基本介紹
PaddleDetection 是基于百度飛槳深度學(xué)習(xí)框架開發(fā)的一個(gè)高效的目標(biāo)檢測(cè)庫,支持多種先進(jìn)的目標(biāo)檢測(cè)模型,如 YOLO 系列、SSD、Faster R-CNN、Mask R-CNN 等。它提供了簡(jiǎn)單易用的接口,使得開發(fā)者能夠快速部署高性能的目標(biāo)檢測(cè)應(yīng)用。
- 特點(diǎn):
- 高性能:優(yōu)化了推理速度,在保持高精度的同時(shí)實(shí)現(xiàn)了快速響應(yīng)。
- 靈活性:支持多種預(yù)訓(xùn)練模型,可以根據(jù)具體需求選擇合適的模型架構(gòu)。
- 易于集成:提供 C++ API,便于嵌入式系統(tǒng)或桌面應(yīng)用程序中使用。
- 豐富的模型庫:涵蓋單階段(One-stage)和雙階段(Two-stage)檢測(cè)模型,滿足不同場(chǎng)景的需求。
- 適用場(chǎng)景:適用于需要對(duì)視頻流或圖像進(jìn)行實(shí)時(shí)分析的應(yīng)用場(chǎng)景,例如安防監(jiān)控、智能交通系統(tǒng)、工業(yè)自動(dòng)化等。
2. API 文檔
2.1 PaddleDetection 類
2.1.1 頭文件
#include < lockzhiner_vision_module/vision/deep_learning/detection/paddle_det.h >
2.1.2 構(gòu)造函數(shù)
lockzhiner_vision_module::vision::PaddleDetection();
- 作用:
- 創(chuàng)建一個(gè) PaddleDetection 對(duì)象,并初始化相關(guān)成員變量。
- 參數(shù):
- 無
- 返回值:
- 無
2.1.3 Initialize函數(shù)
bool Initialize(const std::string& model_path);
- 作用:
- 加載預(yù)訓(xùn)練的 PaddleDetection 模型。
- 參數(shù):
- model_path:模型路徑,包含模型文件和參數(shù)文件。
- 返回值:
- true:模型加載成功。
- false:模型加載失敗。
2.1.4 SetThreshold函數(shù)
void SetThreshold(float score_threshold = 0.5, float nms_threshold = 0.3);
- 作用:
- 設(shè)置目標(biāo)檢測(cè)的置信度閾值和NMS閾值。
- 參數(shù):
- score_threshold:置信度閾值,默認(rèn)值為0.5。
- nms_threshold:NMS閾值,默認(rèn)值為0.3。
- 返回值:
- 無
2.1.5 Predict函數(shù)
std::vector< lockzhiner_vision_module::vision::DetectionResult > Predict(const cv::Mat& image);
- 作用:
- 使用加載的模型對(duì)輸入圖像進(jìn)行目標(biāo)檢測(cè),返回檢測(cè)結(jié)果。
- 參數(shù):
- input_mat (const cv::Mat&): 輸入的圖像數(shù)據(jù),通常是一個(gè) cv::Mat 變量。
- 返回值:
- 返回一個(gè)包含多個(gè) DetectionResult 對(duì)象的向量,每個(gè)對(duì)象表示一個(gè)檢測(cè)結(jié)果。
2.2 DetectionResult 類
2.2.1 頭文件
#include < lockzhiner_vision_module/vision/utils/visualize.h >
2.2.2 box函數(shù)
lockzhiner_vision_module::vision::Rect box() const;
- 作用:
- 獲取目標(biāo)檢測(cè)結(jié)果的邊界框。
- 參數(shù):
- 無
- 返回值:
- 返回一個(gè) lockzhiner_vision_module::vision::Rect 對(duì)象,表示目標(biāo)檢測(cè)結(jié)果的邊界框。
2.2.3 score函數(shù)
float score() const;
- 作用:
- 獲取目標(biāo)檢測(cè)結(jié)果的置信度得分。
- 參數(shù):
- 無
- 返回值:
- 返回一個(gè) float 類型的置信度得分。
2.2.4 label_id函數(shù)
- 作用:
- 獲取目標(biāo)檢測(cè)結(jié)果的標(biāo)簽ID。
- 參數(shù):
- 無
- 返回值:
- 返回一個(gè)整數(shù),表示目標(biāo)檢測(cè)結(jié)果的標(biāo)簽ID。
2.3 Visualize 函數(shù)
2.3.1 頭文件
#include < lockzhiner_vision_module/vision/utils/visualize.h >
2.3.2 函數(shù)定義
void lockzhiner_vision_module::vision::Visualize(
const cv::Mat& input_mat,
cv::Mat& output_image,
const std::vector< lockzhiner_vision_module::vision::DetectionResult >& results,
const std::vector< std::string >& labels = {},
float font_scale = 0.4
);
- 作用:
- 將目標(biāo)檢測(cè)結(jié)果可視化到輸入圖像上,并返回可視化后的圖像。
- 參數(shù):
- input_mat (const cv::Mat&): 輸入圖像。
- output_image (cv::Mat&): 輸出圖像,包含標(biāo)注后的結(jié)果。
- results (const std::vectorlockzhiner_vision_module::vision::DetectionResult&): 檢測(cè)結(jié)果列表。
- labels (const std::vectorstd::string&): 可選的標(biāo)簽列表,用于標(biāo)注類別名稱,默認(rèn)為空。
- font_scale (float): 字體大小比例,默認(rèn)為 0.4。
- 返回值:
- 無
3. 示例代碼解析
3.1 流程圖
開始
|
|-- 檢查參數(shù)個(gè)數(shù)是否為2
| |-- 不是 - > 輸出 "Usage: Test-PaddleDet model_path" 并返回1
|
|-- 初始化模型
| |-- 失敗 - > 輸出 "Failed to initialize model." 并返回1
|
|-- 初始化編輯模塊
| |-- 失敗 - > 輸出 "Error: Failed to start and accept connection." 并返回EXIT_FAILURE
| |-- 成功 - > 輸出 "Device connected successfully."
|
|-- 打開攝像頭
| |-- 設(shè)置分辨率 (640x480)
| |-- 打開攝像頭失敗 - > 輸出 "Error: Could not open camera." 并返回1
|
|-- 進(jìn)入無限循環(huán)
| |
| |-- 捕獲一幀圖像
| | |-- 圖像為空 - > 輸出 "Warning: Captured an empty frame." 并繼續(xù)下一次循環(huán)
| |
| |-- 調(diào)用模型進(jìn)行預(yù)測(cè)
| | |-- 記錄開始時(shí)間
| | |-- 獲取預(yù)測(cè)結(jié)果
| | |-- 記錄結(jié)束時(shí)間
| |
| |-- 計(jì)算推理時(shí)間
| | |-- 輸出 "Inference time: X ms"
| |
| |-- 可視化結(jié)果
| | |-- 創(chuàng)建輸出圖像
| | |-- 調(diào)用可視化函數(shù)
| |
| |-- 打印輸出圖像
|
|-- 釋放攝像頭資源
|
|-- 程序正常退出 (返回0)
3.2 核心代碼解析
- 初始化模型
lockzhiner_vision_module::vision::PaddleDet model;
if (!model.Initialize(argv[1])) {
std::cout < < "Failed to initialize model." < < std::endl;
return 1;
}
- 模型推理
auto results = model.Predict(input_mat);
- 可視化推理結(jié)果
cv::Mat output_image;
lockzhiner_vision_module::vision::Visualize(input_mat, output_image, results);
edit.Print(output_image);
[表情] 點(diǎn)擊獲取完整源碼
4. 編譯過程
4.1 編譯環(huán)境搭建
- 請(qǐng)確保你已經(jīng)按照 凌智視覺模塊開發(fā)環(huán)境搭建指南 正確配置了開發(fā)環(huán)境。
- 同時(shí)以正確連接開發(fā)板。
4.2 Cmake介紹
cmake_minimum_required(VERSION 3.10)
project(D01_test_detection)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# 定義項(xiàng)目根目錄路徑
set(PROJECT_ROOT_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../..")
message("PROJECT_ROOT_PATH = " ${PROJECT_ROOT_PATH})
include("${PROJECT_ROOT_PATH}/toolchains/arm-rockchip830-linux-uclibcgnueabihf.toolchain.cmake")
# 定義 OpenCV SDK 路徑
set(OpenCV_ROOT_PATH "${PROJECT_ROOT_PATH}/third_party/opencv-mobile-4.10.0-lockzhiner-vision-module")
set(OpenCV_DIR "${OpenCV_ROOT_PATH}/lib/cmake/opencv4")
find_package(OpenCV REQUIRED)
set(OPENCV_LIBRARIES "${OpenCV_LIBS}")
# 定義 LockzhinerVisionModule SDK 路徑
set(LockzhinerVisionModule_ROOT_PATH "${PROJECT_ROOT_PATH}/third_party/lockzhiner_vision_module_sdk")
set(LockzhinerVisionModule_DIR "${LockzhinerVisionModule_ROOT_PATH}/lib/cmake/lockzhiner_vision_module")
find_package(LockzhinerVisionModule REQUIRED)
add_executable(Test-detection test_detection.cc)
target_include_directories(Test-detection PRIVATE ${LOCKZHINER_VISION_MODULE_INCLUDE_DIRS})
target_link_libraries(Test-detection PRIVATE ${OPENCV_LIBRARIES} ${LOCKZHINER_VISION_MODULE_LIBRARIES})
install(
TARGETS Test-detection
RUNTIME DESTINATION .
)
4.3 編譯項(xiàng)目
使用 Docker Destop 打開 LockzhinerVisionModule 容器并執(zhí)行以下命令來編譯項(xiàng)目
# 進(jìn)入Demo所在目錄
cd /LockzhinerVisionModuleWorkSpace/LockzhinerVisionModule/Cpp_example/D01_test_detection
# 創(chuàng)建編譯目錄
rm -rf build && mkdir build && cd build
# 配置交叉編譯工具鏈
export TOOLCHAIN_ROOT_PATH="/LockzhinerVisionModuleWorkSpace/arm-rockchip830-linux-uclibcgnueabihf"
# 使用cmake配置項(xiàng)目
cmake ..
# 執(zhí)行編譯項(xiàng)目
make -j8 && make install
在執(zhí)行完上述命令后,會(huì)在build目錄下生成可執(zhí)行文件。
5. 例程運(yùn)行示例
5.1 運(yùn)行
chmod 777 Test-detection
# 在實(shí)際應(yīng)用的過程中LZ-Picodet需要替換為下載的或者你的rknn模型
./Test-detection LZ-Picodet
5.2 結(jié)果展示
- 可以看到我們正確識(shí)別了綠色的方塊,同時(shí)打印了標(biāo)簽和置信度。
6. 總結(jié)
本文檔詳細(xì)介紹了目標(biāo)檢測(cè)的基礎(chǔ)知識(shí)及 PaddleDetection 的基本概念,并提供了詳細(xì)的API文檔說明,幫助開發(fā)者理解和實(shí)現(xiàn)目標(biāo)檢測(cè)與可視化功能。通過上述流程,可以構(gòu)建高效的實(shí)時(shí)目標(biāo)檢測(cè)系統(tǒng),滿足多種應(yīng)用場(chǎng)景的需求。
審核編輯 黃宇
-
API
+關(guān)注
關(guān)注
2文章
1585瀏覽量
63893 -
可視化
+關(guān)注
關(guān)注
1文章
1258瀏覽量
21806 -
目標(biāo)檢測(cè)
+關(guān)注
關(guān)注
0文章
223瀏覽量
15986 -
rv1106
+關(guān)注
關(guān)注
0文章
5瀏覽量
101
發(fā)布評(píng)論請(qǐng)先 登錄
Rockchip RV1106系列規(guī)格差異詳解:如何選擇最適合您的AI視覺處理器?

《電子發(fā)燒友電子設(shè)計(jì)周報(bào)》聚焦硬科技領(lǐng)域核心價(jià)值 第11期:2025.05.12--2025.05.16
基于LockAI視覺識(shí)別模塊:C++目標(biāo)檢測(cè)
怎么去寫基于RV1126平臺(tái)的imx291驅(qū)動(dòng)源碼呢
如何對(duì)基于RV1109平臺(tái)的SPI進(jìn)行調(diào)試呢
RV1106網(wǎng)口燈控制腳
Cortex-A8的RealView平臺(tái)基板用戶指南
【LuckFox Pico Plus開發(fā)板免費(fèi)試用】上手體驗(yàn)
【LuckFox Pico Plus開發(fā)板免費(fèi)試用】RKNN模型推理測(cè)試
瑞芯微發(fā)布新一代機(jī)器視覺解決方案
大聯(lián)大控股世平推出基于瑞芯微RV1106的低功耗AOV IPC方案
RV1106核心特性概述
瑞芯微rv1106開發(fā)資料 rv1106數(shù)據(jù)手冊(cè) rv1106詳細(xì)說明書免費(fèi)下載

基于LockAI視覺識(shí)別模塊:C++目標(biāo)檢測(cè)

基于LockAI視覺識(shí)別模塊:C++人臉識(shí)別

評(píng)論