RoLabelImg_Transform
该项目是针对行文本检测框标签(旋转矩形检测框)两种表示形式的转化(txt和xml)。
文本检测框
文本检测常用的标注形式有水平矩形框、旋转矩形框、任意四边形框、任意多边形框、其他形式(如文本蛇)等,如下图所示。
该项目针对其中文本检测使用最多的旋转矩形框表示形式进行读写,转化。旋转矩形框与常规的目标检测bounding box不同,在它的基础上添加了旋转角度,对常规水平检测框进行旋转。
旋转矩形框通常有两种表示形式:
中心点坐标、宽、高、旋转角度,常采用xml文件保存
矩形四个角点的坐标,通常直接使用txt文件简单保存(如ICDAR2015数据集)
中心-旋转角表示
以下面一个检测框为例:
robndbox
wenben
Unspecified
0
0
860.5666
734.5734
644.8657
52.3775
3.031593
xml文件保存了旋转检测框的类别(wenben)、中心点坐标(cx,cy)、宽高(w,h)、旋转角(angle)
矩形角点坐标表示
以下面一个检测框为例:
x1,y1,x2,y2,x3,y3,x4,y4,labelname
txt文件中的每一行都如上所示,x1,y1,x2,y2,x3,y3,x4,y4分别是四个角点的横纵坐标,labelname是检测框的类别
两种表示方式转换
具体计算公式如下:
x1 = cx-w/2*cos(theta)+h/2*sin(theta)
y1 = cy-h/2*cos(theta)-w/2*sin(theta)
x2 = cx-w/2*cos(theta)+h/2*sin(theta)
y2 = cy-h/2*cos(theta)+w/2*sin(theta)
x3 = cx+w/2*cos(theta)-h/2*sin(theta)
y3 = cy+h/2*cos(theta)-w/2*sin(theta)
x4 = cx+w/2*cos(theta)+h/2*sin(theta)
y4 = cy+h/2*cos(theta)+w/2*sin(theta)
其中theta与角度angle有关,当angle小于pi/2时,theta等于angle,当angle大于pi/2时,theta等于angle-pi。
代码程序
准备环境
该程序需要以下依赖包:
python3.6
opencv-python 4.1.0.25
lxml 4.4.0
txt转xml
将需要转换的图像文件放入img文件夹,txt检测框文件放入txt文件夹,运行get_list.py得到转换列表txt_to_xml_list.txt,然后运行txt_to_xml.py,在xml文件夹中得到同名的xml格式标签文件
python RoLabelImg_Transform/get_list.py --model='txt_to_xml' --input_path='./RoLabelImg_Transform/txt/'
python RoLabelImg_Transform/txt_to_xml.py
xml转txt
将需要转换的图像文件放入img文件夹,xml检测框文件放入xml文件夹,运行get_list.py得到转换列表xml_to_txt_list.txt,然后运行xml_to_txt.py,在txt文件夹中得到同名的txt格式标签文件
python RoLabelImg_Transform/get_list.py --model='xml_to_txt' --input_path='./RoLabelImg_Transform/xml/'
python RoLabelImg_Transform/xml_to_txt.py
txt检测框可视化
对txt文件检测框进行可视化,运行visualize.py文件,可视化后的图像保存在visualized_img文件夹中
python RoLabelImg_Transform/visualize.py