@TOC
目標檢測
本文檔展示了如何使用 lockzhiner_vision_module::vision::PaddleDet 類進行目標檢測,并通過
lockzhiner_vision_module::vision::Visualize 函數將檢測結果可視化。
1. 基礎知識講解
1.1 目標檢測的基本介紹
目標檢測是計算機視覺領域中的一個關鍵任務,它不僅需要識別圖像中存在哪些對象,還需要定位這些對象的位置。具體來說,目標檢測算法會輸出每個檢測到的對象的邊界框(Bounding Box)以及其所屬類別的概率或置信度得分。
1.2 PaddleDetection 的基本介紹
PaddleDetection 是基于百度飛槳深度學習框架開發的一個高效的目標檢測庫,支持多種先進的目標檢測模型,如 YOLO 系列、SSD、Faster R-CNN、Mask R-CNN 等。它提供了簡單易用的接口,使得開發者能夠快速部署高性能的目標檢測應用。
2. API 文檔
2.1 PaddleDetection 類
2.1.1 頭文件
#include < lockzhiner_vision_module/vision/deep_learning/detection/paddle_det.h >
2.1.2 構造函數
lockzhiner_vision_module::vision::PaddleDetection();
- 作用:
- 創建一個 PaddleDetection 對象,并初始化相關成員變量。
- 參數:
- 無
- 返回值:
- 無
2.1.3 Initialize函數
bool Initialize(const std::string& model_path);
- 作用:
- 加載預訓練的 PaddleDetection 模型。
- 參數:
- model_path:模型路徑,包含模型文件和參數文件。
- 返回值:
- true:模型加載成功。
- false:模型加載失敗。
2.1.4 SetThreshold函數
void SetThreshold(float score_threshold = 0.5, float nms_threshold = 0.3);
- 作用:
- 設置目標檢測的置信度閾值和NMS閾值。
- 參數:
- score_threshold:置信度閾值,默認值為0.5。
- nms_threshold:NMS閾值,默認值為0.3。
- 返回值:
- 無
2.1.5 Predict函數
std::vector< lockzhiner_vision_module::vision::DetectionResult > Predict(const cv::Mat& image);
- 作用:
- 使用加載的模型對輸入圖像進行目標檢測,返回檢測結果。
- 參數:
- input_mat (const cv::Mat&): 輸入的圖像數據,通常是一個 cv::Mat 變量。
- 返回值:
- 返回一個包含多個 DetectionResult 對象的向量,每個對象表示一個檢測結果。
2.2 DetectionResult 類
2.2.1 頭文件
#include < lockzhiner_vision_module/vision/utils/visualize.h >
2.2.2 box函數
lockzhiner_vision_module::vision::Rect box() const;
- 作用:
- 獲取目標檢測結果的邊界框。
- 參數:
- 無
- 返回值:
- 返回一個 lockzhiner_vision_module::vision::Rect 對象,表示目標檢測結果的邊界框。
2.2.3 score函數
float score() const;
- 作用:
- 獲取目標檢測結果的置信度得分。
- 參數:
- 無
- 返回值:
- 返回一個 float 類型的置信度得分。
2.2.4 label_id函數
- 作用:
- 獲取目標檢測結果的標簽ID。
- 參數:
- 無
- 返回值:
- 返回一個整數,表示目標檢測結果的標簽ID。
2.3 Visualize 函數
2.3.1 頭文件
#include < lockzhiner_vision_module/vision/utils/visualize.h >
2.3.2 函數定義
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
);
- 作用:
- 將目標檢測結果可視化到輸入圖像上,并返回可視化后的圖像。
- 參數:
- 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 流程圖
開始
|
|-- 檢查參數個數是否為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
|
|-- 進入無限循環
| |
| |-- 捕獲一幀圖像
| | |-- 圖像為空 - > 輸出 "Warning: Captured an empty frame." 并繼續下一次循環
| |
| |-- 調用模型進行預測
| | |-- 記錄開始時間
| | |-- 獲取預測結果
| | |-- 記錄結束時間
| |
| |-- 計算推理時間
| | |-- 輸出 "Inference time: X ms"
| |
| |-- 可視化結果
| | |-- 創建輸出圖像
| | |-- 調用可視化函數
| |
| |-- 打印輸出圖像
|
|-- 釋放攝像頭資源
|
|-- 程序正常退出 (返回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 編譯環境搭建
- 請確保你已經按照 凌智視覺模塊開發環境搭建指南 正確配置了開發環境。
- 同時以正確連接開發板。
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 容器并執行以下命令來編譯項目
# 進入Demo所在目錄
cd /LockzhinerVisionModuleWorkSpace/LockzhinerVisionModule/Cpp_example/D01_test_detection
# 創建編譯目錄
rm -rf build && mkdir build && cd build
# 配置交叉編譯工具鏈
export TOOLCHAIN_ROOT_PATH="/LockzhinerVisionModuleWorkSpace/arm-rockchip830-linux-uclibcgnueabihf"
# 使用cmake配置項目
cmake ..
# 執行編譯項目
make -j8 && make install
在執行完上述命令后,會在build目錄下生成可執行文件。
5. 例程運行示例
5.1 運行
chmod 777 Test-detection
# 在實際應用的過程中LZ-Picodet需要替換為下載的或者你的rknn模型
./Test-detection LZ-Picodet
5.2 結果展示
- 可以看到我們正確識別了綠色的方塊,同時打印了標簽和置信度。
6. 總結
本文檔詳細介紹了目標檢測的基礎知識及 PaddleDetection 的基本概念,并提供了詳細的API文檔說明,幫助開發者理解和實現目標檢測與可視化功能。通過上述流程,可以構建高效的實時目標檢測系統,滿足多種應用場景的需求。
審核編輯 黃宇
-
API
+關注
關注
2文章
1585瀏覽量
63889 -
可視化
+關注
關注
1文章
1258瀏覽量
21803 -
目標檢測
+關注
關注
0文章
223瀏覽量
15986 -
rv1106
+關注
關注
0文章
5瀏覽量
101
發布評論請先 登錄
Rockchip RV1106系列規格差異詳解:如何選擇最適合您的AI視覺處理器?

《電子發燒友電子設計周報》聚焦硬科技領域核心價值 第11期:2025.05.12--2025.05.16
基于LockAI視覺識別模塊:C++目標檢測
Cortex-A8的RealView平臺基板用戶指南
【LuckFox Pico Plus開發板免費試用】上手體驗
【LuckFox Pico Plus開發板免費試用】RKNN模型推理測試
瑞芯微發布新一代機器視覺解決方案
大聯大控股世平推出基于瑞芯微RV1106的低功耗AOV IPC方案
RV1106核心特性概述
基于LockAI視覺識別模塊:C++目標檢測

基于LockAI視覺識別模塊:C++人臉識別

評論