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

小羊标书
小羊标书

一键生成百页标书,让投标更简单高效

下载

冰冰老婆带你去旅游---基于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
<br/>
MoviePy - Done.
Moviepy - Writing video 成品.mp4
<br/>
Moviepy - Done !
Moviepy - video ready 成品.mp4
ok!

热门AI工具

更多
DeepSeek
DeepSeek

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

豆包大模型
豆包大模型

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

WorkBuddy
WorkBuddy

腾讯云推出的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度视频编辑。

237

2025.04.15

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

69

2026.03.13

Python异步编程与Asyncio高并发应用实践
Python异步编程与Asyncio高并发应用实践

本专题围绕 Python 异步编程模型展开,深入讲解 Asyncio 框架的核心原理与应用实践。内容包括事件循环机制、协程任务调度、异步 IO 处理以及并发任务管理策略。通过构建高并发网络请求与异步数据处理案例,帮助开发者掌握 Python 在高并发场景中的高效开发方法,并提升系统资源利用率与整体运行性能。

109

2026.03.12

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

326

2026.03.11

Go高并发任务调度与Goroutine池化实践
Go高并发任务调度与Goroutine池化实践

本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

62

2026.03.10

Kotlin Android模块化架构与组件化开发实践
Kotlin Android模块化架构与组件化开发实践

本专题围绕 Kotlin 在 Android 应用开发中的架构实践展开,重点讲解模块化设计与组件化开发的实现思路。内容包括项目模块拆分策略、公共组件封装、依赖管理优化、路由通信机制以及大型项目的工程化管理方法。通过真实项目案例分析,帮助开发者构建结构清晰、易扩展且维护成本低的 Android 应用架构体系,提升团队协作效率与项目迭代速度。

105

2026.03.09

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

108

2026.03.06

Rust内存安全机制与所有权模型深度实践
Rust内存安全机制与所有权模型深度实践

本专题围绕 Rust 语言核心特性展开,深入讲解所有权机制、借用规则、生命周期管理以及智能指针等关键概念。通过系统级开发案例,分析内存安全保障原理与零成本抽象优势,并结合并发场景讲解 Send 与 Sync 特性实现机制。帮助开发者真正理解 Rust 的设计哲学,掌握在高性能与安全性并重场景中的工程实践能力。

236

2026.03.05

PHP高性能API设计与Laravel服务架构实践
PHP高性能API设计与Laravel服务架构实践

本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

659

2026.03.04

热门下载

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

精品课程

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

共21课时 | 4.3万人学习

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

共8课时 | 1.6万人学习

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

共0课时 | 94人学习

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

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