PaddleOCR文本检测数据向文本识别数据的格式转换

本文介绍如何将PaddleOCR的文本检测数据转换为适合文本识别的格式。转换过程中,需要解决同一图片上多文本标注的问题,以确保符合文本识别的数据集要求。具体做法通过代码实现数据剪裁。

在使用PaddleOCR官方提供的转换工具时出现问题,经过查看数据格式发现以下问题:
文本检测的训练数据,可以在同一张图片上进行多个文本标注,最后形成的数据格式如下:

" 图像文件名                    json.dumps编码的图像标注信息"
ch4_test_images/img_61.jpg    [{"transcription": "MASA", "points": [[310, 104], [416, 141], [418, 216], [312, 179]]}, {...}]
...

文本识别的数据集,是一张图片对应一个文本标注,最后格式如下:

" 图像文件名                 图像标注信息 "
train_data/train_0001.jpg   简单可依赖
train_data/train_0002.jpg   用科技让复杂的世界更简单
...

因此,想要使用同一组数据进行文本检测和文本识别训练,需要将文本检测使用的数据集进行剪裁,以满足文本识别的格式要求,代码如下:

import os
from PIL import Image
import numpy as np

#文本检测图片路径
det_images = "D:\\DataSet\\images\\OCR\\20210922\\images"
#文本检测标注文件
det_label_file = "D:\\DataSet\\images\\OCR\\20210922\\det_label.txt"
#文本识别的图片存放路径
rec_images = "D:\\DataSet\\images\\OCR\\20210922\\rec_images"
#文本识别标注信息存放文件
rec_label_file = "D:\\DataSet\\images\\OCR\\20210922\\rec_label.txt"

if os.path.exists(rec_label_file):
    os.remove(rec_label_file)

with open(rec_label_file,"w",encoding="utf-8") as out_file:
    
    with open(det_label_file,"r",encoding="utf-8") as f:
        for line in f.readlines():
            tmp = line.strip('\n').replace(" ", "").split('\t')
            img_path, label = tmp[0], tmp[1]
            img_basename = os.path.basename(img_path)
            img_path = os.path.join(det_images,img_basename)
            labels = eval(label.replace("false", "0"))
            n = len(labels)
            print("图片路径:{},标签数量:{}".format(img_path,n))
            i = 1
            for label in labels:
                txt = label["transcription"]
                box = label["points"]
                print("text:{},box:{}".format(txt,box))#左上,右上,右下,左下
                left = int(np.array(box)[:,0].min())
                upper = int(np.array(box)[:,1].min())
                right = int(np.array(box)[:,0].max())
                lower = int(np.array(box)[:,1].max())

                out_basename = img_basename[:-4]+"_%03d" % i
                out_path = os.path.join(rec_images,out_basename+".jpg")
                img = Image.open(img_path)
                img.crop(box=(left,upper,right,lower)).save(out_path)

                out_file.write("rec_images/"+out_basename+".jpg"+"\t"+txt+"\n")
                i += 1
        
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

great-wind

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值