[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.rhkb.cn/news/451469.html

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

相关文章

【重学 MySQL】七十一、揭秘数据库魔法——深入探索并引入视图

【重学 MySQL】七十一、揭秘数据库魔法——深入探索并引入视图 视图的定义视图的作用视图的注意事项 在MySQL数据库中&#xff0c;视图&#xff08;View&#xff09;是一种非常强大且灵活的工具&#xff0c;它为用户提供了以更安全、更清晰的方式查看和管理数据的途径。 视图的…

《计算机视觉》—— 换脸

效果如下&#xff1a; 完整代码&#xff1a; import cv2 import dlib import numpy as npJAW_POINTS list(range(0, 17)) RIGHT_BROW_POINTS list(range(17, 22)) LEFT_BROW_POINTS list(range(22, 27)) NOSE_POINTS list(range(27, 35)) RIGHT_EYE_POINTS list(range(36…

【深入解析】ChatGPT各版本在论文写作中的五大表现差异

学境思源&#xff0c;一键生成论文初稿&#xff1a; AcademicIdeas - 学境思源AI论文写作 人工智能在自然语言处理领域已取得了显著进展&#xff0c;尤其是OpenAI的ChatGPT系列在文本生成和理解方面表现突出。然而&#xff0c;不同版本的ChatGPT在论文写作中的表现存在明显差异…

Python 从入门到实战37(进程间通信)

我们的目标是&#xff1a;通过这一套资料学习下来&#xff0c;可以熟练掌握python基础&#xff0c;然后结合经典实例、实践相结合&#xff0c;使我们完全掌握python&#xff0c;并做到独立完成项目开发的能力。 上篇文章我们讨论了通过multiprocessing模块创建进程操作的相关知…

力扣 142.环形链表Ⅱ【详细解释】

一、题目 二、思路 三、代码 /*** Definition for singly-linked list.* class ListNode {* int val;* ListNode next;* ListNode(int x) {* val x;* next null;* }* }*/ public class Solution {public ListNode detectCycle(ListNode hea…

javaWeb项目-ssm+jsp房屋出租管理系统功能介绍

本项目源码&#xff08;点击下方链接下载&#xff09;&#xff1a;java-ssmjsp房屋出租管理系统实现源码(项目源码-说明文档)资源-CSDN文库 项目关键技术 开发工具&#xff1a;IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7 框架&#xff1a;ssm、Springboot 前端&#xff…

[含文档+PPT+源码等]精品基于springboot实现的原生Andriod大学校园食堂外卖系统App

基于Spring Boot实现的原生Android大学校园食堂外卖系统App的背景可以从以下几个方面进行阐述&#xff1a; 一、项目背景与需求 随着移动互联网技术的快速发展和智能手机的普及&#xff0c;大学生对于便捷、高效的校园生活服务需求日益增长。大学校园食堂作为学生们日常用餐的…

【电商项目】1分布式基础篇

1 项目简介 1.2 项目架构图 1.2.1 项目微服务架构图 1.2.2 微服务划分图 2 分布式基础概念 3 Linux系统环境搭建 查看网络IP和网关 linux网络环境配置 补充P123&#xff08;修改linux网络设置&开启root密码访问&#xff09; 设置主机名和hosts映射 主机名解析过程分析&…

【问题解决】——当出现0xc000007b和缺少mfc140.dll时,该怎么做才能让软件可以打开

目录 事情起因 问题处理 明确定义 填坑之路 最后我是怎么解决的&#xff08;不想看故事直接到这里&#xff09; 事情起因 最近想要重新安装西门子博途来做西门子的一些算法的时候&#xff0c;发现自己软件装的是V15.1的版本&#xff0c;而买的plc1200固件版本要求至少16以…

性能评测第一,阿里开源可商用AI模型Ovis 1.6使用指南,AI多模态大模型首选

什么是 Ovis 1.6 Gemma 2 9B&#xff1f; Ovis 1.6 Gemma 2 9B 是阿里国际AI团队推出的最新多模态大模型&#xff08;Multimodal Large Language Model&#xff0c;MLLM&#xff09;。该模型旨在结构化地对齐视觉和文本嵌入&#xff0c;能够处理和理解多种不同类型的数据输入&…

抑郁症自测量表 API 接口,洞察情绪状态

抑郁症是一种常见的心理疾病&#xff0c;会给患者的生活和工作带来很大的困扰。为了帮助人们更好地了解自己的情绪状态&#xff0c;有一种抑郁症自测量表&#xff08;简称SDS&#xff09;&#xff0c;它是一种能够反映病人主观抑郁症状的自评量表。下面我们将通过调用抑郁症自测…

基于FreeRTOS的LWIP移植

目录 前言一、移植准备工作二、以太网固件库与驱动2.1 固件库文件添加2.2 库文件修改2.3 添加网卡驱动 三、LWIP 数据包和网络接口管理3.1 添加LWIP源文件3.2 Lwip文件修改3.2.1 修改cc.h3.2.2 修改lwipopts.h3.2.3 修改icmp.c3.2.4 修改sys_arch.h和sys_arch.c3.2.5 修改ether…

Linux·文件与IO

1. 回忆文件操作相关知识 我们首先回忆一下关于文件的一些知识。 如果一个文件没有内容&#xff0c;那它到底有没有再磁盘中存在&#xff1f;答案是存在&#xff0c;因为 文件 内容 属性&#xff0c;即使文件内容为空&#xff0c;但属性信息也是要记录的。就像进程的…

硬件产品经理的开店冒险之旅(下篇)

缘起&#xff1a;自己为何想要去寻找职业第二曲线 承接上篇的内容&#xff0c;一名工作13年的普通硬件产品经理将尝试探索第二职业曲线。根本原因不是出于什么高大上的人生追求或者什么职业理想主义&#xff0c;就是限于目前的整体就业形式到了40岁的IT从业人员基本不可能在岗…

【Python】selenium遇到“InvalidArgumentException”的解决方法

在使用try……except 的时候捕获到这个错误&#xff1a; InvalidArgumentException: invalid argument (Session info: chrome112.0.5614.0) 这个错误代表的是&#xff0c;当传入的参数不符合期望时&#xff0c;就会抛出这个异常&#xff1a; InvalidArgumentException: invali…

day-69 使二进制数组全部等于 1 的最少操作次数 II

思路 与3191. 使二进制数组全部等于 1 的最少操作次数 I思路类似&#xff0c;区别在于该题每次将下标i开始一直到数组末尾所有元素反转&#xff0c;所以我们用一个变量可以统计翻转次数 解题过程 从左向右遍历数组的过程中&#xff0c;有两种情况需要进行翻转&#xff1a;1.当…

多媒体(4)

PNG PNG&#xff08;流式网络图像&#xff09;文件采用【无损压缩】算法&#xff0c;压缩比高于GIF文件&#xff0c;支持 图像透明 PNG文件的色彩深度可以是灰度图像的16位&#xff0c;彩色图像的48位&#xff0c;是一种新兴的 网络图像格式 矢量图 矢量图是一组指令集合描述图…

Sentinel 介绍

随着微服务的流行&#xff0c;服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件&#xff0c;主要以流量为切入点&#xff0c;从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开…

芯知识 | NVH-FLASH语音芯片支持平台做语音—打造音频IC技术革新

随着科技的飞速发展&#xff0c;人们对于电子产品的音频性能要求越来越高。在这种背景下&#xff0c;NVH-FLASH系列语音芯片应运而生&#xff0c;作为音频IC领域的一次重大技术革新&#xff0c;NVH-FLASH系列语音芯片凭借其卓越的性能与灵活的支持平台&#xff0c;正逐步引领着…

Linux——网络层协议

前言 网络层&#xff1a;在复杂的网络环境中确定一个合适的路径 目录 前言 一IP协议 1预备知识 2基本概念 3格式 4网段划分 4.1理解IP 4.2IP组成 4.3划分方式 4.4为什么要网段划分 5特殊的IP地址 6IP地址的限制 7私有IP和公网IP 8NAT技术 9理解公网 10路由 …