可以根据官方教程来部署自动标注。
1. Cvat启动命令
不使用 docker compose up 来启动Cvat,确保你的Cvat停止,运行下面的命令
docker compose down
运行如下命令来启动Cvat
docker compose -f docker-compose.yml -f components/serverless/docker-compose.serverless.yml up -d
如果想要停止,请运行
docker compose -f docker-compose.yml -f components/serverless/docker-compose.serverless.yml down
2. 安装使用unctl命令行工具
找到Cvat目录下的components/serverless/docker-compose.serverless.yml,安装对应版本好的nuctl
# wget https://github.com/nuclio/nuclio/releases/download/1.11.24/nuctl-1.11.24-linux-amd64
wget https://github.com/nuclio/nuclio/releases/download/<version>/nuctl-<version>-linux-amd64
加上执行权限,创建软连接
sudo chmod +x nuctl-<version>-linux-amd64
sudo ln -sf $(pwd)/nuctl-<version>-linux-amd64 /usr/local/bin/nuctl
执行下面的命令后会自动创建一个"cvat"的Nuclio项目,并构建cvat内置的自动标注模型。(这一步报错的话,直接去看第三步的解决办法)
./serverless/deploy_cpu.sh serverless/openvino/dextr
./serverless/deploy_cpu.sh serverless/openvino/omz/public/yolo-v3-tf
访问8070端口可以看到nuclio的web界面,这就是创建成功的cvat工程
访问cvat,就可以使用自动标注了
3. 失败处理(成功的话不用看这一步)
如果创建一个"cvat"的Nuclio项目失败,可以手动创建(成功可跳过)。
nuctl create project cvat
如果执行这个也报错的话,看看error信息是什么,一般都是unable to find image…,只需要手动docker pull 一下镜像,再运行上面的命令就好。
再构建模型。
./serverless/deploy_cpu.sh serverless/openvino/dextr
./serverless/deploy_cpu.sh serverless/openvino/omz/public/yolo-v3-tf
4. 命令解释(感兴趣的可以看一下)
打开serverless/deploy_cpu.sh,这个脚本用于在本地环境中部署基于Nuclio的函数,用于CVAT项目的函数。
脚本解释
#!/bin/bash
# 用于在CPU上部署Nuclio函数的示例脚本
set -eu # 当命令返回非零状态时退出脚本,未初始化变量时退出脚本
# 获取当前脚本所在目录路径
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
# 如果传入了参数,则将其作为函数目录路径;否则使用脚本所在目录
FUNCTIONS_DIR=${1:-$SCRIPT_DIR}
# 启用Docker BuildKit以优化构建过程
export DOCKER_BUILDKIT=1
# 构建OpenVINO基础镜像
docker build -t cvat.openvino.base "$SCRIPT_DIR/openvino/base"
# 创建一个名为 'cvat' 的Nuclio项目,平台为本地
nuctl create project cvat --platform local
# 启用globstar,允许递归匹配目录中的所有文件
shopt -s globstar
# 遍历指定目录下的所有 function.yaml 配置文件
for func_config in "$FUNCTIONS_DIR"/**/function.yaml
do
# 获取当前函数的根目录
func_root="$(dirname "$func_config")"
# 获取相对于脚本目录的函数路径
func_rel_path="$(realpath --relative-to="$SCRIPT_DIR" "$(dirname "$func_root")")"
# 如果存在Dockerfile,构建基础镜像
if [ -f "$func_root/Dockerfile" ]; then
docker build -t "cvat.${func_rel_path//\//.}.base" "$func_root"
fi
echo "Deploying $func_rel_path function..."
# 部署函数
nuctl deploy --project-name cvat --path "$func_root" \
--file "$func_config" --platform local
done
# 列出当前本地平台上已部署的所有函数
nuctl get function --platform local