在国产芯片上实现YOLOv5/v8图像AI识别-【2.3】RK3588上使用C++启用多线程推理更多内容见视频

本专栏主要是提供一种国产化图像识别的解决方案,专栏中实现了YOLOv5/v8在国产化芯片上的使用部署,并可以实现网页端实时查看。根据自己的具体需求可以直接产品化部署使用。

B站配套视频:https://www.bilibili.com/video/BV1or421T74f
在这里插入图片描述

基础背景

对于国产化芯片来说,是采用NPU进行推理,无论从性能、功耗、软件环境来说都是比不过英伟达显卡的。所以在进行推理的时候除了实现我们正常的业务逻辑还需要将核心推理部分改造成线程池,实现快速推理。

在此之前我们大概知道推理需要分成三个部分,预处理、推理、后处理。此处我们参照上节课的代码、官方模型来和大家讲解。

预处理部分

首先我们看一下模型的输入部分,是640640,这个是在我们训练的时候就决定好了,所以进行推理的时候我们也一样先要把图片处理成640640。

在这里插入图片描述

除此之外,使用过opencv的同学应该知道,opencv读取图片时候一半都是BGR的颜色通道,预处理的时候我们一样要把图片处理成RGB才可以。

// yolo的预处理
void cvimg2tensor(const cv::Mat &img, uint32_t width, uint32_t height, tensor_data_s &tensor)
{// img has to be 3 channelsif (img.channels() != 3){NN_LOG_ERROR("img has to be 3 channels");exit(-1);}// BGR to RGBcv::Mat img_rgb;cv::cvtColor(img, img_rgb, cv::COLOR_BGR2RGB);// resize imgcv::Mat img_resized;NN_LOG_DEBUG("img size: %d, %d", img.cols, img.rows);NN_LOG_DEBUG("resize to: %d, %d", width, height);cv::resize(img_rgb, img_resized, cv::Size(width, height), 0, 0, cv::INTER_LINEAR);// BGR to RGBmemcpy(tensor.data, img_rgb.data, tensor.attr.size);
}

此处有一个小知识点,opencv的cv::resize是将图片进行强制拉伸,也就是图片中的元素都会变形。其实还有别的预处理方法,比如将图片扩充到640*640大小,然后多余部分进行黑色填充,一样可以实现效果,而且识别结果较好,下面就是实例代码。

LetterBoxInfo letterbox(const cv::Mat &img, cv::Mat &img_letterbox, float wh_ratio)
{// img has to be 3 channelsif (img.channels() != 3){NN_LOG_ERROR("img has to be 3 channels");exit(-1);}float img_width = img.cols;float img_height = img.rows;int letterbox_width = 0;int letterbox_height = 0;LetterBoxInfo info;int padding_hor = 0;int padding_ver = 0;if (img_width / img_height > wh_ratio){info.hor = false;letterbox_width = img_width;letterbox_height = img_width / wh_ratio;info.pad = (letterbox_height - img_height) / 2.f;padding_hor = 0;padding_ver = info.pad;}else{info.hor = true;letterbox_width = img_height * wh_ratio;letterbox_height = img_height;info.pad = (letterbox_width - img_width) / 2.f;padding_hor = info.pad;padding_ver = 0;}// 使用cv::copyMakeBorder函数进行填充边界cv::copyMakeBorder(img, img_letterbox, padding_ver, padding_ver, padding_hor, padding_hor, cv::BORDER_CONSTANT, cv::Scalar(0, 0, 0));return info;
}

推理部分

yolo的推理部分官方已经帮我进行了较好的封装,此处我们继续沿用就好,由于是调用底层的API,外部封装代码我们就不过多说明了。感兴趣的朋友可以看视频,其中我们会简单过一下。

后处理部分

模型在推理的时候会图片拆分成三个大小去识别,8080、4040、20*20,然后通过极大值抑制,将识别的结果计算出来。我们可以从模型里面看到模型里面输出了这三个部分。
在这里插入图片描述

但是这部分的计算处理其实在NPU中的速度并不快,我们会对模型进行修改,然后将后处理部分放到CPU中进行运算,图中就是我们修改之后的模型样子。具体处理方式官方也已经给出我们不做过多描述,关于模型如何修改,我们会在小节课的训练导出和大家说。

在这里插入图片描述 在这里插入图片描述

多线程处理

虽然进行了模型的裁剪和量化,但是国产嵌入式芯片毕竟起步较晚,受限于性能,对于1080P的视频来说可能推理速度只能每秒2-5帧左右,对于这种新能是远远无法达到产品使用要求的,所以我们需要进行多线程处理,让更多的线程去参与到推理过程中,提高整体性能效率。
更多内容查看视频>>>>>>>>>>>>>>>>> https://www.bilibili.com/video/BV1or421T74f](https://www.bilibili.com/video/BV1or421T74f

多媒体流处理

此处我们多媒体流处理使用的是zlmediakit,这是一款国人开发的流媒体服务器,也提供了相关C++的接口,几乎所有做流媒体的项目都会使用到,但是关于它C++的使用会有所不同需要另外学习一下。
更多内容查看视频>>>>>>>>>>>>>>>>> https://www.bilibili.com/video/BV1or421T74f](https://www.bilibili.com/video/BV1or421T74f

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

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

相关文章

算法(数组+链表)

37.移除元素 数组的删除其实是元素的覆盖 比如刚开始五个元素删除了一个 他变成了四个元素 但是他的空间大小还是五 删除元素是o(n)erase的时间复杂度是o(n) 暴力实现 当使用两层for循环去删除元素的时候 比如要删除元素三 …

JNPF快速开发平台助力企业实现工作流自动化

随着企业信息化建设的不断深入,工作流自动化已成为提升企业效率、优化业务流程的关键手段。JNPF快速开发平台凭借其强大的功能和灵活的配置,为众多企业提供了实现工作流自动化的高效解决方案。 关于低代码开发平台的普及应用 随着信息技术的迅猛发展&…

WEB中间件TomCat详解

一、JVM 虚拟机常识 1、什么是JAVA虚拟机 所谓虚拟机,就是一台虚拟的计算机。在计算机系统上模拟运行一个完整的计算机系统的技术,他是一款软件,用来执行一系列虚拟计算机指令。大体上,虚拟机可以分为系统虚拟机和程序虚拟机。大…

自闭症学校康复寄宿:点亮每个孩子的希望——星贝育园

在繁华都市的一角,有一座充满爱与希望的城堡——星贝育园,这是一所专门为自闭症儿童提供康复寄宿服务的学校。它宛如黑暗中的一盏明灯,为那些迷失在孤独世界里的孩子们照亮了前行的道路,点亮了他们内心深处的希望之光。 走进星贝育…

流编程思想

流编程思想 程序可以看作流,任何程序执行的过程都可以看成是流动的过程。基于这个思想,我们可以将程序划分为数据流与控制流。 数据流是数据实现的过程,对于相同的任务需求,最终数据流都会流向相同的地方,笔者进行举…

VBA高级应用30例应用3在Excel中的ListObject对象:创建表

《VBA高级应用30例》(版权10178985),是我推出的第十套教程,教程是专门针对高级学员在学习VBA过程中提高路途上的案例展开,这套教程案例与理论结合,紧贴“实战”,并做“战术总结”,以…

【AI】OCR篇1

每日更新,建议关注、收藏、点赞 ocr流程 版面分析 、预处理-> 行列切割 -> 字符识别 -> 后处理识别矫正 判断页面上的文本朝向,图像预处理,做角度矫正和去噪。对文档版面进行分析,进每一行进行行分割,把每…

用户体验至上:9款软件界面设计工具分享

你知道如何选择正确的UI设计软件吗?您知道哪些界面设计软件需要设计美观的用户界面,以及带来良好用户体验的APP吗?根据APP界面的不同功能,制作软件界面的选择也会有所不同。但是,并非要非常精通所有的制作软件界面&…

【Python基础】Python六种标准数据类型中哪些是可变数据,哪些是不可变数据

文章目录 1.基本介绍可变数据类型不可变数据类型2.可变和不可变到底指的是什么?可变(Mutable)不可变(Immutable)总结1.基本介绍 Python 中的六种标准数据类型分为可变数据类型和不可变数据类型。以下是这些数据类型的分类: 可变数据类型 列表(List) 列表是一种有序集…

使用 MRI 构建的大脑连接网络预测帕金森病萎缩进展模式| 文献速递-基于深度学习的乳房、前列腺疾病诊断系统

Title 题目 Brain Connectivity Networks Constructed Using MRI for Predicting Patterns of Atrophy Progression in Parkinson Disease 使用 MRI 构建的大脑连接网络预测帕金森病萎缩进展模式 Background 背景 Whether connectome mapping of structural and across …

【数据结构-前缀哈希】力扣3026. 最大好子数组和

给你一个长度为 n 的数组 nums 和一个 正 整数 k 。 如果 nums 的一个 子数组 中,第一个元素和最后一个元素 差的绝对值恰好 为 k ,我们称这个子数组为 好 的。换句话说,如果子数组 nums[i…j] 满足 |nums[i] - nums[j]| k ,那么…

性能测试学习笔记

一、性能测试是什么? 1.生活案例: 学校选课系统,就会经常崩溃!!!! 2.性能测试的定义 测试人员借助测试工具,模拟系统在不同场景下,对应的性能指标是否达到预期 3.性能…

Spring -- 事务

Spring中事务的操作分为两类:(1)编程式事务 – 手动写代码操作事务(2)声明式事务 – 利用注解开启事务和提交事务 1. 编程式事务 准备Controller RestController RequestMapping("/user") public class UserInfoController {Autowiredprivate UserInfoService use…

JAVA开发学习-day21

JAVA开发学习-day21 1. 删除表单数据 根据ElementUI的官方组件指南&#xff0c;为表单每列的数据添加删除按钮 <el-table :data"tableData" style"width: 100%"><el-table-column prop"id" label"ID" width"180"…

SpringBoot基础(一):快速入门

SpringBoot基础系列文章 SpringBoot基础(一)&#xff1a;快速入门 目录 一、SpringBoot简介二、快速入门三、SpringBoot核心组件1、parent1.1、spring-boot-starter-parent1.2、spring-boot-dependencies 2、starter2.1、spring-boot-starter-web2.2、spring-boot-starter2.3、…

Visual Studio 和 Visual Studio Code 的比较与应用偏向

Visual Studio 和 Visual Studio Code&#xff08;VS Code&#xff09;是微软开发的两个不同的开发工具&#xff0c;各有特点和优势&#xff0c;适用于不同的开发需求。下面是详细的比较和在实际应用中的偏向。 功能和特性 Visual Studio 完整的IDE&#xff1a;支持多种编程…

海外短剧小程序 ,竖屏会员付费看剧系统搭建paypal,stripe对接支付功能

目录 前言&#xff1a; 一、系统功能 二、系统常见问题 总结&#xff1a; 前言&#xff1a; 在全球化的今天&#xff0c;短剧作为一种新兴的内容形式&#xff0c;正迅速赢得国际观众的心。尤其是海外市场的短剧推广&#xff0c;正成为内容创作者和营销者的新宠。本文将深入…

Adobe Substance 3D Sampler v4.2.2.3719 解锁版下载及安装教程(3D材质管理软件)

前言 Substance 3D Sampler简称“Sa”是一款由Adobe新推出的3D真实材质贴图制作软件。允许用户通过调整和混合现有材料&#xff0c;或通过扫描&#xff08;单个或多个图像&#xff09;中提取新材料来创建和迭代材料集合&#xff0c;从而轻松将真实的图片转换为具有真实感的表面…

JavaEE从入门到起飞 (三) ~AOP

晚上好&#xff0c;愿这深深的夜色给你带来安宁&#xff0c;让温馨的夜晚抚平你一天的疲惫&#xff0c;美好的梦想在这个寂静的夜晚悄悄成长。 目录 文章目录 前言 了解面向切面编程&#xff08;AOP&#xff09; 什么是面向切面编程&#xff08;AOP&#xff09;&#xff1f…

二、Matlab图像处理基础

文章目录 一、Matlab图像处理工具箱二、图像文件的读取2.1 文件信息的读取2.2 图像文件的读取2.3 图像文件的保存2.4 图像文件的显示2.5 像素信息的显示 本章知识点总结 一、Matlab图像处理工具箱 在帮助文档可以搜索到图像处理工具箱的介绍 二、图像文件的读取 2.1 文件信息…