日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

飞桨PaddleHub带你环游世界,快来试试Python一键视频抠图吧

發(fā)布時間:2023/12/9 python 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 飞桨PaddleHub带你环游世界,快来试试Python一键视频抠图吧 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在視頻創(chuàng)作過程中,有時會遇到人像摳圖的需求,最一般的做法是使用PR、AE等工具將視頻中的每一幀圖像手動摳圖。這么繁瑣的步驟在理工男面前簡直是不可存在的,那么有什么簡單的方法能快速摳圖嗎?當然有啦,接下來給大家介紹如何使用PaddleHub一鍵視頻人像摳圖。

效果展示

首先展示一些摳圖完畢的小片段,上一秒我還在家里的小房間,下一秒我就出現在了土耳其。

那順便去看看埃菲爾鐵塔唄。

到洛杉磯的海邊散散步。

到上海歡樂谷鍛煉鍛煉身體。

最后到東京的觀景臺上看個日落

視頻效果是不是很逼真呢,一天環(huán)游世界不是夢哈哈哈……

其實這些人像素材都是在房間里拍攝,然后使用PaddleHub工具庫一鍵摳圖,最后使用PR進行后期創(chuàng)作的,接下來介紹下如何操作吧。

?

這是如何實現的?

關注飛槳的小伙伴是否還記得前幾天推過的別再用PS了,我用5行Python代碼就實現了批量摳圖,視頻人像摳圖也是類似的,只要把視頻的每一幀圖像所含有的人像提取出來,然后加上背景重新合成視頻就可以啦。大體的步驟知道了,那接下來開始實踐吧。

哦對了,還得有一段含有人像的素材,小伙伴們可以自己拍攝或者從網絡搜集。

01

安裝必要組建

需要安裝的是飛槳框架和PaddleHub工具庫,安裝步驟可以參考別再用PS了,我用5行Python代碼就實現了批量摳圖。或者直接進入飛槳官網查看安裝步驟:

https://www.paddlepaddle.org.cn

02

人像摳圖制作素材

由于目前PaddleHub人像摳圖模型API的輸入是單張圖像的路徑,故需要先將視頻的每一幀圖像分離存儲后才能進行摳圖。當然也可以通過修改模型的源碼,將API的輸入修改成圖像輸入,這樣就省去了視頻分離存儲的步驟,具體的源碼可以參考:

https://aistudio.baidu.com/aistudio/projectdetail/370260,這里主要介紹前一種方法。

2.1 導入所有相關模塊

import?cv2 import?os import?numpy?as?np from?PIL?import?Image import?paddlehub?as?hub

2.2 將視頻內圖像分離存儲

def?CutVideo2Image(video_path,?img_path):cap?=?cv2.VideoCapture(video_path)index?=?0while(True):ret,frame?=?cap.read()?if?ret:cv2.imwrite(img_path?+?'%d.jpg'?%?index,?frame)index?+=?1else:breakcap.release()print('Video?cut?finish,?all?%d?frame'?%?index)

該步驟將會把每一幀圖像保存到本地目錄。

2.3 導入模型進行人像摳圖

def?GetHumanSeg(frame_path,?out_path):#?加載模型module?=?hub.Module(name="deeplabv3p_xception65_humanseg")#?配置test_img_path?=?[os.path.join(frame_path,?fname)?for?fname?in?os.listdir(in_path)]input_dict?=?{"image":?test_img_path}results?=?module.segmentation(data=input_dict,?output_dir=out_path)# Tips:使用GPU加速需安裝paddlepaddle-gpu#?results?=?module.segmentation(data=input_dict,?use_gpu?=?gpu,?batch_size?=?10,output_dir=out_path)

該步驟將會把人像提取并保存為png至本地

2.4 生成綠幕并與人像合成

為什么要使用綠幕呢,主要是為了后續(xù)在視頻后期軟件里方便使用素材。當然熟悉Python的同學也可以直接使用一些Python模塊進行視頻后期。但是在這里還是推薦使用PR、AE這類專業(yè)軟件,可以方便地對素材進行縮放、變速、位置處理、以及添加特效等操作。更重要的是,可以對素材進行調色,與新的背景更好地融合。

def?init_canvas(width,?height,?color=(255,?255,?255)):canvas?=?np.ones((height,?width,?3),?dtype="uint8")canvas[:]?=?colorreturn?canvas #?生成綠幕def?GetGreenScreen(size,?out_path):canvas?=?init_canvas(size[0],?size[1],?color=(0,?255,?0))cv2.imwrite(out_path,?canvas)def?BlendImg(fore_image,?base_image,?output_path):"""將摳出的人物圖像換背景fore_image:?前景圖片,摳出的人物圖片base_image:?背景圖片"""#?讀入圖片base_image?=?Image.open(base_image).convert('RGB')fore_image?=?Image.open(fore_image).resize(base_image.size)#?圖片加權合成scope_map?=?np.array(fore_image)[:,:,-1]?/?255scope_map?=?scope_map[:,:,np.newaxis]scope_map?=?np.repeat(scope_map,?repeats=3,?axis=2)res_image?=?np.multiply(scope_map,?np.array(fore_image)[:,:,:3])?+?np.multiply((1-scope_map),?np.array(base_image))#?保存圖片res_image?=?Image.fromarray(np.uint8(res_image))res_image.save(output_path)def?BlendHumanImg(in_path,?screen_path,?out_path):humanseg_png?=?[filename?for?filename?in?os.listdir(in_path)]for?i,?img?in?enumerate(humanseg_png):img_path?=?os.path.join(in_path?+?'%d.png'?%?(i))output_path_img?=?out_path?+?'%d.png'?%?iBlendImg(img_path,?screen_path,?output_path_img)

該步驟完成后將會得到類似這樣的綠幕圖片:

2.5 視頻合成

def?CompVideo(in_path,?out_path,?size):fourcc?=?cv2.VideoWriter_fourcc(*'mp4v')out?=?cv2.VideoWriter(out_path,fourcc,?30.0,?size)files?=?os.listdir(in_path)for?i?in?range(len(files)):img?=?cv2.imread(in_path?+?'%d.png'?%?i)out.write(img)????#?保存幀out.release()

該步驟完成后即可得到類似下圖的人體綠幕素材

2.6 主程序

#?Config Video_Path?=?'video/0.mp4' Video_Size?=?(1920,?1080) FrameCut_Path?=?'video/frame/' FrameSeg_Path?=?'video/frame_seg/' FrameCom_Path?=?'video/frame_com/' GreenScreen_Path?=?'video/green.jpg' ComOut_Path?=?'output.mp4'if?__name__?==?"__main__":#?第一步:視頻->圖像if?not?os.path.exists(FrameCut_Path):os.mkdir(FrameCut_Path)?????CutVideo2Image(Video_Path,?FrameCut_Path)#?第二步:摳圖if?not?os.path.exists(FrameSeg_Path):os.mkdir(FrameSeg_Path)?GetHumanSeg(FrameCut_Path,?FrameSeg_Path)#?第三步:生成綠幕并合成if?not?os.path.exists(GreenScreen_Path):GetGreenScreen(Video_Size,?GreenScreen_Path)if?not?os.path.exists(FrameCom_Path):os.mkdir(FrameCom_Path)?BlendHumanImg(FrameSeg_Path,?GreenScreen_Path,?FrameCom_Path)#?第四步:合成視頻if?not?os.path.exists(ComOut_Path):CompVideo(FrameCom_Path,?ComOut_Path,?Video_Size)

OK,綠幕素材都已經制作完畢,下一步就可以導入到后期軟件內進行創(chuàng)作啦,這里以PR為例。

03

后期創(chuàng)作

將綠幕素材和背景素材導入PR,在綠幕素材上使用`超級鍵`效果,并將主要顏色選取為綠幕的顏色,即可輕松去除綠幕顏色。

再往后的各種騷操作就看各位小伙伴的想象力啦!

這里附上我的作品:[AI人像摳圖]|百度PaddleHub摳圖創(chuàng)意賽[附教程、代碼]:

https://www.bilibili.com/video/BV1cA411b7r2

目前存在的問題:

  • 頭發(fā)、手指等細節(jié)部分還需要進一步完善。

  • 人體動作幅度大導致圖像幀模糊,會造成提取失敗。

  • 模型的API接口有待繼續(xù)豐富。

不過聽說百度飛槳后續(xù)會針對視頻流推出更高效的人像分割模型,真是讓人期待呀!

如果使用過程中遇到任何問題,大家可通過以下聯(lián)系方式進行技術交流及問題反饋。

PaddleHub issue:

https://github.com/PaddlePaddle/PaddleHub/issues

官方QQ群:703252161。如果您加入官方QQ群,您將遇上大批志同道合的深度學習同學。

如果您想詳細了解更多飛槳的相關內容,請參閱以下文檔。

官網地址:https://www.paddlepaddle.org.cn

  • PaddleHub項目地址:

GitHub: https://github.com/PaddlePaddle/PaddleHub

Gitee: ?https://gitee.com/paddlepaddle/PaddleHub

  • PaddleHub 官網:

https://www.paddlepaddle.org.cn/hub

  • PaddleHub 預訓練模型:

https://www.paddlepaddle.org.cn/hublist

  • PaddleHub 文檔:

https://github.com/PaddlePaddle/PaddleHub/tree/release/v1.6/docs

  • PaddleHub demo:

https://github.com/PaddlePaddle/PaddleHub/tree/release/v1.6/demo

  • PaddleHub AI Studio官方教程示例:

https://aistudio.baidu.com/aistudio/personalcenter/thirdview/79927

  • 飛槳PaddleSeg項目地址:

https://github.com/PaddlePaddle/PaddleSeg

  • 飛槳開源框架項目地址:

GitHub: https://github.com/PaddlePaddle/Paddle

Gitee: ?https://gitee.com/paddlepaddle/Paddle

END

總結

以上是生活随笔為你收集整理的飞桨PaddleHub带你环游世界,快来试试Python一键视频抠图吧的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。