又名“抠二狗”,用于检索指定 coco json 文件中的关键信息以及进行简单的数据优化处理。
使用 poetry构建项目和管理环境依赖。
使用 python3.6 以上版本开发。
pip install cocogo
# 克隆仓库
git clone https://github.com/smslit/cocogo.git
# 安装
cd cocogo && poetry install
安装 poetry 后执行以下命令就可以
# 仅安装依赖
poetry install --no-root
执行命令打印帮助信息。
cocogo --help
Usage: cocogo [OPTIONS] COMMAND [ARGS]...
此工具可以帮助您针对 coco 标注文件进行简单的检索或简单处理,帮助详见 https://github.com/smslit/cocogo
Options:
--help Show this message and exit.
Commands:
count 统计数据
info 查看文件中的基本信息,可以指定具体内容项
list 查询数据
optimize 优化数据,删除没有的图像数据及相关标注信息
version 查看当前使用 cocogo 的版本
可以看到目前功能有:
- 统计数据
- 查看基本信息
- 检索数据
- 优化数据
- 查看版本
每个功能对应一个子命令。
使用 count 子命令。
cocogo count --help
Usage: cocogo count [OPTIONS] JSON_FILE
统计数据
Arguments:
JSON_FILE 指定待检索的 json 文件 [required]
Options:
-i, --item [info|type|images|annotations|categories|licenses]
检索项 [default: images]
--help Show this message and exit.
可以看到使用方式很简单,当然功能也很简单,只有一个选项就是指定要统计项,统计项不指定默认为图像,现在只是统计个数。
比如:
cocogo count -i images eval.json
加载 json 文件数据中...
检索到数据项 images 3471 条记录!
图像不同宽高比数量统计如下:
宽高比 1.33-(2592, 1944): 1083 张
宽高比 1.33-(1200, 900): 2195 张
宽高比 1.76-(1920, 1088): 20 张
宽高比 1.33-(3264, 2448): 36 张
宽高比 1.33-(1296, 972): 60 张
宽高比 1.33-(3200, 2400): 25 张
宽高比 1.33-(900, 675): 4 张
宽高比 1.33-(2560, 1920): 11 张
宽高比 1.33-(4160, 3120): 1 张
宽高比 1.79-(1276, 714): 2 张
宽高比 1.78-(1280, 720): 8 张
宽高比 0.75-(960, 1280): 2 张
宽高比 1.33-(896, 672): 3 张
宽高比 1.33-(907, 680): 7 张
宽高比 1.33-(3968, 2976): 3 张
宽高比 1.33-(648, 486): 3 张
宽高比 0.75-(1080, 1440): 1 张
宽高比 1.22-(704, 576): 2 张
宽高比 1.78-(1920, 1080): 3 张
宽高比 1.33-(1920, 1440): 1 张
宽高比 0.75-(2976, 3968): 1 张
统计图像会列出各个宽、高比的图像个数,同时会生成按照宽高统计的尺寸分布图,如下:
另外统计 annotation 的化还会生成相应的图表(各类别 annotation 的数量、 各类别 annotation 宽高归一化分布):
cocogo count -i annotations train.json
加载 json 文件数据中...
检索到数据项 annotations 371852 条记录!
建立 images 索引...
完成!
建立 categories 索引...
完成!
统计标注数据...
完成!
标注数据按分类统计如下:
moxxxxne: 56686 条
toxxxxne: 85002 条
pxxxxar: 4465 条
pxxxxr: 19337 条
txxxxk: 18322 条
dxxxxr: 49688 条
fxxxxe: 3303 条
sxxxxg: 25944 条
cxxxxs: 6068 条
dxxxxof: 45610 条
cxxxxer: 8524 条
pxxxxe: 5152 条
vxxxxn: 6995 条
txxxxer: 12392 条
sxxxxck: 9377 条
rxxxxer: 1596 条
wxxxxl: 5584 条
bxxxxd: 7807 条
统计图表已保存至目录 - /data/plots
-
各类别统计数量直方图例图:
-
所有类别的 annotation 宽高归一化分布图例图:
-
指定类别的 annotation 宽高归一化分布图例图(motorcarane):
-
指定类别的 annotation 宽高实际尺寸分布图例图(motorcarane):
➜ cocogo count -i categories .eval.json
加载 json 文件数据中...
检索到数据项 categories 18 条记录!
包含指定类别图像以及标注数量统计如下:
moxocxxxe > 图像 1347 张,标注 1754 个
toxxrcxxxe > 图像 1007 张,标注 3139 个
pumxxxr > 图像 156 张,标注 162 个
puxxdxxxr > 图像 620 张,标注 721 个
txxxk > 图像 455 张,标注 810 个
dixxxr > 图像 1409 张,标注 2020 个
xxxe > 图像 23 张,标注 39 个
xxxg > 图像 170 张,标注 187 个
cxlxrbxxxs > 图像 31 张,标注 35 个
dustpxxxf > 图像 792 张,标注 1546 个
cexxxxxxxxr > 图像 181 张,标注 249 个
pixxxxxxxxxxe > 图像 131 张,标注 183 个
xxxn > 图像 116 张,标注 178 个
traxxxr > 图像 265 张,标注 448 个
smalltxxxk > 图像 226 张,标注 282 个
roxxxr > 图像 0 张,标注 0 个
wxndxxxl > 图像 8 张,标注 21 个
xxxd > 图像 0 张,标注 0 个
使用 info 子命令。
cocogo info --help
Usage: cocogo info [OPTIONS] JSON_FILE
查看文件中的基本信息,可以指定具体内容项
Arguments:
JSON_FILE 指定待检索的 json 文件 [required]
Options:
-i, --item [info|type|images|annotations|categories|licenses]
检索项
--help Show this message and exit.
用来查看包含了哪些关键字段信息,又一个指定查看项的参数,不指定参数项会列出指定 json 文件中包含的关键字段:
cocogo info eval.json
文件中包含内容项如下:
images, type, annotations, categories
所以我们就可以查看上面列出的文件包含内容项的信息,比如 images 的:
cocogo info -i images eval.json
指定项 images 内容格式如下:
file_name: 97454.jpg
height: 1944
width: 2592
id: 0
一般就是看内容结构。
使用 list 子命令, 主要是列出指定范围内指定项目的数据。
cocogo list --help
Usage: cocogo list [OPTIONS] JSON_FILE
查询数据
Arguments:
JSON_FILE 指定待检索的 json 文件 [required]
Options:
-i, --item [info|type|images|annotations|categories|licenses]
检索项 [default: images]
-s, --start INTEGER 列出数据的起始位置 [default: 0]
-e, --end INTEGER 列出数据的结束位置 [default: 10]
--help Show this message and exit.
默认列出图像的 0 ~ 10 的数据。
比如列出标注的 12 ~ 18 (左闭右开区间) 的数据:
cocogo list -s 12 -e 18 -i annnotations eval.json
加载 json 文件数据中...
{'area': 16544, 'iscrowd': 0, 'bbox': [293, 485, 176, 94], 'category_id': 6, 'ignore': 0, 'segmentation': [], 'image_id': 1, 'id': 13}
{'area': 21012, 'iscrowd': 0, 'bbox': [1253, 196, 103, 204], 'category_id': 12, 'ignore': 0, 'segmentation': [], 'image_id': 1, 'id': 14}
{'area': 22704, 'iscrowd': 0, 'bbox': [709, 167, 86, 264], 'category_id': 12, 'ignore': 0, 'segmentation': [], 'image_id': 1, 'id': 15}
{'area': 1204, 'iscrowd': 0, 'bbox': [649, 387, 43, 28], 'category_id': 6, 'ignore': 0, 'segmentation': [], 'image_id': 1, 'id': 16}
{'area': 1406, 'iscrowd': 0, 'bbox': [472, 342, 38, 37], 'category_id': 6, 'ignore': 0, 'segmentation': [], 'image_id': 1, 'id': 17}
{'area': 5160, 'iscrowd': 0, 'bbox': [337, 453, 120, 43], 'category_id': 5, 'ignore': 0, 'segmentation': [], 'image_id': 1, 'id': 18}
共列出 6(12~18) 条记录!
cocogo optimize --help
Usage: cocogo optimize [OPTIONS] JSON_FILE IMG_DIR
优化数据,删除没有的图像数据及相关标注信息
Arguments:
JSON_FILE CoCo 标注文件路径 [required]
IMG_DIR 标注文件对应的图像目录 [required]
Options:
-p, --prefix TEXT 优化后标注文件名的前缀 [default: processed]
-v, --verbose 罗嗦模式,打印全部信息
-o, --override 保存文件覆盖原标注文件
--check-size / --no-check-size 检查标注文件中图像宽高是否与图像文件一致 [default: False]
--help Show this message and exit.
默认情况下,生成优化后的 json 文件带有前缀 processed
,如果指定 override
选项会覆盖原来的 json 文件。
默认优化的内容只是检查数据中图像文件是否存在,不存在就会删除相应的图像记录和标注记录,如果指定 --check-size
会检查图像数据中宽、高是否与原图的宽高一致,如果不一致会更新为正确的宽、高数据。
两个必须的参数是:
- coco json 文件
- 对应 json 文件的图像目录
cocogo optimize train.json train_imgs
Json 数据加载中 ...
完成!
缺失的图像检索中 ...
checking [████████████████████████████████████] 100%
完成!
缺失图像相关标注数据检索中 ...
checking [████████████████████████████████████] 100%
完成!
Json 数据保存中 ...
完成! - ./processed_train.json
优化总结:
- 图像: 0 / 127015 (缺失/全部)
- 标注: 0 / 371852 (失效/全部)