【代码阅读笔记】yolov5 rknn模型部署

news2024/11/18 5:35:38

一、main函数思路

 

二、值得学习的地方

1、关注yolov5检测流程

2、其中几个重要的结构体

typedef struct
{
    int left;
    int right;
    int top;
    int bottom;
} YOLOV5_BOX_RECT; // box坐标信息

typedef struct
{
    char name[YOLOV5_NAME_MAX_SIZE];
    int class_index;
    YOLOV5_BOX_RECT box;
    float prop;
} yolov5_detect_result_t; // 一个目标的检测结果

typedef struct
{
    int id;
    int count;
    yolov5_detect_result_t results[YOLOV5_NUMB_MAX_SIZE];
} yolov5_detect_result_group_t; // 多个目标的检测结果

typedef struct{
	yolov5_detect_result_group_t result_group;
	int number;
}Result_t;  // 新定义一个结构体,给检测线程使用

3、互斥量机制的使用

识别线程

// 识别线程
void *detect_thread_entry(void *para)
{
	int ret;
    Result_t *pResult = (Result_t *)para; // 类型转换:将参数转为Result_t指针

    // 模型初始化
	rknn_context ctx;
	yolov5_detect_init(&ctx, "/userdata/yolov5_coco_rv1126_pre.rknn");
	
	Mat image;
	while(1)
	{
        // 等待全局变量
        if(algorithm_image.empty()) {
        usleep(5);
            continue;
        }
		
        auto start = std::chrono::system_clock::now();

        // 从共享资源copy数据,copy 操作完成之前,algorithm_image 一直被锁
        pthread_mutex_lock(&img_lock); // 对互斥量进行加锁
        image = algorithm_image.clone(); // 从全局变量 clone 数据
        pthread_mutex_unlock(&img_lock); // 对互斥量进行解锁

        // 推理及后处理
		ret = yolov5_detect_run(ctx, image, &pResult->result_group);
        pResult->number = pResult->result_group.count;

        // 打印每帧检测耗时
		auto end = std::chrono::system_clock::now();
		auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
        string text = "yolov5n detect time use: " + std::to_string(duration.count()) + "ms";
        printf("\n>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n");
        cout << text + "\n" + "\n" << endl;
        printf("number : %d\n", pResult->number);

        // 没有检测到目标,忽略其1ms其他线程产生的algorithm_image
		if(pResult->number <= 0){
			usleep(1000);
			continue;
		}
		

		
        usleep(16*1000);
	}
    /* 检测模型释放 */
	yolov5_detect_release(ctx);
	return NULL;
}

main函数中创建识别线程

    pthread_t mTid; // 用于存储线程标识符
    Result_t Result; // 用于存储检测结果


    // 创建识别线程
    pthread_mutex_init(&img_lock, NULL); // 对互斥锁进行初始化
	Result.number = 0;
	// CreateNormalThread(detect_thread_entry, &Result, &mTid);
	pthread_create(&mTid, NULL, detect_thread_entry,(void*)&Result);

三、其他

项目任务:yolov5 rknn模型检测获得结果

项目评价:

1、yolov5 rknn 模型推理及后处理部分,是可以直接拿来用的

2、互斥量机制也可以借鉴学习

3、要自己设计接口,毕竟这只是一份demo项目

第一次写代码阅读笔记,只是把自己关注的地方记下来,尚且存在很多不足之处!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1059923.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【重拾计划】深搜广搜 | luogu P1135 奇怪的电梯

luogu P1135 奇怪的电梯 题目描述方法一 : 深搜dfs方法二&#xff1a;广搜bfs其他解法 题目描述 luogu P1135 奇怪的电梯 方法一 : 深搜dfs 从点A出发&#xff0c;找到符合条件的点一直往下搜即可 代码实现如下&#xff1a; #include<iostream> #include<cstdio…

PS 图层剪贴蒙版使用方法

好 我们先打开PS软件 后面我们需要接触图框工具 在学习图框工具之前 先要掌握剪贴蒙版 这里 我们先点击左上角文件 然后选择新建 我们先新建一个画布出来 然后 我们点击 箭头指向处 新建一个空白图层 点击之后 会就多出一个空白图层 我们在这里 找到 矩形选框工具 然后 …

windows环境下使用mmdetection+mmdeploy训练自定义数据集并转成onnx格式部署

目录 实验环境安装conda创建虚拟环境安装pytorch使用 MIM 安装 MMEngine 和 MMCV安装 MMDetection准备自定义数据集修改配置信息开始训练模型转换与推理 实验环境 windows10python&#xff1a;3.8pytorch :1.8.1cuda&#xff1a;11.1mmdet&#xff1a;3.1.0mmcv&#xff1a;2.…

想要精通算法和SQL的成长之路 - 验证二叉树

想要精通算法和SQL的成长之路 - 验证二叉树 前言一. 验证二叉树1.1 并查集1.2 入度以及边数检查 前言 想要精通算法和SQL的成长之路 - 系列导航 并查集的运用 一. 验证二叉树 原题链接 思路如下&#xff1a; 对于一颗二叉树&#xff0c;我们需要做哪些校验&#xff1f; 首先…

C++:stl:stack、queue、priority_queuej介绍及模拟实现和容量适配器deque介绍

本文主要介绍c中stl的栈、队列和优先级队列并对其模拟实现&#xff0c;对deque进行一定介绍并在栈和队列的模拟实现中使用。 目录 一、stack的介绍和使用 1.stack的介绍 2.stack的使用 3.stack的模拟实现 二、queue的介绍和使用 1.queue的介绍 2.queue的使用 3.queue的…

C++篮球俱乐部管理系统

一、 本系统的设计 篮球俱乐部管理系统是一个用于管理篮球俱乐部日常运营和球队管理的软件系统。它提供了一套功能齐全的工具&#xff0c;帮助篮球俱乐部进行会员管理、训练计划安排、比赛管理、场地预订以及财务记录等方面的工作。 该管理系统的主要特点和功能包括&#xff…

fcpx插件:82种复古电影胶卷框架和效果mFilm Matte

无论您是在制作音乐剪辑、私人假期视频还是大型广告活动&#xff0c;这个专业的插件都将帮助您为您的镜头赋予真正的电影角色。 复古效果在任何视频中都能立即识别出来&#xff0c;增添了感伤的复古氛围&#xff0c;并使镜头更具说服力。使用 mFilm Matte 轻松实现这些特征&…

通过人才测评系统,对程序员岗位进行招聘测评

一、 程序员的基本工作内容 1、 负责项目组内的代码维护和更新迭代&#xff0c;保证研发效率&#xff0c;对于运营产品提出的需求应积极沟通并实现。 2、 规范相关开发文档等相关资料&#xff0c;对于有变更的代码和功能需求&#xff0c;要对开发文档做出相应的变更。 3、 作为…

从0开始深入理解并发、线程与等待通知机制(上)含大厂面试题

目录 一&#xff0c;基础概念 进程与线程 进程&#xff08;就是一代代码的执行程序&#xff0c;程序的实例&#xff09; 线程 大厂面试题&#xff1a;进程间的通信 CPU 核心数和线程数的关系 上下文切换&#xff08;Context switch&#xff09; 并行和并发 二&#xff0c;认识…

SwiftUI 4.0:两种方式实现子视图导航功能

0. 概览 从 SwiftUI 4.0 开始&#xff0c;觉悟了的苹果毅然抛弃了已“药石无效”的 NavigationView&#xff0c;改为使用全新的 NavigationStack 视图。 诚然&#xff0c;NavigationStack 从先进性来说比 NavigationView 有不小的提升&#xff0c;若要如数家珍得单开洋洋洒洒…

Leetcode---114双周赛

题目列表 2869. 收集元素的最少操作次数 2870. 使数组为空的最少操作次数 2871. 将数组分割成最多数目的子数组 2872. 可以被 K 整除连通块的最大数目 一、收集元素的最小操作次数 直接模拟&#xff0c;倒序遍历即可&#xff0c;代码如下 class Solution { public:int mi…

ROS(5)PX4仿真安装及运行

1、配置&#xff0c;提升下载速度 启动 $ cd clash-for-linux$ sudo bash start.sh$ source /etc/profile.d/clash.sh$ proxy_on 关闭 $ cd clash-for-linux$ sudo bash shutdown.sh$ proxy_off 2、安装PX4开源无人机 git clone https://github.com/PX4/PX4-Autopilot.git…

全栈开发笔记1:首个项目的收获

本文为编程导航实战项目学习笔记。 文章目录 7.跨域问题解决 2023.10.26.项目部署 2023.10.15.统一处理返回值 2023.10.14.开发注册和用户管理 2023.09303.开发登陆注册接口 2023.09.172.数据库设计1.前后端初始化 2023.9.16 7.跨域问题解决 2023.10.2 三种方式&#xff1a; …

ps插件:alpaca增效工具 (完美替代AI创成式填充) 2.8.1 中文版

Alpaca是一个Photoshop插件&#xff0c;提供了多种功能&#xff0c;帮助用户更高效地进行图像处理和设计。可以进行模型训练并无缝地融入图像中。同时还提供文本到图像的生成、图像到图像的变化、涂色、放大、深度图创建等功能&#xff0c;极大地提升了设计和艺术创作的效率和创…

Go,从命名开始!Go的关键字和标识符全列表手册和代码示例!

目录 一、Go的关键字列表和分类介绍关键字在Go中的定位语言的基石简洁与高效可扩展性和灵活性 关键字分类声明各种代码元素组合类型的字面表示基本流程控制语法协程和延迟函数调用 二、Go的关键字全代码示例关键字全代码示例 三、Go的标识符定义基础定义特殊规定关键字与标识符…

【Aseprite像素画】如何取巧做到各种画面效果(小工具的各种技巧)

文章目录 参考链接&#xff1a;具体如下1、水中倒影2、参考图片3多个帧添加动画物品4多个帧删除动画物品5六毛钱受击效果6添加标签7导出特定标志的gif图8忽略标志帧&#xff0c;然后播放9轮廓线10多个图层轮廓线11洋葱皮12替换多个不同帧的色块簇13连接细胞14快速连续删除15冻结…

战火使命兑换码最新,战火使命礼包码

战火使命手游是一款二次元卡牌游戏&#xff0c;玩家可以通过使用兑换码来获取礼包奖励。如果你还不知道如何获取兑换码&#xff0c;下面为你提供最新的礼包码合集。 关注【娱乐天梯】&#xff0c;获取内部福利号 战火使命兑换码最新&#xff1a; 1、兑换码&#xff1a;ZHSM0421…

安装matplotlib_

安装pip 安装matplotlib 安装完毕 导入出现bug......

C++算法 —— 动态规划(10)二维费用背包

文章目录 1、动规思路简介2、一和零3、盈利计划 背包问题需要读者先明白动态规划是什么&#xff0c;理解动规的思路&#xff0c;并不能给刚接触动规的人学习。所以最好是看了之前的动规博客&#xff0c;以及两个背包博客&#xff0c;或者你本人就已经懂得动规了。 1、动规思路简…

弧度、圆弧上的点、圆的半径(r)、弧长(s)之间的关系

要计算弧度和圆弧上的点&#xff0c;需要知道以下几个要素&#xff1a; 圆的半径&#xff08;r&#xff09;&#xff1a;即圆的中心到圆周上任意一点的距离。 弧长&#xff08;s&#xff09;&#xff1a;从圆周上的一个点到另一个点所经过的弧长。 弧度&#xff08;θ&#x…