AI证件照换底色

百度Paddle-Hub项目实践—AI帮你证件照换底色

前言: 详细的paddlehub项目和文档请看paddlehub安装文档paddlehub使用文档
提示: 在本地安装时需要特别注意版本问题,严格按照推荐的版本,可以大大减小报错情况。

一.项目具体实现细节介绍

1. 导入相关的包,加载原图像并进行显示

import paddlehub as hub
import cv2
import matplotlib.pyplot as plt
import numpy as np
from PIL import Image
test_img_path = "D:/Mechine_learning_data/2girl.jpg"
img = cv2.imread(test_img_path)
cv2.imshow('org',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

显示图像为:

2. 使用Paddle-hub中的deeplabv3p_xception65_humanseg模型进行智能抠图,获取得到的轮廓,此轮廓比传统图像处理的Mask更具有鲁棒性。

注:关于deeplabv3p_xception65_humanseg模型的具体介绍可见其官网,这里主要进行利用此模型输出,进行后续图像处理,实现证件照片换底色,通过寥寥代码达到高级PS修图师的水平!

human_seg = hub.Module(name='deeplabv3p_xception65_humanseg')
result = human_seg.segmentation(images=[cv2.imread(test_img_path)],visualization=True,output_dir='./')
print(result)
# 将轮廓保存为图片
res_image = Image.fromarray(np.uint8(result[0]['data']))
path = "D:/python_code/Jupyter Notebook/paddleee/new.jpg"
res_image.save(path)

3. 加载保存的轮廓并显示,接着对其进行二值化处理,然后进行图像的腐蚀膨胀操作,得到输出结果,根据结果调整参数值。

counter_img_path = path
img_counter = cv2.imread(counter_img_path)
img_gray = cv2.cvtColor(img_counter,cv2.COLOR_BGR2GRAY)
ret,thresh1 = cv2.threshold(img_gray,200,255,cv2.THRESH_BINARY)
kernel = cv2.getStructuringElement(cv2.MORPH_CROSS, (5,5))
erode = cv2.erode(thresh1,kernel,iterations=2)
dilate = cv2.dilate(erode,kernel,iterations=2)
cv2.imshow('dilate',dilate)
cv2.imshow('erode',erode)
cv2.imshow('gray_img',img_gray)
cv2.imshow('binary_img',thresh1)
cv2.imshow('counter_img',img_counter)
cv2.waitKey(0)
cv2.destroyAllWindows()

结果如下:
在这里插入图片描述这里为了做统一显示,就放到了一起,但在实际使用的过程中,需要自行调节参数值,包括二值化分割的阈值,腐蚀膨胀是否全都需要,以及核的大小,腐蚀次数的多少等。

下面给出这几种操作的原理和opencv_python的编写方法:
关于图像二值化的文章:友情提示:先变成灰度图再二值化
关于图像腐蚀膨胀操作的文章:友情提示:先腐蚀,后膨胀

4. 通过以上的轮廓图可以发现,背景的像素都为黑色,即0,此时遍历整张轮廓图片,如果像素值为0,则用红色背景色代替原图的蓝色背景色,代码实现如下:

HEIGHT = img_counter.shape[0]
WEIGHT = img_counter.shape[1]
CHANNLE = img_counter.shape[2]
for i in range(HEIGHT):
    for j in range(WEIGHT):
        if dilate[i,j] == 0:
            img[i,j] = [0,0,255]
cv2.imshow('change_img',cv2.resize(img,dsize=None,fx=0.5,fy=0.5,interpolation = cv2.INTER_NEAREST))
# cv2.imwrite('D:/python_code/Jupyter Notebook/paddleee/red_img_zhou.jpg',img)# 保存图片的方法
cv2.waitKey(0)
cv2.destroyAllWindows()

最终换底的图片结果为:
在这里插入图片描述如此便实现了证件照片换底色的功能,但是由于图片本身各有差异,因此想要得到较好的结果,还需要精细地调整上面提到的参数。

二. 模型部署

paddle-hub提供了部署服务
详细部署过程参考paddle-hub官网

三. 实践总结

paddle-hub是一个很优秀的平台,适合小白上手深度学习,不需要复杂的训练过程,另外百度大大提供的课程和算力都很强大,教师团队也很负责,强烈推荐百度深度学习的两门免费课程:

百度架构师手把手带你零基础实践深度学习(适合入门)

百度顶会论文复现营(适合深入学习)

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值