[C#]winform部署官方yolov8-obb旋转框检测的onnx模型

【官方框架地址】

https://github.com/ultralytics/ultralytics
【算法介绍】

Yolov8-obb(You Only Look Once version 8 with Oriented Bounding Boxes)是一种先进的对象检测算法,它在传统的Yolov3和Yolov4基础上进行了优化,加入了OBB(Oriented Bounding Box)旋转框检测,能够更精确地检测并定位出目标物体的位置。

在传统的目标检测算法中,通常使用的是固定方向的边界框(Bounding Box),它假设所有物体在图像中的位置都是相对于图像中心来计算的。然而,这种假设并不总是成立,尤其在处理具有明显方向特征的物体时,固定方向的边界框就无法准确地定位物体的真实位置。

Yolov8-obb通过引入OBB旋转框检测,解决了这一问题。它允许边界框以任意角度存在,更能适应不同方向的目标物体。此外,Yolov8-obb还采用了一种称为“anchor”的机制,通过预设一系列不同大小和方向的锚点框,来逼近真实的物体位置。这种机制不仅提高了检测精度,还大大减少了需要训练的参数数量,提高了算法的效率。

除了旋转框检测,Yolov8-obb还在骨干网络、特征金字塔网络、分类器和回归器等方面进行了优化。例如,它采用了CSPDarknet53作为骨干网络,增强了特征提取能力;采用了多尺度特征融合策略,提高了对不同尺度目标的检测能力;采用了新的非极大值抑制算法,进一步筛选出最有可能的物体位置。

总的来说,Yolov8-obb通过引入旋转框检测和一系列优化策略,提高了目标检测的精度和效率,为计算机视觉领域带来了新的突破。

【效果展示】


【实现部分代码】

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using OpenCvSharp;namespace FIRC
{public partial class Form1 : Form{Bitmap src = null;Yolov8ObbManager detector = null;public Form1(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){OpenFileDialog openFileDialog = new OpenFileDialog();openFileDialog.Filter = "图文件(*.*)|*.jpg;*.png;*.jpeg;*.bmp";openFileDialog.RestoreDirectory = true;openFileDialog.Multiselect = false;if (openFileDialog.ShowDialog() == DialogResult.OK){src = new Bitmap(openFileDialog.FileName);pictureBox1.Image = src;}}private void button2_Click(object sender, EventArgs e){if(pictureBox1.Image==null){return;}var result = detector.Inference(src);var resultImg = detector.DrawImage(src, result);pictureBox2.Image = resultImg;}private void Form1_Load(object sender, EventArgs e){detector = new Yolov8ObbManager(Application.StartupPath+"\\weights\\yolov8s-obb.onnx", Application.StartupPath + "\\weights\\labels.txt");}private void button3_Click(object sender, EventArgs e){VideoCapture capture = new VideoCapture(0);if (!capture.IsOpened()){Console.WriteLine("video not open!");return;}Mat frame = new Mat();var sw = new Stopwatch();int fps = 0;while (true){capture.Read(frame);if (frame.Empty()){Console.WriteLine("data is empty!");break;}sw.Start();var bmp = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(frame);var result = detector.Inference(bmp);var resultImg = detector.DrawImage(bmp, result);sw.Stop();fps = Convert.ToInt32(1 / sw.Elapsed.TotalSeconds);sw.Reset();frame = OpenCvSharp.Extensions.BitmapConverter.ToMat(new Bitmap(resultImg));Cv2.PutText(frame, "FPS=" + fps, new OpenCvSharp.Point(30, 30), HersheyFonts.HersheyComplex, 1.0, new Scalar(255, 0, 0), 3);//显示结果Cv2.ImShow("Result", frame);int key = Cv2.WaitKey(10);if (key == 27)break;}capture.Release();}}
}


【视频演示】

https://www.bilibili.com/video/BV1ki4y1i7up/?vd_source=989ae2b903ea1b5acebbe2c4c4a635ee
【测试环境】

vs2019,netframework4.7.2,onnxruntime1.16.3
 

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

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

相关文章

尝试着在Stable Diffusion里边使用SadTalker进行数字人制作

首先需要标明的是,我这里是图片说话类型,而且是看了知识星球AI破局俱乐部大航海数字人手册进行操作的。写下这篇文章是防止我以后遗忘。 我使用的基础软件是Stable Diffusion,SadTalker是作为插件放进来的,需要注意的是这对自己的…

Maven(五)如何只打包项目某个模块及其依赖模块?

目录 一、背景二、解决方案三、补充3.1 提出疑问3.2 解答 一、背景 在 SpringCloud 微服务框架下,会存在多个模块。当我们需要对其中某一个服务打包的时候,需要将该服务依赖的模块一起打包更新,如果项目比较小的话我们可以直接将项目中的所有…

阿里云ECS使用docker搭建mysql服务

目录 1.确保正确安装好docker 2.安装mysql镜像 3.创建容器(设置端口映射、目录映射) 1.确保正确安装好docker 安装教程: 阿里云ECS(CentOS镜像)安装docker-CSDN博客https://blog.csdn.net/qq_62262918/article/details/135686614?spm10…

WebKit工程组织与结构随笔

1.WebKit结构 1.1 三个模块 概括地说,WebKit由主要由三个模块组成:JavaScriptCore、WebCore 和 WebKit。WebKit作为了整个项目的名称。 1). WebCore, 2). WebKit, 3). JavaScriptCore。 WebCore:排版引擎核心&…

【RT-DETR有效改进】华为 | Ghostnetv1一种专为移动端设计的特征提取网络

前言 大家好,这里是RT-DETR有效涨点专栏。 本专栏的内容为根据ultralytics版本的RT-DETR进行改进,内容持续更新,每周更新文章数量3-10篇。 专栏以ResNet18、ResNet50为基础修改版本,同时修改内容也支持ResNet32、ResNet101和PP…

ssh: connect to host github.com port 22: Connection refused

ssh: connect to host github.com port 22: Connection refused 问题现象 本文以Windows系统为例进行说明,在个人电脑上使用Git命令来操作GitHub上的项目,本来都很正常,突然某一天开始,会提示如下错误ssh: connect to host gith…

浪花 - 用户信息展示+更新

1. 用户登录获取登录凭证 已登录的用户才能获取个人信息发送 Aixos 请求登录 const user ref();onMounted(async () > {const res await myAxios.get(/user/current);if (res.code 0) {console.log("获取用户信息成功");user.value res.data;} else {consol…

美团跌破发行价,市值较巅峰蒸发80%!

大家好,我是程序员小灰。 说起美团的股票,不禁让我回想起一段往事。2019年初,当时我所在的公司摩拜科技被美团收购,因为自己有一些摩拜的期权,被收购后转换成了美团期权。 小灰很快做了行权,拿到了美团的股…

tx2开发板升级JetPack至最新

最近一个项目用到了tx2, 上面的jetpack太老了需要更新,很久没和开发板打交道了,记录一下。中间没怎么截图,所以可能文字居多。 准备工作 Ubuntu 18.04的机器,避免有坑,不要使用虚拟机,一定要是物理机&…

Android Studio安卓开发--ListView学习整理

ListView允许用户通过手指上下滑动的方式将屏幕外的数据滚动到屏幕内,同时屏幕上原有的数据则会滚动出屏幕。 1.ListView的简单用法 (1)activity_main.xml布局中加入ListView控件:(先占满整个布局的空间)…

AIGC - 视频生成模型的相关算法进展

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/135688206 视频生成技术确实是一个很有潜力的颠覆性技术领域,可以作为企业创新梯队的重点关注方向,最近发展很快&#xff…

项目上线存在的缓存问题以及存在的debugger和console.log等问题

下载uglifyjs-webpack-plugin插件 在vue.config文件中进行配置 publicPath: process.env.NODE_ENV production ? ./ : /,outputDir: n-sim-ipc-manage-build,productionSourceMap: false,configureWebpack: config > {//打包文件增加hashconfig.output.filename js/[nam…

Excel表格的快速动态扩展与删除行

实例需求:工作表中的表格(ListObject)名称为Table1,表格列数不确定,需要实现如下功能: 当用户完成最后一行最后一列输入之后(如果该单元格为空,则视为输入未完成)&#…

C++继承(万字详!!)

文章目录 继承的概念及定义继承的概念继承定义 基类和派生类对象赋值转换继承中的作用域派生类的默认成员函数继承与友元继承与静态成员复杂的菱形继承及菱形虚拟继承菱形继承菱形虚拟继承 继承的总结和反思笔试面试题 继承的概念及定义 继承的概念 继承(inheritance) 机制是面…

C++:类与结构体的对比

2024年1月18日 内容来自The Cherno:C系列 -------------------------------------------------------------------------------------------------------------------------------- C中关于class与struct,几乎没有区别,只有一个关于“可见度”的区别…

【PS】PS设计图欣赏、学习、借鉴

【PS】PS设计图欣赏、学习、借鉴 bilibili萌新PS学习计划:PS教程全套零基础教学视频(全套81节全新版本)

C++大学教程(第九版)5.25去除break语句 5.27去除cintinue语句

5.25题目 (去除break和continue)break和continue 语句遭到质疑的原因是它们的非结构化性。实际上,break和continue 语句总能用结构化的语句取代。请详述如何从程序的一条循环语中去除break语句,并用某种结构化的手段替代。提示:break 语句用于在循环体内离开一个循…

Golang 搭建 WebSocket 应用(六) - 监控

我在上一篇文章中,提到了目前的认证方式存在一些问题,需要替换为一种更简单的认证方式。 但是最后发现,认证这个实在是没有办法简单化,认证本身又是另外一个不小的话题了,因此关于这一点先留个坑。 本文先讨论一下另外…

读元宇宙改变一切笔记10_支付方式

1. 元宇宙中的经济 1.1. 元宇宙被设想为一个平行世界,人们将在那里花大量的时间工作和生活 1.1.1. 元宇宙的实现程度部分取决于它是否建立在一个繁荣的经济体系之上 1.2. 元宇宙中的经济将大体遵循现实世界的经济模式 1.2.1. 激烈的竞争、大量营利性企业的存在、…

无偿分享一个很有用的看源码小技巧

怎么在 idea 里面查看 git 提交记录呢?这个界面是藏在哪里的呢,我的 idea 里面怎么没有呢? 好的,是我疏忽了,我先入为主的认为这个大家应该都知道是怎么来的。 但是确实是有一些同学是不太清楚的,那我这篇…