文本检测数据集标注

article/2025/9/10 18:42:10

工具链接:Curve-Text-Detector/data at master · Yuliang-Liu/Curve-Text-Detector · GitHub

目录

前言

一、工具介绍

1.标注格式

2.工具使用

二、标注步骤

1.数据准备

2.数据标注

3.数据集label可视化

总结


前言

本次介绍的标注方式和标注工具均为2017年华南理工大学刘禹良提出的弯曲文本标注方式和工具(原文链接:https://arxiv.org/abs/1712.02170),可以对弯曲文本进行弯曲标注,具体数据集可以查看论文作者提出的SCUT-CTW1500。


提示:以下是本篇文章正文内容,下面为工具使用经验总结(论文作者也在工具链接中提供了工具使用手册)







一、工具介绍

1.标注格式

1)对矩形或者四边形文本区域,使用4个顶点就可以确定;

2)而对弯曲文本,作者发现使用14个点就可以进行确定,具体的标注方式如图1所示,先确定4个顶点位置(紫色点),然后根据辅助线在上下边界分别确定5个点(绿色点),并且可以标注文本内容,用于扩充为文本识别数据集。(对于过于弯曲的文本区域标注效果并不利用,建议按单词级别标注,避免过于弯曲文本区域)

图1 标注过程

2.工具使用

"b"和"f":分别为移动至上一张和下一张,并保存当前状态;

"r":切换标注方式(矩形或者多边形);

"d":先在右侧文本标注框实例栏中选择需要删除的实例,再按下"d"进行实例删除;

鼠标右击:保存当前状态并删除当前操作;

鼠标左击:在标注矩形区域时,先左击确定左上角,然后拖动鼠标至右下角左击即可确定矩形区域;而确定四边形区域,则分别在四边形区域分别左击鼠标确定四个点即可;而对于弯曲文本区域的标注是在四边形区域标注基础上进行操作,需要借助"k"和空格进行辅助标注;

"k"和空格:主要使用在标注弯曲文本区域,先确定弯曲文本的四个顶点位置(参考标注四边形区域),然后在右侧文本标注框实例栏“鼠标左击”刚才确定的四边形区域,再点击"k"就会出现十条辅助线(5条红色和5条蓝色),移动鼠标,鼠标的水平线和辅助线相交的点如果在合适的位置再敲击“空格”即确定了一个点,依次红色辅助线的5个点再依次确定蓝色辅助线的5个点就完成了弯曲文本的标注;

鼠标左双击:在右侧实例列表中对实例左双击,会出现一个框,其中可以填入文本内容,用于扩充标注文本识别数据集,敲击"Esc"可以退出,填好文本内容并敲击"Enter"可以保存并退出;

鼠标滚轮:对图像放缩,同时可以结合"Ctrl"+滚轮或者"Ctrl"+"Shift"+滚轮加快放缩速度。当出现标注框出现偏移的情况,通过切换图片可以恢复;(在使用过程中,在对某些放缩过的图像进行标注时,有时标注框会出现偏移,出现这种情况时对该张图像进行原尺寸标注,这种情况很少发生,可以在全部标注工作完成后进行可视化标注框进行检查)

滚动栏:在图像尺寸过大,会出现滚动栏,可以通过滚动栏进行移动画布;

"t":在右侧实例栏选择实例,敲击"t"可以辅助找到标注框,但是提示不明显,基本不会使用到,一般情况通过颜色就能找到相应的标注框。

具体的工具界面如图2所示:

图2 标注工具界面







二、标注步骤






1.数据准备

1)先对准备好需要标注的图片,并将其进行重命名,同时也可以进行对数据集打乱操作;

# 对图像进行重命名
def change_name(root):# 读取文件路径下所有的图像res = os.listdir(root)# 将列表打乱,防止同类型图像堆积在一起,可以随机分布random.shuffle(res)# 设立index,用于给文件进行行动命名index = 1for i in res:# 对于jpg和png格式图片图片进行换名if ".jpg" in i or ".png" in i:os.rename(os.path.join(root, i), os.path.join(root, str(index) + '.' + i.split('.', 1)[1]))index += 1else:print('您输入的图片必须是以jpg或者png格式的')

2)建议所有的图片名格式一致并且长度一致,如果你重命名是从1开始,并按照数字命名,建议进行补零操作,因为该工具的读入方式为将按照字符串,这样文件顺序将得以保持;

# 给文件名添加添加前置0
def add_zeros(root):res = os.listdir(root)# 统一长度为4位for i in res:if len(i.split('.', 1)[0]) == 1:os.rename(os.path.join(root, i), os.path.join(root, '000' + i))elif len(i.split('.', 1)[0]) == 2:os.rename(os.path.join(root, i), os.path.join(root, '00' + i))elif len(i.split('.', 1)[0]) == 3:os.rename(os.path.join(root, i), os.path.join(root, '0' + i))

3)将命名好的图片放入image文件夹下,标注好的txt会生成在label文件夹下,并且名字和图片名字一致。






2.数据标注

1)双击运行windows_label_tool.exe;

2)当需要到达上次标注的图片位置,通过输入序号,然后点击“go”,如图3;

图3 工具底部

3)对图片中文本的区域标注参考工具使用中的操作即可,四边形和弯曲文本区域标注操作示意如4所示,矩形区域标注较为简单,简单尝试即会;

图4 标注示意图

4)如果标注文本检测数据集,无需填入文本内容,label文件如图5(a)所示,文本识别数据集label如图5(b)所示,第一行有一个文本框数字代表文本框实例个数,可以用于统计自己数据集一共标注了多少个文本实例(如果不需要,在标注工作完成之后对其删除即可);

图5 label示意图

5)特殊情况说明1:弯曲文本区域过于弯曲,会出现图6左侧效果不佳的情况,建议按单词级进行标注,得到图7右侧效果;

图7 过度弯度标注效果对比

6)在Windows下使用时,对于较为竖直的弯曲文本标注出现困难,生成的辅助线较为水平,而移动无法细微,造成标注框确定困难(未尝试在Ubuntu下是否会出现这种情况),提供两种解决方案,如图8(a):延伸文本区域,使得有一定斜度,但是造成区域贴合度下降;或者图8(b):顶点不确定在四个角,不知对后期训练是否会产生影响;可以尝试更好的解决方案。

图8 过度弯曲标注解决方案示意

3.数据集label可视化

主要是将标注好的文本框还原在原图上,查看标注的文本框是否精准。

# 将标注的图像进行可视化展示
def visualize(image_root, gt_root, out_root, name):# 根据路径和文件名将图像读出,本示例采用了jpg格式image = cv2.imread(os.path.join(image_root, name+'.jpg'), 3)# 根据路径和文件名将标注文件读取,文件格式为txtgt_txt = open(os.path.join(gt_root, name+'.txt'))height, width, _ = image.shapelines = 0index = 0while 1:line = gt_txt.readline()if not line:break# 首行为文本框个数if lines == 0:lines = int(line)continueline = line.replace("\n", "")line = line.split(',')# print(line)now = np.empty(shape=[0, 1, 2])for i in range(0, len(line), 2):temp = np.empty(shape=[0, 2])temp = np.append(temp, [[line[i], line[i + 1]]], axis=0)now = np.append(now, [temp], axis=0)now = now.astype(np.int32)# 根据标注文件的坐标点绘制多边形文本框image = cv2.polylines(image, [now], True, (0, 0, 255), thickness=2)# cv2.imshow('image'+str(index), image)index = index + 1# 保存可视化图片到输出路径中cv2.imwrite(out_root + '\\' + name + '.jpg', image)print(name + '.jpg')cv2.waitKey(0)cv2.destroyAllWindows()

效果如图9所示:

图9 数据集可视化示意图







总结

以上为本次文本检测数据集标注工具的使用经验介绍,主要通过使用论文作者提供的工具完成数据集的标注工作,如果大家遇到更好的文本标注软件可以一起分享讨论。


http://chatgpt.dhexx.cn/article/D02QfFxZ.shtml

相关文章

AI实战:2019、2020最新的中文文本检测检测模型

2019、2020最新的中文文本检测检测模型 1、DBNet(Real-time Scene Text Detection with Differentiable Binarization) 论文地址:https://arxiv.org/pdf/1911.08947.pdf 作者:华中科技大学 Minghui Liao 1∗ , Zhaoyi Wan 2∗ ,…

人工智能学习--文本检测初探

一、相关概念和综述: 转自知乎热心网友 燕小花女士的内容,供学习使用,若侵权则删。貌似写于2018年12月,之后这几年的流行方法更新,自行搜索sci顶刊和会议论文。 https://zhuanlan.zhihu.com/p/52335619 文本检测的难…

文本检测综述(2017 ~ 2021)

文本检测综述 文本检测传统方法文本检测深度方法目标检测文本检测1.【ECCV2016】CTPN(Detecting Text in Natural Image with Connectionist Text Proposal Network)2. 【CVPR2017】SegLink(Detecting Oriented Text in Natural Images by li…

文本检测算法----TextFuseNet(IJCAI-PRICAI-20)

多种文本检测算法性能对比及算法介绍 (https://blog.csdn.net/qq_39707285/article/details/108754444) TextFuseNet: Scene Text Detection with Richer Fused Features 前言1. 算法简介2. 算法详解2.1 网络结构2.2 Multi-level Feature Representation2.3 Multi-path Fusion …

Exploring the Capacity of Sequential-free Box Discretization Network for Omnidirectional Scene Text

Paper : https://arxiv.org/abs/1912.09629v1 Code : https://tinyurl.com/sbdnet SBD首先将四边形边框离散为几个关键边缘,其中包含所有可能的水平和垂直位置。为了解码准确的顶点位置,提出了一种简单而有效的匹配程序来重构四边形边界框。 基本思想是…

文本检测模型综述

之前做车牌检测使用文本检测模型,如east、ctpn和textboxes,但是效果不是很好,需要针对车牌专门训练。后面就采用ssd和yolo进行车牌的检测,但是车牌有时是旋转的,使用ssd和yolo模型无法对车牌的四个点进行精确定位&…

OCR系列——文本检测任务

1. 简介 文本检测任务是找出图像或视频中的文字位置。不同于目标检测任务,目标检测不仅要解决定位问题,还要解决目标分类问题。 目标检测和文本检测同属于“定位”问题。但是文本检测无需对目标分类,并且文本形状复杂多样。 当前所说的文本…

文本检测(Text Detection)简要综述

文章目录 检测(Detection)在计算机视觉中的位置检测任务经典数据集评价指标发展历史什么叫Anchor检测架构RPNFPN(特征金字塔网络) 几个文本检测的较新方法FOTS(【2018CVPR】Fast Oriented Text Spotting with a Unified Network)TextSnake(【2018ECCV】 TextSnake: A Flexible …

思维导图——线性代数知识点总结

线性代数知识点总结 期末,总结了线性代数的相关知识点。

线性代数知识点总结,基础概念和计算整理(手写版)

线性代数中一定必须要掌握的基础概念和计算的整理,简单易懂,适合入门和复习。

线性代数基础知识点回顾与总结(一):行列式与矩阵

线性代数基础知识点回顾与总结(一):行列式与矩阵 介绍 骨骼图 1.行列式 排列: 1,2,,n组成的有序数组称为n阶排列。 逆序:大数排在小数前。自然排列为偶排列。 n阶行列式的值等于不同行的n…

线性代数-行列式知识总结

1、知识脉络如图 2、二阶与三阶行列式 (1)定义略 (2)二阶行列式与三阶行列式的计算“对角线法则”,三阶可降为二阶(方便计算) 如图 注意符号 (3)行列式线性方程组的关系 …

深度学习涉及到的线性代数知识点总结(二)

文章目录 一、余弦相似度和欧式距离的关系二、相关性三、基四、线性变换五、仿射变换六、矩阵特征方程七、相似矩阵八、奇异值分解九、谱范数 一、余弦相似度和欧式距离的关系 如果对向量模长进行归一化,欧式距离和余弦相似度有如下计算关系: ● 适用场…

线性代数矩阵知识点

文章目录 (一),矩阵的基本概念1,矩阵的定义 (二),矩阵的运算1,矩阵的加减法2,数与矩阵的乘法3,矩阵的乘法4,矩阵的转置5,方阵的行列式…

线性代数知识图谱

1. 线性代数知识图谱 线性代数是代数学的一个分支,主要处理线性关系问题。线性关系意即数学对象之间的关系是以一次形式来表达的。例如,在解析几何里,平面上直线的方程是二元一次方程;空间平面的方程是三元一次方程,而…

基础线性代数知识点总结与回顾(二):秩与线性相关

基础线性代数知识点总结与回顾(二):秩与线性相关 骨骼图 秩 矩阵的秩: 若矩阵的r阶子式不为0,r1阶子式全为0,则称矩阵的秩为r。 定理:经过初等变换,矩阵的秩不变。 推论 秩的…

大一线性代数知识点总结

行列式和矩阵的加法和乘法的比较 伴随矩阵的一些性质 以下是全部知识点总结 线性方程组的系数行列式为零时,不能用克拉默法则解方程组,因为此时方程组的解为无解或有无穷多个解。 克拉默法则解线性方程组的两个条件: 方程个数等于未知量个数…

线性代数知识总结梳理

目录 1.行列式计算 2.矩阵 3.向量与方程组 4.特征值 5.二次型 1.行列式计算 2.矩阵 3.向量与方程组 4.特征值 5.二次型

基础线性代数知识点总结与回顾(三):向量空间和二次型

基础线性代数知识点总结与回顾(三):向量空间和二次型 骨骼图: 向量空间 对加法、数乘封闭。 W——n维向量的非空集合,且满足: 则:W为n维向量空间的子空间。 如果向量空间V中的向量(a1,a2,a…