?一、需求描述
設計一個簡單的視頻上色應用,用戶可以通過網頁界面上傳黑白視頻,系統會自動將其轉換為彩色視頻。整個過程對用戶來說非常簡單直觀,不需要了解技術細節。

?二、實現思路
總體思路:
- 用戶通過Gradio界面上傳黑白視頻
- 視頻被傳遞給
video_colorize
函數 - 函數使用ModelScope平臺提供的UNet模型進行視頻上色
- 處理后的視頻路徑被返回給Gradio界面
- Gradio界面顯示上色后的視頻
2.1 導入依賴庫
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 安全設置和臨時目錄配置
# 添加安全全局變量設置
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函數
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.mp4pipeline
: 創建模型推理管道Tasks.video_colorization
: 指定任務類型為視頻上色model='damo/cv_unet_video-colorization'
: 使用ModelScope中的視頻上色模型damo/cv_unet_video-colorizationdevice='cuda'
: 使用GPU進行推理
colorizer(input_video)
: 執行視頻上色result[OutputKeys.OUTPUT_VIDEO]
: 獲取處理后的視頻路徑
2.4 Gradio界面創建
# 創建Gradio界面
demo = gr.Interface(fn=video_colorize,inputs=gr.Video(label="上傳黑白視頻"),outputs=gr.Video(label="上色后的視頻"),
)
gr.Interface
: 調用Gradio的Interface類,來創建Gradio界面fn=video_colorize
: 指定處理函數為video_colorizeinputs=gr.Video
: 使用視頻上傳組件,標簽為"上傳黑白視頻"outputs=gr.Video
: 使用視頻顯示組件,標簽為"上色后的視頻"
2.5 啟動應用
if __name__ == "__main__":demo.launch(share=False)
demo.launch
: 啟動Gradio服務器share=False
: 不創建公共鏈接,只在本地運行
三、完整代碼
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
#過程中遇到需要安裝的依賴包
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緩存的文件刪除
?