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相关推荐

  1. rootless宁静机制_乘风破浪的姐姐 英文名决定了你的江湖地位!

    原标题:乘风破浪的姐姐 英文名决定了你的江湖地位! <乘风破浪的姐姐>最近绝对是稳坐热点前三.第一期才刚上线,节目就已经火炸,你可以不知道隔壁妹妹的<创造营>,但<乘风破 ...

  2. 微博粉丝精灵_乘风破浪的姐姐,喂了粉丝一波文案!!!

    昨天夜里,小学时候喜欢的歌手终于出新歌了.今天白天,小时候喜欢的女明星来参加选秀了. 芒果台重磅节目<乘风破浪的姐姐>,宁静.张含韵.郁可唯.万茜.钟丽缇等等,这些大牌姐姐们放下身段参加选 ...

  3. sql日期只取年月_【官宣】免费雅思官方机考模拟考试来啦(携带2020年13月机考日期)...

    添加小秘书微信号longre_secretary,回复关键词领取福利: 回复"口语":免费获得雅思2019年口语真题 回复"剑14":获取剑桥雅思真题14电子版 ...

  4. python 抠图白幕_巧用Python,视频抠图无需绿幕

    最近参加超越杯发生了一段小插曲,主办方要求提交白底的团队介绍VCR,然而之前没有注意到这点,就找了个风景优美的地方拍摄,直到截止前才发现大事不妙. 此时自然而然地就想到抠图了!然而这次的视频背景花里胡 ...

  5. java绿幕抠图_无需绿幕的全自动视频抠图工具|unscreen

    早前我有分享过用AI算法去除图片背景的方法(AI抠图),最近看到群里有人分享了一个视频抠图的网站.同大家一起分享下. ​ 抠图是一个相关行业的必备技能,但是大部分小白只有看大声炫技的份.此时多么希望能 ...

  6. 智能视频抠图_‎App Store 上的“智能视频抠图: 一键去背景”

    最佳的视频编辑和视频换场景工具! 通过使用先进的人工智能算法,智能全自动一键进行视频抠图去背景,无需任何复杂操作! 通过人景分离替换视频中的背景,制作超现实的精彩自拍视频,让你仿佛身临奇幻空间中! V ...

  7. 没有绿幕,AI也能完美视频抠图,发丝毕现,毫无违和感 | CVPR

    鱼羊 发自 凹非寺 量子位 报道 | 公众号 QbitAI 在阳台上给小姐姐拍个视频: 再把她P到喷泉广场: 需要几步? 现在,无需绿幕,AI 就能搞定这件事. 就像这样,随便用手机给小姐姐拍张照片, ...

  8. 农行运营合规管理心得体会_“乘风破浪”的农行合规达人秀来啦

    本期热点 "乘风破浪"的农行 合规达人秀来啦 最近<乘风破浪的姐姐>综艺节目大热,播放量一周冲破5个亿,大家纷纷在探讨Pick哪位小姐姐.其实在农行,在我们身边就有这样 ...

  9. 绿幕背景视频抠图替换

    首先说明,参考的博客 https://blog.csdn.net/linqianbi/article/details/78975998 https://blog.csdn.net/linqianbi/ ...

  10. 优酷视频怎么转二维码_优酷视频转二维码

    有的人想将自己制作的视频分享出去,那么该如何将视频转换成二维码来分享呢?其实方法很简单,直接在视频界面中就能生成,这里和大家讲讲. 01. 登录自己的优酷帐号,然后点击右上角的上传按钮. 优酷视频怎么 ...

最新文章

  1. 当量子计算和机器学习相遇,会碰撞出什么火花?
  2. windows10mysql安装包_windows10上安装mysql8(zip包)
  3. find:查找文件或目录
  4. 当直播电商用上 AI 实时翻译,歪果仁也能听懂李佳琦
  5. 编写可复用的自定义按钮
  6. linux i3 桌面,Linux安装i3wm平铺式窗口桌面
  7. 创业公司操蛋的面试过程
  8. Java字符串相关的类详解
  9. glassfish 配置 mysql_GlassFish MySql连接池配置 | 学步园
  10. D2 日报 2019年3月20日
  11. caffe版本-车型检测-A Large-Scale Car Dataset for Fine-Grained Categorization and Verification
  12. django实现上传头像和头像展示功能
  13. 273222-06-3,(2S,4R)-Boc-4-amino-1-Fmoc-pyrrolidine-2-carboxylic acid,(2S,4R)-Fmoc-4-叔丁氧羰基氨基吡咯烷-2-甲酸
  14. 以太坊:Etherscan 使用说明
  15. Python:列表去重的两种方法
  16. 小白终是踏上了这条不归路----小文的mysql学习笔记(6)----连接查询-----等值连接、非等值连接、自链接、外连接、交叉连接
  17. vscode json文件配置
  18. 基于UKF的智能泊车MATLAB的仿真,带GUI界面
  19. 原生JS利用HTML5 CANVAS画布布局点状连线图
  20. 人事管理系统开发功能需求

热门文章

  1. ArcPad 10 的安装部署
  2. 贴片铝电容识别及型号_贴片铝电解电容封装尺寸定义.pdf
  3. 番茄助手在VS2017中的设置
  4. 网易云课堂-吴恩达机器学习-学习归纳-1-初识机器学习
  5. 不光荣的“革命”——“甘露之变”后的晚唐政治
  6. iphone图片编辑画笔_苹果手机截屏后怎么编辑,这么实用你可一定要知道
  7. Linux性能测试工具
  8. 将base64格式的图片下载到本地
  9. react-countup 电子表数字样式 定时滚动 大屏需要 炫酷
  10. python下载pps视频