🚀 使用 Docker Compose 部署 waifu classifier(AI 图片风格分类工具)
前言 实测正确识别不足30-50%,看运气,只要用来识别二次元。没法用
🚀 使用 Docker Compose 部署 Waifu Classifier
Waifu Classifier 是一个基于 CLIP 模型和 ONNX Runtime 的智能图像分类服务,它能够自动对二次元风格的图像进行识别和分类,并按照预设的类别将图片自动整理到不同的文件夹中。
下面将详细介绍如何使用 Docker Compose 部署 Waifu Classifier。
📦 项目简介
Waifu Classifier 的核心特点可以概括为下表:
| 特点类别 | 具体说明 |
|---|---|
| 核心功能 | 自动化图像分类与整理:利用 AI 模型自动识别图像风格,支持 anime (动漫)、realistic (写实)、cartoon (卡通)、pixel_art (像素风)、watercolor (水彩) 等常见风格的分类。文件监控与自动处理:监控指定输入目录,新放入的图像会被自动分类并移动到对应的输出目录。 |
| 技术与性能 | 先进的模型:使用 OpenAI 的 CLIP (ViT-B/32) 模型提取图像特征,能很好地理解多种视觉概念。推理部分使用 ONNX Runtime,利于优化和跨平台部署。CPU 优化:针对 CPU 环境进行配置,无需高性能 GPU。 |
| 部署与集成 | 容器化部署:提供 Docker 镜像,通过 Docker Compose 编排,简化依赖管理和部署过程。 |
使用场景 * 个人图片库管理:自动化整理大量收集的二次元图片或其他风格的图片。 * 创作素材分类:帮助画师或设计师对素材库进行初步的风格筛选和归类。 * 学习与实践:作为一个结合了现代深度学习模型 (CLIP) 和实用工程化 (Docker, ONNX) 的优秀实践案例。
📦 项目简介2
waifu-classifier 是一款基于 AI 模型的自动化图片风格分类工具,核心功能是监控指定目录的图片文件,通过 CLIP 特征提取模型与 ONNX 推理引擎,自动识别图片风格(如动漫、写实、卡通等),并将分类后的图片移动到对应输出目录,无需人工干预。
其设计定位为 “轻量自动化分类工具”,适合图片收藏者、动漫爱好者或内容管理者批量整理图片库,核心依赖 Python 环境、PyTorch 深度学习框架与 ONNX Runtime 推理优化,支持 CPU 运行(无需 GPU),降低部署门槛。
核心特点
- 自动监控与处理:通过
watchdog实时监控/input目录,新图片传入后自动触发分类流程,无需手动执行命令; - 多风格分类:默认支持 5 类风格(
anime动漫、realistic写实、cartoon卡通、pixel_art像素画、watercolor水彩画),支持自定义扩展标签; - CPU 优化运行:采用 CPU 版 PyTorch 与 ONNX Runtime,通过
OMP_NUM_THREADS控制线程数,适配无 GPU 的服务器 / PC; - 多格式支持:兼容 JPG、JPEG、PNG、WebP 常见图片格式,分类失败自动归入
unknown目录; - 日志与数据持久化:分类日志实时写入
/logs目录,输入 / 输出图片通过目录挂载本地存储,容器删除后数据不丢失; - 轻量化部署:基于 Docker 容器化,依赖统一封装,避免本地环境冲突,一键启动。
📋 部署前准备
-
环境要求
- 确保你的服务器已安装
Docker和Docker Compose。 - Waifu Classifier 对 CPU 有一定要求,建议不少于 2 核。内存建议不小于 4GB。
- 确保你的服务器已安装
-
资源检查
- 磁盘空间:确保有足够空间存储镜像、模型文件以及待处理的图片。模型文件可能需要几百MB至1GB左右的空间。
- 权限:确保当前用户对项目目录有读写权限,以便创建和挂载 Docker 卷。
⚙️ 配置 Docker Compose
1.创建项目目录
创建一个目录(如 waifu-classifier)用于存放所有相关文件,并进入该目录。
mkdir -p /path/to/your/waifu-classifier && cd /path/to/your/waifu-classifier
2.准备模型文件
* 根据 classify_mover.py 代码,项目依赖于一个 ONNX 模型文件 (/app/models/waifu-diffusion.onnx)。
* 你需要自行获取或训练此模型文件,并将其放置在项目目录中。例如,在项目根目录下创建一个 models 文件夹,并将模型文件放入:
mkdir models
# 然后将你的 `waifu-diffusion.onnx` 模型文件复制到 `./models/` 目录下
- 确保模型文件的路径与 Docker 容器内的挂载路径或代码中指定的路径一致。如果模型文件需要从特定URL下载,可以考虑在
Dockerfile中添加wget或curl命令来下载。
3.创建 docker-compose.yml 文件
将用户提供的配置内容保存到新创建的 docker-compose.yml 文件中。
#version: '3.8' # 建议使用较新的版本
services:
waifu-classifier:
container_name: waifu-classifier # 容器名,便于管理
#image: waifu-classifier:2025
build: . # 使用当前目录下的 Dockerfile 构建镜像
# 如果你有现成的镜像,例如: image: your-username/waifu-classifier:2025
volumes:
# 本地目录 ↔ 容器目录:输入(待分类图)、输出(分类结果)、日志(运行记录)
- ./input:/input # 挂载输入目录,放入待分类的图片
- ./output:/output # 挂载输出目录,分类后的图片将存放在这里
- ./logs:/app/logs # 挂载日志目录,方便查看运行日志
# 补充:模型目录挂载(原配置遗漏,必须添加!否则容器找不到模型)
- ./models:/app/models # 挂载模型目录,确保容器能访问到模型文件
environment:
# CPU 线程优化:控制模型推理的线程数(建议设为 CPU 核心数的 1/2,如 4 核设为 2)
- OMP_NUM_THREADS=6
# 线程等待策略:降低 CPU idle 占用,适合后台运行
- OMP_WAIT_POLICY=PASSIVE
# 本地构建镜像(非拉取远程镜像,需先执行 build 命令)
restart: always # 容器异常自动重启(确保服务持续运行)
# 可选:添加分类阈值参数(如 --threshold 0.4,低于阈值归入 unknown)
#command: --threshold 0.4
**关键配置说明**:
* **镜像构建**:配置中使用了 `build: .`,这意味着 Docker Compose 会使用当前目录下的 `Dockerfile` 来构建镜像。如果你已经将镜像推送到镜像仓库,也可以使用 `image:` 来指定。
* **数据持久化**:`volumes` 部分将容器内的路径挂载到宿主机的对应目录。这确保了输入图片、输出结果、运行日志以及重要的模型文件在容器重启后不会丢失。
* **环境变量**:`OMP_NUM_THREADS` 用于控制 PyTorch 和 ONNX Runtime 等库使用的线程数,可以根据你的 CPU 核心数进行调整,以避免过度占用资源。`OMP_WAIT_POLICY` 设置为 `PASSIVE` 有助于在某些情况下减少CPU空闲消耗。
* **模型挂载**:**务必确保 `./models` 目录被正确挂载,并且其中包含所需的 `waifu-diffusion.onnx` 模型文件**,否则服务启动时会因找不到模型而失败。
4.创建 Dockerfile (已提供)
用户已提供了完整的 Dockerfile,它基于 python:3.10-slim-bullseye 镜像,并安装了包括 PyTorch CPU 版本、ONNX Runtime、Transformers、OpenCV 等必要的系统依赖和 Python 包。这个 Dockerfile 已经满足了项目运行的基础环境需求。
5.创建 requirements.txt (已提供)
用户已提供了 requirements.txt 文件,列出了项目运行所需的 Python 包及其版本。Dockerfile 中已经通过 pip install 安装了这些依赖。
6.创建 classify_mover.py (已提供)
这是项目的核心 Python 脚本,包含了图像分类、文件监控和移动的逻辑。它使用 Watchdog 库监控 /input 目录,使用 CLIP 模型提取图像特征,并使用 ONNX Runtime 进行推理分类。
清单如下:
| 文件名称 | 作用说明 | 注意事项 |
|---|---|---|
docker-compose.yml |
容器服务配置(挂载目录、环境变量、重启策略) | 无需修改,仅需确认挂载路径与本地一致。 |
Dockerfile |
构建镜像脚本(安装系统依赖、Python 库、配置环境) | 已指定 CPU 版 PyTorch,无需修改(避免误装 GPU 版导致冲突)。 |
requirements.txt |
Python 依赖库清单(补充指定版本,确保兼容性) | 与 Dockerfile 依赖互补,无需修改。 |
classify_mover.py |
核心业务代码(模型加载、目录监控、分类逻辑) | 需确认 STYLE_TAGS 标签是否符合需求,模型路径是否正确。 |
waifu-diffusion.onnx |
ONNX 格式推理模型(核心分类模型) | 需手动准备!需将模型放入 ./models 目录(后续步骤创建),无模型无法运行。 |
Dockerfile(无需修改,核心逻辑说明)
# 基础镜像:Python 3.10 轻量版(减少镜像体积) + 手动安装PyTorch
FROM python:3.10-slim-bullseye
# 安装系统依赖:OpenCV 需 libgl,FFmpeg 处理图片编码,git/wget 下载依赖
RUN apt-get update && apt-get install -y \
libgl1 \
libglib2.0-0 \
ffmpeg \
git \
wget \
&& rm -rf /var/lib/apt/lists/*
# 安装 Python 依赖:CPU 版 PyTorch + 推理引擎 + 模型库
RUN pip install --no-cache-dir \
# CPU 版 PyTorch(避免 GPU 依赖)
torch==2.3.0+cpu torchvision==0.18.0+cpu torchaudio==2.3.0 \
-f https://download.pytorch.org/whl/cpu/torch_stable.html \
# Intel CPU 优化(非 Intel 也可安装,不影响)
intel-extension-for-pytorch==2.3.0 \
# ONNX 推理引擎(核心,加速模型运行)
onnxruntime==1.18.0 \
# CLIP 模型库(特征提取)
transformers==4.45.0 \
clip@git+https://github.com/openai/CLIP.git \
# 目录监控工具
watchdog==3.0.0 \
# 无 GUI 版 OpenCV(处理图片)
opencv-python-headless==4.9.0.80 \
# 进度条工具
tqdm==4.66.2
# 后续内容与之前相同...
# 复制 requirements.txt 并安装补充依赖(确保版本一致)
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# 复制核心代码到容器内(/app 目录)
COPY classify_mover.py /app/classify_mover.py
# 设置工作目录
WORKDIR /app
# 启动命令:运行分类脚本
CMD ["python", "classify_mover.py"]
(3)classify_mover.py(关键参数确认)
打开脚本确认 2 处核心配置,确保与本地挂载一致:
- 模型路径:
"/app/models/waifu-diffusion.onnx"(需与docker-compose.yml中模型挂载路径一致,无需修改); - 分类标签:
STYLE_TAGS = ["anime", "realistic", "cartoon", "pixel_art", "watercolor"](可根据需求添加标签,如["anime", "manga", "3d"],需同步确保输出目录创建逻辑正常)。
import os
import time
import shutil
import logging
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
from PIL import Image
import numpy as np
import onnxruntime as ort
from transformers import CLIPProcessor, CLIPModel
# 配置日志
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s',
handlers=[
logging.FileHandler("/app/logs/classifier.log"),
logging.StreamHandler()
]
)
# 初始化模型(带错误处理)
try:
# 加载CLIP模型
clip_model = CLIPModel.from_pretrained("openai/clip-vit-base-patch32")
processor = CLIPProcessor.from_pretrained("openai/clip-vit-base-patch32")
# ONNX会话配置(CPU优化)
ort_options = ort.SessionOptions()
ort_options.intra_op_num_threads = os.cpu_count() or 4
ort_options.execution_mode = ort.ExecutionMode.ORT_SEQUENTIAL
ort_options.graph_optimization_level = ort.GraphOptimizationLevel.ORT_ENABLE_ALL
ort_session = ort.InferenceSession(
"/app/models/waifu-diffusion.onnx",
sess_options=ort_options,
providers=['CPUExecutionProvider']
)
logging.info("✅ 模型加载成功!")
except Exception as e:
logging.error(f"❌ 模型加载失败: {str(e)}")
raise SystemExit(1)
# 标签定义(可自定义扩展)
STYLE_TAGS = ["anime", "realistic", "cartoon", "pixel_art", "watercolor"]
class ImageHandler(FileSystemEventHandler):
def on_created(self, event):
if not event.is_directory:
self.process_file(event.src_path)
def process_file(self, file_path):
try:
if file_path.lower().endswith(('.jpg', '.jpeg', '.png', '.webp')):
logging.info(f"处理新图片: {file_path}")
# 等待文件完全写入
time.sleep(0.5)
# 分类处理
style = self.classify_image(file_path)
target_dir = os.path.join('/output', style)
os.makedirs(target_dir, exist_ok=True)
# 移动文件(保留原始文件名)
new_path = os.path.join(target_dir, os.path.basename(file_path))
shutil.move(file_path, new_path)
logging.info(f"移动文件到: {new_path}")
except Exception as e:
logging.error(f"处理文件 {file_path} 失败: {str(e)}")
def classify_image(self, image_path):
try:
image = Image.open(image_path)
inputs = processor(images=image, return_tensors="pt")
image_features = clip_model.get_image_features(**inputs)
# ONNX推理
ort_inputs = {ort_session.get_inputs()[0].name:
image_features.detach().numpy().astype(np.float32)}
ort_outputs = ort_session.run(None, ort_inputs)
# 获取预测结果
pred_idx = np.argmax(ort_outputs[0])
return STYLE_TAGS[pred_idx]
except Exception as e:
logging.error(f"分类失败: {str(e)}")
return "unknown"
if __name__ == "__main__":
# 确保输出目录存在
for style in STYLE_TAGS:
os.makedirs(os.path.join('/output', style), exist_ok=True)
# 启动文件监控
event_handler = ImageHandler()
observer = Observer()
observer.schedule(event_handler, path='/input', recursive=False)
observer.start()
logging.info("✅ 开始监控 /input 目录...")
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
observer.join()
(3.1)requirements.txt
onnxruntime==1.17.0 # 支持最新 Opset
Pillow==10.1.0
numpy==1.26.0
opencv-python-headless==4.8.1.78
tqdm==4.66.1
2. 配置总结
- 必须添加:
docker-compose.yml中volumes补充- ./models:/app/models(否则模型找不到); - 建议调整:
OMP_NUM_THREADS设为 CPU 核心数的 1/2(如 4 核设为 2,8 核设为 4),避免 CPU 占用过高; - 可选配置:如需分类阈值控制,在
command后添加--threshold 0.4(数值越小,分类越宽松,默认无阈值)。
🚀 启动与验证
1.构建并启动服务
在包含所有配置文件的目录下,执行以下命令来构建镜像并后台启动服务:
bash
docker-compose up --build -d
--build 参数确保每次启动时都重新构建镜像(如果 Dockerfile 或相关文件有变动)。
2.检查服务状态
使用以下命令查看容器是否正常运行:
bash
docker-compose ps
如果 waifu-classifier 容器的 State 栏显示为 Up,则表明容器已成功启动。
3.查看日志 日志是排查问题的重要依据。可以通过以下命令查看服务的实时日志或历史日志:
docker-compose logs -f waifu-classifier # 实时跟踪日志
# 或者
docker-compose logs waifu-classifier # 查看最近日志
成功启动后,日志中应该会出现 "✅ 模型加载成功!" 和 "✅ 开始监控 /input 目录..." 的信息。
4.验证服务
* 在宿主机上的 ./input 目录中放入一张 .jpg 或 .png 格式的图片。
* 观察日志输出,应该能看到类似 "处理新图片: /input/your_image.jpg" 和 "移动文件到: /output/anime/your_image.jpg" 的信息。
* 检查 ./output 目录,应该会出现以风格标签(如 anime, realistic 等)命名的子文件夹,并且图片已经被移动到对应的文件夹中。
🔧 基础配置与使用
1.使用服务
* 服务启动后,其核心功能是完全自动化的。
* 你只需要将需要分类的图片放入宿主机上的 ./input 目录。
* 稍等片刻(取决于图片数量和大小),处理完成的图片就会出现在 ./output 下对应的风格子目录中。
2.自定义分类标签
* 分类标签定义在 classify_mover.py 文件的 STYLE_TAGS 列表中。
* 如果需要修改或扩展分类的类别(例如添加 "cyberpunk", "gothic"),你需要:
1. 修改 classify_mover.py 中的 STYLE_TAGS 列表。
2. 确保你的 ONNX 模型支持对这些新标签进行分类。这通常意味着模型在训练时就需要见过这些类别的数据。
3. 重新构建 Docker 镜像 (docker-compose build --no-cache) 并重启服务。
3.调整分类阈值 (可选)
* 目前的代码看起来是直接取概率最高的类别。如果需要设置一个置信度阈值(例如低于 0.4 的归为 "unknown"),可以在 classify_image 方法中添加相关逻辑。
* 代码中注释掉的 command: --threshold 0.4 提示了可以通过命令行参数传递配置,你可以在 classify_mover.py 中解析这个参数并使用。
🔧 基础配置与使用2
waifu-classifier 启动后无需人工干预,核心使用场景为 “批量传入图片→自动分类→获取结果”,可根据需求调整配置:
1. 目录用途说明(核心!)
| 本地目录 | 容器目录 | 用途 |
|---|---|---|
./input |
/input |
存放待分类图片(支持批量放入,支持子目录?不,脚本 recursive=False,仅监控一级目录) |
./output |
/output |
分类结果输出目录(自动创建与 STYLE_TAGS 对应的子目录,分类失败放入 unknown) |
./logs |
/app/logs |
运行日志(包含模型加载、文件处理、错误信息,便于排查问题) |
./models |
/app/models |
存放 ONNX 模型(仅需 waifu-diffusion.onnx,不可删除) |
2. 自定义分类标签
若需扩展分类类型(如添加 “漫画 manga”“3D 建模 3d”),修改 classify_mover.py 中的 STYLE_TAGS:
# 原标签
STYLE_TAGS = ["anime", "realistic", "cartoon", "pixel_art", "watercolor"]
# 修改后(添加 manga 和 3d)
STYLE_TAGS = ["anime", "manga", "realistic", "cartoon", "3d", "pixel_art", "watercolor"]
修改后需重启容器生效:
docker compose down && docker compose up -d
3. 调整 CPU 线程数
若服务器 CPU 占用过高或分类速度慢,修改 docker-compose.yml 中的 OMP_NUM_THREADS:
environment:
# 4 核 CPU 建议设为 2,8 核设为 4,避免线程切换开销
- OMP_NUM_THREADS=2
- OMP_WAIT_POLICY=PASSIVE
重启容器生效:
docker compose restart
4. 启用分类阈值(可选)
若需过滤低置信度结果(如低于 0.4 置信度归入 unknown),在 docker-compose.yml 中添加 command:
services:
waifu-classifier:
# 其他配置不变...
command: python classify_mover.py --threshold 0.4
需同步在 classify_mover.py 中添加阈值参数解析(原脚本无该逻辑,需补充):
# 在 if __name__ == "__main__": 前添加参数解析
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--threshold', type=float, default=0.0, help='分类置信度阈值')
args = parser.parse_args()
# 在 classify_image 函数中添加阈值判断(示例)
def classify_image(self, image_path):
try:
# 原分类逻辑不变...
pred_idx = np.argmax(ort_outputs[0])
pred_score = ort_outputs[0][0][pred_idx] # 假设输出包含置信度(需根据模型输出调整)
if pred_score < args.threshold:
return "unknown"
return STYLE_TAGS[pred_idx]
except Exception as e:
logging.error(f"分类失败: {str(e)}")
return "unknown"
补充后重启容器,低置信度图片会归入 ./output/unknown。
🔄 维护与管理
1.更新服务 当代码或模型有更新时,需要重新构建和启动服务:
# 进入项目目录
cd /path/to/your/waifu-classifier
# 重新构建镜像(使用 --no-cache 确保完全重新构建)
docker-compose build --no-cache
# 重启服务
docker-compose up -d
2.数据备份
* 重要的数据主要是你自定义的模型文件(如果来之不易)以及分类后的结果(./output 目录)。
* 定期备份 ./models 目录(如果你的模型是自定义的)和 ./output 目录。
3.服务卸载 如需停止并移除容器,在项目目录下执行:
docker-compose down
如果希望彻底删除所有数据(包括镜像、输入输出文件和日志),在上述命令后可以手动删除整个项目目录,或者分别删除 input, output, logs 目录。
🐛 常见问题排查
| 问题现象 | 可能原因与解决方案 |
|---|---|
| 容器启动失败,日志显示 "模型加载失败" | 1. 最常见原因:模型文件未正确挂载或不存在。检查宿主机 ./models 目录下是否有 waifu-diffusion.onnx 文件,并确保 docker-compose.yml 中的卷挂载配置正确。2. 模型文件路径错误。检查 classify_mover.py 中 ort.InferenceSession 加载模型的路径是否与挂载路径一致(应为 /app/models/waifu-diffusion.onnx)。3. 模型文件损坏或不兼容。确保模型文件是有效的 ONNX 模型,并且与代码中使用的 Opset 版本兼容。 |
| 容器启动后立即退出 | 1. 检查 docker-compose logs waifu-classifier 查看具体错误信息。2. 可能是 Dockerfile 中的依赖安装失败,或者 classify_mover.py 脚本存在语法错误导致无法启动。确保所有文件没有拼写错误。 |
图片放入 /input 后无反应 |
1. 检查日志确认文件监控服务是否正常启动 ("开始监控 /input 目录...")。 2. 确认图片文件权限允许容器内进程读取。 3. 检查图片格式是否支持(代码中支持 .jpg, .jpeg, .png, .webp)。4. 可能是 Watchdog 在某些文件系统上存在延迟,稍等片刻或尝试放入另一张图片。 |
| 分类结果不准确 | 1. 模型的训练数据和能力有限,对于某些风格模糊或复杂的图片可能分类错误。 2. 考虑调整 STYLE_TAGS 列表,使其更符合你的图片库特征。3. 如果条件允许,可以尝试使用更大版本的 CLIP 模型(如 clip-vit-base-patch32 或 clip-vit-large-patch14),但这会增加资源消耗,可能需要调整 Dockerfile 和代码。 |
希望这篇教程能帮助你顺利搭建并使用 Waifu Classifier,享受AI带来的自动化图片整理体验!如果在部署和使用过程中遇到更多问题,Docker 和 ONNX Runtime 的官方文档是寻求深入帮助的好去处。
🐛 常见问题排查2
1. 模型加载失败(日志显示 “❌ 模型加载失败”)
-
原因 1:模型文件不存在或路径错误。解决:确认
./models目录下有waifu-diffusion.onnx,docker-compose.yml已添加- ./models:/app/models挂载,重启容器。 -
原因 2:模型文件损坏或版本不兼容。解决:重新从合规渠道下载模型,替换后重启容器,查看日志是否仍报错。
-
原因 3:ONNX Runtime 版本不兼容。解决:修改
Dockerfile中onnxruntime版本(如改为onnxruntime==1.17.0),重新构建镜像:docker compose build && docker compose up -d。
2. 图片放入 input 后无反应(未分类)
-
原因 1:脚本监控
recursive=False,放入子目录的图片不被识别。解决:将图片直接放入./input一级目录,不创建子目录。 -
原因 2:文件写入未完成就被监控(如大图片上传中被触发处理)。解决:修改
classify_mover.py中time.sleep(0.5)为time.sleep(2)(延长等待时间),重启容器。 -
原因 3:图片格式不支持(如 GIF、SVG)。解决:仅支持 JPG、JPEG、PNG、WebP,转换格式后重新放入。
3. CPU 占用过高(超过 80%)
-
原因:
OMP_NUM_THREADS设得过高,线程切换开销大。解决:修改
docker-compose.yml中OMP_NUM_THREADS为 CPU 核心数的 1/2(如 4 核设为 2),重启容器。
4. 分类结果全归入 unknown
-
原因 1:模型输出解析逻辑错误(如模型输出格式与脚本预期不符)。解决:在
classify_mover.py的classify_image函数中添加日志,打印ort_outputs结构:python def classify_image(self, image_path): try: # 原代码... ort_outputs = ort_session.run(None, ort_inputs) logging.info(f"模型输出: {ort_outputs}") # 添加此行 pred_idx = np.argmax(ort_outputs[0]) # 原代码... except Exception as e: logging.error(f"分类失败: {str(e)}") return "unknown"查看日志确认模型输出结构,调整
pred_idx计算逻辑(如ort_outputs[1]而非ort_outputs[0])。 -
原因 2:置信度阈值过高(启用阈值后)。解决:降低
--threshold数值(如从 0.4 改为 0.2),重启容器。
5. 容器启动后立即退出(State 为 Exited)
-
原因:脚本执行报错(如语法错误、依赖缺失)。
解决:执行
docker compose logs waifu-classifier查看具体错误,常见为: - 语法错误:classify_mover.py缩进错误或拼写错误,修正后重启; - 依赖缺失:requirements.txt中库未安装,重新构建镜像:docker compose build。
通过以上步骤,新手可成功部署 waifu-classifier 并实现图片自动化分类。该工具适合批量整理图片库,后续可结合定时任务(如 cron)定期清理 input 目录,或扩展 Web 界面实现可视化管理,具体可参考 Python Web 框架(如 FastAPI)集成教程。
要不要我帮你整理一份 waifu-classifier 模型获取与版本适配指南?包含合规模型下载渠道、不同版本模型的参数差异,以及常见模型错误的解决方案,帮你避免因模型问题导致部署失败。