CVAT

2022-06-13

数据标注工具。

安装

先安装 [[Docker]][[pip]],然后从 [[Git]] 克隆后,通过 [[Docker Compose]] 方式运行:

Terminal window
1
# 克隆到本地
2
git clone https://github.com/opencv/cvat && cd cvat
3
# 配置 HOST 让其他服务器也能访问(如果存在多个 IP,建议用域名)
4
export CVAT_HOST=10.1.1.22
5
# 运行(关闭使用 docker-compose down)
6
docker-compose up -d
7
# 创建管理帐号(邮箱可省略)
8
docker exec -it cvat bash -ic 'python3 ~/manage.py createsuperuser'

然后访问 10.1.1.22:8080 端口即可。

自定义

主要是增加存储地址

运行

修改 docker-compose.yml

1
8081:8080 # 默认对外为 8080,修改为 8081 避免冲突

因为 override 方式只是合并两个配置,相同的配置 override 优先,但是端口无法替换,所以需要在源文件上修改。

新增 docker-compose.override.yml

主要作用:

  1. 配置共享地址,非必选 (中文目录会报错)
  2. 修改默认访问 IP,配置后无需另外设置 export CVAT_HOST=<ip>
1
version: "3.3"
2
3
services:
4
cvat:
5
environment:
6
CVAT_SHARE_URL: "Mounted from /data/images host directory"
7
labels:
8
- traefik.http.routers.cvat.rule=Host(`${CVAT_HOST:-10.1.1.67}`) &&
9
PathPrefix(`/api/`, `/git/`, `/opencv/`, `/static/`, `/admin`, `/documentation/`, `/django-rq`)
10
volumes:
11
- cvat_share:/home/django/share:ro
12
13
cvat_ui:
14
labels:
15
- traefik.http.routers.cvat-ui.rule=Host(`${CVAT_HOST:-10.1.1.67}`)
16
17
volumes:
18
cvat_share:
19
driver_opts:
20
type: none
21
device: /data/images
22
o: bind

使用:登录后 -> Tasks -> Create a new task(创建任务) -> Select files -> Connected file shar

完成

同样使用 docker-compose up -d 运行,override 会替换默认配置

连接 MinIO

连接 [[MinIO]] OSS 前需要配置 [[JSON]] 文件 manifest.jsonl

Terminal window
1
# 先安装依赖
2
pip3 install av opencv-python pillow pqdm natsort
3
# 生成 manifest.jsonl
4
python create.py --output-dir /data/images /data/images

接口

命令行

Terminal window
1
# 安装
2
pip3 install cvat-cli
3
4
# 使用本地图片上传
5
cvat-cli --server-host <ip>:<port> --auth <user>:<passwd> create "<task_name>" --labels '[{"name": "标签"}]' local local_img1.jpg local_img2.jpg

SDK

[[Python]] SDK 接口

1
from cvat_sdk import make_client
2
from cvat_sdk.core.proxies.tasks import ResourceType
3
4
with make_client(host="http://10.1.1.22:8080",
5
credentials=('username', 'password')) as client:
6
# 任务信息
7
task_spec = {
8
"name": "Test",
9
"labels": [
10
{"name": "test"}
11
],
12
}
13
images = ['local local_img1.jpg', 'local_img2.jpg']
14
# 创建任务
15
task = client.tasks.create_from_data(
16
spec=task_spec, # 任务信息
17
resource_type=ResourceType.LOCAL, # 资源类型
18
resources=images, # 资源清单
19
)
20
# 获取所有任务信息
21
for task in client.tasks.list():
22
print(task)

问题

  • 如果 CVAT_HOST 未配置,只能本机访问,外网访问时报错: 404 page not found.

如果想同时使用多个 IP/域名访问,可以使用 Nginx 代理跳转。

参考