File size: 5,742 Bytes
6bc8a3d |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 |
# Hugging Face Spaces Dockerfile for vd project (优化版本)
# 基于 Python 3.10 slim 镜像
FROM python:3.10-slim
# 设置元数据
LABEL maintainer="opq007"
LABEL description="VD - 视频处理服务"
LABEL version="3.0.0"
# 设置工作目录
WORKDIR /app
# 设置环境变量
# 注意:以下密钥相关的环境变量可以在 Hugging Face Spaces 设置中配置
# 这样可以避免在代码中硬编码敏感信息
#
# 认证密钥配置(生产环境必须在 HF Spaces 设置中修改):
# - API_TOKEN: API 认证令牌
# - SECRET_KEY: JWT 加密密钥
#
# 第三方服务密钥:
# - ZHIPU_API_KEY: 智谱 AI API 密钥
ENV PYTHONUNBUFFERED=1 \
DEBIAN_FRONTEND=noninteractive \
PYTHONDONTWRITEBYTECODE=1 \
PIP_NO_CACHE_DIR=1 \
PIP_DISABLE_PIP_VERSION_CHECK=1 \
PORT=7860 \
HOST=0.0.0.0 \
ENABLE_GRADIO_UI=true \
FW_MODEL=small \
FW_DEVICE=cpu \
FW_COMPUTE=int8 \
VOX_ONNX_DEVICE=cpu \
VOX_ONNX_OPTIMIZE=1 \
VOX_ONNX_DTYPE=fp32 \
LOG_LEVEL=INFO \
MODELSCOPE_CACHE=/app/models/modelscope_cache
# 安装系统依赖(最小化安装)
RUN apt-get update && apt-get install -y --no-install-recommends \
ffmpeg \
aria2 \
p7zip-full \
git \
curl \
ca-certificates \
&& rm -rf /var/lib/apt/lists/* \
&& apt-get clean
# 设置 GitHub 仓库地址(可通过环境变量覆盖)
ARG REPO_URL=https://github.com/opq007/vd.git
ARG REPO_BRANCH=main
# 升级 pip 并安装 Python 依赖(分批安装以优化构建缓存)
RUN pip install --no-cache-dir --upgrade pip setuptools wheel && \
pip install --no-cache-dir --default-timeout=100 \
"faster-whisper" \
"fastapi" \
"uvicorn[standard]" \
"python-multipart" \
"aiofiles" \
"PyJWT" \
"gradio" \
"requests" && \
pip install --no-cache-dir --default-timeout=100 \
"playwright>=1.40.0" \
"opencv-python-headless" \
"numpy" \
"torch" \
"Pillow>=10.0.0" \
"soundfile" \
"transformers>=4.30.0" \
"onnxruntime" \
"modelscope" && \
pip install --no-cache-dir --default-timeout=100 \
"sentencepiece" \
"protobuf" \
"accelerate" \
"einops" \
"omegaconf" \
"scipy" \
"librosa"
# 克隆项目代码(自动获取最新版本)
RUN echo "Cloning project from ${REPO_URL} (branch: ${REPO_BRANCH})..." && \
git clone --depth 1 --branch ${REPO_BRANCH} ${REPO_URL} /tmp/vd && \
cp -r /tmp/vd/* . && \
cp -r /tmp/vd/.* . 2>/dev/null || true && \
rm -rf /tmp/vd && \
echo "Project cloned successfully"
# 创建必要的目录
RUN mkdir -p models uploads output debug logs && \
chmod -R 755 models uploads output debug logs
# 下载模型文件(使用 aria2 加速,添加重试机制)
# 1. 下载 RMBG-1.4 模型(背景移除)
RUN echo "Downloading RMBG-1.4 model..." && \
aria2c -x 16 -s 16 --max-tries=5 --retry-wait=5 \
-d models/ -o rmbg-1.4.onnx \
https://modelscope.cn/models/AI-ModelScope/RMBG-1.4/resolve/master/onnx/model.onnx || \
(echo "RMBG-1.4 download failed, retrying..." && \
aria2c -x 16 -s 16 --max-tries=10 --retry-wait=10 \
-d models/ -o rmbg-1.4.onnx \
https://modelscope.cn/models/AI-ModelScope/RMBG-1.4/resolve/master/onnx/model.onnx)
# 2. 下载 faster-whisper-small 模型
RUN echo "Downloading faster-whisper-small model..." && \
modelscope download --model angelala00/faster-whisper-small --local_dir ./models/small --revision master || \
(echo "faster-whisper download failed, retrying..." && \
modelscope download --model angelala00/faster-whisper-small --local_dir ./models/small --revision master)
# 3. 下载 VoxCPM ONNX 模型
RUN echo "Downloading VoxCPM ONNX model..." && \
aria2c -x 16 -s 16 --max-tries=5 --retry-wait=5 \
-d models/ -o onnx_models_v15.zip \
https://modelscope.cn/models/opqtest007/vox/resolve/master/onnx_models_v15.zip.ckpt || \
(echo "VoxCPM download failed, retrying..." && \
aria2c -x 16 -s 16 --max-tries=10 --retry-wait=10 \
-d models/ -o onnx_models_v15.zip \
https://modelscope.cn/models/opqtest007/vox/resolve/master/onnx_models_v15.zip.ckpt) && \
cd models/ && \
7z x onnx_models_v15.zip -p -y && \
rm onnx_models_v15.zip && \
cd ..
# 4. 下载 VoxCPM 参考音频数据库
RUN echo "Downloading VoxCPM reference database..." && \
aria2c -x 16 -s 16 --max-tries=5 --retry-wait=5 \
-d models/ -o voxcpm_ref.db \
https://modelscope.cn/models/opqtest007/vox/resolve/master/voxcpm_ref.db || \
(echo "VoxCPM reference database download failed, retrying..." && \
aria2c -x 16 -s 16 --max-tries=10 --retry-wait=10 \
-d models/ -o voxcpm_ref.db \
https://modelscope.cn/models/opqtest007/vox/resolve/master/voxcpm_ref.db)
# 验证模型文件
RUN echo "Verifying model files..." && \
ls -lh models/ && \
ls -lh models/small/ 2>/dev/null || echo "small model not found" && \
ls -lh models/onnx_models_v15/ 2>/dev/null || echo "onnx_models_v15 not found" && \
ls -lh models/voxcpm_ref.db 2>/dev/null || echo "voxcpm_ref.db not found"
# 清理 pip 缓存和临时文件
RUN rm -rf /tmp/* /root/.cache/pip /root/.local/share/pip
# 暴露端口
EXPOSE 7860
# 创建非 root 用户(安全最佳实践)
RUN useradd -m -u 1000 appuser && \
chown -R appuser:appuser /app
# 切换到非 root 用户
USER appuser
# 启动命令(使用 uvicorn 的生产配置)
# 注意:Hugging Face Spaces 会自动检测服务是否启动
CMD ["uvicorn", "app:app", \
"--host", "0.0.0.0", \
"--port", "7860", \
"--workers", "1", \
"--log-level", "info", \
"--access-log", \
"--no-use-colors", \
"--timeout-keep-alive", "300"] |