实战二:开发网页端界面完成黑白视频转为彩色视频

​一、需求描述

设计一个简单的视频上色应用,用户可以通过网页界面上传黑白视频,系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观,不需要了解技术细节。
效果图

​二、实现思路

总体思路:

  1. 用户通过Gradio界面上传黑白视频
  2. 视频被传递给video_colorize函数
  3. 函数使用ModelScope平台提供的UNet模型进行视频上色
  4. 处理后的视频路径被返回给Gradio界面
  5. Gradio界面显示上色后的视频

2.1 导入依赖库

python 复制代码
import gradio as gr
import os
import torch
import tempfile
from modelscope.outputs import OutputKeys
from modelscope.pipelines import pipeline
from modelscope.utils.constant import Tasks
  • gradio: 用于创建Web界面的库,可以快速构建机器学习模型的演示界面
  • os: Python标准库,用于处理文件和目录操作
  • torch: PyTorch深度学习框架
  • tempfile: Python标准库,用于处理临时文件和目录
  • modelscope: 阿里云开源的模型即服务框架,提供了大量预训练模型
    • OutputKeys: 定义了模型输出的标准键名
    • pipeline: 用于创建模型推理管道
    • Tasks: 定义了支持的任务类型

2.2 安全设置和临时目录配置

python 复制代码
# 添加安全全局变量设置
torch.serialization.add_safe_globals([slice])
# 设置临时目录
temp_dir = "D:/condaLearning/temp"
os.makedirs(temp_dir, exist_ok=True)
tempfile.tempdir = temp_dir
  • torch.serialization.add_safe_globals: 添加安全的全局变量,用于模型加载
  • os.makedirs: 创建临时目录
    • exist_ok=True表示如果目录已存在则不报错
  • tempfile.tempdir: 设置临时文件的默认目录

2.3 视频上色video_colorize函数

python 复制代码
def video_colorize(input_video):
    # 在临时目录中创建输出文件路径
    output_video_path = os.path.join(temp_dir, 'colored_video.mp4')
    # 创建视频上色管道
    colorizer = pipeline(Tasks.video_colorization, 
                        model='damo/cv_unet_video-colorization', 
                        device='cuda')
    # 进行视频上色
    result = colorizer(input_video)
    # 返回处理后的视频路径
    return result[OutputKeys.OUTPUT_VIDEO]
  • os.path.join:该函数用于将多个路径组合成为输出文件的路径output_video_path,该路径为D:/condaLearning/temp/colored_video.mp4
  • pipeline: 创建模型推理管道
    • Tasks.video_colorization: 指定任务类型为视频上色
    • model='damo/cv_unet_video-colorization': 使用ModelScope中的视频上色模型damo/cv_unet_video-colorization
    • device='cuda': 使用GPU进行推理
  • colorizer(input_video): 执行视频上色
  • result[OutputKeys.OUTPUT_VIDEO]: 获取处理后的视频路径

2.4 Gradio界面创建

python 复制代码
# 创建Gradio界面
demo = gr.Interface(
    fn=video_colorize,
    inputs=gr.Video(label="上传黑白视频"),
    outputs=gr.Video(label="上色后的视频"),
)
  • gr.Interface: 调用Gradio的Interface类,来创建Gradio界面
    • fn=video_colorize: 指定处理函数为video_colorize
    • inputs=gr.Video: 使用视频上传组件,标签为"上传黑白视频"
    • outputs=gr.Video: 使用视频显示组件,标签为"上色后的视频"

2.5 启动应用

python 复制代码
if __name__ == "__main__":
    demo.launch(share=False)
  • demo.launch: 启动Gradio服务器
    • share=False: 不创建公共链接,只在本地运行

三、完整代码

python 复制代码
import gradio as gr
import os
import torch
import tempfile
from modelscope.outputs import OutputKeys
from modelscope.pipelines import pipeline
from modelscope.utils.constant import Tasks

# 添加安全全局变量设置
torch.serialization.add_safe_globals([slice])

# 设置临时目录
temp_dir = "D:/condaLearning/temp"
os.makedirs(temp_dir, exist_ok=True)
tempfile.tempdir = temp_dir

# 定义视频上色函数
def video_colorize(input_video):
    # 在临时目录中创建输出文件路径
    output_video_path = os.path.join(temp_dir, 'colored_video.mp4')
    # 创建视频上色管道
    colorizer = pipeline(Tasks.video_colorization, model='damo/cv_unet_video-colorization', device='cuda')
    # 进行视频上色
    result = colorizer(input_video)
    # 保存上色后的视频到临时目录
    # 直接返回结果中的视频路径,而不是尝试写入文件
    return result[OutputKeys.OUTPUT_VIDEO]

# 创建Gradio界面
demo = gr.Interface(
    fn=video_colorize,
    inputs=gr.Video(label="上传黑白视频"),
    outputs=gr.Video(label="上色后的视频"),
)

if __name__ == "__main__":
    demo.launch(share=False)

四、效果展示

运行成功后,生成URL:http://127.0.0.1:7860

浏览器打开生成的URL:http://127.0.0.1:7860

打开准备好的黑白视频 ​​

处理后的视频

五、问题与解决

问题一 :ModuleNotFoundError: No module named 'xxx'(下图为示例)

解决一:pip install xxx

bash 复制代码
#过程中遇到需要安装的依赖包
pip install gradio
pip install modelscope
pip install addict
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124
pip install datasets==3.3.0
pip install simplejson
pip install sortedcontainers
pip install opencv-python
pip install ffmpeg

问题二 :ImportError: cannot import name 'get_metadata_patterns' from 'datasets.data_files'

解决二:pip install datasets==3.3.0

问题三 :PermissionError: Errno 13 Permission denied: 'D:\XXX\temp\gradio\09d4c3363b495e6c51b91b4c04a11b213ff48ceb3f09a20b7b46a238dfaf17ca\luomajiari.mp4'

解决三 :按照报错信息,将路径下的mp4缓存的文件删除

​

相关推荐
imgsq37 分钟前
电子学会考级 vs CCF-GESP:两套少儿编程考级怎么选
python·青少年编程
Smoothcloud润云1 小时前
PyTorch推理服务动态批处理实战:兼顾吞吐与延迟
人工智能·pytorch·python·深度学习·ai·gpu算力
就叫飞六吧1 小时前
nat打洞和frp区别
ai编程
码爸1 小时前
决策树介绍与示例
python·算法·机器学习
临床数据科学和人工智能兴趣组2 小时前
正则表达式的基础语法的基本符号
开发语言·人工智能·python·正则表达式·r语言·r语言-4.2.1·workbudyy
王中阳Go2 小时前
Go 后端转 AI:非科班怎么补?一张 3 列路线表(可保存)
开发语言·人工智能·后端·python·golang·大语言模型
桃西西呀2 小时前
LangGraph4j之一:客服请求分诊既要循环又要分流,我用 LangGraph4j 把控制流抽成了数据
人工智能·llm·ai编程
计算机编程指导师2 小时前
【计算机毕设选题推荐】基于Hadoop的宫颈癌变进程光谱数据分析系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·hadoop·python·数据分析·spark·毕业设计·宫颈癌变
夜雪一千3 小时前
应用层加密的优缺点
python
计算机编程指导师3 小时前
【计算机毕设选题推荐】基于Hadoop+Spark的化妆品销售大数据分析系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·hadoop·python·spark·毕业设计·课程设计·化妆品