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

2023-11-02

本程序基于百度飞浆 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()

在这里插入图片描述
通过加载PaddleHub DeepLabv3+模型(deeplabv3p_xception65_humanseg)实现一键抠图

import paddlehub as hub

module = 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()

在这里插入图片描述
将抠出的人物图片合成在想要的背景图片当中。

from PIL import Image
import numpy as np

def 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] / 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('./humanseg_output/'+str(img_num)+".jpg")

根据需要运行合成程序

# 合成几张图片
img_num = 4

for i in range(img_num):
    blend_images('./humanseg_output/'+img_name.split('.')[0]+'.png', str(i+1)+'.jpg', i+1)

# 展示合成图片
plt.figure(figsize=(10,10))
for i in range(img_num):
    plt.subplot(2,2,i+1)
    img = mpimg.imread('./humanseg_output/'+str(i+1)+".jpg")
    plt.imshow(img) 
    plt.axis('off') 
plt.show()

在这里插入图片描述
欢迎大家用AI环游世界!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AI人像抠图及图像合成:让你一键环游世界 的相关文章

  • 小程序使用本地图片设置背景图

    如果在wxml文件中使用本地路径图片作为背景图 在微信开发者工具中可以显示出来 但运行到手机上显示不出来 解决如下 方法一 require 引入 使用 require 引入本地图片 require方式获取的值可以直接生成base64格式 d

随机推荐

  • 栈跟队列

    387 数据结构实验 顺序栈 描述创建一个顺序栈 能够完成栈的初始化 入栈 出栈 获取栈顶元素 销毁栈等操作
  • APT攻击详解

    0x01 APT到底是什么 APT 高级持续威胁 Advanced Persistent Threat 普遍认可的定义是 利用各种先进的攻击手段 对高价值目标进行的有组织 长期持续性网络攻击行为 也就是说很难去确定是不是APT攻击 只能从已
  • L1W2作业1

    1 使用numpy构建基本函数 Numpy是Python中主要的科学计算包 它由一个大型社区维护 在本练习中 你将学习一些关键的numpy函数 例如np exp np log和np reshape 你需要知道如何使用这些函数去完成将来的练习
  • Qt - MQTT客户端调试助手

    Qt MQTT客户端调试助手 Qt5 9 4 MinGW开发 MQTT调试助手 源码和软件下载链接如下 源码地址 https gitee com jhembedded MQTT Client 软件截图 使用说明 软件目录下有一个配置文件co
  • JavaWeb——Tomcat

    tomcat9安装步骤 Apache Tomcat Welcome 下载完 解压文件 测试tomcat是否能正常运行 启动tomca 打开网站输入localhost 8080 关闭tomcat tomca配置的核心文件server 可配置启
  • 高频卡S50和S70标签存储结构了解

    一 存储容量不同 Mifare S70的容量是S50的4倍 S50的容量是1K字节 S70的容量为4K字节 二 应答方式不同 二者应答读写器返回的卡类型 ATQA 字节不同 Mifare S50的卡类型 ATQA 是0004H Mifare
  • 快速创建一个servlet并且在web.xml配置和使用它

    这次 我要来教大家怎么快速创建一个servlet并且在web xml配置和使用它 实际上 现在可以直接在eclipse中创建一个servlet使其继承HttpServlet 而且你还可以对其进行一定的配置 在图中红色的地方写上你的Servl
  • Raneto中文搜索支持

    背景 因业务部门需要在线软件使用说明文档 但我们资源不足 故我想找一个开源的知识库 发现 Raneto不错 决定使用 官方文档相当清晰 部署完成 发布一些文章 启动项目 交由业务同事测试使用 于是我收到 中文搜索 不支持反馈 查看其配置文件
  • RocketMQ、RabbitMQ、Kafka区别

    一 编程语言 RocketMQ是java编写 Kafka采用scala RabbitMQ采用Erlang 二 数据权限安全 Kafka0 9 RocketMQ4 2以后 已经和RabbitMQ对齐 都有topic级别的控制权限 三 架构和高
  • 机器学习绪论(3)

    归纳偏好 机器学习算法在学习过程中对某种类型假设的偏好 归纳偏好对应了算法本身所做出的关于 什么样的模型更好 的假设 有效的机器学习算法必然有归纳偏好 否则无法产生确定的学习结果 比如对于下图 三个假设对于同一个新样本 会产生不同的结果 对
  • 微信小程序CryptoJS解析java DES/CBC/PKCS5Padding

    文章目录 目标 js解析库下载地址 解决代码 java后台端代码 小程序 CryptoJS 注意 详细步骤解决 小程序解决 为什么添加上面的代码就可以解密 拓展 参考 目标 java端采用DES CBC PKCS5Padding 加密 前端
  • IT项目管理-项目时间管理

    IT项目管理 项目时间管理 题目 教材练习题6 教材练习题7 解答 教材练习题6 a
  • CCS安装编译器的方法

    TI公司的编译器叫CGT code generation tools 先下载所需版本的CGT 到TI官网找CGT 在www ti com cn上搜索CGT 即可找到C2000 CGT C2000代码生成工具 编译器 也可以直接到这里找 C2
  • 新浪微博发图片时报错

    error does multipart has image error code 20007 2 statuses upload json JAVA 新浪微博 官网sdk 在调用 public Status UploadStatus St
  • 几种linux内核文件的区别(vmlinux、zImage、bzImage、uImage、vmlinuz、initrd )

    对于Linux内核 编译可以生成不同格式的映像文件 例如 make zImage make uImage zImage是ARM Linux常用的一种压缩映像文件 uImage是U boot专用的映像文件 它是在zImage之前加上一个长度为
  • 3D WEB引擎HOOPS Commuicator助力Naval Architect Jumpstart快速启动船舶信息建模平台开发

    行业 造船业 挑战 新公司希望将创新的船舶信息建模产品推向市场 基于浏览器的产品需要支持高级可视化和强大的数据转换 以处理大型 复杂的造船项目 小型开发团队的任务是雄心勃勃的平台发布计划 解决方案 Tech Soft 3D提供领先的SDK
  • 请问在CSS里面,这个符号是什么 意思?

    是HTML注释 不是CSS注释 CSS是 之所以会有人这么写是因为有的浏览器不支持CSS CSS的标记就会被直接显示出来 用HTML注释掉是为了确保兼容性 而那些支持CSS的浏览器就可以正确解析了 追问 那请问我在什么地方都用就可以了吗 回
  • 开放-封闭原则

    一 定义 开放 封闭原则 是说软件实体 类 模块 函数等等 应该是可扩展的 但是不可修改 ASD 这个原则其实是有两个特征 一个是说 对于扩展是开放的 Open for extension 对于更改是封闭的 Closed for modif
  • java语言利用正则表达式判断身份证号码合法性

    判断身份证 要么是15位 要么是18位 最后一位可以为字母 并写程序提出其中的年月日 我们可以用正则表达式来定义复杂的字符串格式 d 17 0 9a zA Z d 14 0 9a zA Z 可以用来判断是否为合法的15位或18位身份证号码
  • AI人像抠图及图像合成:让你一键环游世界

    本程序基于百度飞浆 PaddlePaddle 平台完成 该程序通过DeepLabv3 模型完成一键抠图 encoder decoder进行多尺度信息的融合 同时保留了原来的空洞卷积和ASSP层 其骨干网络使用了Xception模型 提高了语