今天继续和大家分享实战项目。使用深度学习算法更换证件照背景,UI界面,从此告别影楼。让我们了解一下这个项目。源码和开源地址在文末。没有冗长的文字,没有冗余的代码,只有通俗的解释。1.思路先看最终效果。效果图左侧为原图,右侧为更换背景后的图片。它支持更换任何颜色的背景。项目的实现思路很简单:用户上传原图后,使用训练好的人像分割模型将人像裁剪出来,并在新的背景上展示裁剪后的图片。2.模型图像分割是将图片根据内容分成不同的部分。分块,如下图所示:与图像分类和检测相比,图像分割是一个更精细的工作,因为需要对每个像素点进行分类,准确勾勒出物体的轮廓。本项目的图像(人像)分割使用的是PaddlePaddle提供的deeplabv3p_xception65_humanseg模型。该模型基于DeepLabv3+,使用百度自建数据集训练,可用于人像分割,支持任意尺寸图片输入。DeepLabv3+是谷歌DeepLab语义分割系列网络的最新作品。这里所说的语义分割是图像分割的一种。DeepLabv3+的网络结构如下:DeepLabv3+DeepLabv3+通过encoder-decoder融合多尺度信息。编码器是原来的DeepLabv3,但是DCNN使用改进的Xception来提高语义分割的鲁棒性和速度。解码器是DeepLabv3+相比DeepLabv3新增的,将底层特征与高层特征进一步融合,提高了分割边界的精度。下面是人像分割的核心代码:frompaddlehubimportModule#加载训练好的人像分割模型module=Module(directory="module/deeplabv3p_xception65_humanseg")#Segmentres=module.segmentation(paths=[filename],output_dir='../cache',visualization=True)filename为原图路径。3、UIUI界面使用ttkbootstrap开发,ttkbootstrap是TKinter的美化库,使用方法与TKinter相同。下面是UI界面的核心代码。首先需要一个按钮选择原图importttkbootstrapasttkttk.Button(self.leftFrame,text='selectpicture',command=self.openFile)点击选择图片按钮后,会调用openFile函数执行对原图进行人像分割。生成的肖像存储在一个临时文件中。还需要一个按钮来显示转换后的背景图像ttk.Button(self.leftFrame,text='Conversionbackgroundcolor',command=self.render)render函数将显示转换后的图像。核心代码如下:defrender(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=backgroundself.image_final是转换后的背景图片,调整大小后可以显示在UI上。4.运行到这里,整个项目已经介绍完了,最后是拿到源码后如何运行项目。首先,安装PaddlePaddlepipinstall--upgradepaddlepaddle-ihttps://mirror.baidu.com/pypi/simplepipinstall--upgradepaddlehub-ihttps://mirror.baidu.com/pypi/simple然后,安装ttkbootstrapipinstallttkbootstrap最后,运行Circulation.py文件。以上就是本次分享的全部内容。觉得文章还不错的话,请关注公众号:Python编程学习圈,每日干货分享,发送“J”还能领取大量学习资料。或者去编程学习网了解更多编程技术知识。
