0

0

数字文创:冰冰老婆带你去旅游---基于paddlehub的人像分割与视频合成

P粉084495128

P粉084495128

发布时间:2025-07-30 10:15:44

|

229人浏览过

|

来源于php中文网

原创

该项目基于PaddleHub的deeplabv3p_xception65_humanseg模型实现人像分割,可将人物从原始采访视频中抠出并贴合到背景视频。流程为:安装环境后,对背景和人像视频切片,平移人像,用模型抠像,合并抠像与背景图,最终合成带音乐的视频。

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

数字文创:冰冰老婆带你去旅游---基于paddlehub的人像分割与视频合成 - php中文网

Pixlr
Pixlr

Pixlr是一款2008年推出的在线图片编辑和AI图片处理工具,目前已推出AI 图像生成器、AI 生成填充、AI 删除背景、AI 删除对象和 AI 图像扩展等现代 AI 工具。

下载

冰冰老婆带你去旅游---基于paddlehub的人像分割

背景介绍

本项目是基于deeplabv3p_xception65_humanseg模型的人像分割,实现效果:将人物从原始采访视频中抠出,贴到一个背景视频中,实现了视频抠像。

简介:

deepLabv3+ 是Google DeepLab语义分割系列网络的最新作,其前作有 DeepLabv1, DeepLabv2, DeepLabv3。

在最新作中,作者通过encoder-decoder进行多尺度信息的融合,同时保留了原来的空洞卷积和ASSP层,

其骨干网络使用了Xception模型,提高了语义分割的健壮性和运行速率,在 PASCAL VOC 2012 dataset取得新的state-of-art performance。

该PaddleHub Module使用百度自建数据集进行训练,可用于人像分割,支持任意大小的图片输入。

原视频:

合成后效果:

一,安装环境

本项目使用paddlehub。PaddleHub是飞桨预训练模型管理和迁移学习工具,通过PaddleHub开发者可以使用高质量的预训练模型结合Fine-tune API快速完成迁移学习到应用部署的全流程工作。 PaddleHub GitHub: https://github.com/PaddlePaddle/PaddleHub

In [1]
!pip install -U paddlehub -i https://pypi.tuna.tsinghua.edu.cn/simple
In [2]
import numpy as npimport matplotlib.image as mpimgimport matplotlib.pyplot as pltimport osfrom PIL import Imageimport paddlehub as hubimport cv2from moviepy.editor import VideoFileClipimport shutil
In [3]
os.environ["CUDA_VISIBLE_DEVICES"]="0"#GPU模式

二,视频切片

In [4]
#背景视频转jpgdef video_to_pic():
    if os.path.exists('./background_pic'):
        shutil.rmtree('./background_pic')#删除文件夹以及文件       
    os.mkdir('./background_pic')#创建文件夹
    index = 0
    cap = cv2.VideoCapture('./background.mp4')
    ret,frame = cap.read()    while ret:
        cv2.imwrite('./background_pic/%d.jpg'%index, frame)
        index += 1
        ret,frame = cap.read()
    cap.release()    print('Video cut finish, all %d frame' % index)
video_to_pic()
Video cut finish, all 434 frame
In [5]
#人像视频转jpgdef video_to_pic():
    if os.path.exists('./video_pic'):
        shutil.rmtree('./video_pic')#删除文件夹以及文件       
    os.mkdir('./video_pic')#创建文件夹
    index = 0
    cap = cv2.VideoCapture('./xxm.mp4')
    ret,frame = cap.read()    while ret:
        cv2.imwrite('./video_pic/%d.jpg'%index, frame)
        index += 1
        ret,frame = cap.read()
    cap.release()    print('Video cut finish, all %d frame' % index)
video_to_pic()
Video cut finish, all 319 frame

三,人物平移

In [6]
#图片平移def tl(img_path):
    '''x轴平移输出两张jpg图片,dest1,dest2'''
    img = cv2.imread(img_path)
    rows,cols, channel = img.shape# 平移矩阵M:[[1,0,x],[0,1,y]]
    M1 = np.float32([[1,0,400],[0,1,0]])    #M2 = np.float32([[1,0,-400],[0,1,0]])
    dest1 = cv2.warpAffine(img,M1,(cols,rows), borderValue=(255, 255, 255))#仿射平移
    #dest2 = cv2.warpAffine(img,M2,(cols,rows), borderValue=(255, 255, 255))
    
    cv2.imwrite('./dest1'+'/'+file,dest1)#保存图片
   # cv2.imwrite('./dest2'+'/'+file,dest2)
    # print('保存平移图片成功')
In [7]
#保存平移后的图片(背景)#filename_list = os.listdir('background_pic')#if os.path.exists('dest2'):#    shutil.rmtree('dest2')#os.mkdir('dest2')#for file in filename_list:#    tl('./background_pic'+'/'+file)#print("文件已创建")
In [8]
#保存平移后的图片(人像)filename_list = os.listdir('video_pic')if os.path.exists('dest1'):
    shutil.rmtree('dest1')
os.mkdir('dest1')for file in filename_list:
    tl('./video_pic'+'/'+file)print("文件已创建")
文件已创建

四,人物抠像

In [9]
#扣出平移后图片中的人像def seg_pic(path,savepath):
    i = 0
    module= hub.Module(name="deeplabv3p_xception65_humanseg")
    pic_path = path    if os.path.exists(savepath):
        shutil.rmtree(savepath)
    os.mkdir(savepath)
    
    filename_list = os.listdir(pic_path)
    filename_list.sort(key=lambda x: int(x[:-4]))#图片排序
    
    for fname in filename_list:
        result = module.segmentation(images=[cv2.imread(pic_path+'/'+fname)], visualization=True, output_dir=savepath,use_gpu=True)        #print('已处理处理',pic_path,'图片:', i)
        i+=1
    
    filename_list = os.listdir(savepath)
    filename_list.sort()
    i=0
    for file in filename_list:
        os.rename(savepath+'/'+file,savepath+'/'+str(i)+'.jpg')#(修改前目录名,修改后名)
        i+=1
    print('抠图完成')#左边原图路径,右边抠图输出路径seg_pic('dest1','res_dest1')#seg_pic('dest2','res_dest2')
Download https://bj.bcebos.com/paddlehub/paddlehub_dev/deeplabv3p_xception65_humanseg.tar.gz
[##################################################] 100.00%
Decompress /home/aistudio/.paddlehub/tmp/tmpg981rhya/deeplabv3p_xception65_humanseg.tar.gz
[##################################################] 100.00%
[2021-09-27 09:46:31,837] [    INFO] - Successfully installed deeplabv3p_xception65_humanseg-1.1.2
[2021-09-27 09:46:31,974] [ WARNING] - The _initialize method in HubModule will soon be deprecated, you can use the __init__() to handle the initialization of the object
抠图完成

五,抠出的人像与原图合并

In [10]
#将扣出的人像与原图合并def blend_images(fore_path, base_path ,savepath):
    """
    将抠出的人物图像换背景
    fore_image: 前景图片,抠出的人物图片
    base_image: 背景图片
    """
    filename_list = os.listdir(fore_path)    for fname in filename_list:
        fore_image = fore_path + '/' + fname 
        base_image = base_path + '/' + fname    # 读入图片
        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] / 255
        scope_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(savepath + '/' + fname)

savepath = 'result_picture'if os.path.exists(savepath):
    shutil.rmtree(savepath)
os.mkdir(savepath) 
blend_images('res_dest1', 'background_pic', savepath)#删除多余文件以免混淆shutil.rmtree('dest1')#shutil.rmtree('dest2')shutil.rmtree('res_dest1')#shutil.rmtree('res_dest2')print("图片成功合成")
图片成功合成

六,视频合成+音乐

In [11]
#图片变视频加配乐def merge_to_mp4():
    fourcc = cv2.VideoWriter_fourcc(*'mp4v')
    video= cv2.VideoCapture('./background.mp4')
    fps = video.get(cv2.CAP_PROP_FPS)
    img = Image.open('./result_picture/1.jpg')#需要整合成视频的图片路径
    out = cv2.VideoWriter('result.mp4', fourcc, fps, (img.size[0], img.size[1]))
    files = os.listdir('./result_picture')
    files.sort(key=lambda x: int(x[:-4]))    for i in files:
        img = cv2.imread('./result_picture/'+i)
        out.write(img)#保存帧
    out.release()    print('ok!')def add_audio():
    video_origin = VideoFileClip('xxm.mp4')
    audio=video_origin.audio
    video_result = VideoFileClip('./result.mp4')
    video_result = video_result.set_audio(audio)
    video_result.write_videofile('成品.mp4')    
    print('ok!')

merge_to_mp4()
add_audio()
ok!
Moviepy - Building video 成品.mp4.
MoviePy - Writing audio in 成品TEMP_MPY_wvf_snd.mp3

MoviePy - Done.
Moviepy - Writing video 成品.mp4

Moviepy - Done !
Moviepy - video ready 成品.mp4
ok!

相关专题

更多
go语言 数组和切片
go语言 数组和切片

本专题整合了go语言数组和切片的区别与含义,阅读专题下面的文章了解更多详细内容。

43

2025.09.03

http与https有哪些区别
http与https有哪些区别

http与https的区别:1、协议安全性;2、连接方式;3、证书管理;4、连接状态;5、端口号;6、资源消耗;7、兼容性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1495

2024.08.16

JavaScript ES6新特性
JavaScript ES6新特性

ES6是JavaScript的根本性升级,引入let/const实现块级作用域、箭头函数解决this绑定问题、解构赋值与模板字符串简化数据处理、对象简写与模块化提升代码可读性与组织性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

0

2025.12.24

php框架基础知识汇总
php框架基础知识汇总

php框架是构建web应用程序的架构,提供工具和功能,以简化开发过程。选择合适的框架取决于项目需求和技能水平。实战案例展示了使用laravel构建博客的步骤,包括安装、创建模型、定义路由、编写控制器和呈现视图。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1

2025.12.24

Word 字间距调整方法汇总
Word 字间距调整方法汇总

本专题整合了Word字间距调整方法,阅读下面的文章了解更详细操作。

2

2025.12.24

任务管理器教程
任务管理器教程

本专题整合了任务管理器相关教程,阅读下面的文章了解更多详细操作。

2

2025.12.24

AppleID格式
AppleID格式

本专题整合了AppleID相关内容,阅读专题下面的文章了解更多详细教程。

2

2025.12.24

csgo视频观看入口合集
csgo视频观看入口合集

本专题整合了csgo观看入口合集,阅读下面的文章了知道更多入口地址。

29

2025.12.24

yandex外贸入口合集
yandex外贸入口合集

本专题汇总了yandex外贸入口地址,阅读下面的文章了解更多内容。

64

2025.12.24

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Git 教程
Git 教程

共21课时 | 2.2万人学习

Git版本控制工具
Git版本控制工具

共8课时 | 1.5万人学习

Git中文开发手册
Git中文开发手册

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号