PaddlePaddle AI框架扣取图片人物并合成

文章目录

    • 环境
      • AI Studio简介
      • PaddlePaddle简介
      • PaddleHub简介
    • 准备
    • 一、定义待抠图照片
    • 二、加载预训练模型
    • 三、图像合成
    • 四、展示合成图片

环境

环境:AI Studio
环境配置

  Python版本:Python 3.7 
  框架版本:PaddlePaddle 1.6.2

AI Studio简介

AI Studio是基于百度深度学习平台飞桨的一站式AI开发平台,
提供在线编程环境免费GPU算力、海量开源算法开放数据,帮助开发者快速创建和部署模型。
官网:AI Studio

PaddlePaddle简介

飞桨 (PaddlePaddle) 以百度多年的深度学习技术研究和业务应用为基础,集深度学习核心框架、基础模型库、端到端开发套件、工具组件和服务平台于一体,2016 年正式开源,是全面开源开放、技术领先、功能完备的产业级深度学习平台。飞桨源于产业实践,始终致力于与产业深入融合

官网:PaddlePaddle(飞浆)官网

PaddleHub简介

PaddleHub
预训练模型丰富,新增52个预训练模型,目前预训练模型总数100+:

语义模型:新增RoBERTa_wwm、BERT_wwm、ERNIE-Tiny等5个语义模型
文本分类:新增黄反鉴别模型3个。
图像分类:新增ResNext-WSL、EfficientNet等共36个图像分类模型。
目标检测:新增行人检测,车辆检测等共5个检测模型。
关键点检测:新增人脸关键点检测和人体姿态关键点检测模型2个。
人脸口罩检测:新增基于PyramidBox-Lite的人脸口罩检测模型2个。
通用人脸检测:新增Ultra Light Fast Generic Face Detector、PyramidBox-Lite等通用人脸检测模型4个。

功能:

新增基于Paddle Serving的Bert Service文本向量表示服务。
Task灵活性增强,新增Hook机制可以支持用户自定义代码加载。
优化代码结果,命令行执行速度提升50% 。
重构Dataset、Reader,适配自定义数据集代码量降低60%。
优化AutoFinetune接口,支持多实验的可视化效果显示。

PaddleHub官网

准备

本项目只需要准备两张需要合成的照片即可,需要保持图片的大小项目
此处采用两张1920*1200大小的图片
前景:mom-1.jpg
PaddlePaddle AI框架扣取图片人物并合成_第1张图片
背景:background-1.jpg
PaddlePaddle AI框架扣取图片人物并合成_第2张图片

一、定义待抠图照片

以本示例中文件夹下25b36.jpg为待预测图片
此条命令为AI Studio平台安装paddlepaddle框架命令

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

此处我们使用的四paddlepaddle中的移动开发框架PaddleHub

# 待预测图片
test_img_path = ["./mom-1.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()

PaddlePaddle AI框架扣取图片人物并合成_第3张图片

二、加载预训练模型

通过加载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/mom-1.png"
img = mpimg.imread(test_img_path)
plt.figure(figsize=(10,10))
plt.imshow(img) 
plt.axis('off') 
plt.show()

输出结果:

[2020-04-02 04:24:48,502] [    INFO] - Installing deeplabv3p_xception65_humanseg module
Downloading deeplabv3p_xception65_humanseg
[==================================================] 100.00%
Uncompress /home/aistudio/.paddlehub/tmp/tmppdebwai8/deeplabv3p_xception65_humanseg
[==================================================] 100.00%
[2020-04-02 04:24:58,829] [    INFO] - Successfully installed deeplabv3p_xception65_humanseg-1.0.0
[2020-04-02 04:24:59,852] [    INFO] - 0 pretrained paramaters loaded by PaddleHub
{'origin': './25b36.jpg', 'processed': 'humanseg_output/25b36.png'

PaddlePaddle AI框架扣取图片人物并合成_第4张图片
经过测试人物与环境的色差较近的时候也能完美扣取
扣取前后对比:

PaddlePaddle AI框架扣取图片人物并合成_第5张图片

PaddlePaddle AI框架扣取图片人物并合成_第6张图片

三、图像合成

将抠出的人物图片合成在想要的背景图片当中

from PIL import Imageimport numpy as np
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("blend_res_img.jpg")

四、展示合成图片

blend_images('./humanseg_output/mom-1.png', 'background-1.jpg')

plt.figure(figsize=(10,10))
img = mpimg.imread("./blend_res_img.jpg")
plt.imshow(img) 
plt.axis('off') 
plt.show()

最后效果:
PaddlePaddle AI框架扣取图片人物并合成_第7张图片
项目地址:PaddlePaddle框架扣取图片人物即人物合成

你可能感兴趣的:(PaddlePaddle)