0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

RV1106平台基于PaddleDetection的高效目标检测全指南(FPS 25 帧)

位东风 来源:位东风 作者:位东风 2025-05-15 15:41 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

@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 等。它提供了简单易用的接口,使得开发者能够快速部署高性能的目标检测应用。

  • 特点:
    • 高性能:优化了推理速度,在保持高精度的同时实现了快速响应。
    • 灵活性:支持多种预训练模型,可以根据具体需求选择合适的模型架构。
    • 易于集成:提供 C++ API,便于嵌入式系统或桌面应用程序中使用。
    • 丰富的模型库:涵盖单阶段(One-stage)和双阶段(Two-stage)检测模型,满足不同场景的需求。
  • 适用场景:适用于需要对视频流或图像进行实时分析的应用场景,例如安防监控、智能交通系统、工业自动化等。

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
    API
    +关注

    关注

    2

    文章

    2146

    浏览量

    66198
  • 可视化
    +关注

    关注

    1

    文章

    1316

    浏览量

    22581
  • 目标检测
    +关注

    关注

    0

    文章

    230

    浏览量

    16375
  • rv1106
    +关注

    关注

    0

    文章

    5

    浏览量

    449
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Rockchip RV1106系列规格差异详解:如何选择最适合您的AI视觉处理器?

    近年来,随着AI技术的飞速发展,瑞芯微推出的RV1106系列经济型AI视觉处理器备受关注。尤其是2024年推出的RV1106B系列,凭借其多样化的规格和应用场景,成为市场上的热门选择。那么
    的头像 发表于 06-16 09:37 5107次阅读
    Rockchip <b class='flag-5'>RV1106</b>系列规格差异详解:如何选择最适合您的AI视觉处理器?

    《电子发烧友电子设计周报》聚焦硬科技领域核心价值 第11期:2025.05.12--2025.05.16

    2、RV1106平台基PaddleDetection高效目标检测
    发表于 05-16 19:47

    基于LockAI视觉识别模块:C++目标检测

    本文档基于瑞芯微RV1106的LockAI凌智视觉识别模块,通过C++语言做的目标检测实验。 本文档展示了如何使用 lockzhiner_vision_module::vision
    发表于 06-06 14:43

    怎么去写基于RV1126平台的imx291驱动源码呢

    怎么去写基于RV1126平台的imx291驱动源码呢?如何对基于RV1126平台imx291的dts进行配置呢?
    发表于 03-10 07:41

    如何对基于RV1109平台的SPI进行调试呢

    如何对基于RV1109平台的SPI进行调试呢?如何对基于RV1109平台的SPI进行测试呢?
    发表于 03-10 07:43

    RV1106网口灯控制脚

    RV1106上关于网口连接的引脚没有RJ45灯的控制脚,那么RJ45灯控制脚应该接哪里?
    发表于 06-21 14:44

    Cortex-A8的RealView平台基板用户指南

    Cortex®-A8平台基板(PB-A8)是第一款高度集成的软件以及基于ARM Cortex系列的硬件开发系统超标量处理器。底板在ATX配置文件中提供自供电圈占地PB-A8是一个独立使用的快速
    发表于 08-08 06:12

    【LuckFox Pico Plus开发板免费试用】上手体验

    RV1103采用智能音频方案,支持回声消除、语音降噪、哭声检测、异常声音检测等,支持高清语音,增强声音采集及远距离拾音。 5、快速启动瞬时响应,高性能低功耗 RV1106
    发表于 11-01 17:47

    【LuckFox Pico Plus开发板免费试用】RKNN模型推理测试

    为开发者提供一个简单且高效的开发平台。虽然LuckFox Pico作为入门级开发板只有几十块钱,但是它具有人工智能协处理器NPU,也可以实现人工智能的推理工作。瑞芯微 RV1103芯片采用了和RK3568
    发表于 11-11 16:51

    瑞芯微发布新一代机器视觉解决方案

    瑞芯微电子股份有限公司(以下简称“瑞芯微”)正式发布新一代机器视觉方案RV1106RV1103,两颗芯片在NPU、ISP、视频编码、音频处理等性能均有显著升级,具有高集成度、高性价比、低待机功耗的特点。RV1106
    的头像 发表于 02-18 14:41 3593次阅读

    大联大控股世平推出基于瑞芯微RV1106的低功耗AOV IPC方案

    国际领先的半导体元器件分销商大联大控股宣布,其旗下子公司世平近期推出了基于瑞芯微(Rockchip)RV1106芯片的低功耗AOV(智能网络摄像机)IPC(网络摄像机)解决方案。这一创新方案专为
    的头像 发表于 12-11 11:42 2427次阅读

    RV1106核心特性概述

    RV1106是一款集高性能处理器与先进多媒体功能于一体的创新芯片,专为满足现代智能设备对高效能与灵活性的需求而设计。其主要特性包括: 处理器配置: 中央处理器:融合了Cortex A7处理器与MCU
    的头像 发表于 02-11 17:07 4605次阅读

    瑞芯微rv1106开发资料 rv1106数据手册 rv1106详细说明书免费下载

    瑞芯微rv1106开发资料 rv1106数据手册 rv1106详细说明书免费下载
    的头像 发表于 05-19 11:16 4237次阅读
    瑞芯微<b class='flag-5'>rv1106</b>开发资料 <b class='flag-5'>rv1106</b>数据手册 <b class='flag-5'>rv1106</b>详细说明书免费下载

    基于LockAI视觉识别模块:C++目标检测

    本文档基于瑞芯微RV1106的LockAI凌智视觉识别模块,通过C++语言做的目标检测实验。本文档展示了如何使用lockzhiner_vision_module::PaddleDet类进行目标
    的头像 发表于 06-06 13:56 603次阅读
    基于LockAI视觉识别模块:C++<b class='flag-5'>目标</b><b class='flag-5'>检测</b>

    基于LockAI视觉识别模块:C++人脸识别

    本文基于RV1106做成的LockAI视觉识别模块,采用LZ-Picodet模型训练的人脸检测模型LZ-Face,以及ArcFace人脸识别模型,实现人脸识别系统。
    的头像 发表于 07-01 10:09 504次阅读
    基于LockAI视觉识别模块:C++人脸识别