Python——yolov8识别车牌2.0

news2025/2/25 18:19:45

目录

一、前言

二、关于项目UI

2.1、修改界面内容的文本

2.2、修改界面的图标和图片

 三、项目修改地方

 四、其他配置问题


一、前言

  • 因为后续有许多兄弟说摄像头卡顿,我在之前那个MATS上面改一下就可以了,MAST项目:基于YOLOv8的多端车流检测系统(用于毕设+开源)-CSDN博客
  • 其实这个直接用yolov8的官方api就可以了,然后在画标签那里修改一下代码,就可以了
  • 卡顿的原版项目:(这里有配置方法)Python——基于YOLOV8的车牌识别(源码+教程)_车牌识别python代码-CSDN博客

代码包:

YOLOv8-license-plate-recognize-2.zip - 蓝奏云文件大小:42.0 M|icon-default.png?t=N7T8https://wwwf.lanzout.com/inCTH1izjrqh配置方法和原项目差不多~如果有配置问题,可以看看下面的内容

二、关于项目UI

因为MATS那个基础项目,就没有用ui文件,所以这个也没有UI文件了

在修改pyside6时,最好有一些这方面的基础

2.1、修改界面内容的文本

可以自行修改ui文件夹里面的main_window.py

2.2、修改界面的图标和图片

1、替换或修改YOLOv8-license-plate-recognize-2\ui\img中的图片(img那个文件夹里面)

2、把resources.qrc中的对应映射进行修改,如果你是添加了文件,就按照那个格式新增就好了

3、使用命令——重新编译为资源文件:pyside6-rcc resources.qrc -o resources_rc.py


重新启动程序,查看是否更新成功

 三、项目修改地方

其实,很多东西,原项目都写好了,只需要在画标签那里,自定义一下就好了,把对应的坐标和图片丢给lprr就行了

关于lprr本人一窍不通,只是调用了他的api,然后他可以返回一个车牌的结果

画标签的代码:(写得丑陋,请大佬们指正,Python没有常用,常写)

 在yolo.py的333行

    # 画标签到图像上
    def creat_labels(self, detections, img_box, model):

        # 画车牌 draw a license plate
        label_plate = []
        xy_xy_list = detections.xyxy.squeeze()
        class_id_list = detections.class_id.squeeze().tolist()
        xyxy = []

        # 车牌获取
        for i in range(len(xy_xy_list)):
            if isinstance(class_id_list, int) and class_id_list != 0:
                continue

            # 如果长度为1,则是int
            if isinstance(class_id_list, int) and class_id_list == 0:
                xy_xy_filter = xy_xy_list
                xyxy.append(xy_xy_filter)
                plate = de_lpr(xy_xy_filter, img_box)
                plate = np.array(plate)
                car_number = ""
                for m in range(0, plate.shape[1]):
                    # 将字符转换成车牌号码
                    b = CHARS[plate[0][m]]
                    car_number += b
                label_plate.append(car_number)
                continue

            # 长度不为1
            if class_id_list[i] != 0:   # 只选择是车牌的目标
                continue
            xy_xy_filter = xy_xy_list[i]
            xyxy.append(xy_xy_filter)
            plate = de_lpr(xy_xy_filter, img_box)
            plate = np.array(plate)
            car_number = ""
            for m in range(0, plate.shape[1]):
                # 将字符转换成车牌号码
                b = CHARS[plate[0][m]]
                car_number += b
            label_plate.append(car_number)
        # 修改坐标数组
        detections.xyxy = np.array(xyxy)

        # 要画出来的信息
        labels_draw = label_plate

        # labels_draw = [
        #     f"ID: {tracker_id} {tracker_id}"
        #     for _, _, confidence, class_id, tracker_id in detections
        #     if model.model.names[class_id] in label_names
        # ]
        '''
        如果Torch装的是cuda版本的话:labels_draw代码需改成:
          labels_draw = [
            f"OBJECT-ID: {tracker_id} CLASS: {model.model.names[class_id]} CF: {confidence:0.2f}"
            for _,confidence,class_id,tracker_id in detections
        ]
        '''
        # 存储labels里的信息
        labels_write = [
            f"目标ID: {tracker_id} 目标类别: {class_id} 置信度: {confidence:0.2f}"
            for _, _, confidence, class_id, tracker_id in detections
        ]
        '''
          如果Torch装的是cuda版本的话:labels_write代码需改成:
          labels_write = [
            f"OBJECT-ID: {tracker_id} CLASS: {model.model.names[class_id]} CF: {confidence:0.2f}"
            for _,confidence,class_id,tracker_id in detections
        ]
        '''
        pprint(detections)

        # 打印结果
        print(detections.xyxy)
        # 如果显示标签 (要有才可以画呀!)---否则就是原图
        if (self.show_labels == True) and (self.class_num != 0):
            img_box = self.box_annotator.annotate(scene=img_box, detections=detections, labels=labels_draw)

        return labels_write, img_box

 四、其他配置问题

  1. 配置环境中,有一个lap,在pip安装时,需要下载一个东西,根据报错提示中的链接,去下载就好了
  2. 如果你预测失败,多半是yolo版本问题,需要你自己根据报错修改一下,还有关于其他库,就是opencv版本(或者其他库,比如sv等)不一样,根据报错的库名,卸载重新安装对应版本
  3. 此项目的main_window的ui文件是没有的,用猫鱼老哥的开源改的,他当时就没有用ui文件。直接手写了,然后我也只好手写ui了。
  4. 关于type object 'Detections' has no attribute 'from_yolov8'问题的解决:由于Detection删除了from,所以需要降级,又因为前面的sv调用,所以把supervision降级为0.6.0即可解决pip install supervision==0.6.0
  5. 如果你遇到了问题:可以看看这个文章里面的评论区:基于YOLOv8的多端车流检测系统(用于毕设+开源)-CSDN博客

关于训练模型+预测:(如何训练模型——我之前写过一篇文章,可以翻翻前面的看看)

  1. 如果训练版本使用的是和预测版本一样的话,就可以直接用
  2. 要用自己训练的那个yolo版本的话,那么预测项目里面yolo版本就换为你训练的那个版本(不过可能有api改了,但是一般改动不大,自行根据报错修改就好了)

关于使用CUDA

  1. cuda版本的pytorch,需要自己根据项目的注释和报错修改就好了
  2. 因为使用了CUDA,他预测返回的数据格式和之前的不一样,建议自行打印出来,根据数据找到自己需要数据,就可以啦~
  3. label根据具体内容,修改就行了~

 

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

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

相关文章

51 单片机基础

一、51 单片机 开发环境配置,vscodeSDCC 编辑器、编译器 最常用的集成开发环境 keil c51 1、vscode SDCC 开发环境搭建 vscode 插件( 或者 PlatformIO IDE) EIDE 的使用:详细自学 PlatformIO IDE:详细自学 vsc…

C#高级 02异步编程

基础知识 1.什么是异步任务 包含了异步任务的各种状态的一个引用类型 1)正在运行、完成、结果、报错等 2)另有ValueTask值类型版本对于异步任务的抽象 1)开启异步任务后,当前线程并不会阻塞,而是可以去做其他事情 2)异步任务(默认&#xff…

HTTP是怎么泄露账户密码的?

近几年,互联网发生着翻天覆地的变化,尤其是我们一直习以为常的HTTP协议,在逐渐的被HTTPS协议所取代,在浏览器、搜索引擎、CA机构、大型互联网企业的共同促进下,互联网迎来了“HTTPS加密时代”,HTTPS将在未来的几年内全面取代HTTP成为传输协议的主流。 那么HTTPS和HTTP的区别在…

2023年总结:反复纠结与成长的一年

前言 这是我第五年写年度总结: 《2022年总结:道阻且长,行则将至》 《2021年总结:前路有光,初心莫忘》 《2020年总结,所有努力只为一份期待》 《2019年总结,平凡的我仍在平凡的生活》 现在…

LeetCode206反转链表(java实现)

今天带来的题目解析是leetcode206,反转链表,我们来看下题目描述 如何实现链表的反转呢?我在这里提供的思路是双指针的思路。 具体的思路如下: 假设我们的原链表如下 首先定义一个指针pre,用于指向head之前的位置&am…

RHCE9学习指南 第7章 服务管理

刚装好Windows系统时,需要进行一些优化,如下图所示。 右键单击所得菜单,可以看到一些按钮包括重启、停止、启动该服务。这些管理的是这个服务的当前状态。 双击服务名,在启动类型中设置的是系统启动时,这个服务要不要…

【elk-day01】es和kibana搭建及验证---Mac-Docker

Mac系统使用Docker下载搭建和验证eskibana Docker下载安装es安装es验证kibana安装kibana验证 Docker下载安装 Docker Desktop官网安装下载地址 说明一下为什么要安装desktop版本的docker,因为docker作为工具使用,我们需要的是开箱即用,没有必…

基于Python的城市热门美食数据可视化分析系统

温馨提示:文末有 CSDN 平台官方提供的学长 QQ 名片 :) 1. 项目简介 本项目利用网络爬虫技术从XX点评APP采集北京市的餐饮商铺数据,利用数据挖掘技术对北京美食的分布、受欢迎程度、评价、评论、位置等情况进行了深入分析,方便了解城市美食店…

sheng的学习笔记-【中】【吴恩达课后测验】Course 4 -卷积神经网络 - 第四周测验

课程4_第4周_测验题 目录 第一题 1.面部验证只需要将新图片与1个人的面部进行比较,而面部识别则需要将新图片与K个人的面部进行比较。 A. 【  】正确 B. 【  】错误 答案: A.【 √ 】正确 第二题 2.在人脸验证中函数d(img1,img2)起什么作用&a…

每周一算法:邻值查找

给定一个长度为 n n n的序列 A A A&#xff0c; A A A中的数各不相同。 对于 A A A 中的每一个数 A i A_i Ai​&#xff0c;求&#xff1a; m i n 1 ≤ j < i ∣ A i − A j ∣ min_{1≤j<i}|A_i−A_j| min1≤j<i​∣Ai​−Aj​∣&#xff0c;以及令上式取到最小值的…

2023版本QT学习记录 -8- HTTP获取图片并且显示(大数据)

———————HTTP获取图片——————— &#x1f384;效果演示 &#x1f384;HTTP请求图片思维导图 &#x1f384;添加组件 &#x1f384;添加头文件 #include "mainwindow.h" #include "ui_mainwindow.h" #include "qnetworkaccessmanager.h&qu…

【Unity入门】PlayerPrefs的简介与使用

目录 PlayerPrefs储存位置用例注意事项 PlayerPrefs PlayerPrefs 是Unity内置的一个静态类&#xff0c;可以用于存储一些简单的数据类型&#xff1a;int ,string ,float。 分别对应的函数为&#xff1a; SetInt()&#xff1a;保存整型数据GetInt()&#xff1a;读取整形数据Se…

css 超过一行/多行显示省略号... - 附示例

效果 1、超过一行 2、超过多行 - 以两行为例 二、示例代码 1、超过一行 margin: 20px; width: 50px; border: 1px solid red; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; 2、超过多行 - 以两行为例 margin: 20px; width: 50px; border: 1px solid r…

Unity is running with Administrator privileges, which is not supported

Unity is running with Administrator privileges, which is not supported 如果还是弹出CMD窗口提示输入密码&#xff0c;但无法怎样都无法输入&#xff0c;请关闭窗口&#xff0c;然后右键快捷方式管理员运行一次。 ----------分割线---------- 为什么这样做&#xff1f; 很…

java keytool.exe ssl

JDK如果没有先安装 JDK8 install_jdk aleady install-CSDN博客 java keytool.exe ssl keytool -genkey -alias tomcat -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore D:\server.keystore -validity 3650 server.ssl.key-storeD:\server.keystore server.ssl.key-…

深入了解Python中文件IO的使用技巧,提高代码处理效率!

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com Python提供了强大而灵活的文件I/O&#xff08;输入/输出&#xff09;工具&#xff0c;能够读取、写入和处理各种文件类型。本文将深入介绍Python文件I/O的技巧和示例代码&#xff0c;帮助大家更好地理解如何在Py…

Hive实战:词频统计

文章目录 一、实战概述二、提出任务三、完成任务&#xff08;一&#xff09;准备数据文件1、在虚拟机上创建文本文件2、将文本文件上传到HDFS指定目录 &#xff08;二&#xff09;实现步骤1、启动Hive Metastore服务2、启动Hive客户端3、基于HDFS文件创建外部表4、利用Hive SQL…

DRF从入门到精通五(路由组件、认证组件、权限组件、频率组件及认证、权限源码分析)

文章目录 一、路由组件REST framework提供了两个routeraction装饰器 二、认证组件(Authentication)三、权限组件(Permissions)内置权限类 四、频率组件(Throttling)五、权限组件源码分析六、认证组件源码分析 一、路由组件 对于视图集ViewSetMixin&#xff0c;我们除了可以自己…

Swift 周报 第四十二期

文章目录 前言新闻和社区苹果 CEO 库克透露接班计划&#xff0c;希望继任者来自公司内部消息称苹果自研 5G 调制解调器开发再“难产”&#xff0c;将推迟到 2026 年 提案正在审查的提案 Swift论坛推荐博文话题讨论关于我们 前言 本期是 Swift 编辑组整理周报的第四十二期&…

K8S异常处理

一、概述 1、k8s有时候会报错The connection to the server ip:6443 was refused - did you specify the right host or port &#xff0c;本文档提供几种可能产生该报错的原因和排障思路。 二、发现问题 使用任意Kubectl 命令会报错&#xff1a;The connection to the serv…