指数搜索,seo知识点,域名备案未及时注销处罚,如何做医美机构网站观察分析DeOldify Docker镜像构建#xff1a;从源码打包可移植镜像的完整Dockerfile 1. 项目概述 DeOldify是一个基于深度学习的图像上色工具#xff0c;能够将黑白照片自动转换为彩色照片。这个项目使用U-Net架构的深度学习模型#xff0c;通过PyTorch框架实现。对于开发者来说 \ from deoldify import device; \ from deoldify.device_id import DeviceId; \ device.set(deviceDeviceId.GPU0); \ from deoldify.visualize import get_image_colorizer; \ colorizer get_image_colorizer(artisticTrue); \ 这种方法利用了DeOldify库的自动模型下载功能确保我们获取到最新的预训练模型。4.2 模型缓存优化为了减少镜像大小我们可以优化模型缓存# 清理缓存和临时文件 RUN rm -rf /root/.cache/torch/hub/checkpoints/*.pth.tar \ find /usr/local/lib/python3.10/dist-packages -name *.pyc -delete \ find /usr/local/lib/python3.10/dist-packages -name __pycache__ -delete5. Web服务集成5.1 FastAPI应用开发我们将创建一个简单的Web服务来提供图像上色功能# 创建app.py文件 RUN cat /app/DeOldify/app.py EOF from fastapi import FastAPI, File, UploadFile, HTTPException from fastapi.responses import JSONResponse, FileResponse from fastapi.staticfiles import StaticFiles from fastapi.middleware.cors import CORSMiddleware import os import io import base64 from PIL import Image import torch from deoldify import device from deoldify.device_id import DeviceId from deoldify.visualize import get_image_colorizer # 初始化设备 device.set(deviceDeviceId.GPU0) # 获取颜色器 colorizer get_image_colorizer(artisticTrue) app FastAPI(titleDeOldify Image Colorization API) # 配置CORS app.add_middleware( CORSMiddleware, allow_origins[*], allow_methods[*], allow_headers[*], ) app.get(/) async def root(): return {message: DeOldify Image Colorization API} app.post(/colorize) async def colorize_image(file: UploadFile File(...)): try: # 读取上传的图片 image_data await file.read() image Image.open(io.BytesIO(image_data)) # 转换图片格式 if image.mode ! RGB: image image.convert(RGB) # 保存临时文件 temp_input /tmp/input.jpg image.save(temp_input, JPEG) # 使用DeOldify上色 result colorizer.get_transformed_image( temp_input, render_factor35, watermarkedFalse ) # 保存结果 temp_output /tmp/output.png result.save(temp_output, PNG) # 返回base64编码的结果 with open(temp_output, rb) as f: image_base64 base64.b64encode(f.read()).decode(utf-8) # 清理临时文件 os.remove(temp_input) os.remove(temp_output) return JSONResponse({ success: True, image_base64: image_base64, format: png }) except Exception as e: raise HTTPException(status_code500, detailstr(e)) app.get(/health) async def health_check(): return {status: healthy, model_loaded: True} EOF5.2 静态文件服务创建静态页面用于Web界面# 创建静态文件目录 RUN mkdir -p /app/DeOldify/static # 创建简单的Web界面 RUN cat /app/DeOldify/static/index.html EOF !DOCTYPE html html head titleDeOldify Image Colorization/title style body { font-family: Arial, sans-serif; max-width: 1200px; margin: 0 auto; padding: 20px; } .upload-area { border: 2px dashed #ccc; padding: 20px; text-align: center; margin: 20px 0; cursor: pointer; } .upload-area:hover { border-color: #007bff; } .result-container { display: flex; gap: 20px; margin-top: 20px; } .result-container img { max-width: 100%; height: auto; } /style /head body h1 DeOldify Image Colorization/h1 div classupload-area iduploadArea p 点击或拖拽图片到这里上传/p p支持 JPG、PNG、JPEG 格式/p /div input typefile idfileInput acceptimage/* styledisplay: none; button idcolorizeBtn stylepadding: 10px 20px; display: none;开始上色/button div classresult-container div h3原始图片/h3 img idoriginalImg stylemax-width: 500px; /div div h3上色结果/h3 img idresultImg stylemax-width: 500px; /div /div script // JavaScript代码实现上传和上色功能 const uploadArea document.getElementById(uploadArea); const fileInput document.getElementById(fileInput); const colorizeBtn document.getElementById(colorizeBtn); const originalImg document.getElementById(originalImg); const resultImg document.getElementById(resultImg); let currentFile null; uploadArea.addEventListener(click, () fileInput.click()); uploadArea.addEventListener(dragover, (e) { e.preventDefault(); uploadArea.style.borderColor #007bff; }); uploadArea.addEventListener(dragleave, () { uploadArea.style.borderColor #ccc; }); uploadArea.addEventListener(drop, (e) { e.preventDefault(); uploadArea.style.borderColor #ccc; if (e.dataTransfer.files.length 0) { handleFile(e.dataTransfer.files[0]); } }); fileInput.addEventListener(change, (e) { if (e.target.files.length 0) { handleFile(e.target.files[0]); } }); function handleFile(file) { if (!file.type.startsWith(image/)) { alert(请选择图片文件); return; } currentFile file; const url URL.createObjectURL(file); originalImg.src url; colorizeBtn.style.display block; } colorizeBtn.addEventListener(click, async () { if (!currentFile) return; colorizeBtn.disabled true; colorizeBtn.textContent 处理中...; const formData new FormData(); formData.append(file, currentFile); try { const response await fetch(/colorize, { method: POST, body: formData }); const result await response.json(); if (result.success) { resultImg.src data:image/png;base64, result.image_base64; } else { alert(上色失败: result.detail); } } catch (error) { alert(请求失败: error.message); } finally { colorizeBtn.disabled false; colorizeBtn.textContent 开始上色; } }); /script /body /html EOF6. 完整的Dockerfile现在让我们整合所有步骤创建完整的Dockerfile# DeOldify Docker镜像构建文件 FROM nvcr.io/nvidia/pytorch:23.10-py3 # 设置元数据 LABEL maintaineryour-emailexample.com LABEL version1.0.0 LABEL descriptionDeOldify Image Colorization Docker Image # 设置工作目录和环境变量 WORKDIR /app ENV TZAsia/Shanghai ENV PYTHONUNBUFFERED1 ENV PYTHONPATH/app/DeOldify # 设置时区 RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime echo $TZ /etc/timezone # 安装系统依赖 RUN apt-get update apt-get install -y \ libgl1-mesa-glx \ libglib2.0-0 \ libsm6 \ libxext6 \ libxrender-dev \ rm -rf /var/lib/apt/lists/* # 克隆DeOldify项目 RUN git clone https://github.com/jantic/DeOldify.git /app/DeOldify # 切换到项目目录 WORKDIR /app/DeOldify # 安装Python依赖 RUN pip install --no-cache-dir \ fastapi0.104.1 \ uvicorn0.24.0 \ pillow10.0.1 \ opencv-python4.8.1.78 \ requests2.31.0 \ numpy1.24.3 \ torchvision0.15.2 \ pip install --no-cache-dir -r requirements.txt # 下载预训练模型 RUN python -c \ import torch; \ from deoldify import device; \ from deoldify.device_id import DeviceId; \ device.set(deviceDeviceId.GPU0); \ from deoldify.visualize import get_image_colorizer; \ colorizer get_image_colorizer(artisticTrue); \ # 创建应用文件 COPY app.py /app/DeOldify/app.py RUN mkdir -p /app/DeOldify/static COPY static/index.html /app/DeOldify/static/index.html # 清理缓存 RUN rm -rf /root/.cache/torch/hub/checkpoints/*.pth.tar \ find /usr/local/lib/python3.10/dist-packages -name *.pyc -delete \ find /usr/local/lib/python3.10/dist-packages -name __pycache__ -delete # 暴露端口 EXPOSE 7860 # 启动命令 CMD [uvicorn, app:app, --host, 0.0.0.0, --port, 7860, --reload]7. 镜像构建与使用7.1 构建Docker镜像使用以下命令构建Docker镜像# 构建镜像 docker build -t deoldify-colorization:latest . # 添加标签 docker tag deoldify-colorization:latest your-registry/deoldify-colorization:1.0.07.2 运行Docker容器运行构建好的镜像# 使用GPU运行 docker run -d \ --gpus all \ -p 7860:7860 \ --name deoldify \ deoldify-colorization:latest # 或者使用CPU运行性能较差 docker run -d \ -p 7860:7860 \ --name deoldify \ deoldify-colorization:latest7.3 使用示例启动后可以通过以下方式使用服务# 健康检查 curl http://localhost:7860/health # 使用API上色图片 curl -X POST http://localhost:7860/colorize \ -F file/path/to/your/image.jpg # 访问Web界面 # 打开浏览器访问 http://localhost:7860/static/index.html8. 优化与最佳实践8.1 镜像大小优化通过多阶段构建减少镜像大小# 第一阶段构建阶段 FROM nvcr.io/nvidia/pytorch:23.10-py3 as builder WORKDIR /app RUN git clone https://github.com/jantic/DeOldify.git /app/DeOldify WORKDIR /app/DeOldify # 安装依赖 RUN pip install --no-cache-dir -r requirements.txt # 第二阶段运行阶段 FROM nvcr.io/nvidia/pytorch:23.10-py3 WORKDIR /app COPY --frombuilder /app/DeOldify /app/DeOldify COPY --frombuilder /root/.cache /root/.cache # 安装运行所需的最小依赖 RUN pip install --no-cache-dir \ fastapi0.104.1 \ uvicorn0.24.0 \ pillow10.0.1 WORKDIR /app/DeOldify8.2 安全最佳实践# 使用非root用户运行 RUN groupadd -r deoldify useradd -r -g deoldify deoldify USER deoldify # 设置更安全的文件权限 RUN chown -R deoldify:deoldify /app9. 总结通过本文的完整Dockerfile我们成功将DeOldify图像上色项目打包成了可移植的Docker镜像。这个镜像具有以下特点开箱即用包含了所有依赖和预训练模型无需额外配置性能优化基于NVIDIA官方镜像充分利用GPU加速易于使用提供了REST API和Web界面两种使用方式可移植性强可以在任何支持Docker的环境中运行生产就绪包含了健康检查、错误处理等生产环境需要的功能这种Docker化的部署方式大大降低了AI应用的使用门槛即使是不懂深度学习的开发者也能轻松使用图像上色功能。通过Docker的标准化封装我们还实现了环境的一致性避免了在我机器上能运行的问题。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。