# 零训练图片分类引擎:一体化容器 **Repository Path**: low-code-dev-lab/argus-detect ## Basic Information - **Project Name**: 零训练图片分类引擎:一体化容器 - **Description**: 零训练图片分类引擎:一体化容器 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-08-05 - **Last Updated**: 2026-08-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Argus Detect 基于 AnomalyDINO / DINOv2 的 CPU 离线少样本图片分类 WebAPI,采用“场景—类别—样本”模型,分类请求只比较指定场景内的类别。包含 FastAPI、SQLite 和 React + Ant Design 管理控制台。 ## 构建与启动 首次构建前准备固定版本的离线模型资产。 Windows: ```powershell .\scripts\prepare_vendor.ps1 docker build --tag argus-detect:latest . docker run --detach ` --name argus-detect ` --restart unless-stopped ` --publish 8000:8000 ` --env ARGUS_INITIAL_ADMIN_PASSWORD=change-me ` --mount type=volume,source=argus-data,target=/argus ` argus-detect:latest ``` macOS / Linux: ```bash chmod +x scripts/prepare_vendor.sh ./scripts/prepare_vendor.sh docker build --tag argus-detect:latest . docker run --detach \ --name argus-detect \ --restart unless-stopped \ --publish 8000:8000 \ --env ARGUS_INITIAL_ADMIN_PASSWORD=change-me \ --mount type=volume,source=argus-data,target=/argus \ argus-detect:latest ``` Dockerfile 使用 BuildKit 缓存 npm、apt 和 pip 下载内容,并把离线模型资产、前端依赖和前端构建产物放在独立层中。重复构建时,只有对应输入发生变化的层会重新执行;请使用 Docker Desktop 或启用 BuildKit 的 Docker Engine,不要使用 `--no-cache`。 按目标架构构建: ```powershell # Windows / x64,默认 argus-detect-x64:latest .\windows-build.ps1 .\windows-build.ps1 -Version 1.0.0 ``` ```bash # macOS / arm64,默认 argus-detect-arm64:latest ./mac-build.sh ./mac-build.sh 1.0.0 ``` `docker run` 会自动创建命名卷 `argus-data`。打开 `http://localhost:8000`,用户名固定为 `admin`,密码为启动命令中的 `ARGUS_INITIAL_ADMIN_PASSWORD`。 容器运行时无需网络。镜像包含 Python/Node 构建产物、DINOv2 源码和权重。所有运行数据统一保存在名为 `argus-data` 的 named volume 中,不使用宿主机 bind mount。 卷内目录按用途划分: - `/logs`:运行日志,主日志文件为 `/logs/argus.log`。 - `/bank/<场景>/<类别>`:类别参考图片及其 `.npy` 特征。 - `/sample/<场景>/<类别>`:分类完成后的输入图片;拒识图片归入 `rejected` 类别目录。 - `/tmp/raw`、`/tmp/processed`:分类过程中的原始与已预处理文件。 - `/database`:SQLite 数据库及 WAL 文件。 - `/models`:离线模型、权重和运行缓存。 以上容器路径都指向同一卷。模型资产只在 `argus-data` 首次创建时由镜像初始化;重建该卷会同时删除数据库、样本和模型,操作前必须完整备份。 ## API 示例 ```bash curl -X POST http://localhost:8000/api/auth/login \ -H 'Content-Type: application/json' \ -d '{"username":"admin","password":"admin"}' curl -X POST http://localhost:8000/api/classify \ -H 'Authorization: Bearer argus_xxx' \ -F 'scene_id=场景UUID' \ -F 'file=@query.jpg' ``` 完整规格见 [doc/spec.md](doc/spec.md)。 ## 本地开发 后端测试使用轻量 FakeBackend,不会加载模型: ```bash cd backend python -m venv .venv . .venv/bin/activate pip install -r requirements-dev.txt pytest ``` 前端: ```bash cd frontend npm install npm run dev ``` ## 容器测试 ```bash docker exec argus-detect python /opt/argus/tests/integration_test.py docker exec argus-detect python /opt/argus/tests/load_test.py ``` 压测默认在一个场景内准备 100 个类别、每类别 50 张样本,并在 2、5、20 并发下各执行 2,000 次分类。