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根据具体内容,修改就行了~

相关推荐
Dneccc6 小时前
YOLO模型格式转换:pt -> onnx -> rknn
yolo
今天炼丹了吗1 天前
YOLOv11融合[ECCV2024]FADformer中的FFCM模块
yolo
红色的山茶花2 天前
YOLOv9-0.1部分代码阅读笔记-loss_tal.py
笔记·深度学习·yolo
机器懒得学习2 天前
基于YOLOv5的智能水域监测系统:从目标检测到自动报告生成
人工智能·yolo·目标检测
AI莫大猫2 天前
(6)YOLOv4算法基本原理以及和YOLOv3 的差异
算法·yolo
KeepThinking!2 天前
YOLO-World:Real-Time Open-Vocabulary Object Detection
人工智能·yolo·目标检测·多模态
前网易架构师-高司机3 天前
游泳溺水识别数据集,对9984张原始图片进行YOLO,COCO JSON, VOC XML 格式的标注,平均识别率在91.7%以上
yolo·溺水·游泳溺水·游泳安全
发呆小天才O.oᯅ3 天前
YOLOv8目标检测——详细记录使用OpenCV的DNN模块进行推理部署C++实现
c++·图像处理·人工智能·opencv·yolo·目标检测·dnn
深度学习lover3 天前
<项目代码>YOLO Visdrone航拍目标识别<目标检测>
python·yolo·目标检测·计算机视觉·visdrone航拍目标识别
深度学习lover3 天前
[项目代码] YOLOv8 遥感航拍飞机和船舶识别 [目标检测]
python·yolo·目标检测·计算机视觉·遥感航拍飞机和船舶识别