环境:AI Studio
环境配置
Python版本:Python 3.7
框架版本:PaddlePaddle 1.6.2
AI Studio是基于百度深度学习平台飞桨的一站式AI开发平台,
提供在线编程环境
、免费GPU算力
、海量开源算法
和开放数据
,帮助开发者快速创建和部署模型。
官网:AI Studio
飞桨 (PaddlePaddle) 以百度多年的深度学习技术研究和业务应用为基础,集深度学习核心框架、基础模型库、端到端开发套件、工具组件和服务平台于一体,2016 年正式开源,是全面开源开放、技术领先、功能完备的产业级深度学习平台。飞桨源于产业实践,始终致力于与产业深入融合
官网:PaddlePaddle(飞浆)官网
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
背景:background-1.jpg
以本示例中文件夹下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()
通过加载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'
经过测试人物与环境的色差较近的时候也能完美扣取
扣取前后对比:
前
:
后
:
将抠出的人物图片合成在想要的背景图片当中
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()