ai软件证件照换底色 基于Paddlehub实现的秒换证件照底色

默认分类1年前 (2023)发布 admin
535 0
ChatGPT国内版

秒换证件照底色

现实生活中,不同证件上需要不同底色的照片。比如结婚需要的红色,身份证需要的白色,考试报名需要的蓝色。同时准备三种颜色的证件照也不是不可能,但是有时候迫于时间关系,又没有准备好照片的情况下,依靠手动处理旧照片或者是出门拍一张照片需要一定的时间,还要一定的软件使用技能。

这个时候,AI自动处理图像的优势就显现出来了。速度快,效果好,操作成本低(将本程序封装成exe)。

在此之前,先介绍一个线上的AI平台百度飞浆

AI,很多人第一反应就是高门槛,要面对复杂的网络结构与框架、算法调优、支付昂贵的物理设备费用(GPU)。百度飞浆都能解决这些问题,提供线上的运行环境,高质量的教学课程

本项目就是通过飞浆的一个工具——实现。下面回归正题

模型概述

+ 是 语义分割系列网络的最新作,其前作有 , , 。在最新作中,作者通过-进行多尺度信息的融合,同时保留了原来的空洞卷积和ASSP层, 其骨干网络使用了模型,提高了语义分割的健壮性和运行速率,在 VOC 2012 取得新的state-of-art 。该 使用百度自建数据集进行训练,可用于人像分割,支持任意大小的图片输入。

代码实现

首先声明的是,此项目运行环境是上的AI 。所以代码以的风格展示。

#安装对应版本的paddlehub
!pip install paddlehub==1.6.2 -i https://pypi.tuna.tsinghua.edu.cn/simple

ai软件证件照换底色 基于Paddlehub实现的秒换证件照底色


#照片选择
import matplotlib.pyplot as plt 
import matplotlib.image as mpimg
#pycharm环境下可以取消注释,以UI界面方式选择图片
#import win32ui
#paddlehub 不支持UI界面选择照片文件路径,这里以输入的方式做测试
#dlg = win32ui.CreateFileDialog(1)
#dlg.SetOFNInitialDir('C:/')
#dlg.DoModal()
#photo_path = dlg.GetPathName()
photo_path = ['lyh.jpg']
#显示选择的图片
img = mpimg.imread(photo_path[0])
plt.figure(figsize=(10,10))
plt.imshow(img) 
plt.axis('off') 
plt.show()

运行结果:

” />

加载模型

上的预训练模型:

这一步是为了实现抠取图片的人像部分

import paddlehub as hub
output_path = 'output'
module = hub.Module(name="deeplabv3p_xception65_humanseg")
input_dict = {"image": photo_path}
results = module.segmentation(data=input_dict,visualization=True,
                 output_dir=output_path)

#显示处理好的图片
import glob
import os
img_path = glob.glob(os.path.join(output_path, '*.png'))
img_path.sort()
for path in img_path:
    img= mpimg.imread(path)
plt.figure(figsize=(10,10))
plt.imshow(img) 
plt.axis('off') 
plt.show()

运行结果:

图片中除人像部分其实都是透明的,这里显示为白色。

换底色处理

from PIL import Image
#定义证件照底色RGB值
blue = 0,191,243
red = 255,0,0
white =255,255,255
#底色默认值
color = 0,0,0
your_choice=input("你想要的证件照底色")
if your_choice =="red":
    color = red
elif your_choice == "white":
    color = white
elif your_choice == "blue":
    color = blue
else:
    color=white
    print("颜色不正确,默认白")
#填充图片A通道,即透明部分
img =Image.open(img_path[0])
finish_path = img_path[0]+"_finish.png"
x, y = img.size
p = Image.new('RGBA', img.size, (color))
p.paste(img, (0, 0, x, y), img)
p.save(finish_path)
img = mpimg.imread(finish_path)
plt.figure(figsize=(10,10))
plt.imshow(img) 
plt.axis('off') 
plt.show()

ai软件证件照换底色 基于Paddlehub实现的秒换证件照底色

运行结果

总结

其实整体思路就是抠取人像后,对图片的A通道填充想要的颜色。

项目的出发点是操作方便且不需要专业技能,可以封装一个exe版本,运用实现,这里不作实现。

这里感谢李彦宏先生的照片。

同类对比

去年流行的一个库函数,它是以去除背景为出发点。在处理图像上也有很优秀的表现。唯一的缺点就是不能“白嫖!”,使用此库函数需要注册账号,获得API的使用次数。超过一定的次数需要付费(不便宜)。

下面放出一段由实现的代码:

from removebg import RemoveBg
from PIL import Image
locat = "C:/Users/acer/Desktop"
name = input("请输入图片文件名")
new = '/new'
blue = 0,0,255
white = 255,255,255
red = 255,0,0
cloro = 0,0,0
def get_photo(locat,name):
    try:
        API = '1DccssUWFceWoomRBuTs1sV6'
        rmb = RemoveBg(API,'error.log')
        t= '/'
        all = locat+t+name
        print("操作中,请等待二十秒....")
        rmb.remove_background_from_img_file(all)
        temp = '_no_bg.png'
        all = all+temp
        return all
    except:
        print("API或者图片路径有误,请重新启动程序")
def chang_backgound():
    img = Image.open(get_photo(locat,name))
    x, y = img.size
    print("请选择要添加的背景色")
    a = input("红色:red   蓝色: blue  白色:white   黑色:blackn")
    if(a == 'red'):
        cloro = red
    if(a == 'blue'):
        cloro = blue
    if(a == 'white'):
        cloro = white
    if (a == 'black'):
        cloro = 0,0,0
    p = Image.new('RGBA', img.size, (cloro))
    p.paste(img, (0, 0, x, y), img)
    p.save(locat+new+name+'.png')
    print("操作成功,处理后的图片路径为:%s"%locat+new+name)
chang_backgound()

以封装exe可执行文件为出发点,选择版本的程序是最合适的,相当于永久免费使用的程序。

当然,除了图像分割,还支撑CV、NLP、REC、方面的开发研究。

项目地址

AI :

END

© 版权声明
广告也精彩

相关文章

暂无评论

暂无评论...