# ============================================ # HF Spaces Dockerfile — 场景一致性检测 (CPU) # ============================================ FROM python:3.10-slim # 系统依赖(OpenCV 运行时 + 文件处理) RUN apt-get update && apt-get install -y --no-install-recommends \ libgl1 \ libglib2.0-0 \ libsm6 \ libxext6 \ libxrender1 \ && rm -rf /var/lib/apt/lists/* WORKDIR /app # 1. 先安装 PyTorch CPU 版(与 paddlepaddle 分开安装避免冲突) RUN pip install --no-cache-dir torch torchvision --index-url https://download.pytorch.org/whl/cpu # 2. 安装其余 Python 依赖 COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt # 3. 预下载 DINOv2 reg4 模型权重(约 85MB,构建时下载到镜像中) RUN python -c "import timm; timm.create_model('vit_small_patch14_reg4_dinov2', pretrained=True)" || echo "DINOv2 pre-download warning" # 4. 预下载 BGE-small-zh 模型权重(约 100MB) RUN python -c "from transformers import AutoTokenizer, BertModel; AutoTokenizer.from_pretrained('BAAI/bge-small-zh-v1.5'); BertModel.from_pretrained('BAAI/bge-small-zh-v1.5')" || echo "BGE pre-download warning" # 5. 预下载 PaddleOCR 模型(约 50MB,通过运行一次 OCR 触发下载) RUN python -c "from paddleocr import PaddleOCR; from PIL import Image; ocr=PaddleOCR(use_angle_cls=True, lang='ch'); img=Image.new('RGB',(100,100),'white'); img.save('/tmp/d.png'); ocr.ocr('/tmp/d.png', cls=True)" || echo "PaddleOCR pre-download warning" # 6. 复制应用代码 COPY . . # 7. 创建运行时目录 RUN mkdir -p /app/History_imgs /app/qdrant_data /app/Logs # HF Spaces Docker 默认端口 7860 EXPOSE 7860 ENV PORT=7860 # 启动服务 CMD ["python", "-m", "uvicorn", "app:app", "--host", "0.0.0.0", "--port", "7860"]