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

一、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_imageif(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.hqwc.cn/news/125174.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实验三十五、LM117 稳压电源的设计

一、题目 利用 LM117 设计一个稳压电路&#xff0c;要求输出电压的调节范围为 5 ∼ 20 V 5\sim20\,\textrm V 5∼20V&#xff0c;最大负载电流为 400 mA 400\,\textrm{mA} 400mA。利用 Multisim 对所设计电路进行仿真&#xff0c;并测试所有性能指标。 二、仿真电路 仿真电…

【论文阅读】(CVPR2023)用于半监督医学图像分割的双向复制粘贴

目录 前言方法BCPMean-teacher and Traning StrategyPre-Training via Copy-PasteBidirectional Copy-Paste ImagesBidirectional Copy-Paste Supervisory Signals Loss FunctionTesting Phase 结论 先看这个图&#xff0c;感觉比较清晰。它整个的思路就是把有标签的图片和无标…

揭秘亚马逊、ebay自养号测评底层环境防关联技术

今天珑哥讲的是纯人工的自养号方式&#xff0c;已经在做过的人应该都懂&#xff0c;实现自养号所使用的IP和浏览器都有哪些 &#xff1f;都会有哪些问题。 一&#xff1a;市面上的IP有哪些&#xff1f;会遇到的问题&#xff1f; 922、luminati、googelfi、TM流量卡、Rola&…

大模型部署手记(3)通义千问+Windows GPU

1.简介 组织机构&#xff1a;阿里 代码仓&#xff1a;GitHub - QwenLM/Qwen: The official repo of Qwen (通义千问) chat & pretrained large language model proposed by Alibaba Cloud. 模型&#xff1a;Qwen/Qwen-7B-Chat-Int4 下载&#xff1a;http://huggingface…

WVP-28181协议视频平台搭建教程

28181协议视频平台搭建教程 安装mysql安装redis安装ZLMediaKit安装28181协议视频平台安装依赖下载源码编译静态页面打包项目, 生成可执行jar修改配置文件启动WVP 项目地址&#xff1a; https://github.com/648540858/wvp-GB28181-pro 说明: wvp-GB28181-pro 依赖redis和mysql中…

时序分解 | Matlab实现CEEMDAN完全自适应噪声集合经验模态分解时间序列信号分解

时序分解 | Matlab实现CEEMDAN完全自适应噪声集合经验模态分解时间序列信号分解 目录 时序分解 | Matlab实现CEEMDAN完全自适应噪声集合经验模态分解时间序列信号分解效果一览基本介绍程序设计参考资料 效果一览 基本介绍 Matlab实现CEEMDAN完全自适应噪声集合经验模态分解时间…

TCP端口崩溃,msg:socket(): Too many open files

一、现象 linux系统中运行了一个TCP服务器&#xff0c;该服务器监听的TCP端口为10000。但是长时间运行时发现该端口会崩溃&#xff0c;TCP客户端连接该端口会失败&#xff1a; 可以看到进行三次握手时&#xff0c;TCP客户端向该TCP服务器的10000端口发送了SYN报文&#xff0c;…

Kafka:介绍和内部工作原理

展示Kafka工作方式的简单架构。 什么是Kafka&#xff1f;为什么我们要使用它&#xff1f;它是消息队列吗&#xff1f; 它是一个分布式流处理平台或分布式提交日志。 Kafka通常用于实时流数据管道&#xff0c;即在系统之间传输数据&#xff0c;构建不断流动的数据转换系统和构…

机器学习笔记(一)

1.线性回归模型 2. 损失函数 3.梯度下降算法 多元特征的线性回归 当有多个影响因素的时候,公式可以改写为: 当有多个影响因素的时候为了方便计算,可以使用 Numpy下面的点积方法, np.dot(w,x) 最后再加个b 就省略了很多书写步骤,这叫做矢量化 多元回归的梯度下降 左边是一…

postgresql-聚合函数增强功能

postgresql-聚合函数增强功能 按季度统计入职员工 按季度统计入职员工 select -- extract截取&#xff0c;按季度进行统计入职员工总数 extract(year from hire_date), count(*) filter(where extract(quarter from hire_date) 1) "第一季度", count(*) filter(wh…

Solidity 合约漏洞,价值 38BNB 漏洞分析

Solidity 合约漏洞&#xff0c;价值 38BNB 漏洞分析 1. 漏洞简介 https://twitter.com/NumenAlert/status/1626447469361102850 https://twitter.com/bbbb/status/1626392605264351235 2. 相关地址或交易 攻击交易&#xff1a; https://bscscan.com/tx/0x146586f05a451313…

Redis高可用之哨兵模式、集群

文章目录 一、Redis哨兵模式1.1 简介1.2 哨兵模式的作用1.3 哨兵结构1.4 故障转移机制&#xff08;重要&#xff09;1.5 主节点选举机制 二、部署Redis哨兵模式Step1 修改 Redis 哨兵模式的配置文件&#xff08;所有节点操作&#xff09;Step2 实现基于VIP&#xff08;虚拟IP&a…