PPOCRLabel数据集转ICDAR2015数据集
时间: 2024-12-26 10:18:39 浏览: 9
### 将PPOCRLabel数据集转换为ICDAR2015数据集格式
为了实现从PPOCRLabel到ICDAR2015的数据集格式转换,需理解两种格式的具体结构差异,并编写相应的脚本来完成这一过程。
#### PPOCRLabel 数据集格式说明
PPOCRLabel是一种用于标注图像中文本位置的工具,其输出文件通常是一个`.txt`文件,每一行代表一个矩形框及其对应的文本标签。每行的内容由坐标和文字组成,具体形式如下:
```
x_min,y_min,x_max,y_min,x_max,y_max,x_min,y_max,text
```
其中,`(x_min, y_min)`表示左上角坐标,`(x_max, y_max)`表示右下角坐标[^3]。
#### ICDAR2015 数据集格式说明
ICDAR2015竞赛使用的数据集中,每个样本同样通过文本文件描述图片中的文本区域。对于每一个矩形或多边形包围盒,采用的是顺时针方向给出四个顶点坐标的顺序存储方式,即:
```
x1,y1,x2,y2,x3,y3,x4,y4,transcription
```
这里需要注意的是,虽然两者都记录了四组坐标值来定义边界框的位置,但是它们之间存在细微差别——主要是关于起始点的选择以及遍历的方向不同。
#### 实现转换的方法
基于上述分析,下面提供一段Python代码片段作为解决方案的一部分,该函数接收原始路径、输入目录名及输出标签文件名为参数,读取指定目录下的所有标注文件(.txt),按照新的格式重写这些信息至目标文件夹内相应的新版.txt文件中。
```python
import os
def convert_ppocr_to_icdar(input_file_path, output_file_path):
with open(input_file_path, 'r', encoding='utf-8') as f_in,\
open(output_file_path, 'w', encoding='utf-8') as f_out:
lines = f_in.readlines()
for line in lines:
parts = line.strip().split(',')
points = list(map(int, parts[:8])) # 取前八个数值部分
# 构建新格式字符串
new_line = ','.join([str(points[i]) for i in range(8)]) + ',' + ','.join(parts[8:])
f_out.write(new_line + '\n')
root_path = './data'
input_dir = 'ppocr_labels' # 原始PP-OCR Label所在子文件夹名称
output_dir = 'icdar2015_format'
if not os.path.exists(os.path.join(root_path, output_dir)):
os.makedirs(os.path.join(root_path, output_dir))
for filename in os.listdir(os.path.join(root_path, input_dir)):
if filename.endswith('.txt'):
infile = os.path.join(root_path, input_dir, filename)
outfile = os.path.join(root_path, output_dir, filename)
convert_ppocr_to_icdar(infile, outfile)
```
此段程序实现了批量处理功能,能够自动遍历给定路径下的所有符合条件的文本文件,并逐一对它们执行格式转换操作[^2]。
阅读全文