Abstract:
使用python和百度飞桨(paddlepaddle),实现自动化人像抠图。
1.使用工具:
1.1 python3.7.6(64位版本)
建议下载3.7.6这个版本的64位软件,32位和python其他版本的安装paddlepaddle会出现问题。软件不要安装在C盘,会出现hub install无法完成,报这个错误“Defaulting to user installation because normal site-packages is not writeable“,因为C盘下\\AppData\Roaming\python39…下面的site-packages不可写,右键点击查看属性的时候发现确实是只读,所以写不进去,导致后面创建虚拟环境的时候mkvirtualenv 虚拟环境名字, 提示mkvirtualenv不是内部命令。所以python不要安装在C盘。
1.2 pycharm
用来写程序执行。
2. pip安装百度飞桨
2.1 先升级pip
注意用以下的代码升级,因为python3.7.6直接升级pip会出现问题,再就是paddlepaddle等的安装需要pip版本在20.0.0以上,python3.7.6自带的pip是19.0.0版本的。
python -m pip install --upgrade --user pip
2.2 安装paddlepaddle
paddlepaddle的version要>= 2.2,直接执行下面代码
python -m pip install paddlepaddle #version >= 2.2
2.3 安装paddlehub
paddlehub的version要>= 2.2,直接执行下面代码
python -m pip install paddlehub #version >= 2.2
2.4 hub install 安装 deeplabv3p_xception65_humanseg
deeplab是谷歌出品的深度学习模型,从v1到v3已经发展了三个版本,现在是deeplabv3,百度在此基础上完善了人像分离,就是我们要用到的deeplabv3p_xception65_humanseg,这个模型也从最初的1.0.0版本,改善了三次,现在是1.1.2版本,旧版本的语法使用跟新版本有很大不一样,比如CSDN大神狂师vs写的一款Python实用神器,5 行 Python 代码 实现一键批量扣图_狂师vs的博客-CSDN博客
是基于deeplabv3p_xception65_humanseg==1.0.0,现在用最新版1.1.2需要改变一下代码的写法。安装直接执行下面程序。
hub install deeplabv3p_xception65_humanseg==1.1.2
这个安装会遇到各种各样的问题,有可能是python安装在C盘导致的错误,也有可能是别的,自己百度解决。
3. 编写程序
直接执行下面的代码就行。
import os, paddlehub as hub #导入两个模块,分别是系统自带的os和刚才安装的paddlehub
path = 'C:/Users/cullj/Desktop/Picture/' # 文件目录 文件目录和其下图片名都不能有汉字
module = hub.Module(name="deeplabv3p_xception65_humanseg")
res = module.segmentation(paths = [path + i for i in os.listdir(path)], visualization=True, output_dir='humanseg_output') # visualization (bool): 是否将识别结果保存为图片文件;output_dir='humanseg_output'的意思是在程序所在文件夹内生成humanseg_output文件夹以保存抠好的图片。
按步骤解析:
首先导入两个模块,分别是系统自带的os模块,用来读取图片所在地文件夹;和paddlehub模块,用来分析图片。
接下来填写文件路径,注意文件路径和图片名称都不能出现汉字,否则会无法识别。
接下来调用paddlehub的deeplabv3的人像分离(human segment)模型。
最后一行代码是分析并保存截图到py文件同级的humanseg_output文件夹下。
大功告成,赶紧查看一下抠好的图片,效果不错,时间也挺快,如果能并发的话,效果会更好。
4. 常见问题和解决办法:
4.1 module 'paddlehub' has no attribute 'Module'
可能是python版本不对,建议卸载后安装64位python3.7
4.2 pip 升级遇到问题:ERROR: Could not install packages due to an EnvironmentError: [WinError 5] 拒绝访问。
升级一下pip就行,但是python3.7升级pip的时候会遇到困难,建议这样升级python -m pip install --upgrade --user pip,一开始就先把pip升级到20.0.0版本以上,否则19.0.0版本会导致paddlehub安装失败。
4.3 [ WARNING] - The _initialize method in HubModule will soon be deprecated, you can use the init() to handle the initialization of the object
python不要安装在C盘,按在C盘就会出现hub install 无法完成。参考下面博客“Defaulting to user installation because normal site-packages is not writeable“_bianlidou的博客-CSDN博客