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

news2024/12/23 20:03:03

程序示例精选
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 = True
            self.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("已经开启,请关闭后再次开启!!")  
            return
        self.main_ui.pushButton_pause.setVisible(True)
        self.main_ui.pushButton_pause.setText("暂停测试")
        # 是否保存视频
        if self.main_ui.checkBox_save.isChecked():
            self.videoprocess.save_out = True
        else:
            self.videoprocess.save_out = False
        self.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 = False
            self.main_ui.pushButton_pause.setText("暂停测试")
        else:
            self.videoprocess.is_pause = True
            self.main_ui.pushButton_pause.setText("继续测试")
    # 停止测试
    def stop_function(self):
        # 停止深度学习推理线程
        if self.videoprocess.stopped:
            self.print_debug_signal.emit("已经关闭!!")
        else:  
            self.videoprocess.stopped = True
            self.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.coloradmin.cn/o/1605898.html

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

相关文章

牛客Linux高并发服务器开发学习第三天

静态库的使用(libxxx.a) 将lession04的文件复制到lession05中 lib里面一般放库文件 src里面放源文件。 将.c文件转换成可执行程序 gcc main.c -o app main.c当前目录下没有head.h gcc main.c -o app -I ./include 利用-I 和head所在的文件夹,找到head。 main.c…

针对springcloud gateway 跨域问题解决方案

springcloud gateway版本 <spring-boot.version>2.3.3.RELEASE</spring-boot.version> <spring-cloud.version>Hoxton.SR8</spring-cloud.version>跨域问题说明 application:1 Access to XMLHttpRequest at https://xxxxxxxxxx from origin http://l…

<计算机网络自顶向下> 可靠数据传输的原理(未完成)

可靠数据传输&#xff08;rdt&#xff1a;Reliable Data Transfer&#xff09;的原理 rdt在应用层&#xff0c;传输层和数据链路层都很重要是网络TOP10问题之一信道的不可靠特点决定了可靠数据传输rdt的复杂性rdt_send: 被上层&#xff08;如应用层&#xff09;调用&#xff0…

IP-guard WebServer 权限绕过漏洞复现(QVD-2024-14103)

0x01 免责声明 请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;作者不为此承担任何责任。工具来自网络&#xff0c;安全性自测&#xff0c;如有侵权请联系删…

Simlab python二次开发1-将所有缸套内表面半径加大1mm

Simlab python二次开发1-将所有缸套内表面半径加大1mm 1、打开模型文件2、getBodiesWithSubString&#xff08;&#xff09;从名字得到Bodies3、建Body类Group3.1、定义放入Group中的Bodies3.2、建Group 4、将缸套内表面建组&#xff0c;并扩半径1mm4.1、simlab.getBodiesFromG…

[生活][杂项] 上班党的注意事项

前言 目前是上班已经接近两年了&#xff0c;目前的状态是&#xff0c;一个人租了一个单间在上班。对于这种情况有以下几点需要注意。 钥匙问题&#xff0c;一定不要陷入钥匙丢失的情况&#xff01;一定不要陷入钥匙丢失的情况&#xff01;一定不要陷入钥匙丢失的情况&#xff…

OpenHarmony多媒体-video_trimmer

简介 videotrimmer是在OpenHarmony环境下&#xff0c;提供视频剪辑能力的三方库。 效果展示&#xff1a; 安装教程 ohpm install ohos/videotrimmerOpenHarmony ohpm环境配置等更多内容&#xff0c;请参考 如何安装OpenHarmony ohpm包 。 使用说明 目前支持MP4格式。 视频…

Flattened Butterfly 扁平蝶形拓扑

Flattened Butterfly 扁平蝶形拓扑 1. 传统蝶形网络 Butterfly Topology2. 扁平蝶形拓扑 Flattened Butterfly3.On-Chip Flattened Butterfly 扁平蝶形拓扑应用于片上网络 Flattened Butterfly 扁平蝶形拓扑 扁平蝶形拓扑是一种经济高效的拓扑&#xff0c;适用于高基数路由器…

Golang入门基础

文章目录 Golang的背景知识Golang的发展历程Golang的特点Golang的应用领域 开发环境搭建下载并安装SDK包设置环境变量Go项目目录结构 注释变量标识符命名输入和输出运算符算术运算符关系运算符逻辑运算符赋值运算符位运算符其他运算符 Golang的背景知识 Golang的发展历程 Gola…

2024年华中杯数学建模竞赛ABC题思路分析

简单分析一下各个题目可能需要用到的方法和模型&#xff0c;完整代码和成品论文见文末 A题 太阳能路灯光伏板的朝向设计问题: 1. 球面几何、天文学相关知识,如赤纬角、太阳高度角、时角等概念和公式 2. 太阳辐射模型,根据太阳能辐射强度、大气衰减系数等计算地表太阳辐射强度…

2.核心概念与安装配置

核心概念与安装配置 文章目录 核心概念与安装配置1、核心概念Docker整体架构及底层通信原理 2、安装DockerCentos安装Docker引擎阿里云镜像加速Docker run的过程 3、Docker相关命令 1、核心概念 镜像&#xff08;image&#xff09; Docker 镜像&#xff08;Image&#xff09;就…

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

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

Istio介绍

1.什么是Istio Istio是一个开源的服务网格&#xff08;Service Mesh&#xff09;框架&#xff0c;它提供了一种简单的方式来为部署在Kubernetes等容器编排平台上的微服务应用添加网络功能。Istio的核心功能包括&#xff1a; 服务治理&#xff1a;Istio能够帮助管理服务之间的…

openGauss学习笔记-266 openGauss性能调优-TPCC性能调优测试指导-文件系统配置

文章目录 openGauss学习笔记-266 openGauss性能调优-TPCC性能调优测试指导-文件系统配置266.1 查看当前数据盘的文件系统类型266.2 对于需要修改的磁盘&#xff0c;备份所需的数据至其他磁盘或其他服务器266.3 格式化磁盘为xfs文件系统266.4 执行**步骤一** openGauss学习笔记-…

allure2教程-3-测试报告定制

领取资料&#xff0c;咨询答疑&#xff0c;请➕wei: June__Go 上一小节&#xff0c;我们学习一下pytestallure2生成html测试报告的方法&#xff0c;本小节我们学习一下allure2测试报告的定制。 allure2报告预览 预览网址&#xff1a;https://demo.qameta.io/allure/# allur…

WordPress的全面解析:为什么它是创建博客和网站的首选

在当前的数字化时代&#xff0c;无论是个人博客还是企业网站&#xff0c;都需要一个强大而灵活的平台以支撑其内容和用户交互。WordPress作为全球最流行的内容管理系统&#xff08;CMS&#xff09;&#xff0c;以其强大的功能、灵活的定制性和广泛的用户基础&#xff0c;成为了…

问答营销之官方号问答推广技巧

问答营销作为一种网络推广的重要手段&#xff0c;受到各大品牌企业的关注。实战中&#xff0c;问答营销有新起提问再回答和直接回复老问题两种形式&#xff0c;一般做企业官方号问答营销都是选择后者。这里小马识途营销顾问详细解析下开展老问题回复营销的思路和步骤。 一、分析…

[蓝桥杯 | 暴搜] 学会暴搜之路

虽然会调侃蓝桥杯是暴力求解的&#xff0c;但是本弱弱不会搜&#xff0c;不知道如何搜&#xff0c;于是写下这篇碎碎念&#xff0c;记录看到过的&#xff0c;惊艳自己的暴搜。 小总结 题目特征&#xff1a;很复杂的排列组合 说是暴力&#xff0c;其实就是枚举罢了&#xff0…

如何理解信创产品?成为信创产品?

信创产品是指运用信息技术手段创造的产品&#xff0c;它是数据安全、网络安全的基础&#xff0c;也是新基建的重要组成部分。信创产品包括了IT基础设施如CPU芯片、服务器、存储、交换机、路由器、各种云和相关服务内容&#xff1b;基础软件如数据库、操作系统、中间件&#xff…

FebHost:谁可以注册.CA加拿大域名?

在加拿大&#xff0c;互联网域名的注册管理遵循一套独特的规则。特别是对于代表加拿大身份的顶级域名“.ca”&#xff0c;其申请和注册过程涉及一些严格的条件。这些条件确保了只有符合特定标准的个人或实体才能获得这一具有国家象征意义的网络地址。 首先&#xff0c;想要注册…