Python路面车道线识别偏离预警

程序示例精选
Python路面车道线识别偏离预警
如需安装运行环境或远程调试,见文章底部个人QQ名片,由专业技术人员远程协助!

前言

这篇博客针对《Python路面车道线识别偏离预警》编写代码,代码整洁,规则,易读。 学习与应用推荐首选。


运行结果


文章目录

一、所需工具软件
二、使用步骤
       1. 主要代码
       2. 运行结果
三、在线协助

一、所需工具软件

       1. Python
       2. Pycharm

二、使用步骤

代码如下(示例):

import os
from PyQt5.QtWidgets import  QMainWindow
import cv2
from .form.mainwindow import Ui_MainWindow
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
import qdarkstyle
import json
import time
class MainWinddow(QMainWindow):print_debug_signal = pyqtSignal(str) # 用于触发打印调试信息函数show_image_signal = pyqtSignal(str) # 用于触发图像处理结果函数# 初始化函数def __init__(self,parent=None):super(MainWinddow,self).__init__(parent)self.main_ui = Ui_MainWindow()self.main_ui.setupUi(self)# 设置软件名称self.setWindowTitle("基于TWINLITENET算法的车道线与可行驶区域感知系统")# 设置登录界面第一行,第二行文字self.main_ui.label_up.setText("基于TWINLITENET算法的")self.main_ui.label_down.setText("车道线与可行驶区域感知系统")self.main_ui.label_up_2.setText("基于TWINLITENET算法的")self.main_ui.label_9.setText("车道线与可行驶区域感知系统")# 设置界面起始页self.main_ui.stackedWidget.setCurrentIndex(0)# # 设置界面初始状态# self.clear_label()# # 设置背景颜色# palette = qdarkstyle.palette.Palette()# palette.ID = "dark"# # 修改背景颜色为红色# palette.background = "#FF0000"  # 这里是十六进制颜色代码,代表红色## self.setStyleSheet(qdarkstyle.load_stylesheet(qt_api="pyqt5", palette=palette))self.main_ui.textBrowser_debug.document().setMaximumBlockCount(10)# 读取系统人员名单(采用本地保存格式)# 账号:英文字母、数字组合或中文(最大长度10)# 密码:英文字母、数字组合(最大长度6)self.count_dict = {}with open(r"UI\form\namelist.json","r", encoding='utf-8'  ) as f:self.count_dict = json.load(f)# 深度学习模型推理类self.videoprocess = videoprocess(self.print_debug_signal,self.show_image_signal)# 背景图平铺def paintEvent(self, event):painter = QPainter(self)pixmap = QPixmap("background/background5.jpg")painter.drawPixmap(self.rect(), pixmap)# 背景图平铺结束# 登录槽函数def login_function(self):# 获取界面账户、密码count = self.main_ui.lineEdit_count.text()secret = self.main_ui.lineEdit_secret.text()# 判断用户信息是否存在if count in self.count_dict.keys():# 判断密码是否正确if self.count_dict[count] == secret:# 弹出登录成功窗口QMessageBox.information(self,"Tip","登录成功!")# 切换页面self.main_ui.stackedWidget.setCurrentIndex(2)else:# 弹出密码错误窗口QMessageBox.critical(self,"error","密码错误!")else:# 弹出账户未注册窗口QMessageBox.critical(self,"error","账户未注册!")def registe_interface_change(self):# 切换页面self.main_ui.stackedWidget.setCurrentIndex(1)print("registe_interface_change")# 注册槽函数def registe_function(self):# 获取界面账户、密码count = self.main_ui.lineEdit_count_2.text()secret = self.main_ui.lineEdit_secret_2.text()# 判断账户、密码输入是否为空字符串if len(count) == 0 or len(secret) == 0:# 提示用户重新输入QMessageBox.warning(self,"warning","信息无效!")else:# 忽视用户信息是否存在,重新设置用户信息self.count_dict[count] = secret# 保存至本地,(如需删除账户信息可直接在UI\form\namelist.json中删除即可)with open(r"UI\form\namelist.json","w", encoding='utf-8') as f: ## 设置'utf-8'编码f.write(json.dumps(self.count_dict, ensure_ascii=False ,indent=4))  QMessageBox.information(self,"Tip","注册成功!")def backLoginWindow(self):# 切换页面self.main_ui.stackedWidget.setCurrentIndex(0)# 视频源改变槽函数def videosoure_change(self):#当视频源发生切换如果视频正在推理需要停止if not self.videoprocess.stopped:self.videoprocess.stopped = Trueself.clear_label()if self.main_ui.comboBox_source.currentIndex() == 0:self.main_ui.lineEdit_filepath.setVisible(True)self.main_ui.pushButton_open.setVisible(True)elif self.main_ui.comboBox_source.currentIndex() == 1:self.main_ui.lineEdit_filepath.setVisible(True)self.main_ui.pushButton_open.setVisible(True)# 打开视频与图片槽函数def open_video_function(self):# 打开本地路径if self.main_ui.comboBox_source.currentIndex() == 0:fileName, filetype = QFileDialog.getOpenFileName(self,"选取视频","./videos", "'Video Files (*.mp4 *.avi *.mkv)'") elif self.main_ui.comboBox_source.currentIndex() == 1:fileName, filetype = QFileDialog.getOpenFileName(self, '选择图片',"./images", 'Image Files (*.png *.jpg *.jpeg *.gif)')# 显示本地路径self.main_ui.lineEdit_filepath.setText(fileName)# 打印信息self.print_debug_signal.emit("{}打开成功,请点击开始按钮!!!".format(fileName))# 开始测试def predicte_function(self):if not self.videoprocess.stopped:self.print_debug_signal.emit("已经开启,请关闭后再次开启!!")  returnself.main_ui.pushButton_pause.setVisible(True)self.main_ui.pushButton_pause.setText("暂停测试")# 是否保存视频if self.main_ui.checkBox_save.isChecked():self.videoprocess.save_out = Trueelse:self.videoprocess.save_out = Falseself.videoprocess.filename = self.main_ui.lineEdit_filepath.text()# 启动深度学习推理线程self.videoprocess.start()self.main_ui.pushButton_alarm.setStyleSheet("background-color:rgb(0,255,0);border-radius: 10px; border: 2px groove black;border-style: outset;")# 暂停测试def setpause_function(self):if self.videoprocess.is_pause:# 当前状态已经暂定self.videoprocess.is_pause = Falseself.main_ui.pushButton_pause.setText("暂停测试")else:self.videoprocess.is_pause = Trueself.main_ui.pushButton_pause.setText("继续测试")# 停止测试def stop_function(self):# 停止深度学习推理线程if self.videoprocess.stopped:self.print_debug_signal.emit("已经关闭!!")else:  self.videoprocess.stopped = Trueself.clear_label()# 清空标签,恢复初始状态def clear_label(self):self.main_ui.label_image_source.clear()self.main_ui.label_image_source.setText("原视频")self.main_ui.label_image_lane.clear()self.main_ui.label_image_lane.setText("车道线")self.main_ui.label_image_driving.clear()self.main_ui.label_image_driving.setText("可行驶区域")self.main_ui.label_image_result.clear()self.main_ui.label_image_result.setText("识别结果")self.main_ui.pushButton_alarm.setStyleSheet("background-color:rgb(150, 150, 150);border-radius: 10px; border: 2px groove black;border-style: outset;")self.main_ui.label_fps.setText("FPS: 00.00")self.main_ui.pushButton_pause.setVisible(False) # 停止运行后暂停按钮失效# 显示界面函数def showimgae(self,fps):if not self.videoprocess.stopped:# 转换格式img_source = cv2.cvtColor(self.videoprocess.img_source, cv2.COLOR_BGR2RGB)color_lane = cv2.cvtColor(self.videoprocess.color_lane, cv2.COLOR_BGR2RGB)color_driving = cv2.cvtColor(self.videoprocess.color_driving, cv2.COLOR_BGR2RGB)img_rs = cv2.cvtColor(self.videoprocess.img_rs, cv2.COLOR_BGR2RGB)# 显示原图 self.main_ui.label_image_source.setPixmap(QPixmap(QImage(img_source.data,img_source.shape[1],img_source.shape[0],QImage.Format_RGB888)))self.main_ui.label_image_source.setScaledContents(True)# 显示车道线self.main_ui.label_image_lane.setPixmap(QPixmap(QImage(color_lane.data,color_lane.shape[1],color_lane.shape[0],QImage.Format_RGB888)))self.main_ui.label_image_lane.setScaledContents(True)
运行结果

三、在线协助:

如需安装运行环境或远程调试,见文章底部个人 QQ 名片,由专业技术人员远程协助!

1)远程安装运行环境,代码调试
2)Visual Studio, Qt, C++, Python编程语言入门指导
3)界面美化
4)软件制作
5)云服务器申请
6)网站制作

当前文章连接:https://blog.csdn.net/alicema1111/article/details/132666851
个人博客主页:https://blog.csdn.net/alicema1111?type=blog
博主所有文章点这里:https://blog.csdn.net/alicema1111?type=blog

博主推荐:
Python人脸识别考勤打卡系统:
https://blog.csdn.net/alicema1111/article/details/133434445
Python果树水果识别:https://blog.csdn.net/alicema1111/article/details/130862842
Python+Yolov8+Deepsort入口人流量统计:https://blog.csdn.net/alicema1111/article/details/130454430
Python+Qt人脸识别门禁管理系统:https://blog.csdn.net/alicema1111/article/details/130353433
Python+Qt指纹录入识别考勤系统:https://blog.csdn.net/alicema1111/article/details/129338432
Python Yolov5火焰烟雾识别源码分享:https://blog.csdn.net/alicema1111/article/details/128420453
Python+Yolov8路面桥梁墙体裂缝识别:https://blog.csdn.net/alicema1111/article/details/133434445
Python+Yolov5道路障碍物识别:https://blog.csdn.net/alicema1111/article/details/129589741
Python+Yolov5跌倒检测 摔倒检测 人物目标行为 人体特征识别:https://blog.csdn.net/alicema1111/article/details/129272048

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

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

相关文章

tsconfig.json文件常用配置

最近在学ts,因为tsconfig的配置实在太多啦,所以写此文章用作记录,也作分享 作用? tsconfig.jsono是ts编译器的配置文件,ts编译器可以根据它的信息来对代码进行编译 初始化一个tsconfig文件 tsc -init配置参数解释 …

HZNUCTF第五届校赛实践赛初赛 Web方向 WriteUp

ezssti 很简单的ssti 源码给了,调用Eval即可执行命令 package mainimport ("fmt""net/http""os/exec""strings""text/template" )type User struct {Id intName stringPasswd string }func (u User) Ev…

Python学习从0开始——项目一day01爬虫

Python学习从0开始——项目一day01爬虫 一、导入代码二、使用的核心库三、功能测试3.1初始代码3.2新建文件3.3代码调试 四、页面元素解析4.1网页4.2修改代码4.3子页面4.4修改代码 一、导入代码 在Inscode新建一个python类型的项目,然后打开终端,粘贴以下…

《七》布局QLayout类

QLayout简介 QLayout是由具体类 QBoxLayout、QGridLayout、QFormLayout 和 QStackedLayout继承的抽象基类。 对于 QLayout子类或 QMainWindow的用户,很少需要使用 QLayout 提供的基本功能,例如 setSizeConstraint() 或 setMenuBar()。Qt 布局系统提供了…

程序员购车指南

哈喽大家好,我是咸鱼。 爱车可以说是大部分男人的天性,而我对汽车的热情却远不及对手表的钟爱(痴迷劳力士)。以至于我的朋友掏出车钥匙指着上面的苹果树标志跟我介绍奔驰 AMG 系列的强劲性能和马力时,我只能尽量假装自…

【三维Dvhop定位】基于麻雀搜索算法的多通信半径和跳距加权的三维Dvhop定位算法【Matlab代码#81】

文章目录 【可更换其他算法,获取资源请见文章第6节:资源获取】1. Dvhop定位算法2. 麻雀搜索算法3. 多通信半径和跳距加权策略3.1 多通信半径策略3.2 跳距加权策略 4. 部分代码展示5. 仿真结果展示6. 资源获取 【可更换其他算法,获取资源请见文…

Oracle-TDE数据加密功能

1 Oracle TDE 1.1 TDE介绍 Oracle TDE是数据库层对存储的用户敏感数据进行的静态加密,加密数据满足主流的安全法规(如 PCI DSS)相关的加密要求,可以防止数据文件被其他非数据库读取方式访问的情况下(如通过工具直接打开读取数据文…

Java程序生成可执行的exe文件 详细图文教程

1.Java编辑器,如:idea、eclipse等,下载地址:IntelliJ IDEA: The Capable & Ergonomic Java IDE by JetBrainshttps://www.jetbrains.com/idea/2.exe4j,下载地址:ej-technologies - Java APM, Java Prof…

ansible-tower连接git实现简单执行playbook

前提:安装好ansible-tower和git,其中git存放ansible得剧本 其中git中得内容为: --- - name: yjxtesthosts: yinremote_user: rootgather_facts: noroles:- testroles/test/tasks/main.yml #文件内容 --- #- name: Perform Test Task # tas…

ant-design-vue Table+Form表单实现表格内置表单验证,可自定义验证规则,触发必填项

代码示例如下&#xff1a; <!-- --> <template><a-button type"primary" style"padding-left: 10px; padding-right: 10px" click"handleAddRow"><template #icon><plus-outlined /></template>新增</…

2024年大唐杯官网模拟题

单选(出题角度很奇怪&#xff0c;不用太纠结&#xff09; 5G NR系统中&#xff0c;基于SSB的NR同频测量在measconfig里最多可以配置&#xff08; &#xff09;个SMTC窗口。 A、3 B、4 C、1 D、2 答案&#xff1a;D 2个 只在官网找到了这张PPT 5G 中从BBU到AAU需要保证&#x…

Python分析之3 种空间插值方法

插值是一个非常常见的数学概念,不仅数据科学家使用它,而且各个领域的人们也使用它。然而,在处理地理空间数据时,插值变得更加复杂,因为您需要基于几个通常稀疏的观测值创建代表性网格。 在深入研究地理空间部分之前,让我们简要回顾一下线性插值。 为了演示的目的,我将使…

Spring Security详细学习第一篇

Spring Security 前言Spring Security入门编辑Spring Security底层原理UserDetailsService接口PasswordEncoder接口 认证登录校验密码加密存储退出登录 前言 本文是作者学习三更老师的Spring Security课程所记录的学习心得和笔记知识&#xff0c;希望能帮助到大家 Spring Sec…

使用Java调用音乐开放API,并进行播放

使用Java调用音乐开放API&#xff0c;并进行播放 背景描述 电脑没有下载音乐软件&#xff0c;使用网页播放又不太方便&#xff0c;所有就想着使用Java语言直接调用音乐开放API&#xff0c;然后进行播放音乐。 具体代码如下&#xff0c;包含了注释 package com.lowkey.comple…

吴恩达<用于LLM应用程序开发的LangChain> L1-Model_prompt_parser

问题预览/关键词 课程地址如何获取openAI的API Key如何根据日期设置不同模型?如何调用OpenAI的API?如何使用OpenAI的API&#xff1f;langchain如何抽象OpenAI的API接口&#xff1f;langchain如何创建提示词模板并查看模板内容&#xff1f;langchain如何使用提示词模板生成提…

Redis中的BigKey

Redis中的BigKey 文章目录 Redis中的BigKey什么是BigKey&#xff1f;BigKey的危害找到Bigkey删除BigKey优化BigKeyBigKey对持久化的影响对AOF日志的影响对AOF重写和RDB的影响 什么是BigKey&#xff1f; 大 key 并不是指 key 的值很大&#xff0c;而是 key 对应的 value 很大。…

2024华中杯A题完整1-3问py代码+完整思路16页+后续参考论文

A题太阳能路灯光伏板朝向问题 &#xff08;完整版资料文末获取&#xff09; 第1小问&#xff1a;计算每月15日的太阳直射强度和总能量 1. 理解太阳直射辐射和光伏板的关系**&#xff1a;光伏板接收太阳辐射并转化为电能&#xff0c;直射辐射对光伏板的效率影响最大。 2. 收集…

[Vision Board创客营]学习片上Flash移植FAL

文章目录 [Vision Board创客营]学习片上Flash移植FAL介绍环境搭建使用组件测试porbeerasewriteread 结语 [Vision Board创客营]学习片上Flash移植FAL 水平较菜&#xff0c;大佬轻喷。&#x1f630;&#x1f630;&#x1f630; 介绍 &#x1f680;&#x1f680;Vision-Board 开…

Leetcode算法训练日记 | day29

一、递增子序列 1.题目 Leetcode&#xff1a;第 491 题 给你一个整数数组 nums &#xff0c;找出并返回所有该数组中不同的递增子序列&#xff0c;递增子序列中 至少有两个元素 。你可以按 任意顺序 返回答案。 数组中可能含有重复元素&#xff0c;如出现两个整数相等&…

“低价竞争”仍在继续,分期免息成商家新武器

近日&#xff0c;在京东618商家生态伙伴大会上&#xff0c;京东推出各项政策&#xff0c;尽全力让所有合作伙伴赢在京东618、赢在京东。京东金融也将在618大促期间&#xff0c;为各位商家带来极具竞争力的金融产品和大促政策。 举例来说&#xff0c;大促期间&#xff0c;“京东…