人像抠图

https://blog.csdn.net/XiaoFengsen/article/details/105841598来源

PaddleHub体验与应用
目录
PaddleHub体验与应用
PaddleHub简介
PaddleHub安装
PaddleHub体验
1.PaddleHub的安装
2.情感分析
3.口罩检测
4.人像抠图
5.风格迁移
PaddleHub简介
PaddleHub是为了解决对深度学习模型的需求而开发的工具。基于飞桨领先的核心框架,精选
效果优秀的算法,提供了百亿级大数据训练的预训练模型,方便用户不用花费大量精力从头开始训练
一个模型。
PaddleHub有很多方便实用的模型,如基于PaddleHub的人像抠图、口罩检测、视觉应用、图片风格迁移、NLP应用、超快完成图像分类的Finetune API等。
关于这个开源框架的各类网址推荐如下:
PaddleHub的官网:https://www.paddlepaddle.org.cn/hub

PaddleHub的github地址:https://github.com/PaddlePaddle/PaddleHub

PaddleHub的课程地址:https://aistudio.baidu.com/aistudio/course/introduce/1070

PaddleHub的教程地址:https://aistudio.baidu.com/aistudio/personalcenter/thirdview/79927

PaddleHub的模型地址:https://github.com/PaddlePaddle/PaddleHub/tree/release/v1.6/demo

PaddleHub安装

PaddleHub体验
1.PaddleHub的安装
首先要安装PaddleHub,此模块的安装是下面所有体验能正常运行的前提:

#安装paddlehub
!pip install paddlehub==1.6.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
1
安装的部分过程如下:

Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple
Collecting paddlehub==1.6.0
Downloading https://pypi.tuna.tsinghua.edu.cn/packages/7f/9f/6617c2b8e9c5d847803ae89924b58bccd1b8fb2c98aa00e16531540591f2/paddlehub-1.6.0-py3-none-any.whl (206kB)
|████████████████████████████████| 215kB 10.4MB/s eta 0:00:01
Requirement already satisfied: six>=1.10.0 in /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages (from paddlehub==1.6.0) (1.12.0)
1
2
3
4
2.情感分析
情感倾向分析(Sentiment Classification,简称Senta)针对带有主观描述的中文文本,可自动判断该文本的情感极性类别并给出相应的置信度,能够帮助企业理解用户消费习惯、分析热点话题和危机舆情监控,为企业提供有利的决策支持。

#安装情感分析模型
!hub install senta_lstm==1.1.0
1
运行过程:

/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/sklearn/externals/joblib/externals/cloudpickle/cloudpickle.py:47: DeprecationWarning: the imp module is deprecated in favour of importlib; see the module's documentation for alternative uses
import imp
2020-04-29 15:19:52,131-INFO: font search path ['/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/matplotlib/mpl-data/fonts/ttf', '/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/matplotlib/mpl-data/fonts/afm', '/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/matplotlib/mpl-data/fonts/pdfcorefonts']
2020-04-29 15:19:52,549-INFO: generated new fontManager
Downloading senta_lstm
[==================================================] 100.00%
Uncompress /home/aistudio/.paddlehub/tmp/tmp10orpzhd/senta_lstm
[==================================================] 100.00%
Successfully installed senta_lstm-1.1.0
1
2
3
4
5
6
7
8
然后开始情感分析:

#!hub run senta_lstm --input_text "这家餐厅很难吃"

!hub run senta_lstm --input_text "人工智能课程很有趣"
1
2
可以看到分析结果如下:

/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/sklearn/externals/joblib/externals/cloudpickle/cloudpickle.py:47: DeprecationWarning: the imp module is deprecated in favour of importlib; see the module's documentation for alternative uses
import imp
Downloading lac
[==================================================] 100.00%
Uncompress /home/aistudio/.paddlehub/tmp/tmpvysxd7sb/lac
[==================================================] 100.00%
[{'text': '人工智能课程很有趣', 'sentiment_label': 1, 'sentiment_key': 'positive', 'positive_probs': 0.9572, 'negative_probs': 0.0428}]
1
2
3
4
5
6
结果显示这句话为positive积极的概率为0.9572

3.口罩检测
PyramidBox-Lite是基于2018年百度发表于计算机视觉顶级会议ECCV 2018的论文PyramidBox而研发的轻量级模型,模型基于主干网络FaceBoxes,对于光照、口罩遮挡、表情变化、尺度变化等常见问题具有很强的鲁棒性。该PaddleHub Module基于WIDER FACE数据集和百度自采人脸数据集进行训练,支持预测,可用于检测人脸是否佩戴口罩。口罩检测对于疫情期间的公共场所防控具有重要意义。

下面便分别开始在Linux和Python下的口罩预测的体验之旅。
【Linux下使用:】
首先安装口罩检测模型:

#安装口罩检测模型
!hub install pyramidbox_lite_mobile_mask==1.1.0
1
安装过程如下:

/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/sklearn/externals/joblib/externals/cloudpickle/cloudpickle.py:47: DeprecationWarning: the imp module is deprecated in favour of importlib; see the module's documentation for alternative uses
import imp
Downloading pyramidbox_lite_mobile_mask
[==================================================] 100.00%
Uncompress /home/aistudio/.paddlehub/tmp/tmpib4bh5t1/pyramidbox_lite_mobile_mask
[==================================================] 100.00%
Successfully installed pyramidbox_lite_mobile_mask-1.1.0
1
2
3
4
5
6
然后一键执行模型,并将要检测的图片路径输入进来,一键执行之后便已经生成了预测之后的图片,保存在了"./detection_result/test.jpeg"路径

!hub run pyramidbox_lite_mobile_mask --input_path "data/data31681/test.jpeg"
运行过程如下:

/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/sklearn/externals/joblib/externals/cloudpickle/cloudpickle.py:47: DeprecationWarning: the imp module is deprecated in favour of importlib; see the module's documentation for alternative uses
import imp
Downloading pyramidbox_lite_mobile
[==================================================] 100.00%
Uncompress /home/aistudio/.paddlehub/tmp/tmphq433pbl/pyramidbox_lite_mobile
[==================================================] 100.00%
image with bbox drawed saved as /home/aistudio/detection_result/test.jpeg
[{'data': {'label': 'MASK', 'left': 678.9846324920654, 'right': 893.2966804504395, 'top': 241.9092297554016, 'bottom': 487.231333732605, 'confidence': 0.9711812}, 'id': 1, 'path': 'data/data31681/test.jpeg'}]
1
2
3
4
5
6
7
在开始预测之前可以先展示一下我们待预测的原始图片(data/data31681路径下的test.jpeg):

import matplotlib.pyplot as plt
import matplotlib.image as mpimg
test_img_path = "data/data31681/test.jpeg"
img = mpimg.imread(test_img_path)

# 展示待预测图片
plt.figure(figsize=(10,10))
plt.imshow(img)
plt.axis('off')
plt.show()
1
2
3
4
5
6
7
8
9

然后进行预测,并展示预测结果图("./detection_result/test.jpeg"):

# 预测结果展示
test_img_path = "./detection_result/test.jpeg"
img = mpimg.imread(test_img_path)

# 展示预测结果图片
plt.figure(figsize=(10,10))
plt.imshow(img)
plt.axis('off')
plt.show()
1
2
3
4
5
6
7
8

【在Python下使用:】用Python预测图片中的人物是否使用了口罩(上面Linux的第二步也预测了):

#首先导入hub工具包和处理图片的工具cv2
import paddlehub as hub
import cv2

module = hub.Module(name="pyramidbox_lite_mobile_mask")#调用口罩检测模型
#若将test_img_path变为数组,则可以检测多张图片
test_img_path = "data/data31681/test.jpeg"#要检测的图片路径

# set input dict
input_dict = {"data": [cv2.imread(test_img_path)]}#用cv2读取待检测图片,得到json形式的输入数据
results = module.face_detection(data=input_dict)#用检测模型调用输入数据
print(results)
1
2
3
4
5
6
7
8
9
10
11
效果如下:

[2020-04-29 16:53:56,282] [ INFO] - Installing pyramidbox_lite_mobile_mask module
[2020-04-29 16:53:56,417] [ INFO] - Module pyramidbox_lite_mobile_mask already installed in /home/aistudio/.paddlehub/modules/pyramidbox_lite_mobile_mask
[2020-04-29 16:53:56,498] [ INFO] - Installing pyramidbox_lite_mobile module-1.1.0
[2020-04-29 16:53:56,510] [ INFO] - Module pyramidbox_lite_mobile-1.1.0 already installed in /home/aistudio/.paddlehub/modules/pyramidbox_lite_mobile
[2020-04-29 16:53:56,681] [ INFO] - 133 pretrained paramaters loaded by PaddleHub
[2020-04-29 16:53:56,719] [ INFO] - 0 pretrained paramaters loaded by PaddleHub
[{'data': {'label': 'MASK', 'left': 678.9846324920654, 'right': 893.2966804504395, 'top': 241.9092297554016, 'bottom': 487.231333732605, 'confidence': 0.9711812}, 'id': 1}]
1
2
3
4
5
6
‘label’:为’MASK’,表明此人戴了口罩,为’NO MASK’,表示没戴口罩。预测结果表明,此人戴了口罩的可能性为0.97。

4.人像抠图
目前亲测png、jpg、jpeg的图片格式都可以成功运行。

首先加载人像抠图模型:

import paddlehub as hub
humanseg = hub.Module(name="deeplabv3p_xception65_humanseg")#读取模型,赋给humanseg
1
运行过程如下:

[2020-04-29 15:20:56,526] [ INFO] - Installing deeplabv3p_xception65_humanseg module
Downloading deeplabv3p_xception65_humanseg
[==================================================] 100.00%
Uncompress /home/aistudio/.paddlehub/tmp/tmp3nsjdpj5/deeplabv3p_xception65_humanseg
[==================================================] 100.00%
[2020-04-29 15:21:11,602] [ INFO] - Successfully installed deeplabv3p_xception65_humanseg-1.0.0
1
2
3
4
5
然后开始人像抠图:

import matplotlib.pyplot as plt
import matplotlib.image as mpimg
path = ["data/data31681/test.jpeg"]#要处理的图片路径
results = humanseg.segmentation(data={"image":path})#将图片喂给模型


# 预测结果展示
test_img_path = results[0]["processed"]
img = mpimg.imread(test_img_path)

# 展示预测结果图片
plt.figure(figsize=(10,10))
plt.imshow(img)
plt.axis('off')
plt.show()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
效果如下:


上面那段代码中,processed就是生成的图片的路径的键,如果将results输出可以看到它的形式为:

将print(results[0]["processed"])输出,可以看到结果为:


人像抠图简直为不会PS的小伙伴们节约了一笔巨资,另附其他一名学员的资料链接:https://aistudio.baidu.com/aistudio/projectdetail/433260
强力推荐这位大佬设计的抠图服务、证件照服务与美颜服务,手机即可操作,链接如下:http://182.92.120.215/upload

玩起来简直很上瘾有没有。


5.风格迁移
先展示一下文件路径:


首先需要加载一下相关模块

import paddlehub as hub
import cv2
stylepro_artistic = hub.Module(name="stylepro_artistic")
1
2
加载成功显示如下:

[2020-04-29 17:02:10,095] [ INFO] - Installing stylepro_artistic module
Downloading stylepro_artistic
[==================================================] 100.00%
Uncompress /home/aistudio/.paddlehub/tmp/tmpgqxtm24o/stylepro_artistic
[==================================================] 100.00%
[2020-04-29 17:02:12,553] [ INFO] - Successfully installed stylepro_artistic-1.0.0
1
2
3
4
5
因为风格迁移需要原始图片和风格图片,所以需要输入两张图片,如下:

results = stylepro_artistic.style_transfer(images=[{
'content': cv2.imread("data/data31681/main.png"),#原始图片
'styles': [cv2.imread("data/data31681/style1.png")]}],#风格图片
alpha = 1.0,#风格比重,可调整为任意数,效果各不相同
visualization = True)#要保存迁移后的结果照片就设置为true
1
2
3
4
下面展示一下原图和风格图:

# 原图展示
test_img_path = "data/data31681/main.png"
img = mpimg.imread(test_img_path)

plt.figure(figsize=(10,10))
plt.imshow(img)
plt.axis('off')
plt.show()

# 风格图展示
test_img_path = "data/data31681/style1.png"
img = mpimg.imread(test_img_path)

plt.figure(figsize=(10,10))
plt.imshow(img)
plt.axis('off')
plt.show()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

最后是显示风格迁移之后的图片:

# 预测结果展示
test_img_path = "transfer_result/ndarray_1587809892.1425676.jpg"
img = mpimg.imread(test_img_path)

# 展示预测结果图片
plt.figure(figsize=(10,10))
plt.imshow(img)
plt.axis('off')
plt.show()
1
2
3
4
5
6
7
8
最终效果如下:


如果换成风格图style2.png:


可以看到运行之后的结果如下:


当将Alpha调整为不同参数时,风格图也会发生相应的变化,如下所示:


怎么样?有没有很神奇,人人好像都能变成文森特·梵高或者毕加索了,赶紧来试一试你自己的风格图吧。
————————————————
版权声明:本文为CSDN博主「何处微尘」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/XiaoFengsen/article/details/105841598

原文地址:https://www.cnblogs.com/vip136510786/p/14595889.html