乐趣区

关于python:Python一键替换证件照背景还用去照相馆

明天持续给大家分享实战我的项目。

用深度学习算法替换证件照背景,带 UI 界面那种,从此能够跟照相馆说拜拜了。

上面咱们来学习一下该我的项目,文末有源代码和开源地址。

没有啰嗦的文字,没有多余的代码,只有艰深的解说。

1. 思路

先来看一下最终的成果。

成果

右边是原图片,左边是替换背景后的图片,反对替换任意色彩背景。

我的项目的实现思路很简略:

  1. 用户上传的原图后,应用曾经训练好的人像宰割模型将人像切割进去
  2. 将切割后的图片展现在新背景上

2. 模型

图像宰割是要将图片依据内容宰割成不同的块,如下图所示:

相比图像分类和检测,图像宰割是一项更精密的工作,因为须要对每个像素点分类,物体的轮廓是精准勾画的。

本我的项目的图像(人像)宰割采纳飞桨 (PaddlePaddle) 提供的 deeplabv3p_xception65_humanseg 模型。该模型基于DeepLabv3+,用百度自建数据集进行训练,可用于人像宰割,反对任意大小的图片输出。

DeepLabv3+ 是 Google DeepLab 语义宰割 系列网络的最新作,这里说的 语义宰割 是图像宰割中的一类。

DeepLabv3+的网络结构如下:

DeepLabv3+

DeepLabv3+通过 encoder-decoder 进行多尺度信息的交融,encoder是原来的 DeepLabv3,但DCNN 采纳了 改良的 Xception,进步了语义宰割的健壮性和运行速率。

decoderDeepLabv3+ 相比 DeepLabv3 新增的,其将底层特色与高层特色进一步交融,晋升宰割边界准确度。

上面是人像宰割的外围代码:

from paddlehub import Module

# 加载训练好的人像宰割模型
module = Module(directory="module/deeplabv3p_xception65_humanseg")

# 进行宰割
res = module.segmentation(paths=[filename], output_dir='../cache', visualization=True)

filename是原图片的门路。

3. UI

UI 界面应用 ttkbootstrap 开发,它是 TKinter 的丑化库,应用办法跟 TKinter 一样。

这里介绍下 UI 界面的外围代码。

首先须要一个按钮来抉择原图片

import ttkbootstrap as ttk

ttk.Button(self.leftFrame, text='抉择图片', command=self.openFile)

点击 抉择图片 按钮后,会调用 openFile 函数对原图片进行人像宰割,宰割进去的人像存储在临时文件中。

还须要一个按钮展现转换背景后的图片

ttk.Button(self.leftFrame, text='转换底色', command=self.render)

render函数会展现转换后的图片,外围代码如下:

def render(self):
  # 获取新背景色
  colorHEX = self.color.get()

  # 获取宰割后的人像图片
  base_img = Image.open(self.outputdir)
  # 展现新背景
  background = Image.new('RGBA', base_img.size, colorHEX)
  x, y = base_img.size
  # 将宰割后的人像贴在新背景上
  background.paste(base_img, (0, 0, x, y), base_img)
  self.image_final = background

self.image_final是转换背景后的图片,调整大小后便能够在 UI 上展现。

4. 运行

到这里,整个我的项目曾经介绍完了,最初简略说下拿到源码后如何运行该我的项目。

首先,装置飞桨(PaddlePaddle)

pip install --upgrade paddlepaddle -i https://mirror.baidu.com/pypi/simple

pip install --upgrade paddlehub -i https://mirror.baidu.com/pypi/simple

而后,装置ttkbootstrap

pip install ttkbootstrap

最初,运行 Circulation.py 文件即可。

以上就是本次分享的所有内容,如果你感觉文章还不错,欢送关注公众号:Python 编程学习圈,每日干货分享,发送“J”还可支付大量学习材料。或是返回编程学习网,理解更多编程技术常识。

退出移动版