[C#][winform]基于yolov8的道路交通事故检测系统C#源码+onnx模型+评估指标曲线+精美GUI界面

【重要说明】

该系统以opencvsharp作图像处理,onnxruntime做推理引擎,使用CPU进行推理,适合有显卡或者没有显卡windows x64系统均可,不支持macOS和Linux系统,不支持x86的windows操作系统。由于采用CPU推理,要比GPU慢。为了适合大部分操作系统我们暂时只写了CPU推理源码,GPU推理源码后期根据需要可能会调整,目前只考虑CPU推理,主要是为了照顾现在大部分使用该源码是学生,很多人并没有显卡的电脑情况。

【算法介绍】

基于YOLOV8的道路交通事故检测系统是一种先进的智能交通监控解决方案,它利用YOLOV8这一前沿的目标检测算法,实现对交通事故的高效、实时检测。

该系统结合了自定义的道路交通事故数据集,对YOLOV8模型进行了针对性的训练与优化,使其能够精确识别交通事故的发生及其类型。在实际应用中,系统能够快速识别视频流中的多种目标,如车辆、行人等,并准确判断其是否存在交通事故行为。

此外,该系统通过PyQt5框架实现了友好且易于操作的用户界面,用户可以通过该界面实时监控交通状况,查看事故检测结果,并进行相关的操作设置。系统支持图片、视频以及摄像头进行目标检测,同时支持检测结果的实时显示,方便用户进行后续分析和处理。

基于YOLOV8的道路交通事故检测系统不仅适用于城市道路监控,还可以推广应用到高速公路、交通枢纽等更复杂的交通场景中。它能够帮助缩短紧急服务响应时间,减少交通阻塞,同时还能为事故分析和预防措施的制定提供数据支持。

总的来说,基于YOLOV8的道路交通事故检测系统为交通安全提供了一种智能化、自动化的解决方案,有助于提升城市交通管理水平,保障行人和驾驶员的生命财产安全。

【效果展示】

【测试环境】

windows10 x64系统
VS2019
netframework4.7.2
opencvsharp4.8.0
onnxruntime1.16.3

【模型可以检测出类别】

accident
moderate
severe

【相关数据集(非本文训练的数据集)】 

https://download.csdn.net/download/FL1623863129/87580711

【训练信息】

参数
训练集图片数7089
验证集图片数1084
训练map95.9%
训练精度(Precision)92.0%
训练召回率(Recall)93.5%
验证集测试精度信息

类别

MAP50(单位:%)

all

96

accident

91

moderate

98

severe

99

【部分实现源码】

using OpenCvSharp;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;namespace FIRC
{public partial class Form1 : Form{public bool videoStart = false;//视频停止标志string weightsPath = Application.StartupPath + "\\weights";//模型目录string labelTxt= Application.StartupPath + "\\weights\\class_names.txt";//类别文件Yolov8Manager detetor = new Yolov8Manager();//推理引擎public Form1(){InitializeComponent();CheckForIllegalCrossThreadCalls = false;//线程更新控件不报错}private void LoadWeightsFromDir(){var di = new DirectoryInfo(weightsPath);foreach(var fi in di.GetFiles("*.onnx")){comboBox1.Items.Add(fi.Name);}if(comboBox1.Items.Count>0){comboBox1.SelectedIndex = 0;}else{tssl_show.Text = "未找到模型,请关闭程序,放入模型到weights文件夹!";tsb_pic.Enabled = false;tsb_video.Enabled = false;tsb_camera.Enabled = false;}}private void Form1_Load(object sender, EventArgs e){LoadWeightsFromDir();//从目录加载模型}public string GetResultString(Result result){Dictionary<string, int> resultDict = new Dictionary<string, int>();for (int i = 0; i < result.length; i++){if(resultDict.ContainsKey( result.classes[i]) ){resultDict[result.classes[i]]++;}else{resultDict[result.classes[i]]=1;}}var resultStr = "";foreach(var item in resultDict){resultStr += string.Format("{0}:{1}\n",item.Key,item.Value);}return resultStr;}private void tsb_pic_Click(object sender, EventArgs e){OpenFileDialog ofd = new OpenFileDialog();ofd.Filter = "*.*|*.bmp;*.jpg;*.jpeg;*.tiff;*.tiff;*.png";if (ofd.ShowDialog() != DialogResult.OK) return;tssl_show.Text = "正在检测中...";Task.Run(() => {var sw = new Stopwatch();sw.Start();Mat image = Cv2.ImRead(ofd.FileName);detetor.Confidence =Convert.ToSingle(numericUpDown1.Value);detetor.IOU = Convert.ToSingle(numericUpDown2.Value);var results=detetor.Inference(image);var resultImage = detetor.DrawImage(image,results);sw.Stop();pb_show.Image = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(resultImage);tb_res.Text = GetResultString(results);tssl_show.Text = "检测已完成!总计耗时"+sw.Elapsed.TotalSeconds+"秒";});}public void VideoProcess(string videoPath){Task.Run(() => {detetor.Confidence = Convert.ToSingle(numericUpDown1.Value);detetor.IOU = Convert.ToSingle(numericUpDown2.Value);VideoCapture capture = new VideoCapture(videoPath);if (!capture.IsOpened()){tssl_show.Text="视频打开失败!";return;}Mat frame = new Mat();var sw = new Stopwatch();int fps = 0;while (videoStart){capture.Read(frame);if (frame.Empty()){Console.WriteLine("data is empty!");break;}sw.Start();var results = detetor.Inference(frame);var resultImg = detetor.DrawImage(frame,results);sw.Stop();fps = Convert.ToInt32(1 / sw.Elapsed.TotalSeconds);sw.Reset();Cv2.PutText(resultImg, "FPS=" + fps, new OpenCvSharp.Point(30, 30), HersheyFonts.HersheyComplex, 1.0, new Scalar(255, 0, 0), 3);//显示结果pb_show.Image = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(resultImg);tb_res.Text = GetResultString(results);Thread.Sleep(5);}capture.Release();pb_show.Image = null;tssl_show.Text = "视频已停止!";tsb_video.Text = "选择视频";});}public void CameraProcess(int cameraIndex=0){Task.Run(() => {detetor.Confidence = Convert.ToSingle(numericUpDown1.Value);detetor.IOU = Convert.ToSingle(numericUpDown2.Value);VideoCapture capture = new VideoCapture(cameraIndex);if (!capture.IsOpened()){tssl_show.Text = "摄像头打开失败!";return;}Mat frame = new Mat();var sw = new Stopwatch();int fps = 0;while (videoStart){capture.Read(frame);if (frame.Empty()){Console.WriteLine("data is empty!");break;}sw.Start();var results = detetor.Inference(frame);var resultImg = detetor.DrawImage(frame, results);sw.Stop();fps = Convert.ToInt32(1 / sw.Elapsed.TotalSeconds);sw.Reset();Cv2.PutText(resultImg, "FPS=" + fps, new OpenCvSharp.Point(30, 30), HersheyFonts.HersheyComplex, 1.0, new Scalar(255, 0, 0), 3);//显示结果pb_show.Image = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(resultImg);tb_res.Text = GetResultString(results);Thread.Sleep(5);}capture.Release();pb_show.Image = null;tssl_show.Text = "摄像头已停止!";tsb_camera.Text = "打开摄像头";});}private void tsb_video_Click(object sender, EventArgs e){if(tsb_video.Text=="选择视频"){OpenFileDialog ofd = new OpenFileDialog();ofd.Filter = "视频文件(*.*)|*.mp4;*.avi";if (ofd.ShowDialog() != DialogResult.OK) return;videoStart = true;VideoProcess(ofd.FileName);tsb_video.Text = "停止";tssl_show.Text = "视频正在检测中...";}else{videoStart = false;}}private void tsb_camera_Click(object sender, EventArgs e){if (tsb_camera.Text == "打开摄像头"){videoStart = true;CameraProcess(0);tsb_camera.Text = "停止";tssl_show.Text = "摄像头正在检测中...";}else{videoStart = false;}}private void tsb_exit_Click(object sender, EventArgs e){videoStart = false;this.Close();}private void trackBar1_Scroll(object sender, EventArgs e){numericUpDown1.Value = Convert.ToDecimal(trackBar1.Value / 100.0f);}private void trackBar2_Scroll(object sender, EventArgs e){numericUpDown2.Value = Convert.ToDecimal(trackBar2.Value / 100.0f);}private void numericUpDown1_ValueChanged(object sender, EventArgs e){trackBar1.Value = (int)(Convert.ToSingle(numericUpDown1.Value) * 100);}private void numericUpDown2_ValueChanged(object sender, EventArgs e){trackBar2.Value = (int)(Convert.ToSingle(numericUpDown2.Value) * 100);}private void comboBox1_SelectedIndexChanged(object sender, EventArgs e){tssl_show.Text="加载模型:"+comboBox1.Text;detetor.LoadWeights(weightsPath+"\\"+comboBox1.Text,labelTxt);tssl_show.Text = "模型加载已完成!";}}
}

【使用步骤】

使用步骤:
(1)首先根据官方框架https://github.com/ultralytics/ultralytics安装教程安装好yolov8环境,并根据官方export命令将自己pt模型转成onnx模型
(2)使用vs2019打开sln项目,选择x64 release并且修改一些必要的参数,比如输入shape等,点击运行即可查看最后效果

特别注意如果运行报错了,请参考我的博文进行重新引用我源码的DLL:https://blog.csdn.net/FL1623863129/article/details/135424751

【提供文件】

C#源码
yolov8n.onnx模型(不提供pytorch模型)
训练的map,P,R曲线图(在weights\results.png)
测试图片(在test_img文件夹下面)

【视频演示】

[C#][winform]基于yolov8的道路交通事故检测系统C#源码+onnx模型+评估指标曲线+精美GUI界面_哔哩哔哩_bilibili【测试环境】windows10 x64系统VS2019netframework4.7.2opencvsharp4.8.0onnxruntime1.16.3更多信息和源码下载参考博文:https://blog.csdn.net/FL1623863129/article/details/143069821, 视频播放量 1、弹幕量 0、点赞数 0、投硬币枚数 0、收藏人数 0、转发人数 0, 视频作者 未来自主研究中心, 作者简介 未来自主研究中心,相关视频:C# winform使用纯opencvsharp部署yolox-onnx模型,C# winform部署yolov11-pose姿态估计onnx模型,使用C#的winform部署yolov8的onnx实例分割模型,C++版本yolov8的onnx模型加密方法保护自己模型和版权,基于yolov8的火焰烟雾检测系统python源码+onnx模型+评估指标曲线+精美GUI界面,C#部署官方yolov8-obb旋转框检测的onnx模型,易语言部署yolov8的onnx模型,基于yolov8的PCB缺陷检测系统python源码+onnx模型+评估指标曲线+精美GUI界面,使用C++部署yolov8的onnx和bytetrack实现目标追踪,基于C# winform调用文心一言大模型实现实时聊天功能icon-default.png?t=O83Ahttps://www.bilibili.com/video/BV1ykCXYTEKo/

【源码下载地址】

关注下方名片并回复【firc4】即可获取下载方式

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

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

相关文章

Turn-it:调整它:优化线材重构雕塑制造

&#x1f428;文章摘要abstract 电线雕塑在工业应用和日常生活中都很重要。 本文提出了一种新的制造策略&#xff0c;通过调整目标形状以适应电线弯曲机&#xff0c;然后由人工将其弯曲回目标形状。&#xff08;机器弯曲人工弯曲&#xff09; 该方法通过两阶段弯曲策略实现&a…

王爽汇编语言第三版实验2

实验任务 (1)使用Debug&#xff0c;将下面的程序段写 入程序&#xff0c;逐条进行&#xff0c;根据指令执行后的实际运行情况填空。 mov ax,ffff mov ds,ax mov ax,2200 mov ss,ax mov sp,0100 mov ax,[0] ;axC0EAH add ax,[2] ;axCOFCH mov bx,[4] ;bx30F0H add …

Flink消费Kafka实时写入Doris

本文模拟实际生产环境&#xff0c;通过FileBeat采集日志信息到Kafka&#xff0c;再通过Flink消费Kafka实时写入Doris。 文章目录 Filebeat采集日志到KafkaFlink消费Kafka实时写入Doris总结 Filebeat采集日志到Kafka 常见的日志采集工具有以下几种&#xff1a;Flume、Logstash和…

基于SpringBoot+Vue+uniapp微信小程序的校园反诈骗微信小程序的详细设计和实现(源码+lw+部署文档+讲解等)

项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念&#xff0c;提供了一套默认的配置&#xff0c;让开发者可以更专注于业务逻辑而不是配置文件。Spring Boot 通过自动化配置和约…

Unity 从零开始搭建一套简单易用的UGUI小框架 功能撰写与优化篇

Unity 从零开始搭建一套简单易用的UGUI小框架 基础分析篇-CSDN博客 开始撰写 从基础分析篇我们得到了三个类&#xff0c;面板基类&#xff0c;管理类和面板子类 那就从面板基类开始&#xff0c;定义其基本行为 面板基类 基本方法都很简单&#xff0c;分别是首次加载并打开…

[含文档+PPT+源码等]精品基于springboot实现的原生微信小程序小区兼职系统

基于Spring Boot实现的原生微信小程序小区兼职系统背景&#xff0c;可以从以下几个方面进行阐述&#xff1a; 一、技术背景 移动互联网的普及&#xff1a;随着移动互联网的快速发展&#xff0c;微信小程序作为一种轻量级应用&#xff0c;因其无需下载安装、即用即走的特点&am…

SSD |(七)FTL详解(中)

文章目录 &#x1f4da;垃圾回收&#x1f407;垃圾回收原理&#x1f407;写放大&#x1f407;垃圾回收实现&#x1f407;垃圾回收时机 &#x1f4da;解除映射关系&#x1f4da;磨损均衡 &#x1f4da;垃圾回收 &#x1f407;垃圾回收原理 ✋设定一个迷你SSD空间&#xff1a; 假…

解决ImageIO无法读取部分JPEG格式图片问题

解决ImageIO无法读取部分JPEG格式图片问题 问题描述 我最近对在线聊天功能进行了一些内存优化&#xff0c;结果在回归测试时&#xff0c;突然发现有张图片总是发送失败。测试同事把问题转到我这儿来看&#xff0c;我仔细检查了一下&#xff0c;发现是上传文件的接口报错&#…

获取非加密邮件协议中的用户名和密码——安全风险演示

引言 在当今的数字时代,网络安全变得越来越重要。本文将演示如何通过抓包工具获取非加密邮件协议中的用户名和密码,以此说明使用非加密协议的潜在安全风险。通过这个演示,我们希望能提高读者的安全意识,促使大家采取更安全的通信方式。 注意: 本文仅用于教育目的,旨在提高安全…

Android开发蒙版引导操作功能

Android开发蒙版引导操作功能 复杂的功能&#xff0c;往往需要在上面加一层蒙版引导用户操作 一、思路&#xff1a; 堆积布局方式 二、效果图&#xff1a; 三、关键代码&#xff1a; <?xml version"1.0" encoding"utf-8"?> <FrameLayout x…

【大模型】AI视频课程制作工具开发

1. 需求信息 1.1 需求背景 讲师们在制作视频的过程中&#xff0c;发现录制课程比较麻烦&#xff0c;要保证环境安静&#xff0c;保证录制过程不出错&#xff0c;很容易反复重复录制&#xff0c;为了解决重复录制的工作量&#xff0c;想通过 ai 课程制作工具&#xff0c;来解决…

飞机大战告尾

参考 PPO算法逐行代码详解 链接 通过网盘分享的文件&#xff1a;PlaneWar 链接: https://pan.baidu.com/s/1cbLKTcBxL6Aem3WkyDtPzg?pwd1234 提取码: 1234 10.17关于博客发了又改这件事 悲催的事 今天训练了一早上ppo模型&#xff0c;满怀期待的检测成果时发现一点长进都…

【Linux】“echo $变量“ 命令打印变量值的底层原理

在 shell 中&#xff0c;echo $变量 命令的工作原理涉及几个关键步骤&#xff0c;主要是由 shell 解释器来处理变量的查找和替换。以下是详细的过程&#xff1a; 变量展开的过程顺序 变量引用&#xff1a; 在命令行中&#xff0c;变量通常以 $variable_name 或 ${variable_…

使用Shell脚本对Java应用等服务进行启停控制(支持批量)

通过shell脚本对Java服务启停进行控制。支持单个服务和多个服务的 start、stop、status、restart。支持自定义启动命令。(不限于Java服务,适用于各类通过命令行启动的服务) 脚本名称为 runjar.sh , 底部提供源码。通过三部分进行说明:操作说明、维护自定义服务列表、脚本源…

搭建`mongodb`副本集-开启权限认证 mongo:7.0.5

搭建mongodb副本集-开启权限认证 mongo:7.0.5 1.5.1、创建文件 创建配置文件保存目录和数据保存目录 mkdir -p /data/mongodb/{/conf,/data,/logs}生成和设置权限 这个文件一定要在一个服务里面生成然后复制到其它服务器&#xff0c;所有服务器的这个key一定是相同的。 op…

C语言 | Leetcode C语言题解之第480题滑动窗口中位数

题目&#xff1a; 题解&#xff1a; struct Heap {int* heap;int heapSize;int realSize;bool (*cmp)(int, int); };void init(struct Heap* obj, int n, bool (*cmp)(int, int)) {obj->heap malloc(sizeof(int) * (n 1));obj->heapSize 0;obj->cmp cmp; }bool c…

第二十二篇——菲欧几何:相对论的数学基础是什么?

目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么&#xff1f; 四、总结五、升华 一、背景介绍 对于几何的几个工具&#xff0c;让我再次感叹数学的伟大&#xff0c;逻辑…

国产大模型基础能力大比拼 - 计数:通义千文 vs 文心一言 vs 智谱 vs 讯飞-正经应用场景的 LLM 逻辑测试

在大语言模型&#xff08;LLM&#xff09;不断涌现的时代&#xff0c;如何评估这些国产大模型的逻辑推理能力&#xff0c;尤其是在处理基础计数问题上的表现&#xff0c;成为了一个备受关注的话题。随着越来越多的国产大模型进入市场&#xff0c;比较它们在不同任务中的表现尤为…

STM32笔记(1)GPIO之点亮LED

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 总结 第一步&#xff1a;先看原理图。PB0输出高电平是&#xff0c;LED1点亮。 初始化完成了两项工作&#xff1a; (1)从时钟上启动所用GPIO所在的总线&#xff1b…

Centos7 安装升级最新版Redis7.4.1

1. 前言 今天阿里云云盾检测出一个redis低版本的漏洞,需要升级到稳定高版本修复漏洞,升级过程遇到了一些坑,特记录分享给大家,原服务器默认yum源安装的gcc 是4.8.5 ,默认安装redis是 3.2.12(如下图): 2.升级GCC 升级新版redis需要更高级的gcc支持,这里我们就选择升级…