OpenCvSharp+Yolov5Net+Onnx 完整Demo
效果

工程

代码
using Microsoft.ML.OnnxRuntime;
using OpenCvSharp;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Windows.Forms;
namespace OpenCvSharp_Yolov5Net_Onnx
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private string PicFilter = "*.*|*.bmp;*.jpg;*.jpeg;*.tiff;*.tiff;*.png";
private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = PicFilter;
if (ofd.ShowDialog() != DialogResult.OK) return;
var imagefile = ofd.FileName;
var image = Image.FromFile(imagefile);
Yolov5Net.Scorer.YoloScorer<Yolov5Net.Scorer.Models.YoloCocoP5Model> scorer = new Yolov5Net.Scorer.YoloScorer<Yolov5Net.Scorer.Models.YoloCocoP5Model>("yolov5s.onnx");
List<Yolov5Net.Scorer.YoloPrediction> predictions = scorer.Predict(image);
var graphics = Graphics.FromImage(image);
foreach (var prediction in predictions) // iterate predictions to draw results
{
double score = Math.Round(prediction.Score, 2);
graphics.DrawRectangles(new Pen(prediction.Label.Color, 2), new[] { prediction.Rectangle });
PointF p = new PointF(prediction.Rectangle.X - 3, prediction.Rectangle.Y - 23);
graphics.DrawString(prediction.Label.Name + " (" + score + ")"
, new Font("Arial", 16, GraphicsUnit.Pixel)
, new SolidBrush(prediction.Label.Color)
, p);
}
pictureBox1.Image = image;
}
FrameSource frame;
Thread t;
private void button2_Click(object sender, EventArgs e)
{
//获取视频设备
frame = Cv2.CreateFrameSource_Camera(0);
t = new Thread(CameraDet);
t.Start();
}
private void CameraDet()
{
Mat mat = new Mat();
//yolov5+onnx检测
var scorer = new Yolov5Net.Scorer.YoloScorer<Yolov5Net.Scorer.Models.YoloCocoP5Model>("yolov5s.onnx");
//逐帧放入
while (true)
{
if (frame.IsDisposed)
{
return;
}
//从摄像头读视频帧
frame.NextFrame(mat);
//先将Mat图像转换成Stream流,再将流转成Bitmap
var image = new Bitmap(mat.ToMemoryStream()) as Image;
//var image = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(mat);
List<Yolov5Net.Scorer.YoloPrediction> predictions = scorer.Predict(image);
//在图片上绘制目标标识
var graphics = Graphics.FromImage(image);
foreach (var prediction in predictions) // iterate predictions to draw results
{
double score = Math.Round(prediction.Score, 2);
graphics.DrawRectangles(new Pen(prediction.Label.Color, 2),
new[] { prediction.Rectangle });
var (x, y) = (prediction.Rectangle.X - 3, prediction.Rectangle.Y - 23);
graphics.DrawString($"{prediction.Label.Name} ({score})",
new Font("Arial", 16, GraphicsUnit.Pixel), new SolidBrush(prediction.Label.Color),
new PointF(x, y));
pictureBox1.Image = image;
}
}
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (frame != null)
{
frame.Dispose();
frame = null;
t.Abort();
}
}
}
}
Demo下载
OpenCvSharp+Yolov5Net+Onnx 完整Demo的更多相关文章
- 百度编辑器UEditor与UEditor 公式插件完整Demo
1.下载UEditor(我的是.net项目) 2.下载UEditor公式插件 3.新建解决方案和项目 4.在浏览器中预览index.html页面 结果: 5.index.html源码 <!DOC ...
- 谷歌开源项目Google Preview Image Extractor(PIEX) (附上完整demo代码)
前天偶然看到谷歌开源项目中有一个近乎无人问津的项目Google Preview Image Extractor(PIEX) . 项目地址: https://github.com/google/piex ...
- jQuery实现的分页功能,包括ajax请求,后台数据,有完整demo
一:需求分析 1)需要首页,末页功能 2)有点击查看上一页,下一页功能 3)页码到当前可视页码最后一页刷新页面 二:功能实现思路 也是分为三部分处理 1)点击首页,末页直接显示第一页或者最后一页内容, ...
- REST风格框架实战:从MVC到前后端分离(附完整Demo)
既然MVC模式这么好,难道它就没有不足的地方吗?我认为MVC至少有以下三点不足:(1)每次请求必须经过“控制器->模型->视图”这个流程,用户才能看到最终的展现的界面,这个过程似乎有些复杂 ...
- 前后端分离开发,基于SpringMVC符合Restful API风格Maven项目实战(附完整Demo)!
摘要: 本人在前辈<从MVC到前后端分离(REST-个人也认为是目前比较流行和比较好的方式)>一文的基础上,实现了一个基于Spring的符合REST风格的完整Demo,具有MVC分层结构并 ...
- MQTT(一)C#使用 MQTTnet 快速实现 MQTT 通信(文末有完整Demo下载)
https://blog.csdn.net/panwen1111/article/details/79245161 目录MQTT(一)C#使用 MQTTnet 快速实现 MQTT 通信(文末有完整De ...
- 【转】REST风格框架实战:从MVC到前后端分离(附完整Demo)
版权声明:欢迎转载,注明作者和出处就好!如果不喜欢或文章存在明显的谬误,请留言说明原因再踩哦,谢谢,我也可以知道原因,不断进步! https://blog.csdn.net/justloveyou_/ ...
- Web自动化框架之五一套完整demo的点点滴滴(excel功能案例参数化+业务功能分层设计+mysql数据存储封装+截图+日志+测试报告+对接缺陷管理系统+自动编译部署环境+自动验证false、error案例)
标题很大,想说的很多,不知道从那开始~~直接步入正题吧 个人也是由于公司的人员的现状和项目的特殊情况,今年年中后开始折腾web自动化这块:整这个原因很简单,就是想能让自己偷点懒.也让减轻一点同事的苦力 ...
- 小程序微信支付完整demo,包含退款
最近刚完成一个商场小程序(http://market.zhenzikj.com/detail/121.html), 使用到了微信支付功能,其中遇到了很多的抗,所以,我把支付这块摘出来,以免大家少走弯路 ...
- NVelocity学习笔记一——linq2sql+NVelocity完整demo
(一)前言 刚刚进入新公司,看公司的项目,发现开发流程几乎和以前的完全不同,再看看页面布局竟然没有发现html.神马情况????一番探究发现使用了NVelocity模板引擎开发的.于是乎花了 ...
随机推荐
- android架构组件Lifecycle
Lifecycle 组件指的是 android.arch.lifecycle 包下提供的各种类与接口,可以让开发者构建能感知其他组件(主要指Activity .Fragment)生命周期(lifecy ...
- 【Unity3D】人机交互Input
1 前言 Input 是 Unity3D 中用于人机交互的工具类,用户可以调用其 GetKey.GetMousePosition.GetMouseButton.GetAxis.GetButton ...
- [超实用插件]在Visual Studio中查看EF Core查询计划
前言 EF Core是我们.NET开发中比较常用的一款ORM框架,今天我们分享一款可以直接在Visual Studio中查看EF Core查询计划调试器可视化工具(帮助开发者分析和优化数据库查询性能) ...
- EF Invalid column name 'Discriminator' Invalid column name 'TagCode'.
参考资料:Invalid column name 'TagCode'. 该异常和Discriminator没关系,一般原因:1.数据库中字段和实体类字段不一致导致的2.创建新增继承于数据库对应的实体类 ...
- 用BootstrapBlazor制作修改订单字段的页面
1.在Shared文件夹下新增一个razor 2.页面初始化的时候获取订单信息 准备一个名为OrderId的参数 准备重写页面初始化时的方法 改成异步的形式来重写 4.获取数据 就3行代码. 声明这个 ...
- 第一百零一篇:DOM节点类型
好家伙, DOM DOM是javascript操作网页的接口,全称为文档对象模型(Document Object Model).它的作用是将网页转为一个javascript对象, 从而可以使用ja ...
- 【Azure 应用服务】应用服务连接 Azure MySQL 一直失败,报错 Create connection error
问题描述 App Service上部署的Java应用,连接 Azure Database for MySQL 失败.错误信息:Create connection error, url: jdbc:my ...
- 【Azure Developer】解答《美丽的数学》一书中P120页的一道谜题:寻找第四个阶乘和数
一道谜题 在观看<美丽的数学>一书中,在120页中有一道谜题: 数字145被称为一个阶乘和数, 因为它具有以下有趣的属性,如果我们将它的各位数字的阶乘相加,会得到该数字本身 1! +4! ...
- 【Azure 环境】如果Azure中的某一个资源被删除后是否可以查看到删除的记录呢?如Resource Group
问题描述 当一个资源从Azure中删除后,是否有地方可以查看到这些操作的记录呢?如操作人,操作时间等. 问题解答 可以的.通过 Azure订阅页面的活动日志,可以查看所有对订阅下资源的操作记录,包含D ...
- 如何实现十亿级离线 CSV 导入 Nebula Graph
本文首发于 Nebula Graph Community 公众号 本次实践是基于业务需求及后续扩展,通过技术选型确定了 Nebula Graph 图数据库,首先需要验证 Nebula Graph 数据 ...