本程序基于百度飞浆 PaddlePaddle 平台完成。

该程序通过DeepLabv3+模型完成一键抠图。

encoder-decoder进行多尺度信息的融合,同时保留了原来的空洞卷积和ASSP层, 其骨干网络使用了Xception模型,提高了语义分割的健壮性和运行速率,在 PASCAL VOC 2012 dataset取得新的state-of-art performance,该PaddleHub Module使用百度自建数据集进行训练,可用于人像分割,支持任意大小的图片输入。

在完成一键抠图之后,通过视频的合成,实现有趣的应用!

程序实现

首先安装 paddlehub

pip install paddlehub==1.6.0 -i https://pypi.tuna.tsinghua.edu.cn/simple

载入目标图片

# 待预测图片
img_name = 'ty.jpg'
test_img_path = ["./"+img_name]
#test_img_path = ["./meditation.jpg"]import matplotlib.pyplot as plt
import matplotlib.image as mpimg img = mpimg.imread(test_img_path[0]) # 展示待预测图片
plt.figure(figsize=(10,10))
plt.imshow(img)
plt.axis('off')
plt.show()


加载预训练模型

import paddlehub as hubmodule = hub.Module(name="deeplabv3p_xception65_humanseg")input_dict = {"image": test_img_path}# execute predict and print the result
results = module.segmentation(data=input_dict)
for result in results:print(result)# 预测结果展示
test_img_path = "./humanseg_output/"+img_name.split('.')[0]+'.png'
img = mpimg.imread(test_img_path)
plt.figure(figsize=(10,10))
plt.imshow(img)
plt.axis('off')
plt.show()


视频图像提取

import cv2
import matplotlib.pyplot as plt
from PIL import Image
import numpy as npcap = cv2.VideoCapture("a.mp4")
i=1
while True:ret, frame = cap.read()if frame is None:breakelse:img = Image.fromarray(np.uint8(frame))img.save('./vedio_img/'+str(i)+".jpg")i+=1


图像合成

from PIL import Image
import numpy as npdef blend_images(fore_image, base_image, img_num):
#def blend_images(fore_image, base_image):"""将抠出的人物图像换背景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('./vedio_img_out/'+str(img_num)+".jpg")

设定何时进入画面

import os# 合成几张图片
path = './vedio_img/'
filelist = os.listdir(path)
img_num = len(filelist)# 你想在第几张图片的时候跳进视频
jump_in = 108for i in range(jump_in,img_num):blend_images('./humanseg_output/'+img_name.split('.')[0]+'.png', './vedio_img/'+str(i+1)+".jpg", i+1)

其他部分用原始画面

# 其他部分我们用原来提取的图片
for i in range(jump_in):b_img = Image.open('./vedio_img/'+str(i+1)+".jpg").convert('RGB')s_img = Image.fromarray(np.uint8(b_img))s_img.save('./vedio_img_out/'+str(i+1)+".jpg")

最后合成视频

# 合成视频
import cv2
import os# 查看原始视频的参数
cap = cv2.VideoCapture("a.mp4")
ret, frame = cap.read()
height=frame.shape[0]
width=frame.shape[1]
fps = cap.get(cv2.CAP_PROP_FPS)  #返回视频的fps--帧率
size=cap.get(cv2.CAP_PROP_FRAME_WIDTH)  #返回视频的宽,等同于frame.shape[1]
size1=cap.get(cv2.CAP_PROP_FRAME_HEIGHT)  #返回视频的高,等同于frame.shape[0]#把参数用到我们要创建的视频上
video = cv2.VideoWriter('b.mp4', cv2.VideoWriter_fourcc('m', 'p', '4', 'v'), fps, (width,height)) #创建视频流对象path = './vedio_img_out/'
filelist = os.listdir(path)
img_num = len(filelist)for i in range(img_num):#if item.endswith('.jpg'):   #判断图片后缀是否是.pngitem = path + str(i+1) + '.jpg' img = cv2.imread(item)  #使用opencv读取图像,直接返回numpy.ndarray 对象,通道顺序为BGR ,注意是BGR,通道值默认范围0-255。video.write(img)        #把图片写进视频
video.release() #释放


利用 moviepy 把原视频的音频合成到我们新的视频上

# 提取原音频,合成到新的视频上
from moviepy.editor import *
video_o = VideoFileClip("a.mp4")
videoclip = VideoFileClip("b.mp4")
audio_o = video_o.audiovideoclip2 = videoclip.set_audio(audio_o)videoclip2.write_videofile("c.mp4")

欢迎大家交流有趣的应用!

AI人像抠图及视频合成:让你体验复仇者联盟的终局之战相关推荐

  1. 蓝松视觉科技 AI人像抠图说明

    AI人像抠图的API 文章目录 AI人像抠图的API 1. 初始化 2.1 抠图API (nv21输入格式) 2.2 抠图API (rgba输入格式) 3. 释放抠图对象 4. 其他API 赠送的解释 ...

  2. 蓝松AI人像抠图的接口说明

    AI人像抠图的API 文章目录 AI人像抠图的API 1. 初始化 2.1 抠图API (nv21输入格式) 2.2 抠图API (rgba输入格式) 3. 释放抠图对象 4. 其他API 赠送的解释 ...

  3. (记录)PaddleHub创意赛:AI人像抠图及图像合成

    文章目录 PaddleHub创意赛:AI人像抠图及图像合成 一.安装环境(这里面有几个坑) 二.接下来就``开始P图 1. 引入包 2. 加载预训练模型(挺厉害的不得不说) 3. 图像合成 Paddl ...

  4. PaddleHub人像分割模型:AI人像抠图及图像合成

    点击上方"AI搞事情"关注我们 本项目根据DeepLabv3+模型一键抠图示例,主要采用PaddleHub DeepLabv3+模型(deeplabv3p_xception65_h ...

  5. python人像精细分割_PaddleHub人像分割模型:AI人像抠图及图像合成

    本项目根据DeepLabv3+模型一键抠图示例,主要采用PaddleHub DeepLabv3+模型(deeplabv3p_xception65_humanseg)和python图像处理库opencv ...

  6. AI人像抠图及图像合成:让你一键环游世界

    本程序基于百度飞浆 PaddlePaddle 平台完成. 该程序通过DeepLabv3+模型完成一键抠图. encoder-decoder进行多尺度信息的融合,同时保留了原来的空洞卷积和ASSP层, ...

  7. 蓝松AI人像抠图SDK(无绿幕实时抠图)

  8. 人像抠图 人体抠图SDK、AI人像分割SDK、AI智能抠像、视频人体抠像换背景

    人体抠图SDK.AI人像分割(智能抠像) 是通过领先的AI技术,可以迅速精准地分离出视频.图片中的人像.实景抠像,无需绿幕.AE.PR等繁琐复杂工具,简单几秒即可获取抠像画面. 随时随地抠像,背景任意 ...

  9. (六)图像背景移除/去背景/换背景/抠图/抠像代码示例:AI实时抠图、AI实时抠像、PaddlePaddle模型、虚拟现实视频会议、沉浸式会议场景、人像去背景、视频背景消除、摄像头背景移除

    (六)图像背景移除/去背景/换背景/抠图/抠像代码示例:AI实时抠图.AI实时抠像.PaddlePaddle模型.虚拟现实视频会议.沉浸式会议场景.人像去背景.视频背景消除.摄像头背景移除 本文与前几 ...

最新文章

  1. eclipese web前端开发教学_Web前端零基础好学吗?新手该怎么学?
  2. Java中十六进制转换 Integer.toHexString()
  3. Module System of Swift (简析 Swift 的模块系统)
  4. 日本共享自行车建立的强大地下停车系统
  5. 为什么idea的断点变黑了_IntelliJ IDEA Debug回退断点
  6. linux逻辑文件块,linux逻辑卷组创建以及修改
  7. php tp写构造函数,详细介绍ThinkPHP中类的构造函数_construct()与_initialize()的区别
  8. 相同布局在不同手机上显示不同_React Native布局详细指南
  9. 手机听筒被灰尘堵塞了如何清洗?
  10. python——类别数据,根据类别自动选择颜色
  11. CSS实现tag标签挂载放到卡片上
  12. Linux命令——set 和 unset
  13. jQuery文档操作常用方法1
  14. canvas画图及圆形的头像
  15. Spreadsheet电子表格控件安装及用法总结
  16. 军团要塞2正版服务器,Team Fortress 2
  17. 实现加减乘除任意组合的语法解析
  18. P2742 【模板】二维凸包 / [USACO5.1]圈奶牛Fencing the Cows
  19. 电子数字计算机的应用,你了解电子数字计算机的发展吗?人类是如何应用计算机技术的?...
  20. 网络舆情信息查询方法有哪些?具体解决方法详解

热门文章

  1. 人工智能与能源行业的革命
  2. 怎样做研究生-麻省理工学院(MIT)研究生学习指导-转
  3. 论文阅读:A Survey on Evolutionary Constrained Multi-objective Optimization,来自TEVC
  4. ATECC508A芯片开发笔记(七):实现数字签名(Sign)并校验(Verify)证书签名
  5. 解决adb logcat日志保存无法停止的问题
  6. 浙江省计量院研制了一套可以对光纤光栅传感器进行实验室和在线计量的装置
  7. 1.19.7.Table API、SQL、数据类型、保留关键字、查询语句、指定查询、执行查询、语法、操作符、无排名输出优化、去重、分组窗口、时间属性、选择分组窗口的开始和结束时间戳、模式匹配
  8. 华为--FR帧中继及hub-spoke网络,手工指定邻居状态现象
  9. 什么是vr全景拍摄?vr的vr全景拍摄如何进行?
  10. internet download manager(IDM下载器) 6.40