實戰二:開發網頁端界面完成黑白視頻轉為彩色視頻

?一、需求描述

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

效果圖

?二、實現思路

總體思路:

  1. 用戶通過Gradio界面上傳黑白視頻
  2. 視頻被傳遞給video_colorize函數
  3. 函數使用ModelScope平臺提供的UNet模型進行視頻上色
  4. 處理后的視頻路徑被返回給Gradio界面
  5. 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.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界面創建

# 創建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 啟動應用

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緩存的文件刪除
?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/83991.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/83991.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/83991.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Kotlin List 操作全面指南

在傳統 Java 開發 List 相關的 API 中,有著樣板代碼冗長、缺乏鏈式調用、空安全等問題。 Kotlin 這門語言 為 List 提供了豐富的擴展函數,這些函數大大簡化了集合操作,解決了傳統 Java 集合 API 中的許多痛點。 一、基礎操作 1. 創建 List …

硬盤尋址全解析:從 CHS 三維迷宮到 LBA 線性王國

在數字存儲的底層世界,硬盤如同一個巨大的 “數據圖書館”,而尋址模式就是決定如何高效找到 “書籍”(扇區)的核心規則。從早期基于物理結構的 CHS(柱面 - 磁頭 - 扇區)三維尋址,到現代抽象化的…

oracle 11g ADG備庫報錯ORA-00449 lgwr unexpectedly分析處理

問題背景 昨天遇到群友提問,遇到ADG備庫掛了的情況 數據版本:11.2.0.4 操作系統:Centos7.9 環境:ADG主備庫,主庫為RAC,備庫也是RAC 具體報錯ORA-00449以及ORA-04021 看樣子是LGWR掛了,還有個鎖等待。 問題分析 先…

Python——day46通道注意力(SE注意力)

一、 什么是注意力 注意力機制是一種讓模型學會「選擇性關注重要信息」的特征提取器,就像人類視覺會自動忽略背景,聚焦于圖片中的主體(如貓、汽車)。 transformer中的叫做自注意力機制,他是一種自己學習自己的機制&…

入門AJAX——XMLHttpRequest(Post)

一、前言 在上篇文章中,我們已經介紹了 HMLHttpRequest 的GET 請求的基本用法,并基于我提供的接口練習了兩個簡單的例子。如果你還沒有看過第一篇文章,強烈建議你在學習完上篇文章后再學習本篇文章: 🔗入門AJAX——XM…

?BEV和OCC學習-3:mmdet3d 坐標系

目錄 坐標系 轉向角 (yaw) 的定義 框尺寸的定義 與支持的數據集的原始坐標系的關系 KITTI Waymo NuScenes Lyft ScanNet SUN RGB-D S3DIS 坐標系 坐標系 — MMDetection3D 1.4.0 文檔https://mmdetection3d.readthedocs.io/zh-cn/latest/user_guides/coord_sys_tuto…

Redis高可用架構

概述 Redis作為常用的緩存中間件,因其高性能,豐富的數據結構,使用簡單等,常被用在需要一定高性能的To C業務場景中,如「秒殺場景」「用戶信息中心」「帖子」「群聊」等等大家常見的業務場景中,以提高服務的…

使用WPF的Microsoft.Xaml.Behaviors.Wpf中通用 UI 元素事件

Nuget下載之后記得要先引用下面的 xmlns:i"http://schemas.microsoft.com/xaml/behaviors" <!-- 鼠標事件 --> <i:EventTrigger EventName"MouseEnter"/> <!-- 鼠標進入 --> <i:EventTrigger EventName"MouseLeave"/&g…

敏捷開發中如何避免過度加班

在敏捷開發過程中避免過度加班&#xff0c;需要明確敏捷原則、合理規劃迭代任務、加強團隊溝通、優化流程效率、設定合理的工作負荷、注重團隊士氣和成員健康。明確敏捷原則&#xff0c;即保證可持續發展的步調&#xff0c;避免頻繁地變更需求、過度承諾任務量。合理規劃迭代任…

JSON解析崩潰原因及解決方案

問題記錄&#xff1a; /************************************************| * 描述: 將ID124執行NFC操作-JSON解析為結構體* 函數名: cJSON_ID124_to_struct* 參數[ I]: *json_string 待解析的指針* 參數[II]: *wireless_rxd 結構體指針* 返回: 成功返回0 失…

業務系統對接大模型的基礎方案:架構設計與關鍵步驟

業務系統對接大模型&#xff1a;架構設計與關鍵步驟 在當今數字化轉型的浪潮中&#xff0c;大語言模型&#xff08;LLM&#xff09;已成為企業提升業務效率和創新能力的關鍵技術之一。將大模型集成到業務系統中&#xff0c;不僅可以優化用戶體驗&#xff0c;還能為業務決策提供…

Edge(Bing)自動領積分腳本部署——基于python和Selenium(附源碼)

微軟的 Microsoft Rewards 計劃可以通過 Bing 搜索賺取積分&#xff0c;積分可以兌換禮品卡、游戲等。每天的搜索任務不多&#xff0c;我們可以用腳本自動完成&#xff0c;提高效率&#xff0c;解放雙手。 本文將手把手教你如何部署一個自動刷積分腳本&#xff0c;并解釋其背…

前端基礎之《Vue(19)—狀態管理》

一、什么是狀態管理 1、Vue版本問題 Vue2 Vuex3 Vue3 Vuex4 / Pinia2 在使用任何技術的時候&#xff0c;都先要去搜索一下版本&#xff0c;你的版本和腳手架環境是否兼容。 2、安裝Vuex yarn add vuex3.6.2 3、狀態管理 狀態&#xff0c;在應用程序中表示數據&#xff0c…

【圖像處理基石】如何進行圖像畸變校正?

圖像畸變校正常用于計算機視覺、攝影測量學和機器人導航等領域&#xff0c;能夠修正因鏡頭光學特性或傳感器排列問題導致的圖像失真。下面我將介紹幾種常用的圖像畸變校正算法&#xff0c;并提供Python實現和測試用例。 常用算法及Python實現 1. 徑向畸變校正 徑向畸變是最常…

藍橋杯_DS18B20溫度傳感器---新手入門級別超級詳細解析

目錄 一、引言 DS18B20的原理圖 單總線簡介&#xff1a; ?編輯暫存器簡介&#xff1a; DS18B20的溫度轉換與讀取流程 二、代碼配置 maic文件 疑問 關于不同格式化輸出符號的使用 為什么要rd_temperature()/16.0&#xff1f; onewire.h文件 這個配置為什么要先讀lo…

MySQL的并發事務問題及事務隔離級別

一、并發事務問題 1). 贓讀&#xff1a;一個事務讀到另外一個事務還沒有提交的數據。 比如 B 讀取到了 A 未提交的數據。 2). 不可重復讀&#xff1a;一個事務先后讀取同一條記錄&#xff0c;但兩次讀取的數據不同&#xff0c;稱之為不可重復讀。 事務 A 兩次讀取同一條記錄&…

密碼學基礎——SM4算法

博客主頁&#xff1a;christine-rr-CSDN博客 ????專欄主頁&#xff1a;密碼學 &#x1f4cc; 【今日更新】&#x1f4cc; 對稱密碼算法——SM4 目錄 一、國密SM系列算法概述 二、SM4算法 2.1算法背景 2.2算法特點 2.3 基本部件 2.3.1 S盒 2.3.2 非線性變換 ?編輯…

練習:對象數組 4

定義數組存儲 4 個女朋友的對象。女朋友的屬性&#xff1a;姓名、年齡、性別、愛好&#xff1b;要求1&#xff1a;計算出四個女朋友的平均年齡&#xff1b;要求2&#xff1a;統計年齡比平均值低的女朋友有幾個&#xff1f;并把他們的所有信息打印出來。 代碼&#xff1a; //對…

React Hooks 基礎指南

React Hooks 是 React 16.8 引入的重要特性&#xff0c;它允許開發者在函數組件中使用狀態和其他 React 特性。本文將詳細介紹 6 個最常用的 React Hooks。 1. useState useState 是最常用的 Hook&#xff0c;用于在函數組件中添加 state。 import React, { useState } from…

【Python 算法零基礎 4.排序 ⑥ 快速排序】

既有錦繡前程可奔赴&#xff0c;亦有往日歲月可回首 —— 25.5.25 選擇排序回顧 ① 遍歷數組&#xff1a;從索引 0 到 n-1&#xff08;n 為數組長度&#xff09;。 ② 每輪確定最小值&#xff1a;假設當前索引 i 為最小值索引 min_index。從 i1 到 n-1 遍歷&#xff0c;若找到…