PPOCRLabel的文件转换成yolo格式

您好,我运行您的PPOCRLabel的文件转换成yolo格式,运行之后找不到生成后的文件噢?请问是我哪里步骤有误吗?

import os
import cv2

filename = "/home/lixinru/PaddleOCR/dataset/LABEL/Label.txt"  #需要转换的标注文件

"""
# 读取数据文件
"""


def read_txt(file_name):
    data = []
    file = open(file_name, 'r', encoding='utf-8')
    file_data = file.readlines()  # 读取所有行
    for row in file_data:
        tmp_list = row.split(' ')
        data.append(tmp_list)  # 将每行数据插入data中
    file.close()
    return data


"""
# 创建文件夹
"""


def create_folder(filename):
    filename = filename.strip()
    filename = filename.rstrip("\\")
    isExists = os.path.exists(filename)

    if not isExists:
        os.makedirs(filename)
        print(filename + "创建成功")
        return True
    else:
        print(filename + "已存在")
        return False


"""
# 创建txt标注文件
"""


def txt_create(name, msg):
    desktop_path = filename  # 新创建的txt文件的存放路径
    full_path = desktop_path + "/" + name.split('.')[0] + '.txt'

    if os.path.exists(full_path):
        file = open(full_path, 'a', encoding='utf-8')
        file.write(msg + '\n')
        file.close()
    else:
        file = open(full_path, 'w', encoding='utf-8')
        file.write(msg + '\n')
        file.close()


"""
# 坐标归一化
"""


def normalization(xmin, ymin, xmax, ymax, img_w, img_h):
    x = round((xmin + xmax) / (2.0 * img_w), 6)
    y = round((ymin + ymax) / (2.0 * img_h), 6)
    w = round((xmax - xmin) / (1.0 * img_w), 6)
    h = round((ymax - ymin) / (1.0 * img_h), 6)
    return x, y, w, h


"""
# 每张图片的尺寸
"""


def get_img_size(img_path):
    print(img_path)
    mat = cv2.imread(img_path)
    if mat is None:
        return mat
    return mat.shape


if __name__ == "__main__":
    data = read_txt("/home/lixinru/PaddleOCR/dataset/LABEL/Label.txt")  # 原始数据表  #需要转换的标注文件
    create_folder("/home/lixinru/PaddleOCR/dataset/LABEL/turning")#新建的转换后文件路径

    for img_data in data:
        img_name = str(img_data).split("\\t")[0].split('/')[1]  # 每行数据提取图片名
        xywh = str(img_data).split("\\t")[1].split("\\n")[0].replace("',", "").replace("'", "").strip('[').strip(
            ']').replace("false", "1").replace("true", "1")  # 每行数据提取坐标信息
        # print(xywh)
        xywh = eval(xywh)  # 转换为元组或者字典
        img_size = get_img_size(img_name)
        if img_size is None:
            continue
        if type(xywh) == tuple:
            for xy_line in xywh:
                yolo_data = normalization(xy_line['points'][0][0], xy_line['points'][0][1], xy_line['points'][2][0],
                                          xy_line['points'][2][1], img_size[1],
                                          img_size[0])  # 处理每个字典的坐标信息,转换为归一化后的yolo标注格式
                # print("0 %s %s %s %s" % (str(yolo_data[0]) , str(yolo_data[1]) , str(yolo_data[2]) , str(yolo_data[3])))
                # print(img_name)
                txt_create(img_name, "0 %s %s %s %s" % (
                str(yolo_data[0]), str(yolo_data[1]), str(yolo_data[2]), str(yolo_data[3])))
        if type(xywh) == dict:
            yolo_data = normalization(xywh['points'][0][0], xywh['points'][0][1], xywh['points'][2][0],
                                      xywh['points'][2][1], img_size[1], img_size[0])
            txt_create(img_name,
                       "0 %s %s %s %s" % (str(yolo_data[0]), str(yolo_data[1]), str(yolo_data[2]), str(yolo_data[3])))
            # print("0 %s %s %s %s" % (str(yolo_data[0]) , str(yolo_data[1]) , str(yolo_data[2]) , str(yolo_data[3])))
            # print(img_name)

在/home/lixinru/PaddleOCR/dataset/LABEL/turning目录下找找看有没有。如果没有的话可能是你代码中设置filename变量的时候有问题,你可以在代码中的txt_create函数中添加一些调试信息,把一些参数变量都print()打印出来看一下是具体哪步有问题。


如果以上回答对您有所帮助,点击一下采纳该答案~谢谢