DeOldify部署教程:Ubuntu 22.04环境下DeOldify服务完整安装步骤
1. 项目简介
DeOldify是一个基于深度学习技术的黑白图像上色工具,它使用U-Net架构的神经网络模型,能够自动将黑白照片转换为自然色彩的彩色图像。这个服务特别适合处理老照片修复、历史图片上色等场景。
1.1 技术特点
- 深度学习驱动:采用先进的U-Net深度学习模型
- 简单易用:提供友好的Web界面和API接口
- 高性能处理:支持快速图像上色处理
- 多格式支持:兼容JPG、PNG、BMP等多种图片格式
- 自动管理:内置服务监控和自动重启功能
2. 环境准备
在开始安装之前,请确保你的Ubuntu 22.04系统满足以下要求:
2.1 系统要求
- 操作系统:Ubuntu 22.04 LTS
- 内存:至少8GB RAM(推荐16GB)
- 存储空间:至少10GB可用空间
- Python版本:Python 3.8或更高版本
- 网络连接:稳定的互联网连接以下载依赖包
2.2 安装基础依赖
首先更新系统并安装必要的依赖包:
# 更新系统包列表 sudo apt update sudo apt upgrade -y # 安装基础开发工具 sudo apt install -y python3-pip python3-venv git curl wget # 安装图像处理依赖 sudo apt install -y libgl1-mesa-glx libglib2.0-0 # 创建项目目录 mkdir -p ~/ai-projects/deoldify cd ~/ai-projects/deoldify3. 安装DeOldify服务
3.1 创建Python虚拟环境
# 创建虚拟环境 python3 -m venv deoldify-env # 激活虚拟环境 source deoldify-env/bin/activate # 升级pip pip install --upgrade pip3.2 安装Python依赖
创建requirements.txt文件:
# 创建依赖文件 cat > requirements.txt << 'EOF' torch>=1.9.0 torchvision>=0.10.0 numpy>=1.21.0 pillow>=8.3.0 flask>=2.0.0 gunicorn>=20.1.0 requests>=2.25.0 opencv-python>=4.5.0 imageio>=2.9.0 scikit-image>=0.18.0 EOF # 安装依赖 pip install -r requirements.txt3.3 下载DeOldify模型
# 创建模型目录 mkdir -p models/deoldify # 下载预训练模型(这里以示例方式展示,实际需要获取正确的模型文件) wget -O models/deoldify/ColorizeArtistic_gen.pth https://example.com/path/to/model # 注意:实际使用时需要替换为真实的模型下载链接 # 或者使用git克隆DeOldify项目 git clone https://github.com/jantic/DeOldify.git cd DeOldify4. 配置DeOldify服务
4.1 创建应用代码
创建主要的Flask应用文件:
# app.py from flask import Flask, request, jsonify, render_template import torch from PIL import Image import io import base64 import numpy as np import cv2 import os app = Flask(__name__) class DeOldifyProcessor: def __init__(self): self.model = None self.device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') self.load_model() def load_model(self): """加载DeOldify模型""" try: # 这里应该是实际的模型加载代码 # 示例代码,实际需要根据DeOldify的API进行调整 print("模型加载中...") # 模拟模型加载 print("模型加载完成") except Exception as e: print(f"模型加载失败: {e}") def colorize_image(self, image_path): """对图像进行上色处理""" try: # 这里是实际的上色处理代码 # 返回处理后的图像 return Image.open(image_path) except Exception as e: print(f"图像处理失败: {e}") return None # 初始化处理器 processor = DeOldifyProcessor() @app.route('/') def index(): return render_template('index.html') @app.route('/health') def health_check(): return jsonify({ 'status': 'healthy', 'model_loaded': processor.model is not None, 'service': 'deoldify-colorization' }) @app.route('/colorize', methods=['POST']) def colorize(): if 'image' not in request.files: return jsonify({'error': '没有上传图片'}), 400 file = request.files['image'] if file.filename == '': return jsonify({'error': '没有选择文件'}), 400 # 保存上传的图片 input_path = '/tmp/input_image.jpg' file.save(input_path) # 处理图片 result_image = processor.colorize_image(input_path) if result_image: # 转换为base64 buffered = io.BytesIO() result_image.save(buffered, format="JPEG") img_str = base64.b64encode(buffered.getvalue()).decode() return jsonify({ 'success': True, 'image_data': img_str, 'format': 'jpeg' }) else: return jsonify({'error': '图像处理失败'}), 500 if __name__ == '__main__': app.run(host='0.0.0.0', port=7860, debug=True)4.2 创建Web界面模板
创建templates目录和index.html文件:
<!-- templates/index.html --> <!DOCTYPE html> <html> <head> <title>DeOldify 图像上色服务</title> <style> body { font-family: Arial, sans-serif; max-width: 1200px; margin: 0 auto; padding: 20px; } .upload-area { border: 2px dashed #ccc; padding: 40px; text-align: center; margin: 20px 0; } .result-container { display: flex; gap: 20px; margin-top: 20px; } .image-box { flex: 1; border: 1px solid #ddd; padding: 10px; } img { max-width: 100%; height: auto; } button { background: #007bff; color: white; border: none; padding: 10px 20px; cursor: pointer; } </style> </head> <body> <h1>🎨 DeOldify 图像上色服务</h1> <div class="upload-area" id="uploadArea"> <p>点击或拖拽图片到这里上传</p> <p>支持 JPG、PNG、JPEG 格式,最大 50MB</p> <input type="file" id="fileInput" accept="image/*" style="display: none;"> <button onclick="document.getElementById('fileInput').click()">选择图片</button> </div> <div> <button id="processBtn" disabled>开始上色</button> </div> <div class="result-container"> <div class="image-box"> <h3>原始图片</h3> <img id="originalImg" src="" alt="原始图片"> </div> <div class="image-box"> <h3>上色结果</h3> <img id="resultImg" src="" alt="上色结果"> </div> </div> <script> // 这里添加JavaScript代码来处理文件上传和显示 </script> </body> </html>5. 配置进程管理
5.1 安装和配置Supervisor
# 安装Supervisor sudo apt install -y supervisor # 创建Supervisor配置文件 sudo tee /etc/supervisor/conf.d/deoldify.conf > /dev/null << 'EOF' [program:deoldify] directory=/home/ubuntu/ai-projects/deoldify command=/home/ubuntu/ai-projects/deoldify/deoldify-env/bin/gunicorn -w 4 -b 0.0.0.0:7860 app:app user=ubuntu autostart=true autorestart=true stopasgroup=true killasgroup=true stderr_logfile=/var/log/deoldify/error.log stdout_logfile=/var/log/deoldify/out.log environment=PYTHONPATH="/home/ubuntu/ai-projects/deoldify" EOF # 创建日志目录 sudo mkdir -p /var/log/deoldify sudo chown ubuntu:ubuntu /var/log/deoldify # 重新加载Supervisor配置 sudo supervisorctl reread sudo supervisorctl update5.2 创建管理脚本
创建管理脚本以便于服务操作:
# 创建scripts目录 mkdir -p scripts # 创建启动脚本 cat > scripts/start.sh << 'EOF' #!/bin/bash echo "启动DeOldify服务..." sudo supervisorctl start deoldify echo "服务启动完成" EOF # 创建停止脚本 cat > scripts/stop.sh << 'EOF' #!/bin/bash echo "停止DeOldify服务..." sudo supervisorctl stop deoldify echo "服务已停止" EOF # 创建重启脚本 cat > scripts/restart.sh << 'EOF' #!/bin/bash echo "重启DeOldify服务..." sudo supervisorctl restart deoldify echo "服务重启完成" EOF # 创建状态检查脚本 cat > scripts/status.sh << 'EOF' #!/bin/bash echo "=== DeOldify服务状态 ===" sudo supervisorctl status deoldify echo "" echo "=== 端口检查 ===" netstat -tlnp | grep 7860 || echo "端口7860未监听" EOF # 设置脚本可执行权限 chmod +x scripts/*.sh6. 测试服务
6.1 启动服务
# 启动服务 ./scripts/start.sh # 检查状态 ./scripts/status.sh6.2 测试API接口
# 健康检查 curl http://localhost:7860/health # 测试图片处理(需要准备测试图片) curl -X POST http://localhost:7860/colorize \ -F "image=@test_image.jpg"6.3 访问Web界面
打开浏览器访问:http://你的服务器IP:7860
7. 常见问题解决
7.1 端口冲突问题
如果7860端口被占用,可以修改服务配置:
# 修改app.py中的端口号 sed -i 's/port=7860/port=7870/g' app.py # 修改Supervisor配置 sudo sed -i 's/7860/7870/g' /etc/supervisor/conf.d/deoldify.conf # 重新加载配置 sudo supervisorctl reread sudo supervisorctl update sudo supervisorctl restart deoldify7.2 模型加载失败
如果模型加载失败,检查模型文件路径和权限:
# 检查模型文件 ls -la models/deoldify/ # 设置正确的文件权限 chmod -R 755 models/7.3 内存不足问题
如果遇到内存不足错误,可以调整处理参数:
# 在app.py中调整处理参数 @app.route('/colorize', methods=['POST']) def colorize(): # 添加内存优化处理 # 例如调整图像大小或批量处理参数8. 服务管理
8.1 日常管理命令
# 查看服务状态 sudo supervisorctl status deoldify # 查看日志 tail -f /var/log/deoldify/out.log tail -f /var/log/deoldify/error.log # 重启服务 sudo supervisorctl restart deoldify # 停止服务 sudo supervisorctl stop deoldify # 启动服务 sudo supervisorctl start deoldify8.2 日志管理
设置日志轮转以防止日志文件过大:
# 创建logrotate配置 sudo tee /etc/logrotate.d/deoldify > /dev/null << 'EOF' /var/log/deoldify/*.log { daily missingok rotate 7 compress delaycompress notifempty copytruncate } EOF9. 安全配置
9.1 防火墙设置
# 启用防火墙 sudo ufw enable # 允许SSH连接 sudo ufw allow ssh # 允许HTTP端口 sudo ufw allow 7860/tcp # 查看防火墙状态 sudo ufw status9.2 使用Nginx反向代理(可选)
# 安装Nginx sudo apt install -y nginx # 创建Nginx配置 sudo tee /etc/nginx/sites-available/deoldify > /dev/null << 'EOF' server { listen 80; server_name your-domain.com; location / { proxy_pass http://localhost:7860; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } EOF # 启用配置 sudo ln -s /etc/nginx/sites-available/deoldify /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl reload nginx10. 总结
通过本教程,你已经成功在Ubuntu 22.04系统上部署了DeOldify图像上色服务。这个服务提供了:
- Web界面:用户友好的图形化操作界面
- API接口:支持程序化调用
- 进程管理:使用Supervisor确保服务稳定运行
- 自动重启:服务异常时自动恢复
现在你可以通过浏览器访问服务,开始使用这个强大的图像上色工具了。如果遇到任何问题,可以参考常见问题部分或者查看服务日志来排查问题。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。