利用Python制作证件照
大家好!好久没见面了。今天和大家分享的是利用Python批处理随意拍的照片,生成证件照。有时候我们没空去拍证件照,又急着需要上传电子证件照,怎么办呢?PS又不是很熟。今天get这个技能的coder们,就可以方便自己生成证件照了。
上段时间因为工作需要,需要大量拍摄证件照。一个个处理比较麻烦,于是就想着直接收集生活照利用Python来帮忙解决一下这个问题。刚好上次参加百度的训练营有接触过PaddleHub,今天就借助PaddleHub来实现这个功能。
思路:
首先,根据PaddleHub人脸定位,找到图片中人脸的位置。
由于一寸照片的宽度295,高度是413,用这个比例框选出含有人脸的图片,并且进行缩放到尺寸(295,413)。
用PaddleHub的人像分割,分离人物和背景,对背景分别填充白色,红色,蓝色,得到三种颜色的登记照片。
步骤1、准备工作
# 需要先升级到最新版本的paddlehub
!pip install --upgrade paddlehub
# 查看我们上传的照片
!ls photo/
#导入需要用的依赖库
from PIL import Image
import paddlehub as hub
import cv2
import numpy as np
# 定义人脸识别和人物识别的paddlehub函数
face_landmark = hub.Module(name="face_landmark_localization")
human_seg = hub.Module(name="deeplabv3p_xception65_humanseg")
步骤二、定义功能函数
# 裁剪成为1寸大小的图片
def crop_face(pic_path,rate=1.3):
# 人脸识别
result = face_landmark.keypoint_detection(paths=[pic_path])
face=np.array(result[0]['data'][0],dtype=np.int64)
# 剪裁
left = face[:,0].min()
right= face[:,0].max()
w = right-left
cw=int((right+left)/2)
upper = face[:,1].min()
lower = face[:,1].max()
h= lower-upper
ch=int((lower+upper)/2)
h = int(413*w/295)
box=(cw-rate*w, ch-rate*h, cw+rate*w, ch+rate*h)
img=Image.open(pic_path)
img=img.crop(box)
img=img.resize((295, 413),Image.ANTIALIAS)
# display(img)
return img
# 进行人物抠图
def seg_face(img):
result = human_seg.segmentation(images=[cv2.cvtColor(np.array(img),cv2.COLOR_RGB2BGR)],
use_gpu=False,
visualization=True,
output_dir='humanseg_output')
print("抠图输出文件:",result[0]["save_path"])
# display(Image.open(result[0]["save_path"]))
return result[0]["save_path"]
# 改变颜色
def change_color(pic_path,thresh=100):
def cut_person(img,num=[255,255,255]):
img=np.array(img).transpose((2,0,1))
person=[]
for i in range(3):
a=img[i]
mask=np.array((img[3]<thresh),dtype=np.uint8)
mask=cv2.erode(mask,None,iterations=1)
mask=cv2.dilate(mask,None,iterations=3)
mask=np.array(mask,dtype=np.bool)
a[mask]=num[i]
person.append(a)
img=np.array(person).transpose((1,2,0))
im=Image.fromarray(img)
display(im)
return im
#cut=cut_person(Image.open(pic_path),num=[255,255,255])#白底
cut=cut_person(Image.open(pic_path),num=[255,0,0])#红底
cut=cut_person(Image.open(pic_path),num=[0,0,255])#蓝底
# 生成三种底色的登记照片
def id_photo(pic_path,rate=1.3,thresh=2):
img=crop_face(pic_path,rate)
pic_path=seg_face(img)
change_color(pic_path,thresh)
步骤三、迭代数据,批量抠图换底
for pic in ["./photo/mayun2.jpg","./photo/liuyifei4.jpg"]:
display(Image.open(pic).resize((295, 413),Image.ANTIALIAS))
id_photo(pic,rate=1.5,thresh=50)
效果:先PO出大佬来镇场
原图:
生成红底证件照:
生成蓝底证件照:
再来一张仙女姐姐的
原图:
生成红底证件照:
生成蓝底证件照:
做这个案例的时候为了达到较好的效果,需要留意下面的几个点:
第一个就是对照片的裁剪,这个裁剪必须保存1寸照片的比例,不然就会使得图像变形。
第二个是在做人物和背景分离的时候,不同的照片,分离的阈值是需要有一定调整的,这样才能达到很好的效果。
第三是在改变背景颜色的时候,人物边缘会有一些色块、噪点出现,这就需要用到图像处理里面的腐蚀、膨胀了,我们对mask进行膨胀,使得人物和背景融合得更好。
看完案例的小伙伴们点个在看,顺便扫码帮忙关注一下呗,你的支持是我继续推新案例的动力。
利用Python制作证件照相关推荐
- 利用Python制作王者荣耀出装小助手,引来了老板的注意!
导语 T_T并不玩这些游戏... 单纯来蹭个热点... 大概是因为蹭热点需要的技术含量比较低? 就这样吧~~~ 利用Python制作命令行版的王者荣耀出装小助手. Let's Go! 开发工具 Pyt ...
- 小哥哥你有98K吗?利用Python制作一款多功能变声器!
前言 好吧,关于这句小哥哥你有98K吗?出自别人口中经常说的玩笑话,我也略懂一些游戏嘛.不过不常玩,废话不多说,开始咱们今天的教程,非常简单! 利用Python制作一款多功能变声器! 咱们首先登陆百度 ...
- python如何制作一个工程软件_如何利用python制作一个解压缩软件-Go语言中文社区...
如何利用python制作一个解压缩软件 python实现解压缩的重要模块就是--zipfile,其次是os 安装zipfile模块 首先得安装zipfile模块,打开cmd输入一下命令即可安装 pip ...
- python拼图_利用python制作拼图小游戏的全过程
开发工具 Python版本:3.6.4 相关模块: pygame模块: 以及一些Python自带的模块 关注公众号:Python学习指南,回复"拼图"即可获取源码 环境搭建 安装P ...
- 用python做头像_如何利用python制作微信好友头像照片墙?
这个不难,主要用到itchat和pillow这2个库,其中itchat用于获取微信好友头像照片,pillow用于拼接头像生成一个照片墙,下面我简单介绍一下实现过程,代码量不多,也很好理解,实验环境wi ...
- 利用Python制作第一人称射击小游戏 含源代码
大家好 我是毕加锁 (锁!) 今天教大家利用Python制作第一人称小游戏 涉及知识点 1.sprites 2.pygame混音器 3.图章 4.python基础语法 .代码 1发射声 from ...
- 利用python制作转盘
利用python制作转盘 pip install threading(pip一定要为最新版本,不然容易出错) pip install tkinter pip install pyinstaller将t ...
- 利用Python制作微信机器人(三)实现爬取JD商品价格
从前两篇的博客来看,目前已经实现了机器人单向给微信发消息,和与机器人进行交互式发消息,详情如下: 利用Python制作微信机器人(一)机器人单向发消息 利用Python制作微信机器人(二)与机器人进行 ...
- 利用Python制作微信跳一跳外挂,微信好友装逼神器!
导语 前几天在GitHub上看到有人利用Python玩一款名为"跳一跳"的微信小程序,于是打算自己也来试一试,进群:711944363 获取微信跳一跳源码! 演示工具 电脑系统:W ...
- python表白代码照片墙-如何利用python制作微信好友头像照片墙?
这个不难,主要用到itchat和pillow这2个库,其中itchat用于获取微信好友头像照片,pillow用于拼接头像生成一个照片墙,下面我简单介绍一下实现过程,代码量不多,也很好理解,实验环境wi ...
最新文章
- 拿到淘宝offer后的胡思乱想plus面试总结
- Struts 学习笔记1 -Struts Framework 概览
- 在Ubuntu上通过VNC Viewer连接Jetson nano桌面
- vue入门基础篇笔记1
- ActiveMQ 事务消息 手工签收
- 深度学习之卷积神经网络(5)表示学习
- 构建iOS风格移动Web应用程序的8款开发框架
- PyCharm下解决Unresolved Reference问题
- ansys怎么使用anand模型_详细剖析ANSYS有限元分析这个软件
- TransFM:基于因子分解机的序列推荐方法
- [Hive]Hive表文件压缩介绍
- 云服务器真假辨别奥秘
- matlab 数据透视表,excel表格怎样做数据透视表:如何将excel表格中大量数据导入matlab中并作图...
- (转)中国大学改名大全2007最新版(笑掉大牙)
- 联盟链系统开发 联盟链开发多钱
- 20175227张雪莹 2018-2019-2 《Java程序设计》第五周学习总结
- perl/tk_Perl / Tk的基础
- 什么是DOM,DOM的作用,以及DOM与JavaScript的关系
- 汇编语言——>>步进电机
- securecrt8注册码