目标检测数据集标注工具 - od-annotation
hzylmf/od-annotationhttps://github.com/hzylmf/od-annotation
采用 python-flask 框架开发,基于 B/S 方式交互,支持多人同时标注。
1. 特点
B/S方式交互
支持多人同时标注(可分配不同标注人员的标注范围,或不同人员标注不同类别)
类别采用选择方式,免去手工输入类别工作
支持拖拽方式修正标注区域
支持键盘方向键切换标注样本
2. 使用方法
2.1 根据 requirements.txt 安装环境依赖
$ cd od-annotation
$ pip3 install -r requirements.txt
strong@foreverstrong:~$ mkdir software_toolbox
strong@foreverstrong:~$ cd software_toolbox/
strong@foreverstrong:~/software_toolbox$ git clone https://github.com/hzylmf/od-annotation.git
Cloning into 'od-annotation'...
remote: Counting objects: 218, done.
remote: Compressing objects: 100% (157/157), done.
remote: Total 218 (delta 61), reused 191 (delta 39), pack-reused 0
Receiving objects: 100% (218/218), 2.04 MiB | 115.00 KiB/s, done.
Resolving deltas: 100% (61/61), done.
Checking connectivity... done.
strong@foreverstrong:~/software_toolbox$ ll
total 12
drwxrwxr-x 3 strong strong 4096 Mar 11 16:12 ./
drwxr-xr-x 64 strong strong 4096 Mar 11 16:12 ../
drwxrwxr-x 13 strong strong 4096 Mar 11 16:12 od-annotation/
strong@foreverstrong:~/software_toolbox$ cd od-annotation/
strong@foreverstrong:~/software_toolbox/od-annotation$ ll
total 76
drwxrwxr-x 13 strong strong 4096 Mar 11 16:12 ./
drwxrwxr-x 3 strong strong 4096 Mar 11 16:12 ../
drwxrwxr-x 3 strong strong 4096 Mar 11 16:12 annotation/
-rw-rw-r-- 1 strong strong 4316 Mar 11 16:12 app.py
-rw-rw-r-- 1 strong strong 515 Mar 11 16:12 config.py
drwxrwxr-x 2 strong strong 4096 Mar 11 16:12 dataset/
drwxrwxr-x 2 strong strong 4096 Mar 11 16:12 docs/
drwxrwxr-x 8 strong strong 4096 Mar 11 16:12 .git/
drwxrwxr-x 3 strong strong 4096 Mar 11 16:12 .idea/
-rw-rw-r-- 1 strong strong 1313 Mar 11 16:12 logger_manager.py
drwxrwxr-x 2 strong strong 4096 Mar 11 16:12 logs/
drwxrwxr-x 2 strong strong 4096 Mar 11 16:12 models/
drwxrwxr-x 2 strong strong 4096 Mar 11 16:12 __pycache__/
-rw-rw-r-- 1 strong strong 2123 Mar 11 16:12 README.md
-rw-rw-r-- 1 strong strong 65 Mar 11 16:12 requirements.txt
drwxrwxr-x 4 strong strong 4096 Mar 11 16:12 static/
drwxrwxr-x 2 strong strong 4096 Mar 11 16:12 templates/
drwxrwxr-x 3 strong strong 4096 Mar 11 16:12 utils/
strong@foreverstrong:~/software_toolbox/od-annotation$ pip3 install -r requirements.txt
Collecting Flask==0.12.2 (from -r requirements.txt (line 1))
Downloading Flask-0.12.2-py2.py3-none-any.whl (83kB)
100% |████████████████████████████████| 92kB 459kB/s
Collecting PyMySQL==0.7.11 (from -r requirements.txt (line 2))
Downloading PyMySQL-0.7.11-py2.py3-none-any.whl (78kB)
100% |████████████████████████████████| 81kB 654kB/s
Collecting requests==2.9.1 (from -r requirements.txt (line 3))
Downloading requests-2.9.1-py2.py3-none-any.whl (501kB)
100% |████████████████████████████████| 501kB 693kB/s
Collecting flask-login==0.4.1 (from -r requirements.txt (line 4))
Downloading Flask-Login-0.4.1.tar.gz
Collecting Werkzeug>=0.7 (from Flask==0.12.2->-r requirements.txt (line 1))
Downloading Werkzeug-0.14.1-py2.py3-none-any.whl (322kB)
100% |████████████████████████████████| 327kB 1.3MB/s
Collecting click>=2.0 (from Flask==0.12.2->-r requirements.txt (line 1))
Downloading click-6.7-py2.py3-none-any.whl (71kB)
100% |████████████████████████████████| 71kB 3.8MB/s
Collecting itsdangerous>=0.21 (from Flask==0.12.2->-r requirements.txt (line 1))
Downloading itsdangerous-0.24.tar.gz (46kB)
100% |████████████████████████████████| 51kB 1.7MB/s
Collecting Jinja2>=2.4 (from Flask==0.12.2->-r requirements.txt (line 1))
Downloading Jinja2-2.10-py2.py3-none-any.whl (126kB)
100% |████████████████████████████████| 133kB 941kB/s
Collecting MarkupSafe>=0.23 (from Jinja2>=2.4->Flask==0.12.2->-r requirements.txt (line 1))
Downloading MarkupSafe-1.0.tar.gz
Building wheels for collected packages: flask-login, itsdangerous, MarkupSafe
Running setup.py bdist_wheel for flask-login ... done
Stored in directory: /home/strong/.cache/pip/wheels/25/4b/53/738919150a881bdebf1e2a7885fa7610a1ff7ff3e113a55fe1
Running setup.py bdist_wheel for itsdangerous ... done
Stored in directory: /home/strong/.cache/pip/wheels/fc/a8/66/24d655233c757e178d45dea2de22a04c6d92766abfb741129a
Running setup.py bdist_wheel for MarkupSafe ... done
Stored in directory: /home/strong/.cache/pip/wheels/88/a7/30/e39a54a87bcbe25308fa3ca64e8ddc75d9b3e5afa21ee32d57
Successfully built flask-login itsdangerous MarkupSafe
Installing collected packages: Werkzeug, click, itsdangerous, MarkupSafe, Jinja2, Flask, PyMySQL, requests, flask-login
Successfully installed Flask Jinja2-2.8 MarkupSafe-0.23 PyMySQL Werkzeug-0.13 click flask-login itsdangerous requests-2.9.1
You are using pip version 8.1.1, however version 9.0.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
strong@foreverstrong:~/software_toolbox/od-annotation$
2.2 重命名标注样本,采用前导0方式编号,共6位 (000001-0000xx),注意保持样本编号连续。/home/strong/software_toolbox/od-annotation/dataset
# 标签名称:标签描述
dog:狗
SAMPLE_FILE_TYPE = 'jpg' # 样本图片格式
SAMPLE_FILE_PATH = 'your samples directory path' # 样本图片存放目录
$ cd od-annotation
$ python3 app.py --start|stop|restart
访问 http://localhost:5000 开始标注。通过按住鼠标左键并拖拽鼠标在目标区域绘制矩形框进行标注,松开鼠标完成标注。可拖动矩形框以修正坐标,右击某矩形框可取消该标注。
点击左右方向按钮或通过键盘方向键切换标注样本。切换时自动提交标注结果,或手动点击保存按钮提交标注结果。
所有样本标注完成后,若需要转换成 VOC2007 格式,执行:
$ cd od-annotation
$ python3 app.py --convert2voc
查看 annotation/VOC2007 目录下相关文件夹是否生成对应文件