中国国际贸易单一窗口网站,众筹网站建设方案,上海市建设三类人员报名网站,注册域名平台【重要说明】
该系统以opencvsharp作图像处理,onnxruntime做推理引擎#xff0c;使用CPU进行推理#xff0c;适合有显卡或者没有显卡windows x64系统均可#xff0c;不支持macOS和Linux系统#xff0c;不支持x86的windows操作系统。由于采用CPU推理#xff0c;要比GPU慢。…【重要说明】
该系统以opencvsharp作图像处理,onnxruntime做推理引擎使用CPU进行推理适合有显卡或者没有显卡windows x64系统均可不支持macOS和Linux系统不支持x86的windows操作系统。由于采用CPU推理要比GPU慢。为了适合大部分操作系统我们暂时只写了CPU推理源码GPU推理源码后期根据需要可能会调整目前只考虑CPU推理主要是为了照顾现在大部分使用该源码是学生很多人并没有显卡的电脑情况。
【算法介绍】
基于YOLOv5的驾驶员抽烟、打电话、安全带检测系统是一种先进的驾驶行为监测系统旨在提高驾驶安全性。该系统利用YOLOv5算法这是一种基于深度学习的目标检测算法特别适用于实时目标检测任务。
在驾驶员抽烟、打电话、安全带检测系统中YOLOv5算法通过将图像分割成网格并对每个网格进行分类同时回归框的边界框参数从而在单个前向传递中实现目标检测。为了训练这一系统需要构建一个包含大量标注图像的数据集这些图像应覆盖各种驾驶环境下司机抽烟、打电话以及未系安全带的实例。
在实际应用中该系统可以通过预置的摄像头或监控系统来实时获取图像或视频流对输入图像进行处理和分析通过YOLOv5模型检测驾驶员的行为并判断是否存在抽烟、打电话或未系安全带等分心或违规行为。如果检测到这些行为系统可以触发警报、发送通知或采取其他适当的措施以提醒驾驶员纠正分心行为或违规行为从而降低事故风险。
此外该系统还需要考虑隐私保护和合规性相关的问题确保系统的合法性和有效性。通过不断优化算法性能、扩大高质量数据集规模以及在实际应用中平衡技术与法律伦理考量该系统将在减少交通事故、保障驾驶安全方面发挥重要作用。
【效果展示】 【测试环境】
windows10 x64系统 VS2019 netframework4.7.2 opencvsharp4.8.0 onnxruntime1.16.3
【模型可以检测出类别】
{0: cigarette, 1: phone, 2: seatbelt}
【相关数据集(非本文训练的数据集)】
https://download.csdn.net/download/FL1623863129/89319046
【训练信息】
参数值训练集图片数11932验证集图片数2393训练map73.8%训练精度(Precision)82.2%训练召回率(Recall)69.8%
验证集每个类别精度统计 类别 MAP0.5(单位%) all 73 cigarette 60 phone 72 seatbelt 87
【部分实现源码】
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.Count0){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){Dictionarystring, int resultDict new Dictionarystring, 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 resultsdetetor.Inference(image);var resultImage detetor.DrawImage(OpenCvSharp.Extensions.BitmapConverter.ToBitmap(image), results);sw.Stop();pb_show.Image 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 cameraIndex0){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首先根据官方框架yolov5安装教程安装好yolov5环境并安装好pyqt5 2切换到自己安装的yolov5环境后并切换到源码目录执行python main.py即可运行启动界面进行相应的操作即可
【提供文件】
python源码 yolov5n.onnx模型不提供pytorch模型 训练的map,P,R曲线图(在weights\results.png) 测试图片在test_img文件夹下面
【源码下载地址】
https://download.csdn.net/download/FL1623863129/88540396