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中文网

QIMI奇觅
QIMI奇觅

美图推出的游戏行业广告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!

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
好用的视频编辑软件推荐
好用的视频编辑软件推荐

好用的视频编辑软件:1. Final Cut Pro X:适合Mac用户,专业级,配置要求高。2. iMovie:苹果设备自带,适合初学者。3. Adobe Premiere Pro:跨平台,功能强大,适合专业用户。4. DaVinci Resolve:专业调色软件,配置要求高。5. 爱剪辑:适合Windows初学者,功能丰富。6. 威力导演:适合Windows中级用户,支持360度视频编辑。

202

2025.04.15

2026赚钱平台入口大全
2026赚钱平台入口大全

2026年最新赚钱平台入口汇总,涵盖任务众包、内容创作、电商运营、技能变现等多类正规渠道,助你轻松开启副业增收之路。阅读专题下面的文章了解更多详细内容。

33

2026.01.31

高干文在线阅读网站大全
高干文在线阅读网站大全

汇集热门1v1高干文免费阅读资源,涵盖都市言情、京味大院、军旅高干等经典题材,情节紧凑、人物鲜明。阅读专题下面的文章了解更多详细内容。

32

2026.01.31

无需付费的漫画app大全
无需付费的漫画app大全

想找真正免费又无套路的漫画App?本合集精选多款永久免费、资源丰富、无广告干扰的优质漫画应用,涵盖国漫、日漫、韩漫及经典老番,满足各类阅读需求。阅读专题下面的文章了解更多详细内容。

33

2026.01.31

漫画免费在线观看地址大全
漫画免费在线观看地址大全

想找免费又资源丰富的漫画网站?本合集精选2025-2026年热门平台,涵盖国漫、日漫、韩漫等多类型作品,支持高清流畅阅读与离线缓存。阅读专题下面的文章了解更多详细内容。

7

2026.01.31

漫画防走失登陆入口大全
漫画防走失登陆入口大全

2026最新漫画防走失登录入口合集,汇总多个稳定可用网址,助你畅享高清无广告漫画阅读体验。阅读专题下面的文章了解更多详细内容。

11

2026.01.31

php多线程怎么实现
php多线程怎么实现

PHP本身不支持原生多线程,但可通过扩展如pthreads、Swoole或结合多进程、协程等方式实现并发处理。阅读专题下面的文章了解更多详细内容。

1

2026.01.31

php如何运行环境
php如何运行环境

本合集详细介绍PHP运行环境的搭建与配置方法,涵盖Windows、Linux及Mac系统下的安装步骤、常见问题及解决方案。阅读专题下面的文章了解更多详细内容。

0

2026.01.31

php环境变量如何设置
php环境变量如何设置

本合集详细讲解PHP环境变量的设置方法,涵盖Windows、Linux及常见服务器环境配置技巧,助你快速掌握环境变量的正确配置。阅读专题下面的文章了解更多详细内容。

0

2026.01.31

热门下载

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

精品课程

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

共21课时 | 3.2万人学习

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

共8课时 | 1.5万人学习

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

共0课时 | 0人学习

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

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