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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

paddlehub 使用体验-视频抠图_乘风破浪的姐姐_人美路子野 2020-08-13

發布時間:2023/12/9 编程问答 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 paddlehub 使用体验-视频抠图_乘风破浪的姐姐_人美路子野 2020-08-13 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

paddlehub 使用體驗-視頻摳圖_乘風破浪的姐姐_人美路子野

PaddleHub就是為了解決對深度學習模型的需求而開發的工具。 基于飛槳領先的核心框架, 精選效果優秀的算法, 提供了百億級大數據訓練的預訓練模型, 方便用戶不用花費大量精力從頭開始訓練一個模型。
PaddleHub的github地址: https://github.com/PaddlePaddle/PaddleHub

首先介紹paddlehub的主要優勢:

  • 模型一鍵下載、 管理、 預測
  • 遷移學習
    Fine-tune API: 十行代碼完成遷移學習
    AutoDL Finetuner: 一鍵自動超參搜索
  • 端到端部署
    Hub Serving: 一鍵模型服務化部署

接下來實踐部分:

實踐介紹:主要對乘風破浪的姐姐中人美路子野mv進行人像摳圖,然后更換背景后,合并成新的一個視頻。采用該mv是因為該視頻中人物鮮明,為順序出場安排,更加方便的查看模型摳圖后的效果。

點擊查看: 素材視頻傳送門

1.[ 模型即軟件 ] 是paddlehub的使用原則,因此,使用paddlehub中的模型,重點應偏向于應用,拿來就用就OK了。

  • PaddleHub的官網: https://www.paddlepaddle.org.cn/hub
  • PaddleHub的課程地址: https://aistudio.baidu.com/aistudio/course/introduce/1070
  • PaddleHub的官方教程地址: https://aistudio.baidu.com/aistudio/personalcenter/thirdview/79927
  • 直接在AiStudio上對paddlehub進行一個安裝。

2. 主要流程是:視頻分幀–>進行摳圖–>添加背景圖片–>將每個圖片合并成視頻
首先看下文件目錄結構:

然后加載預訓練模型:加載模型時候是要輸入模型名稱即可,此處使用的模型是 “deeplabv3p_xception65_humanseg”

module = hub.Module(name="deeplabv3p_xception65_humanseg") input_dict = {"image": test_img_path}# 執行并展示結果 results = module.segmentation(data=input_dict) for result in results:print(result)

預測結果(即摳圖的效果)進行展示:

# 預測結果展示 out_img_path = 'humanseg_output/' + os.path.basename(test_img_path[0]).split('.')[0] + '.png' img = mpimg.imread(out_img_path) plt.figure(figsize=(10,10)) plt.imshow(img) plt.axis('off') plt.show()


將扣出的人物圖片與選擇的背景圖片進行融合主要函數:

# 合成函數 def blend_images(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)return res_image

效果展示:

3. GIF函數處理

def create_gif(gif_name, path, duration=0.3):'''生成gif文件,原始圖片僅支持png格式gif_name : 字符串,所生成的 gif 文件名,帶 .gif 后綴path : 需要合成為 gif 的圖片所在路徑duration : gif 圖像時間間隔'''frames = []pngFiles = os.listdir(path)image_list = [os.path.join(path, f) for f in pngFiles]for image_name in image_list:frames.append(imageio.imread(image_name))# 保存為 gifimageio.mimsave(gif_name, frames, 'GIF', duration=duration)returndef split_gif(gif_name, output_path, resize=False):'''拆分gif文件,生成png格式,便于生成gif_name : gif 文件路徑,帶 .gif 后綴path : 拆分圖片所在路徑'''gif_file = Image.open(gif_name)name = gif_name.split('/')[-1].split('.')[0]if not os.path.exists(output_path): # 判斷該文件夾是否存在,如果存在再創建則會報錯os.mkdir(output_path)for i, frame in enumerate(ImageSequence.Iterator(gif_file), 1):if resize:frame = frame.resize((300, 168), Image.ANTIALIAS)frame.save('%s/%s_%d.png' % (output_path, name, i)) # 保存在等目錄的output文件夾下def plot_sequence_images(image_array):''' Display images sequence as an animation in jupyter notebookArgs:image_array(numpy.ndarray): image_array.shape equal to (num_images, height, width, num_channels)'''dpi = 72.0xpixels, ypixels = image_array[0].shape[:2]fig = plt.figure(figsize=(ypixels/dpi, xpixels/dpi), dpi=dpi)im = plt.figimage(image_array[0])def animate(i):im.set_array(image_array[i])return (im,)anim = animation.FuncAnimation(fig, animate, frames=len(image_array), interval=500, repeat_delay=1, repeat=True)display(HTML(anim.to_html5_video()))# 合成GIF create_gif('image/blend_out/blend_res_wushu.gif', './wushu_frame', duration=0.5)imgs = [] for i, fname in enumerate(os.listdir('image/blend_out/wushu/')): img = cv2.imread('image/blend_out/wushu/' + fname)img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) imgs.append(img_rgb) plot_sequence_images(imgs)

效果展示:

4. 將分割后的圖片與背景圖進行合并

# 合成圖片 humanseg_wushu = [filename for filename in os.listdir('./humanseg_output/') if filename.startswith("wushu")] # print(humanseg_wushu)for i, img in enumerate(humanseg_wushu):# print(i)# if i > 50: continue img_path = os.path.join('./wushu_frame/wushu_%d.png' % (i+1))# print(img_path)output_path_img = output_path + 'wushu/%d.png' % i# print(output_path_img)blend_images(img_path, './image/test/12.png', output_path_img)

5. 輸出視頻,成avi格式

# 合并輸出視頻 humanseg_wushu = [filename for filename in os.listdir('image/video/frame_seg/')] for i, img in enumerate(humanseg_wushu):if i <= 145 or (i >= 250 and i <= 427) or (i >= 552 and i <= 601) or (i >= 729 and i <= 761):img_path = os.path.join('image/video/frame_seg/%d.png' % (i+1))output_path_img = output_path + 'video/%d.png' % iimg = blend_images(img_path, 'image/test/bg2.jpg', output_path_img)if (i >= 146 and i <= 249) or (i >= 428 and i<= 551) or (i >= 602 and i<= 728):img_path = os.path.join('image/video/frame_seg/%d.png' % (i+1))output_path_img = output_path + 'video/%d.png' % iimg = blend_images(img_path, 'image/test/bg3.jpg', output_path_img)

效果展示

后期處理:
為視頻添加音頻文件。
點擊查看: 處理后的完整視頻傳送門 因音頻是后期加上去的,所以未免會出現口型對不上的情況。

總結:
1、paddlehub為想要直接使用框架處理具體問題的用戶提供了便捷。
2、paddlehub也可以快速驗證一些你的想法。
3、有時間可以通過閱讀paddlehub在github上面的源碼來獲得對模型以及訓練過程更加深刻的認識。

最后: 圖文并茂的使用指南




總結

以上是生活随笔為你收集整理的paddlehub 使用体验-视频抠图_乘风破浪的姐姐_人美路子野 2020-08-13的全部內容,希望文章能夠幫你解決所遇到的問題。

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