github:: https://github.com/openvinotoolkit/cvat docs:: https://openvinotoolkit.github.io/cvat/docs/


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

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

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

自定义

主要是增加存储地址

运行

修改 docker-compose.yml

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

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

新增 docker-compose.override.yml

主要作用:

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

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

完成

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

连接 MinIO

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

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

接口

命令行

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

SDK

Python SDK 接口

from cvat_sdk import make_client
from cvat_sdk.core.proxies.tasks import ResourceType
 
with make_client(host="http://10.1.1.22:8080",
                 credentials=('username', 'password')) as client:
    # 任务信息
    task_spec = {
        "name": "Test",
        "labels": [
            {"name": "test"}
        ],
    }
    images = ['local local_img1.jpg', 'local_img2.jpg']
    # 创建任务
    task = client.tasks.create_from_data(
        spec=task_spec,                     # 任务信息
        resource_type=ResourceType.LOCAL,   # 资源类型
        resources=images,                   # 资源清单
    )
    # 获取所有任务信息
    for task in client.tasks.list():
        print(task)

问题

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

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

参考