CTW数据集解析与处理

1 篇文章 0 订阅

什么是CTW数据集?
CTW数据集是腾讯和清华大学一起制作的数据集,很强。在这个数据集中一共有超过3万个街景图像,约100万个汉字。
1.先吐槽一下CTW数据集的下载相关链接是真烦人,要么翻墙再去outlook要么在腾讯云你需要花钱扩容,就问你开心不开心。
打开CTW的网址 在file这个标题下面点击dataset然后再点击this form 填写的的邮箱 姓名 和工作单位 就会弹出一个下载地址,如下
这上边的路径是经过处理的路径所以各位朋友可以去CTW的官网去自己找相应的下载地址。
2. 拿到数据集后我们得到的是这样的照片如果我们需要做文字检测和识别的话肯定需要对汉字进行切分以及取出来每个汉字的坐标位置。CTW数据集的标注信息都在几个json文件中所以我们把json中的一些属性弄明白我们就可以对这个图像做文字切分操作以及取单字的坐标去做训练和预测了。在这里插入图片描述
3. 上图中的图片json属性
json数据的解析
在这里插入图片描述
4.对json数据进行解析切取单个图片和坐标。

import jsonlines
import cv2
import os


# 任务 切出图片中的每一个字符

def getsplit(jsonfile, imagepath, labelfile, lineimgpath, count_t, cnt):
    # 打开jsonl文件夹并读取所有信息
    list1 = []
    dict1 = {}
    with open(jsonfile, "r+", encoding="utf-8") as f:

        json_inf = jsonlines.Reader(f)
        # 遍历jsonl的每一条信息
        for item in json_inf:
            # 通过每一条信息 的键找到对应的值 注释(主要是为了找坐标和单字的) 图片名称
            annotations = item['annotations']
            img_name = item['file_name']
            # 拼接处图片的路径 然后读取图片
            src = cv2.imread(os.path.join(imagepath, img_name))
            for attr in annotations:
                for sentence in attr:
                    txt = sentence['text']
                    if txt not in list1:
                        list1.append(txt)
                        dict1[txt] = 1
                    else:
                        dict1[txt] = dict1[txt] + 1
                    x = []
                    y = []
                    for polygon in sentence['polygon']:
                        x.append(polygon[0])
                        y.append(polygon[1])
                    minx = int(min(x))
                    miny = int(min(y))
                    maxx = int(max(x))
                    maxy = int(max(y))
                    # 根据坐标 切出来相应坐标的图片
                    img = src[miny:maxy, minx:maxx]

                    # try:
                    # 判断相关路径是否存在 如果存在则直接写入 如果不存在则创建并写入
                    # 写入成功后+1
                    # 尝试写入图
                    write_path = lineimgpath + r"/" + txt + r"/"

                    if not os.path.exists(write_path):
                        os.makedirs(write_path)
                        print("OK")
                    # 为什么不用注释的这个是因为有中文路径问题
                    # cv2.imencode('.jpg', img)[1].tofile()能解决中文路径问题
                    # print(os.path.join(write_path, str(cnt) + '.jpg'))
                    # cv2.imwrite(os.path.join(write_path, str(cnt) + '.jpg'), img)
                    cv2.imencode('.jpg', img)[1].tofile((os.path.join(write_path, str(cnt) + '.jpg')))

                    # 这里 写入 每个字对应的编号 以及对应出现的图片
                    with open(labelfile, 'a', encoding='utf8') as txtf:
                        txtf.write(str(cnt) + '.jpg,' + txt + " " + write_path + '\n')
                        cnt += 1

    # 统计字频
    with open(count_t, "a+", encoding="utf-8") as f:
        for key, value in dict1.items():
            f.write(key + ":" + str(value) + '\n')


if __name__ == "__main__":
    # jsonl 文件 图片的路径 生成的label文件 图片写入的位置 图像统计字频 图像开始计数0
    getsplit('train.jsonl', r'F:\CTW-W\images-trainval\trainimg', './CTW_2/train.txt', './CTW_2/train1/',
             './CTW_2/count_train.txt', 0)
  

5.如有问题请留言。

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 25
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值