cv_unet_image-colorization部署教程:Airflow定时任务调度老照片批量上色工作流

📅 发布时间:2026/7/10 20:49:08 👁️ 浏览次数:
cv_unet_image-colorization部署教程:Airflow定时任务调度老照片批量上色工作流
cv_unet_image-colorization部署教程Airflow定时任务调度老照片批量上色工作流1. 引言你是否遇到过这样的困扰家里珍藏的老照片都是黑白的想要给它们上色却不知道从何下手手动上色既费时又需要专业技巧而在线工具又担心隐私泄露。今天我要介绍的cv_unet_image-colorization工具可以完美解决这些问题。这是一个基于深度学习的本地黑白照片上色工具采用先进的ResNet编码器和UNet生成对抗网络架构能够智能识别图像内容并填充符合现实的颜色。最棒的是它完全在本地运行不需要联网不会上传你的任何数据确保隐私安全。本教程将手把手教你如何部署这个工具并配置Airflow定时任务实现老照片的批量自动上色。无论你是技术爱好者还是普通用户都能跟着步骤轻松完成部署。2. 环境准备与快速部署2.1 系统要求在开始之前请确保你的系统满足以下基本要求操作系统Ubuntu 18.04、CentOS 7 或 Windows 10/11建议使用Linux系统Python版本3.8-3.10显卡NVIDIA GPU至少4GB显存支持CUDA 11.0内存至少8GB RAM存储空间至少10GB可用空间2.2 一键部署脚本为了简化部署过程我准备了一个完整的部署脚本。将以下内容保存为deploy.sh文件#!/bin/bash echo 开始部署cv_unet_image-colorization工具... # 创建项目目录 mkdir -p old_photo_colorization cd old_photo_colorization # 创建Python虚拟环境 python -m venv venv source venv/bin/activate # 安装依赖包 pip install torch torchvision --index-url https://download.pytorch.org/whl/cu118 pip install modelscope1.10.0 streamlit1.28.0 pip install apache-airflow2.7.0 pillow10.0.0 # 修复PyTorch兼容性问题 echo 修复PyTorch 2.6兼容性问题... cat torch_compat.py EOF import torch # 重写torch.load方法解决兼容性问题 original_load torch.load def custom_load(f, map_locationNone, pickle_moduleNone, weights_onlyFalse, **kwargs): return original_load(f, map_location, pickle_module, False, **kwargs) torch.load custom_load EOF echo 部署完成 echo 请运行: source venv/bin/activate streamlit run app.py给脚本添加执行权限并运行chmod x deploy.sh ./deploy.sh2.3 创建主应用程序创建app.py文件这是工具的主要界面import streamlit as st import torch from modelscope.pipelines import pipeline from modelscope.utils.constant import Tasks from PIL import Image import io import os # 应用标题 st.set_page_config(page_title老照片上色工具, layoutwide) st.title( 老照片智能上色工具) # 初始化模型 st.cache_resource def load_model(): try: # 修复PyTorch 2.6兼容性问题 import torch_compat colorizer pipeline(Tasks.image_colorization, modeldamo/cv_unet_image-colorization) return colorizer except Exception as e: st.error(f模型加载失败: {str(e)}) return None # 侧边栏配置 st.sidebar.header(上传照片) uploaded_file st.sidebar.file_uploader(选择黑白/老照片, type[jpg, jpeg, png]) # 主界面布局 col1, col2 st.columns(2) if uploaded_file is not None: # 显示原图 with col1: st.header(原始照片) original_image Image.open(uploaded_file) st.image(original_image, use_column_widthTrue) # 上色处理 with col2: st.header(上色结果) if st.button(开始上色, typeprimary): with st.spinner(AI正在为照片上色...): try: colorizer load_model() if colorizer: result colorizer(original_image) colored_image result[output_img] st.image(colored_image, use_column_widthTrue) st.success(处理完成) # 保存结果 buf io.BytesIO() colored_image.save(buf, formatJPEG) st.download_button( label下载上色结果, databuf.getvalue(), file_namecolored_photo.jpg, mimeimage/jpeg ) except Exception as e: st.error(f上色失败: {str(e)}) else: with col1: st.info(请在左侧上传黑白照片开始上色) with col2: st.image(https://via.placeholder.com/500x300?text上色结果将显示在这里, use_column_widthTrue)3. Airflow定时任务配置3.1 安装和初始化Airflow如果你还没有安装Airflow可以使用以下命令pip install apache-airflow2.7.0 # 初始化Airflow数据库 airflow db init # 创建用户 airflow users create \ --username admin \ --firstname Admin \ --lastname User \ --role Admin \ --email adminexample.com \ --password admin3.2 创建批量处理DAG在Airflow的DAGs目录通常是~/airflow/dags/下创建photo_colorization_dag.pyfrom datetime import datetime, timedelta from airflow import DAG from airflow.operators.python import PythonOperator from airflow.operators.bash import BashOperator import os from PIL import Image import torch from modelscope.pipelines import pipeline from modelscope.utils.constant import Tasks # 修复PyTorch兼容性 import torch_compat default_args { owner: photo_team, depends_on_past: False, email_on_failure: False, email_on_retry: False, retries: 1, retry_delay: timedelta(minutes5), } def process_photos(): 批量处理照片函数 input_dir /path/to/input/photos # 修改为你的输入目录 output_dir /path/to/output/photos # 修改为你的输出目录 os.makedirs(output_dir, exist_okTrue) # 加载上色模型 colorizer pipeline(Tasks.image_colorization, modeldamo/cv_unet_image-colorization) # 处理所有图片 supported_formats [.jpg, .jpeg, .png, .bmp] processed_count 0 for filename in os.listdir(input_dir): if any(filename.lower().endswith(ext) for ext in supported_formats): try: input_path os.path.join(input_dir, filename) output_path os.path.join(output_dir, fcolored_{filename}) # 上色处理 result colorizer(Image.open(input_path)) result[output_img].save(output_path) processed_count 1 print(f已处理: {filename}) except Exception as e: print(f处理 {filename} 时出错: {str(e)}) print(f批量处理完成共处理 {processed_count} 张照片) # 定义DAG with DAG( batch_photo_colorization, default_argsdefault_args, description批量老照片上色任务, schedule_intervaltimedelta(days1), # 每天执行一次 start_datedatetime(2024, 1, 1), catchupFalse, tags[photo, colorization], ) as dag: # 任务1检查目录 check_dirs BashOperator( task_idcheck_directories, bash_commandecho 检查输入输出目录... ls -la /path/to/input/photos/, ) # 任务2批量处理照片 process_task PythonOperator( task_idprocess_photos, python_callableprocess_photos, ) # 任务3清理临时文件 cleanup BashOperator( task_idcleanup_temp_files, bash_commandecho 清理完成, ) # 设置任务依赖关系 check_dirs process_task cleanup3.3 配置Airflow定时任务修改Airflow配置文件~/airflow/airflow.cfg中的相关设置[core] dags_folder /your/path/to/dags load_examples False [scheduler] min_file_process_interval 30 dag_dir_list_interval 300 [webserver] web_server_port 8080启动Airflow服务# 启动调度器 airflow scheduler # 启动Web服务器 airflow webserver --port 80804. 使用指南与技巧4.1 单张照片上色步骤启动应用在项目目录下运行streamlit run app.py访问界面打开浏览器访问http://localhost:8501上传照片在左侧边栏选择要上色的黑白照片开始处理点击开始上色按钮等待处理完成下载结果上色完成后点击下载上色结果保存图片4.2 批量处理配置对于批量处理你需要准备输入目录将所有要处理的黑白照片放在一个文件夹中设置输出目录创建一个空文件夹用于保存上色后的照片配置DAG参数修改DAG文件中的输入输出路径设置调度时间根据需要调整schedule_interval参数4.3 性能优化建议如果你的照片数量很多可以考虑以下优化措施# 在DAG中添加并行处理 from airflow.utils.task_group import TaskGroup def process_single_photo(input_path, output_path): 处理单张照片 try: colorizer pipeline(Tasks.image_colorization, modeldamo/cv_unet_image-colorization) result colorizer(Image.open(input_path)) result[output_img].save(output_path) return True except Exception as e: print(f处理失败: {str(e)}) return False # 可以使用Airflow的并行任务来同时处理多张照片5. 常见问题解决5.1 模型加载失败如果遇到模型加载问题尝试以下解决方案# 清除缓存 rm -rf ~/.cache/modelscope/hub # 重新下载模型 python -c from modelscope.pipelines import pipeline; pipeline(image-colorization, damo/cv_unet_image-colorization)5.2 内存不足错误处理大尺寸图片时可能出现内存不足可以添加图片压缩from PIL import Image def compress_image(image_path, max_size1024): 压缩图片到指定尺寸 img Image.open(image_path) if max(img.size) max_size: img.thumbnail((max_size, max_size), Image.Resampling.LANCZOS) return img5.3 Airflow任务失败检查Airflow日志获取详细错误信息# 查看任务日志 airflow tasks logs batch_photo_colorization process_photos # 检查DAG状态 airflow dags list6. 总结通过本教程你已经学会了如何部署cv_unet_image-colorization工具并配置Airflow定时任务来实现老照片的批量自动上色。这个方案具有以下优势完全本地运行所有处理都在本地完成确保照片隐私安全批量处理能力通过Airflow可以定时自动处理大量照片高质量上色效果基于先进的深度学习模型上色效果自然逼真灵活可扩展可以根据需要调整处理参数和调度频率无论是个人使用还是商业应用这个工具都能帮助你快速、高效地为黑白照片上色让珍贵的历史影像重现光彩。现在就开始尝试吧给你的老照片赋予新的生命获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。