news 2026/4/5 6:15:15

Python车型识别系统 YOLO模型 PyQt5界面 openCV框架 pytorch框架 深度学习 计算机毕业设计

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python车型识别系统 YOLO模型 PyQt5界面 openCV框架 pytorch框架 深度学习 计算机毕业设计

博主介绍:✌全网粉丝10W+,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业项目实战6年之久,选择我们就是选择放心、选择安心毕业✌
> 🍅想要获取完整文章或者源码,或者代做,拉到文章底部即可与我联系了。🍅

点击查看作者主页,了解更多项目!

🍅感兴趣的可以先收藏起来,点赞、关注不迷路,大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助同学们顺利毕业 。🍅

1、毕业设计:2026年计算机专业毕业设计选题汇总(建议收藏)✅

2、大数据毕业设计:2026年选题大全 深度学习 python语言 JAVA语言 hadoop和spark(建议收藏)✅

🍅感兴趣的可以先收藏起来,点赞、关注不迷路,大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助同学们顺利毕业 。🍅

1、项目介绍

技术栈:
Python语言、YOLOv5模型、PyQt5界面、openCV、pytorch框架、
支持:上传图片、上传视频、摄像头

2、项目界面

(1)系统界面

(2)车型识别—多目标检测

(3)车型识别—多目标检测

(4)车型识别—多目标检测

(5)车型识别—多目标检测

(6)车型识别—多目标检测


(6)车型识别—多目标检测(上传视频)

(7)注册登录

3、项目说明

技术栈:
Python语言、YOLOv5模型、PyQt5界面、openCV、pytorch框架、
支持:上传图片、上传视频、摄像头

4、核心代码

importargparseimportosimportrandomimporttimefromosimportgetcwdimportcv2importnumpyasnpimporttorchfromPyQt5importQtCore,QtWidgetsfromPyQt5.QtWidgetsimportQFileDialog,QMessageBoxfromVehicleType.label_nameimportChinese_namefrommodels.experimentalimportattempt_load# from UI_rec.tools.BeautyUI import QBeautyUI# from tools.BeautyUI import QBeautyUIfromUI_rec.tools.BeautyUIimportQBeautyUI# from UI_rec.tools.BeautyUI import QBeautyUI 原始fromutils.datasetsimportletterboxfromutils.generalimport(check_img_size,non_max_suppression,scale_coords)fromutils.torch_utilsimportselect_device,time_synchronizedclassVehicleType_MainWindow(QBeautyUI):def__init__(self,*args,obj=None,**kwargs):super(VehicleType_MainWindow,self).__init__(*args,**kwargs)self.author_flag=False# 是否输出信息self.setupUi(self)# 界面生成self.retranslateUi(self)# 界面控件self.setUiStyle(window_flag=True,transBack_flag=True)# 设置界面样式self.path=getcwd()self.video_path=getcwd()self.timer_camera=QtCore.QTimer()# 定时器self.timer_video=QtCore.QTimer()# 视频定时器self.flag_timer=""# 用于标记正在进行的功能项(视频/摄像)self.LoadModel()# 加载预训练模型self.slot_init()# 定义槽函数self.files=[]#self.cap_video=None# 视频流对象self.CAM_NUM=0# 摄像头标号self.cap=cv2.VideoCapture(self.CAM_NUM)# 屏幕画面对象self.detInfo=[]self.current_image=[]self.detected_image=None# self.dataset = Noneself.count=0# 表格行数,用于记录识别识别条目self.res_set=[]# 用于历史结果记录的列表self.c_video=0self.count_name=["小型车","中型车","大型车","小型卡车","大型卡车","油罐车","特种车"]self.count_table=[]self.plotBar(self.count_name,[0foriinself.count_name],self.colors,margin=20)defslot_init(self):self.toolButton_file.clicked.connect(self.choose_file)self.toolButton_folder.clicked.connect(self.choose_folder)self.toolButton_video.clicked.connect(self.button_open_video_click)self.timer_video.timeout.connect(self.show_video)self.toolButton_camera.clicked.connect(self.button_open_camera_click)self.timer_camera.timeout.connect(self.show_camera)self.toolButton_model.clicked.connect(self.choose_model)self.comboBox_select.currentIndexChanged.connect(self.select_obj)self.tableWidget.cellPressed.connect(self.table_review)self.toolButton_saveing.clicked.connect(self.save_file)self.toolButton_settings.clicked.connect(self.setting)self.toolButton_author.clicked.connect(self.disp_website)self.toolButton_version.clicked.connect(self.disp_version)deftable_review(self,row,col):try:ifcol==0:# 点击第一列时this_path=self.tableWidget.item(row,1)# 表格中的文件路径res=self.tableWidget.item(row,2)# 表格中记录的识别结果axes=self.tableWidget.item(row,3)# 表格中记录的坐标if(this_pathisnotNone)&(resisnotNone)&(axesisnotNone):this_path=this_path.text()ifos.path.exists(this_path):res=res.text()axes=axes.text()image=self.cv_imread(this_path)# 读取选择的图片image=cv2.resize(image,(850,500))axes=[int(i)foriinaxes.split(",")]confi=float(self.tableWidget.item(row,4).text())# print(axes)# image = self.drawRectBox(image, axes, res)count=self.count_table[row]self.plotBar(self.count_name,count,self.colors,margin=20)self.label_numer_result.setText(str(sum(count)))image=self.drawRectEdge(image,axes,alpha=0.2,addText=res)# 在Qt界面中显示检测完成画面self.display_image(image)# 在界面中显示画面# 在界面标签中显示结果self.label_xmin_result.setText(str(int(axes[0])))self.label_ymin_result.setText(str(int(axes[1])))self.label_xmax_result.setText(str(int(axes[2])))self.label_ymax_result.setText(str(int(axes[3])))self.label_score_result.setText(str(round(confi*100,2))+"%")self.label_class_result.setText(res)QtWidgets.QApplication.processEvents()except:self.label_display.setText('重现表格记录时出错,请检查表格内容!')self.label_display.setStyleSheet("border-image: url(:/newPrefix/images_test/ini-image.png);")defLoadModel(self,model_path=None):""" 读取预训练模型 """parser=argparse.ArgumentParser()parser.add_argument('--weights',nargs='+',type=str,default='../weights/vehicle-best.pt',help='model.pt path(s)')# 模型路径仅支持.pt文件parser.add_argument('--img-size',type=int,default=480,help='inference size (pixels)')# 检测图像大小,仅支持480parser.add_argument('--conf-thres',type=float,default=0.25,help='object confidence threshold')# 置信度阈值parser.add_argument('--iou-thres',type=float,default=0.45,help='IOU threshold for NMS')# NMS阈值# 选中运行机器的GPU或者cpu,有GPU则GPU,没有则cpu,若想仅使用cpu,可以填cpu即可parser.add_argument('--device',default='',help='cuda device, i.e. 0 or 0,1,2,3 or cpu')parser.add_argument('--save-dir',type=str,default='inference',help='directory to save results')# 文件保存路径parser.add_argument('--classes',nargs='+',type=int,help='filter by class: --class 0, or --class 0 2 3')# 分开类别parser.add_argument('--agnostic-nms',action='store_true',help='class-agnostic NMS')# 使用NMSself.opt=parser.parse_args()# opt局部变量,重要out,weight,imgsz=self.opt.save_dir,self.opt.weights,self.opt.img_size# 得到文件保存路径,文件权重路径,图像尺寸self.device=select_device(self.opt.device)# 检验计算单元,gpu还是cpuself.half=self.device.type!='cpu'# 如果使用gpu则进行半精度推理ifmodel_path:weight=model_path self.model=attempt_load(weight,map_location=self.device)# 读取模型self.imgsz=check_img_size(imgsz,s=self.model.stride.max())# 检查图像尺寸ifself.half:# 如果是半精度推理self.model.half()# 转换模型的格式self.names=self.model.module.namesifhasattr(self.model,'module')elseself.model.names# 得到模型训练的类别名# self.names = [Chinese_name[i] for i in self.names]fori,vinenumerate(self.names):ifvinChinese_name.keys():self.names[i]=Chinese_name[v]# hex = ('FF3838', 'FF9D97', 'FF701F', 'FFB21D', 'CFD231', '48F90A', '92CC17', '3DDB86', '1A9334', '00D4BB',# '2C99A8', '00C2FF', '344593', '6473FF', '0018EC', '8438FF', '520085', 'CB38FF', 'FF95C8', 'FF37C7')color=[[132,56,255],[82,0,133],[203,56,255],[255,149,200],[255,55,199],[72,249,10],[146,204,23],[61,219,134],[26,147,52],[0,212,187],[255,56,56],[255,157,151],[255,112,31],[255,178,29],[207,210,49],[44,153,168],[0,194,255],[52,69,147],[100,115,255],[0,24,236]]self.colors=coloriflen(self.names)<=len(color)else[[random.randint(0,255)for_inrange(3)]for_inrange(len(self.names))]# 给每个类别一个颜色img=torch.zeros((1,3,self.imgsz,self.imgsz),device=self.device)# 创建一个图像进行预推理_=self.model(img.half()ifself.halfelseimg)ifself.device.type!='cpu'elseNone# 预推理defchoose_model(self):self.timer_camera.stop()self.timer_video.stop()ifself.capandself.cap.isOpened():self.cap.release()ifself.cap_video:self.cap_video.release()# 释放视频画面帧self.comboBox_select.clear()# 下拉选框的显示self.comboBox_select.addItem('所有目标')# 清除下拉选框self.clearUI()# 清除UI上的label显示self.flag_timer=""# 调用文件选择对话框fileName_choose,filetype=QFileDialog.getOpenFileName(self.centralwidget,"选取图片文件",getcwd(),# 起始路径"Model File (*.pt)")# 文件类型# 显示提示信息iffileName_choose!='':self.toolButton_model.setToolTip(fileName_choose+' 已选中')else:fileName_choose=None# 模型默认路径self.toolButton_model.setToolTip('使用默认模型')self.LoadModel(fileName_choose)defselect_obj(self):QtWidgets.QApplication.processEvents()ifself.flag_timer=="video":# 打开定时器self.timer_video.start(30)elifself.flag_timer=="camera":self.timer_camera.start(30)ind=self.comboBox_select.currentIndex()-1ind_select=indifind<=-1:ind_select=0# else:# ind_select = len(self.detInfo) - ind - 1iflen(self.detInfo)>0:# self.label_class_result.setFont(font)self.label_class_result.setText(self.detInfo[ind_select][0])# 显示类别self.label_score_result.setText(str(self.detInfo[ind_select][2]))# 显示置信度值# 显示位置坐标self.label_xmin_result.setText(str(int(self.detInfo[ind_select][1][0])))self.label_ymin_result.setText(str(int(self.detInfo[ind_select][1][1])))self.label_xmax_result.setText(str(int(self.detInfo[ind_select][1][2])))self.label_ymax_result.setText(str(int(self.detInfo[ind_select][1][3])))image=self.current_image.copy()iflen(self.detInfo)>0:fori,boxinenumerate(self.detInfo):# 遍历所有标记框ifind!=-1:ifind!=i:continue# 在图像上标记目标框label='%s %.0f%%'%(box[0],float(box[2])*100)self.label_score_result.setText(box[2])# label = str(box[0]) + " " + str(float(box[2])*100)# 画出检测到的目标物# self.names. box[0]image=self.drawRectBox(image,box[1],addText=label,color=self.colors[box[3]])# self.label_score_result.setText(str(len(self.detInfo) - count))# 在Qt界面中显示检测完成画面self.display_image(image)# self.label_display.display_image(image)

5、源码获取方式

🍅由于篇幅限制,获取完整文章或源码、代做项目的,查看【用户名】、【专栏名称】就可以找到我啦🍅

感兴趣的可以先收藏起来,点赞、关注不迷路,下方查看👇🏻获取联系方式👇🏻

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/5 2:24:05

【干货】构建生产级RAG大模型应用:小白也能上手的完整实现手册!

简介 文章全面介绍了检索增强生成(RAG)技术&#xff0c;这是构建需要最新、领域专属知识的大模型应用的标准架构。文章从向量数据库、分块策略到性能优化与生产部署&#xff0c;提供了全链路实践指南&#xff0c;包括混合搜索、交叉编码器重排序、查询改写等优化技巧&#xff…

作者头像 李华
网站建设 2026/4/2 16:57:46

从零开始学C++:深入理解【类与对象】——类的6个默认成员函数

类的6个成员函数 前言一、C什么是“默认成员函数”&#xff1f;二、逐个详解六大默认成员函数1、默认构造函数2、析构函数3、拷贝构造函数4、拷贝赋值运算符5、移动构造函数6、移动赋值运算符 三、“三法则”VS“五法则”四、如何禁止拷贝或移动&#xff1f;五、总结表总结 前言…

作者头像 李华
网站建设 2026/3/16 2:18:52

Netcode for GameObjects Boss Room 多人RPG战斗(4)

Unity Boss Room 启动流程分析 核心启动组件 Boss Room 项目的启动流程由多个关键组件协同工作,以下是主要组件及其职责: ApplicationController.cs - 应用程序入口控制器 配置依赖注入容器,注册核心服务(ConnectionManager、NetworkManager等) 加载初始场景(MainMenu)…

作者头像 李华
网站建设 2026/4/3 6:32:05

Netcode for GameObjects Boss Room 多人RPG战斗(5)

L5_网络同步 Unity Boss Room 网络同步机制分析 1. 核心网络同步技术 Boss Room 项目主要使用 Unity Netcode for GameObjects (Netcode) 实现网络同步,核心技术包括: 1.1 NetworkVariable NetworkVariable 用于在网络上同步状态值,Boss Room 中主要应用于: 生命值同…

作者头像 李华
网站建设 2026/4/3 6:25:16

低代码平台重构:Flutter组件库与鸿蒙分布式能力融合实践

欢迎大家加入开源鸿蒙跨平台开发者社区&#xff0c;一起共建开源鸿蒙跨平台生态。 低代码平台重构&#xff1a;Flutter组件库与鸿蒙分布式能力融合实践 低代码平台通过可视化拖拽方式降低开发门槛&#xff0c;结合Flutter的跨平台能力与鸿蒙的分布式特性&#xff0c;可构建覆…

作者头像 李华
网站建设 2026/4/5 3:55:21

如何通过LobeChat最大化利用GPU算力资源?

如何通过LobeChat最大化利用GPU算力资源&#xff1f; 在如今大模型遍地开花的时代&#xff0c;越来越多的开发者和企业希望将强大的AI能力部署到本地环境——无论是出于数据隐私、响应延迟还是成本控制的考量。但一个现实问题摆在面前&#xff1a;这些动辄数十亿参数的语言模型…

作者头像 李华