最近做了一个项目,需求是用户上传一张人物图片,一张背景图,将人物扣下来换一下背景图
听着十分简单的功能,(因为之前做过计算机视觉相关的功能)就一口答应了
功能开始做的时候脑子里大致的流程是
1.用户上传 人物图 背景图两个参数
2.使用opencv抠人物,其他区域设置为白色或透明
3.使用opencv将扣下来的图重绘至背景图
但是到第二部卡住了,因为我网上搜了一大堆资料发现,opencv抠图需要人为框出人物点位
想想也是,用ps都需要用笔框出人物边缘
后面网上搜了一大堆发现python竟然可以轻而易举的实现
gitee上发现一个开源ai模型的开源社区
飞桨PaddlePaddle-源于产业实践的开源深度学习平台
里面有好多类似的实战,以前也看见过一直不知道是干嘛的,长知识了
废话不多说,上干货
1.安装python并配置环境变量
官网下载
Python Release Python 3.8.0 | Python.org
根据自己的操作系统下载,觉得慢的就科学上网
下面一步一步按着点就行
安装好直接关掉就行
配置环境变量
刚刚的安装地址
配置好后一个一个的点击 确定 !!!
测试
win+r
cmd 呼出 命令提示符
按照我下面输入
python
python --version

2.安装paddlepaddle
确认 pip 的版本是否满足要求,要求 pip 版本为 20.2.2 或更高版本
python -m ensurepip
或者
python -m pip --version
不满足,直接运行
python -m pip install --upgrade pip
安装paddlepaddle
python -m pip install paddlepaddle==2.6.1 -i https://mirror.baidu.com/pypi/simple
3.安装paddlehub
pip install paddlehub -i https://pypi.tuna.tsinghua.edu.cn/simple
4.安装xception65
hub install deeplabv3p_xception65_humanseg
5.执行抠图测试
cmd命令提示符输入
hub run deeplabv3p_xception65_humanseg --input_path "1.jpg" --visualization True
1.jpg记得换成想要抠的图片的地址
若成功返回如下信息:
[{'save_path': 'humanseg_output\\base.png', 'data': array([[0., 0., 0., ..., 0., 0., 0.],
[0., 0., 0., ..., 0., 0., 0.],
[0., 0., 0., ..., 0., 0., 0.],
...,
[0., 0., 0., ..., 0., 0., 0.],
[0., 0., 0., ..., 0., 0., 0.],
[0., 0., 0., ..., 0., 0., 0.]], dtype=float32)}]
humanseg_output\\base.png
输出的图片地址为:执行抠图命令的盘符地地址\\humanseg_output\\base.png
由于我是java开发,python实在写不来
最终在java中使用,命令行执行获取资源
用的huool工具
命令行工具-RuntimeUtil | Hutool
6.报错
如果在第四步一直报错:
Error: Can not import paddle core while this file exists: E:\prod_environment\python3.8\lib\site-packages\paddle\base\libpaddle.pyd
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "E:\prod_environment\python3.8\lib\site-packages\paddle\__init__.py", line 28, in <module>
from .base import core # noqa: F401
File "E:\prod_environment\python3.8\lib\site-packages\paddle\base\__init__.py", line 36, in <module>
from . import core
File "E:\prod_environment\python3.8\lib\site-packages\paddle\base\core.py", line 380, in <module>
raise e
File "E:\prod_environment\python3.8\lib\site-packages\paddle\base\core.py", line 268, in <module>
from . import libpaddle
ImportError: DLL load failed while importing libpaddle: 找不到指定的模块。
说明当前电脑cpu不支持avx指令集,官网也声明了新版不再支持noavx
如果是旧版可以试试
paddle 安装报错无法加载核心,由于 libpddle.pyd 问题_libpaddle.pyd-优快云博客
以上就是本次功能的实现方案,其实就是飞桨提供的模型在帮我实现类似ps框出人物边缘的工作,我看到这个项目的里面还是opencv,又浪费了我一天时间,🥹
我这只是为了实现需求的下下之策,有需要的java领域,有此需求无法解决的可以试试我这个方案
python ai人工智能领域的大佬轻喷
java领域的大佬可以评论区告诉小弟有没有其他实现方式
7.效果展示
下面是我的实现效果(对不起了陶喆老师)
原图
背景
抠图后
合并
文章引用:
Windows上安装 Python 环境并配置环境变量 (超详细教程)_windows配置python环境变量-优快云博客【paddlepaddle】一键人物抠图_paddlepaddle 抠图命令-优快云博客