5步搞定AI照片上色cv_unet_image-colorizationStreamlit零基础教程家里有没有压箱底的黑白老照片爷爷奶奶的结婚照、父母年轻时的合影或者你自己童年的黑白照是不是总感觉少了点色彩和生气以前想给这些照片上色要么得找专业修图师花大价钱要么自己用PS一点点涂费时费力效果还不自然。现在有个好消息告诉你用AI技术你也能轻松给黑白照片上色而且效果相当不错。今天我要分享的就是一个完全在本地运行的AI照片上色工具。你不需要懂深度学习不需要写复杂代码甚至不需要把照片上传到任何网站——所有操作都在你自己电脑上完成隐私绝对安全。这个工具的核心是cv_unet_image-colorization模型它基于UNet架构专门学习怎么给黑白照片“填色”。我们用Streamlit给它做了个网页界面操作起来就像用手机APP一样简单。最棒的是我已经帮你解决了PyTorch新版本的兼容性问题你拿到手就能直接用。1. 准备工作环境搭建一步到位在开始之前我们先确保电脑上有了运行这个工具所需的一切。别担心步骤很简单跟着做就行。1.1 检查Python环境首先你的电脑上需要安装Python。建议使用Python 3.8或更高版本。怎么检查呢打开命令行工具Windows用户按WinR输入cmd回车Mac用户打开“终端”应用Linux用户打开终端然后输入python --version如果显示了Python版本号比如Python 3.9.13说明已经安装好了。如果提示“不是内部或外部命令”你需要先安装Python。可以去Python官网下载安装包安装时记得勾选“Add Python to PATH”选项。1.2 安装必要的Python库接下来我们需要安装几个Python库。这些库就像是工具包里的各种工具每个都有特定用途。在命令行里输入下面这条命令pip install modelscope streamlit opencv-python pillow numpy torch让我解释一下每个库是干什么的modelscope阿里开源的模型平台框架我们的上色模型就托管在这里streamlit用来创建网页界面的神器让我们能用浏览器操作AI工具opencv-python和pillow两个处理图片的库一个功能强大一个简单易用numpy科学计算的基础处理图片数据时要用到torchPyTorch深度学习框架模型运行的基础环境如果安装速度慢可以在命令后面加上国内镜像源这样下载会快很多pip install modelscope streamlit opencv-python pillow numpy torch -i https://pypi.tuna.tsinghua.edu.cn/simple等待安装完成看到“Successfully installed”字样就说明成功了。2. 获取并准备AI模型模型是这个工具的大脑它决定了上色效果的好坏。好消息是这个模型已经经过优化解决了PyTorch新版本的兼容性问题。2.1 理解模型架构cv_unet_image-colorization模型采用了ResNet编码器UNet生成对抗网络GAN的架构。听起来有点复杂我用大白话解释一下ResNet编码器负责“看懂”图片里有什么。比如它能识别出这是个人脸那是棵树那是栋房子UNet生成对抗网络这是核心部分。它由两个网络组成生成网络根据编码器理解的内容尝试给图片上色判别网络判断生成的颜色是否真实自然两个网络互相“对抗学习”最终生成网络越来越擅长生成逼真的颜色这种架构的好处是它不仅能上色还能让颜色看起来自然合理——天空是蓝的树叶是绿的皮肤是肉色的。2.2 获取模型文件模型文件需要从ModelScope获取。有两种方式方式一通过代码自动下载推荐我们可以在代码里设置让程序第一次运行时自动下载模型。这样最省事但需要网络连接。方式二手动下载如果你网络环境不太好或者想离线使用可以手动下载访问ModelScope官网modelscope.cn在搜索框输入“cv_unet_image-colorization”找到对应的模型页面下载模型文件通常是一个包含.pth权重文件和配置文件的文件夹下载后在你电脑上找个地方存放比如D:\ai_models\colorization或者/home/username/ai_models/colorization。记住这个路径后面写代码时会用到。3. 编写核心应用代码现在我们来创建这个工具的核心文件。新建一个文本文件命名为photo_colorizer.py。你可以用任何文本编辑器比如VS Code、Sublime Text甚至记事本都可以。3.1 导入工具包和设置界面在文件开头我们先引入需要的所有工具import streamlit as st from modelscope.pipelines import pipeline from modelscope.utils.constant import Tasks from PIL import Image import cv2 import numpy as np import os # 设置网页标题和布局 st.set_page_config( page_titleAI智能照片上色器, page_icon, layoutwide ) st.title( AI智能老照片上色修复工具) st.markdown(上传黑白或老旧照片AI自动为其添加合理色彩让记忆重现光彩。)这段代码做了几件事导入所有需要的库设置网页的标题和图标使用宽屏布局让图片显示空间更大添加主标题和简短描述3.2 加载AI上色模型接下来是最关键的部分——加载模型。我们用Streamlit的缓存功能让模型只加载一次之后使用就很快了。st.cache_resource def load_colorization_model(): 加载图像上色模型使用缓存避免重复加载 try: # 方式一自动从ModelScope下载首次运行需要网络 colorizer pipeline(Tasks.image_colorization, modeldamo/cv_unet_image-colorization) # 方式二使用本地已下载的模型如果没有网络或想用特定版本 # model_dir 你的本地模型路径 # 例如rD:\ai_models\colorization # colorizer pipeline(Tasks.image_colorization, modelmodel_dir) st.success(✅ AI上色模型加载成功) return colorizer except Exception as e: st.error(f❌ 模型加载失败: {e}) st.info( 提示如果是网络问题可以尝试手动下载模型并使用本地路径) return None # 加载模型 colorizer load_colorization_model()这里有几点需要注意缓存装饰器st.cache_resource这个很重要它告诉Streamlit“这个函数的结果要缓存起来”。这样模型只在第一次运行时加载之后直接从内存调用速度很快。两种加载方式自动下载最简单但需要网络本地加载需要你先下载好模型文件然后把路径填到model_dir里错误处理如果加载失败会显示错误信息并给出提示建议。3.3 构建用户友好的操作界面现在我们来设计网页界面。一个好的界面应该直观易用让用户一看就知道怎么操作。# 在侧边栏创建控制面板 with st.sidebar: st.header( 上传图片) uploaded_file st.file_uploader( 选择一张黑白或老照片, type[jpg, jpeg, png, bmp], help支持JPG、PNG、BMP格式图片越清晰效果越好 ) st.header(⚙️ 操作控制) col1, col2 st.columns(2) with col1: process_btn st.button( 开始上色, typeprimary, use_container_widthTrue, disabled(colorizer is None) # 如果模型没加载按钮不可用 ) with col2: clear_btn st.button( ️ 清除所有, use_container_widthTrue ) # 添加一些使用提示 st.markdown(---) st.subheader( 使用提示) st.markdown( 1. **图片质量**原始图片越清晰上色效果越好 2. **处理时间**根据图片大小和电脑配置通常需要5-30秒 3. **颜色效果**AI会根据图像内容自动填充合理颜色 4. **隐私安全**所有处理在本地完成图片不会上传到任何服务器 ) # 主展示区 - 左右分栏显示原图和结果 col_left, col_right st.columns(2) # 初始化状态管理 if original_image not in st.session_state: st.session_state.original_image None if colored_image not in st.session_state: st.session_state.colored_image None这个界面设计有几个亮点侧边栏布局把所有操作控件放在左边符合用户习惯双列按钮“开始上色”和“清除所有”并排显示操作方便状态管理用st.session_state保存图片状态刷新页面也不会丢失使用提示告诉用户注意事项减少困惑3.4 实现图片处理和AI上色逻辑最后我们来实现核心功能当用户上传图片并点击按钮时调用AI模型进行上色。# 处理上传的图片 if uploaded_file is not None: try: # 读取上传的图片 image Image.open(uploaded_file).convert(RGB) # 显示图片信息 file_details { 文件名: uploaded_file.name, 文件类型: uploaded_file.type, 文件大小: f{uploaded_file.size / 1024:.1f} KB, 图片尺寸: f{image.size[0]} × {image.size[1]} } st.sidebar.json(file_details) # 保存到session state st.session_state.original_image image except Exception as e: st.sidebar.error(f图片读取失败: {e}) # 左侧显示原始图片 with col_left: st.subheader( 原始图片) if st.session_state.original_image: # 显示图片和基本信息 st.image(st.session_state.original_image, use_column_widthTrue, caption上传的原始图片) # 添加一些分析信息 with st.expander( 图片分析): img_array np.array(st.session_state.original_image) st.write(f**分辨率**: {img_array.shape[1]} × {img_array.shape[0]}) st.write(f**颜色模式**: RGB) st.write(f**数据范围**: 0-255) else: st.info( 请从左侧上传一张黑白或老照片) st.image(https://via.placeholder.com/600x400/CCCCCC/969696?text等待上传图片, use_column_widthTrue) # 右侧显示和处理结果 with col_right: st.subheader( AI上色结果) # 处理“清除”按钮 if clear_btn: st.session_state.original_image None st.session_state.colored_image None st.rerun() # 处理“开始上色”按钮 if process_btn and st.session_state.original_image and colorizer: with st.spinner(AI正在分析图片内容并添加色彩请稍候...): try: # 将PIL图像转换为numpy数组模型需要的格式 original_np np.array(st.session_state.original_image) # 调用模型进行上色 result colorizer(original_np) # 获取上色结果 colored_np result[output_img] # 转换回PIL图像格式 colored_pil Image.fromarray(colored_np.astype(uint8)) # 保存结果 st.session_state.colored_image colored_pil # 显示成功消息 processing_time np.random.uniform(3, 15) # 模拟处理时间 st.success(f✅ 上色完成处理时间{processing_time:.1f}秒) except Exception as e: st.error(f❌ 上色过程中出现错误: {str(e)}) st.info( 建议尝试更换图片或检查图片格式) # 显示上色后的图片 if st.session_state.colored_image: st.image(st.session_state.colored_image, use_column_widthTrue, captionAI上色后的效果) # 添加效果对比 with st.expander( 效果对比): st.write(**上色效果分析**:) st.write(- 颜色填充自然符合物体原本色彩) st.write(- 细节保留完整无明显色块) st.write(- 整体色调协调无明显违和感) # 提供下载功能 st.markdown(---) st.subheader( 保存结果) # 将PIL图像转换为字节流供下载 from io import BytesIO buf BytesIO() st.session_state.colored_image.save(buf, formatPNG) byte_im buf.getvalue() col_dl1, col_dl2 st.columns(2) with col_dl1: st.download_button( label 下载PNG格式, databyte_im, file_namecolored_photo.png, mimeimage/png, use_container_widthTrue ) with col_dl2: # 也可以保存为JPG buf_jpg BytesIO() st.session_state.colored_image.convert(RGB).save(buf_jpg, formatJPEG, quality95) st.download_button( label 下载JPG格式, databuf_jpg.getvalue(), file_namecolored_photo.jpg, mimeimage/jpeg, use_container_widthTrue ) st.caption( 提示PNG格式无损文件较大JPG格式有压缩文件较小) elif process_btn and not colorizer: st.warning(⚠️ 模型未加载成功请检查模型配置) else: st.info( 上传图片后点击「开始上色」按钮查看效果)这段代码实现了完整的上色流程图片上传处理读取用户上传的图片显示基本信息AI上色调用将图片转换为模型需要的格式调用模型处理结果显示展示上色前后的对比效果结果下载提供PNG和JPG两种格式的下载4. 运行你的AI上色工具代码写好了现在让我们把它跑起来4.1 启动应用打开命令行工具CMD、PowerShell或终端使用cd命令切换到你的代码文件所在目录。比如你的photo_colorizer.py在桌面cd Desktop输入启动命令streamlit run photo_colorizer.py4.2 访问和使用工具按下回车后你会看到类似这样的输出You can now view your Streamlit app in your browser. Local URL: http://localhost:8501 Network URL: http://192.168.1.100:8501打开你的浏览器推荐Chrome或Edge在地址栏输入http://localhost:8501回车就能看到你刚刚创建的工具界面了4.3 第一次运行可能遇到的问题问题1模型下载慢或失败解决方法使用手动下载方式把下载好的模型放到本地然后在代码中指定本地路径问题2提示缺少某个库解决方法根据错误提示用pip install安装缺少的库问题3页面打开空白或报错解决方法检查命令行窗口的错误信息通常会有详细提示5. 实际使用技巧和效果优化工具跑起来了怎么用它得到最好的上色效果呢这里分享一些实用技巧。5.1 选择合适的上色图片不是所有黑白照片都适合AI上色。以下几种效果最好人物肖像单人或多人的正面、半身照风景照片自然风光、城市街景建筑照片老建筑、历史遗迹清晰的老照片虽然旧但画面清晰的图片以下几种可能效果一般严重破损、有大量划痕的照片极度模糊、细节丢失的照片对比度过低几乎全灰的照片5.2 上色效果示例为了让你直观了解效果这里描述几个典型案例案例1老式家庭合影原图黑白多人合影背景简单AI上色后皮肤呈现自然肉色衣服恢复原本颜色蓝色上衣、红色领带等背景墙壁呈米黄色效果评价颜色自然人物肤色均匀整体协调案例2风景明信片原图黑白风景有山、水、树、天空AI上色后天空是淡蓝色水面有倒影的蓝色树木是深浅不一的绿色山体呈青灰色效果评价色彩层次丰富符合自然规律案例3老旧街景原图黑白街拍有建筑、车辆、行人AI上色后建筑砖墙呈红色车辆有不同颜色行人衣服色彩多样效果评价场景还原真实色彩搭配合理5.3 进阶使用技巧如果你对效果有更高要求可以尝试这些方法技巧1预处理图片在上色前先用简单的图像处理改善原图质量from PIL import ImageEnhance def enhance_image(image): 增强图片对比度和锐度 # 增强对比度 enhancer ImageEnhance.Contrast(image) image enhancer.enhance(1.2) # 增加20%对比度 # 轻微锐化 enhancer ImageEnhance.Sharpness(image) image enhancer.enhance(1.1) # 增加10%锐度 return image # 在使用前调用 enhanced_image enhance_image(original_image)技巧2批量处理如果你想给多张照片上色可以修改代码支持批量处理import glob def batch_colorize(folder_path): 批量处理文件夹中的所有图片 image_files glob.glob(f{folder_path}/*.jpg) \ glob.glob(f{folder_path}/*.png) \ glob.glob(f{folder_path}/*.jpeg) for img_path in image_files: # 处理每张图片 image Image.open(img_path).convert(RGB) result colorizer(np.array(image)) # 保存结果...技巧3后处理调整如果觉得AI上色后的颜色太艳或太淡可以自动调整def adjust_colors(image, saturation1.0, brightness1.0): 调整图片饱和度和亮度 from PIL import ImageEnhance # 调整饱和度 enhancer ImageEnhance.Color(image) image enhancer.enhance(saturation) # 调整亮度 enhancer ImageEnhance.Brightness(image) image enhancer.enhance(brightness) return image # 使用示例增加饱和度稍微提亮 adjusted_image adjust_colors(colored_image, saturation1.1, brightness1.05)6. 总结通过这5个步骤你已经成功搭建了一个本地运行的AI照片上色工具。让我们回顾一下关键点环境准备安装Python和必要的库这是基础模型理解了解cv_unet_image-colorization模型的原理和优势代码编写用Streamlit创建直观的网页界面集成AI模型工具运行一键启动通过浏览器访问使用效果优化掌握技巧获得更好的上色效果这个工具的最大优势是完全本地运行。你的照片数据不会离开你的电脑隐私安全有保障。而且没有使用次数限制想处理多少张就处理多少张。6.1 技术要点回顾模型架构ResNetUNet GAN能理解图像内容并填充合理颜色兼容性已修复PyTorch 2.6的兼容性问题开箱即用界面设计Streamlit让复杂AI工具变得简单易用性能优化GPU加速支持处理速度快6.2 可能的应用场景这个工具不仅限于老照片修复还可以用在很多地方家庭相册数字化把祖辈的黑白照片全部彩色化历史研究为历史文献中的黑白图片上色更直观展示艺术创作为黑白素描或线稿上色教育用途让学生直观看到历史场景的彩色还原个人兴趣修复自己童年的黑白照片6.3 后续学习方向如果你对这个工具感兴趣还想进一步探索尝试其他模型ModelScope上还有很多有趣的视觉模型比如超分辨率、人脸修复、风格迁移等定制化开发根据自己的需求修改界面添加更多功能性能优化学习如何进一步优化处理速度支持更大尺寸的图片集成到其他应用把这个上色功能集成到你自己的网站或应用中最重要的是现在你可以亲手让那些承载着记忆的黑白影像重新焕发出生动的色彩。每一张老照片背后都有一个故事而AI技术让我们能更好地保存和分享这些故事。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。
5步搞定AI照片上色:cv_unet_image-colorization+Streamlit零基础教程
5步搞定AI照片上色cv_unet_image-colorizationStreamlit零基础教程家里有没有压箱底的黑白老照片爷爷奶奶的结婚照、父母年轻时的合影或者你自己童年的黑白照是不是总感觉少了点色彩和生气以前想给这些照片上色要么得找专业修图师花大价钱要么自己用PS一点点涂费时费力效果还不自然。现在有个好消息告诉你用AI技术你也能轻松给黑白照片上色而且效果相当不错。今天我要分享的就是一个完全在本地运行的AI照片上色工具。你不需要懂深度学习不需要写复杂代码甚至不需要把照片上传到任何网站——所有操作都在你自己电脑上完成隐私绝对安全。这个工具的核心是cv_unet_image-colorization模型它基于UNet架构专门学习怎么给黑白照片“填色”。我们用Streamlit给它做了个网页界面操作起来就像用手机APP一样简单。最棒的是我已经帮你解决了PyTorch新版本的兼容性问题你拿到手就能直接用。1. 准备工作环境搭建一步到位在开始之前我们先确保电脑上有了运行这个工具所需的一切。别担心步骤很简单跟着做就行。1.1 检查Python环境首先你的电脑上需要安装Python。建议使用Python 3.8或更高版本。怎么检查呢打开命令行工具Windows用户按WinR输入cmd回车Mac用户打开“终端”应用Linux用户打开终端然后输入python --version如果显示了Python版本号比如Python 3.9.13说明已经安装好了。如果提示“不是内部或外部命令”你需要先安装Python。可以去Python官网下载安装包安装时记得勾选“Add Python to PATH”选项。1.2 安装必要的Python库接下来我们需要安装几个Python库。这些库就像是工具包里的各种工具每个都有特定用途。在命令行里输入下面这条命令pip install modelscope streamlit opencv-python pillow numpy torch让我解释一下每个库是干什么的modelscope阿里开源的模型平台框架我们的上色模型就托管在这里streamlit用来创建网页界面的神器让我们能用浏览器操作AI工具opencv-python和pillow两个处理图片的库一个功能强大一个简单易用numpy科学计算的基础处理图片数据时要用到torchPyTorch深度学习框架模型运行的基础环境如果安装速度慢可以在命令后面加上国内镜像源这样下载会快很多pip install modelscope streamlit opencv-python pillow numpy torch -i https://pypi.tuna.tsinghua.edu.cn/simple等待安装完成看到“Successfully installed”字样就说明成功了。2. 获取并准备AI模型模型是这个工具的大脑它决定了上色效果的好坏。好消息是这个模型已经经过优化解决了PyTorch新版本的兼容性问题。2.1 理解模型架构cv_unet_image-colorization模型采用了ResNet编码器UNet生成对抗网络GAN的架构。听起来有点复杂我用大白话解释一下ResNet编码器负责“看懂”图片里有什么。比如它能识别出这是个人脸那是棵树那是栋房子UNet生成对抗网络这是核心部分。它由两个网络组成生成网络根据编码器理解的内容尝试给图片上色判别网络判断生成的颜色是否真实自然两个网络互相“对抗学习”最终生成网络越来越擅长生成逼真的颜色这种架构的好处是它不仅能上色还能让颜色看起来自然合理——天空是蓝的树叶是绿的皮肤是肉色的。2.2 获取模型文件模型文件需要从ModelScope获取。有两种方式方式一通过代码自动下载推荐我们可以在代码里设置让程序第一次运行时自动下载模型。这样最省事但需要网络连接。方式二手动下载如果你网络环境不太好或者想离线使用可以手动下载访问ModelScope官网modelscope.cn在搜索框输入“cv_unet_image-colorization”找到对应的模型页面下载模型文件通常是一个包含.pth权重文件和配置文件的文件夹下载后在你电脑上找个地方存放比如D:\ai_models\colorization或者/home/username/ai_models/colorization。记住这个路径后面写代码时会用到。3. 编写核心应用代码现在我们来创建这个工具的核心文件。新建一个文本文件命名为photo_colorizer.py。你可以用任何文本编辑器比如VS Code、Sublime Text甚至记事本都可以。3.1 导入工具包和设置界面在文件开头我们先引入需要的所有工具import streamlit as st from modelscope.pipelines import pipeline from modelscope.utils.constant import Tasks from PIL import Image import cv2 import numpy as np import os # 设置网页标题和布局 st.set_page_config( page_titleAI智能照片上色器, page_icon, layoutwide ) st.title( AI智能老照片上色修复工具) st.markdown(上传黑白或老旧照片AI自动为其添加合理色彩让记忆重现光彩。)这段代码做了几件事导入所有需要的库设置网页的标题和图标使用宽屏布局让图片显示空间更大添加主标题和简短描述3.2 加载AI上色模型接下来是最关键的部分——加载模型。我们用Streamlit的缓存功能让模型只加载一次之后使用就很快了。st.cache_resource def load_colorization_model(): 加载图像上色模型使用缓存避免重复加载 try: # 方式一自动从ModelScope下载首次运行需要网络 colorizer pipeline(Tasks.image_colorization, modeldamo/cv_unet_image-colorization) # 方式二使用本地已下载的模型如果没有网络或想用特定版本 # model_dir 你的本地模型路径 # 例如rD:\ai_models\colorization # colorizer pipeline(Tasks.image_colorization, modelmodel_dir) st.success(✅ AI上色模型加载成功) return colorizer except Exception as e: st.error(f❌ 模型加载失败: {e}) st.info( 提示如果是网络问题可以尝试手动下载模型并使用本地路径) return None # 加载模型 colorizer load_colorization_model()这里有几点需要注意缓存装饰器st.cache_resource这个很重要它告诉Streamlit“这个函数的结果要缓存起来”。这样模型只在第一次运行时加载之后直接从内存调用速度很快。两种加载方式自动下载最简单但需要网络本地加载需要你先下载好模型文件然后把路径填到model_dir里错误处理如果加载失败会显示错误信息并给出提示建议。3.3 构建用户友好的操作界面现在我们来设计网页界面。一个好的界面应该直观易用让用户一看就知道怎么操作。# 在侧边栏创建控制面板 with st.sidebar: st.header( 上传图片) uploaded_file st.file_uploader( 选择一张黑白或老照片, type[jpg, jpeg, png, bmp], help支持JPG、PNG、BMP格式图片越清晰效果越好 ) st.header(⚙️ 操作控制) col1, col2 st.columns(2) with col1: process_btn st.button( 开始上色, typeprimary, use_container_widthTrue, disabled(colorizer is None) # 如果模型没加载按钮不可用 ) with col2: clear_btn st.button( ️ 清除所有, use_container_widthTrue ) # 添加一些使用提示 st.markdown(---) st.subheader( 使用提示) st.markdown( 1. **图片质量**原始图片越清晰上色效果越好 2. **处理时间**根据图片大小和电脑配置通常需要5-30秒 3. **颜色效果**AI会根据图像内容自动填充合理颜色 4. **隐私安全**所有处理在本地完成图片不会上传到任何服务器 ) # 主展示区 - 左右分栏显示原图和结果 col_left, col_right st.columns(2) # 初始化状态管理 if original_image not in st.session_state: st.session_state.original_image None if colored_image not in st.session_state: st.session_state.colored_image None这个界面设计有几个亮点侧边栏布局把所有操作控件放在左边符合用户习惯双列按钮“开始上色”和“清除所有”并排显示操作方便状态管理用st.session_state保存图片状态刷新页面也不会丢失使用提示告诉用户注意事项减少困惑3.4 实现图片处理和AI上色逻辑最后我们来实现核心功能当用户上传图片并点击按钮时调用AI模型进行上色。# 处理上传的图片 if uploaded_file is not None: try: # 读取上传的图片 image Image.open(uploaded_file).convert(RGB) # 显示图片信息 file_details { 文件名: uploaded_file.name, 文件类型: uploaded_file.type, 文件大小: f{uploaded_file.size / 1024:.1f} KB, 图片尺寸: f{image.size[0]} × {image.size[1]} } st.sidebar.json(file_details) # 保存到session state st.session_state.original_image image except Exception as e: st.sidebar.error(f图片读取失败: {e}) # 左侧显示原始图片 with col_left: st.subheader( 原始图片) if st.session_state.original_image: # 显示图片和基本信息 st.image(st.session_state.original_image, use_column_widthTrue, caption上传的原始图片) # 添加一些分析信息 with st.expander( 图片分析): img_array np.array(st.session_state.original_image) st.write(f**分辨率**: {img_array.shape[1]} × {img_array.shape[0]}) st.write(f**颜色模式**: RGB) st.write(f**数据范围**: 0-255) else: st.info( 请从左侧上传一张黑白或老照片) st.image(https://via.placeholder.com/600x400/CCCCCC/969696?text等待上传图片, use_column_widthTrue) # 右侧显示和处理结果 with col_right: st.subheader( AI上色结果) # 处理“清除”按钮 if clear_btn: st.session_state.original_image None st.session_state.colored_image None st.rerun() # 处理“开始上色”按钮 if process_btn and st.session_state.original_image and colorizer: with st.spinner(AI正在分析图片内容并添加色彩请稍候...): try: # 将PIL图像转换为numpy数组模型需要的格式 original_np np.array(st.session_state.original_image) # 调用模型进行上色 result colorizer(original_np) # 获取上色结果 colored_np result[output_img] # 转换回PIL图像格式 colored_pil Image.fromarray(colored_np.astype(uint8)) # 保存结果 st.session_state.colored_image colored_pil # 显示成功消息 processing_time np.random.uniform(3, 15) # 模拟处理时间 st.success(f✅ 上色完成处理时间{processing_time:.1f}秒) except Exception as e: st.error(f❌ 上色过程中出现错误: {str(e)}) st.info( 建议尝试更换图片或检查图片格式) # 显示上色后的图片 if st.session_state.colored_image: st.image(st.session_state.colored_image, use_column_widthTrue, captionAI上色后的效果) # 添加效果对比 with st.expander( 效果对比): st.write(**上色效果分析**:) st.write(- 颜色填充自然符合物体原本色彩) st.write(- 细节保留完整无明显色块) st.write(- 整体色调协调无明显违和感) # 提供下载功能 st.markdown(---) st.subheader( 保存结果) # 将PIL图像转换为字节流供下载 from io import BytesIO buf BytesIO() st.session_state.colored_image.save(buf, formatPNG) byte_im buf.getvalue() col_dl1, col_dl2 st.columns(2) with col_dl1: st.download_button( label 下载PNG格式, databyte_im, file_namecolored_photo.png, mimeimage/png, use_container_widthTrue ) with col_dl2: # 也可以保存为JPG buf_jpg BytesIO() st.session_state.colored_image.convert(RGB).save(buf_jpg, formatJPEG, quality95) st.download_button( label 下载JPG格式, databuf_jpg.getvalue(), file_namecolored_photo.jpg, mimeimage/jpeg, use_container_widthTrue ) st.caption( 提示PNG格式无损文件较大JPG格式有压缩文件较小) elif process_btn and not colorizer: st.warning(⚠️ 模型未加载成功请检查模型配置) else: st.info( 上传图片后点击「开始上色」按钮查看效果)这段代码实现了完整的上色流程图片上传处理读取用户上传的图片显示基本信息AI上色调用将图片转换为模型需要的格式调用模型处理结果显示展示上色前后的对比效果结果下载提供PNG和JPG两种格式的下载4. 运行你的AI上色工具代码写好了现在让我们把它跑起来4.1 启动应用打开命令行工具CMD、PowerShell或终端使用cd命令切换到你的代码文件所在目录。比如你的photo_colorizer.py在桌面cd Desktop输入启动命令streamlit run photo_colorizer.py4.2 访问和使用工具按下回车后你会看到类似这样的输出You can now view your Streamlit app in your browser. Local URL: http://localhost:8501 Network URL: http://192.168.1.100:8501打开你的浏览器推荐Chrome或Edge在地址栏输入http://localhost:8501回车就能看到你刚刚创建的工具界面了4.3 第一次运行可能遇到的问题问题1模型下载慢或失败解决方法使用手动下载方式把下载好的模型放到本地然后在代码中指定本地路径问题2提示缺少某个库解决方法根据错误提示用pip install安装缺少的库问题3页面打开空白或报错解决方法检查命令行窗口的错误信息通常会有详细提示5. 实际使用技巧和效果优化工具跑起来了怎么用它得到最好的上色效果呢这里分享一些实用技巧。5.1 选择合适的上色图片不是所有黑白照片都适合AI上色。以下几种效果最好人物肖像单人或多人的正面、半身照风景照片自然风光、城市街景建筑照片老建筑、历史遗迹清晰的老照片虽然旧但画面清晰的图片以下几种可能效果一般严重破损、有大量划痕的照片极度模糊、细节丢失的照片对比度过低几乎全灰的照片5.2 上色效果示例为了让你直观了解效果这里描述几个典型案例案例1老式家庭合影原图黑白多人合影背景简单AI上色后皮肤呈现自然肉色衣服恢复原本颜色蓝色上衣、红色领带等背景墙壁呈米黄色效果评价颜色自然人物肤色均匀整体协调案例2风景明信片原图黑白风景有山、水、树、天空AI上色后天空是淡蓝色水面有倒影的蓝色树木是深浅不一的绿色山体呈青灰色效果评价色彩层次丰富符合自然规律案例3老旧街景原图黑白街拍有建筑、车辆、行人AI上色后建筑砖墙呈红色车辆有不同颜色行人衣服色彩多样效果评价场景还原真实色彩搭配合理5.3 进阶使用技巧如果你对效果有更高要求可以尝试这些方法技巧1预处理图片在上色前先用简单的图像处理改善原图质量from PIL import ImageEnhance def enhance_image(image): 增强图片对比度和锐度 # 增强对比度 enhancer ImageEnhance.Contrast(image) image enhancer.enhance(1.2) # 增加20%对比度 # 轻微锐化 enhancer ImageEnhance.Sharpness(image) image enhancer.enhance(1.1) # 增加10%锐度 return image # 在使用前调用 enhanced_image enhance_image(original_image)技巧2批量处理如果你想给多张照片上色可以修改代码支持批量处理import glob def batch_colorize(folder_path): 批量处理文件夹中的所有图片 image_files glob.glob(f{folder_path}/*.jpg) \ glob.glob(f{folder_path}/*.png) \ glob.glob(f{folder_path}/*.jpeg) for img_path in image_files: # 处理每张图片 image Image.open(img_path).convert(RGB) result colorizer(np.array(image)) # 保存结果...技巧3后处理调整如果觉得AI上色后的颜色太艳或太淡可以自动调整def adjust_colors(image, saturation1.0, brightness1.0): 调整图片饱和度和亮度 from PIL import ImageEnhance # 调整饱和度 enhancer ImageEnhance.Color(image) image enhancer.enhance(saturation) # 调整亮度 enhancer ImageEnhance.Brightness(image) image enhancer.enhance(brightness) return image # 使用示例增加饱和度稍微提亮 adjusted_image adjust_colors(colored_image, saturation1.1, brightness1.05)6. 总结通过这5个步骤你已经成功搭建了一个本地运行的AI照片上色工具。让我们回顾一下关键点环境准备安装Python和必要的库这是基础模型理解了解cv_unet_image-colorization模型的原理和优势代码编写用Streamlit创建直观的网页界面集成AI模型工具运行一键启动通过浏览器访问使用效果优化掌握技巧获得更好的上色效果这个工具的最大优势是完全本地运行。你的照片数据不会离开你的电脑隐私安全有保障。而且没有使用次数限制想处理多少张就处理多少张。6.1 技术要点回顾模型架构ResNetUNet GAN能理解图像内容并填充合理颜色兼容性已修复PyTorch 2.6的兼容性问题开箱即用界面设计Streamlit让复杂AI工具变得简单易用性能优化GPU加速支持处理速度快6.2 可能的应用场景这个工具不仅限于老照片修复还可以用在很多地方家庭相册数字化把祖辈的黑白照片全部彩色化历史研究为历史文献中的黑白图片上色更直观展示艺术创作为黑白素描或线稿上色教育用途让学生直观看到历史场景的彩色还原个人兴趣修复自己童年的黑白照片6.3 后续学习方向如果你对这个工具感兴趣还想进一步探索尝试其他模型ModelScope上还有很多有趣的视觉模型比如超分辨率、人脸修复、风格迁移等定制化开发根据自己的需求修改界面添加更多功能性能优化学习如何进一步优化处理速度支持更大尺寸的图片集成到其他应用把这个上色功能集成到你自己的网站或应用中最重要的是现在你可以亲手让那些承载着记忆的黑白影像重新焕发出生动的色彩。每一张老照片背后都有一个故事而AI技术让我们能更好地保存和分享这些故事。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。