Python——yolov8识别车牌2.0

目录

一、前言

二、关于项目UI

2.1、修改界面内容的文本

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

三、项目修改地方

四、其他配置问题


一、前言

代码包:

YOLOv8-license-plate-recognize-2.zip - 蓝奏云文件大小:42.0 M|https://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行

python 复制代码
    # 画标签到图像上
    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博客
    关于训练模型+预测:(如何训练模型------我之前写过一篇文章,可以翻翻前面的看看)

  6. 如果训练版本使用的是和预测版本一样的话,就可以直接用

  7. 要用自己训练的那个yolo版本的话,那么预测项目里面yolo版本就换为你训练的那个版本(不过可能有api改了,但是一般改动不大,自行根据报错修改就好了)
    关于使用CUDA

  8. cuda版本的pytorch,需要自己根据项目的注释和报错修改就好了

  9. 因为使用了CUDA,他预测返回的数据格式和之前的不一样,建议自行打印出来,根据数据找到自己需要数据,就可以啦~

  10. label根据具体内容,修改就行了~

相关推荐
智驱力人工智能12 小时前
小区高空抛物AI实时预警方案 筑牢社区头顶安全的实践 高空抛物检测 高空抛物监控安装教程 高空抛物误报率优化方案 高空抛物监控案例分享
人工智能·深度学习·opencv·算法·安全·yolo·边缘计算
工程师老罗12 小时前
YOLOv1 核心结构解析
yolo
Lun3866buzha13 小时前
YOLOv10-BiFPN融合:危险物体检测与识别的革新方案,从模型架构到实战部署全解析
yolo
Katecat9966313 小时前
YOLOv8-MambaOut在电子元器件缺陷检测中的应用与实践_1
yolo
工程师老罗14 小时前
YOLOv1 核心知识点笔记
笔记·yolo
工程师老罗19 小时前
基于Pytorch的YOLOv1 的网络结构代码
人工智能·pytorch·yolo
学习3人组1 天前
YOLO模型集成到Label Studio的MODEL服务
yolo
孤狼warrior1 天前
YOLO目标检测 一千字解析yolo最初的摸样 模型下载,数据集构建及模型训练代码
人工智能·python·深度学习·算法·yolo·目标检测·目标跟踪
水中加点糖1 天前
小白都能看懂的——车牌检测与识别(最新版YOLO26快速入门)
人工智能·yolo·目标检测·计算机视觉·ai·车牌识别·lprnet
前端摸鱼匠2 天前
YOLOv8 环境配置全攻略:Python、PyTorch 与 CUDA 的和谐共生
人工智能·pytorch·python·yolo·目标检测