@TOC
目標檢測
本文檔展示了如何使用 lockzhiner_vision_module::vision::PaddleDet 類進行目標檢測,并通過
lockzhiner_vision_module::vision::Visualize 函數(shù)將檢測結果可視化。
1. 基礎知識講解
1.1 目標檢測的基本介紹
目標檢測是計算機視覺領域中的一個關鍵任務,它不僅需要識別圖像中存在哪些對象,還需要定位這些對象的位置。具體來說,目標檢測算法會輸出每個檢測到的對象的邊界框(Bounding Box)以及其所屬類別的概率或置信度得分。
- 應用場景:目標檢測技術廣泛應用于多個領域,包括但不限于安全監(jiān)控、自動駕駛汽車、智能零售和醫(yī)療影像分析。
1.2 PaddleDetection 的基本介紹
PaddleDetection 是基于百度飛槳深度學習框架開發(fā)的一個高效的目標檢測庫,支持多種先進的目標檢測模型,如 YOLO 系列、SSD、Faster R-CNN、Mask R-CNN 等。它提供了簡單易用的接口,使得開發(fā)者能夠快速部署高性能的目標檢測應用。
- 特點:
- 高性能:優(yōu)化了推理速度,在保持高精度的同時實現(xiàn)了快速響應。
- 靈活性:支持多種預訓練模型,可以根據(jù)具體需求選擇合適的模型架構。
- 易于集成:提供 C++ API,便于嵌入式系統(tǒng)或桌面應用程序中使用。
- 豐富的模型庫:涵蓋單階段(One-stage)和雙階段(Two-stage)檢測模型,滿足不同場景的需求。
- 適用場景:適用于需要對視頻流或圖像進行實時分析的應用場景,例如安防監(jiān)控、智能交通系統(tǒng)、工業(yè)自動化等。
2. API 文檔
2.1 PaddleDetection 類
2.1.1 頭文件
#include < lockzhiner_vision_module/vision/deep_learning/detection/paddle_det.h >
2.1.2 構造函數(shù)
lockzhiner_vision_module::vision::PaddleDetection();
- 作用:
- 創(chuàng)建一個 PaddleDetection 對象,并初始化相關成員變量。
- 參數(shù):
- 無
- 返回值:
- 無
2.1.3 Initialize函數(shù)
bool Initialize(const std::string& model_path);
- 作用:
- 加載預訓練的 PaddleDetection 模型。
- 參數(shù):
- model_path:模型路徑,包含模型文件和參數(shù)文件。
- 返回值:
- true:模型加載成功。
- false:模型加載失敗。
2.1.4 SetThreshold函數(shù)
void SetThreshold(float score_threshold = 0.5, float nms_threshold = 0.3);
- 作用:
- 設置目標檢測的置信度閾值和NMS閾值。
- 參數(shù):
- score_threshold:置信度閾值,默認值為0.5。
- nms_threshold:NMS閾值,默認值為0.3。
- 返回值:
- 無
2.1.5 Predict函數(shù)
std::vector< lockzhiner_vision_module::vision::DetectionResult > Predict(const cv::Mat& image);
- 作用:
- 使用加載的模型對輸入圖像進行目標檢測,返回檢測結果。
- 參數(shù):
- input_mat (const cv::Mat&): 輸入的圖像數(shù)據(jù),通常是一個 cv::Mat 變量。
- 返回值:
- 返回一個包含多個 DetectionResult 對象的向量,每個對象表示一個檢測結果。
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;
- 作用:
- 獲取目標檢測結果的邊界框。
- 參數(shù):
- 無
- 返回值:
- 返回一個 lockzhiner_vision_module::vision::Rect 對象,表示目標檢測結果的邊界框。
2.2.3 score函數(shù)
float score() const;
- 作用:
- 獲取目標檢測結果的置信度得分。
- 參數(shù):
- 無
- 返回值:
- 返回一個 float 類型的置信度得分。
2.2.4 label_id函數(shù)
- 作用:
- 獲取目標檢測結果的標簽ID。
- 參數(shù):
- 無
- 返回值:
- 返回一個整數(shù),表示目標檢測結果的標簽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
);
- 作用:
- 將目標檢測結果可視化到輸入圖像上,并返回可視化后的圖像。
- 參數(shù):
- input_mat (const cv::Mat&): 輸入圖像。
- output_image (cv::Mat&): 輸出圖像,包含標注后的結果。
- results (const std::vectorlockzhiner_vision_module::vision::DetectionResult&): 檢測結果列表。
- labels (const std::vectorstd::string&): 可選的標簽列表,用于標注類別名稱,默認為空。
- font_scale (float): 字體大小比例,默認為 0.4。
- 返回值:
- 無
3. 示例代碼解析
3.1 流程圖
開始
|
|-- 檢查參數(shù)個數(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."
|
|-- 打開攝像頭
| |-- 設置分辨率 (640x480)
| |-- 打開攝像頭失敗 - > 輸出 "Error: Could not open camera." 并返回1
|
|-- 進入無限循環(huán)
| |
| |-- 捕獲一幀圖像
| | |-- 圖像為空 - > 輸出 "Warning: Captured an empty frame." 并繼續(xù)下一次循環(huán)
| |
| |-- 調用模型進行預測
| | |-- 記錄開始時間
| | |-- 獲取預測結果
| | |-- 記錄結束時間
| |
| |-- 計算推理時間
| | |-- 輸出 "Inference time: X ms"
| |
| |-- 可視化結果
| | |-- 創(chuàng)建輸出圖像
| | |-- 調用可視化函數(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);
- 可視化推理結果
cv::Mat output_image;
lockzhiner_vision_module::vision::Visualize(input_mat, output_image, results);
edit.Print(output_image);
[表情] 點擊獲取完整源碼
4. 編譯過程
4.1 編譯環(huán)境搭建
- 請確保你已經(jīng)按照 凌智視覺模塊開發(fā)環(huán)境搭建指南 正確配置了開發(fā)環(huán)境。
- 同時以正確連接開發(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)
# 定義項目根目錄路徑
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 編譯項目
使用 Docker Destop 打開 LockzhinerVisionModule 容器并執(zhí)行以下命令來編譯項目
# 進入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配置項目
cmake ..
# 執(zhí)行編譯項目
make -j8 && make install
在執(zhí)行完上述命令后,會在build目錄下生成可執(zhí)行文件。
5. 例程運行示例
5.1 運行
chmod 777 Test-detection
# 在實際應用的過程中LZ-Picodet需要替換為下載的或者你的rknn模型
./Test-detection LZ-Picodet
5.2 結果展示
- 可以看到我們正確識別了綠色的方塊,同時打印了標簽和置信度。

6. 總結
本文檔詳細介紹了目標檢測的基礎知識及 PaddleDetection 的基本概念,并提供了詳細的API文檔說明,幫助開發(fā)者理解和實現(xiàn)目標檢測與可視化功能。通過上述流程,可以構建高效的實時目標檢測系統(tǒng),滿足多種應用場景的需求。
審核編輯 黃宇
-
API
+關注
關注
2文章
2158瀏覽量
66246 -
可視化
+關注
關注
1文章
1318瀏覽量
22599 -
目標檢測
+關注
關注
0文章
230瀏覽量
16379 -
rv1106
+關注
關注
0文章
5瀏覽量
456
發(fā)布評論請先 登錄
Rockchip RV1106系列規(guī)格差異詳解:如何選擇最適合您的AI視覺處理器?
《電子發(fā)燒友電子設計周報》聚焦硬科技領域核心價值 第11期:2025.05.12--2025.05.16
基于LockAI視覺識別模塊:C++目標檢測
怎么去寫基于RV1126平臺的imx291驅動源碼呢
Cortex-A8的RealView平臺基板用戶指南
【LuckFox Pico Plus開發(fā)板免費試用】上手體驗
【LuckFox Pico Plus開發(fā)板免費試用】RKNN模型推理測試
瑞芯微發(fā)布新一代機器視覺解決方案
大聯(lián)大控股世平推出基于瑞芯微RV1106的低功耗AOV IPC方案
RV1106核心特性概述
瑞芯微rv1106開發(fā)資料 rv1106數(shù)據(jù)手冊 rv1106詳細說明書免費下載
基于LockAI視覺識別模塊:C++目標檢測
基于LockAI視覺識別模塊:C++人臉識別

RV1106平臺基于PaddleDetection的高效目標檢測全指南(FPS 25 幀)
評論