大家好!好久没见面了。今天和大家分享的是利用Python批处理随意拍的照片,生成证件照。有时候我们没空去拍证件照,又急着需要上传电子证件照,怎么办呢?PS又不是很熟。今天get这个技能的coder们,就可以方便自己生成证件照了。

上段时间因为工作需要,需要大量拍摄证件照。一个个处理比较麻烦,于是就想着直接收集生活照利用Python来帮忙解决一下这个问题。刚好上次参加百度的训练营有接触过PaddleHub,今天就借助PaddleHub来实现这个功能。

思路:

  1. 首先,根据PaddleHub人脸定位,找到图片中人脸的位置。

  2. 由于一寸照片的宽度295,高度是413,用这个比例框选出含有人脸的图片,并且进行缩放到尺寸(295,413)。

  3. 用PaddleHub的人像分割,分离人物和背景,对背景分别填充白色,红色,蓝色,得到三种颜色的登记照片。

步骤1、准备工作

# 需要先升级到最新版本的paddlehub!pip install --upgrade paddlehub​​​​​​
# 查看我们上传的照片!ls photo/

#导入需要用的依赖库from PIL import Imageimport paddlehub as hubimport cv2import 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. 第一个就是对照片的裁剪,这个裁剪必须保存1寸照片的比例,不然就会使得图像变形。

  2. 第二个是在做人物和背景分离的时候,不同的照片,分离的阈值是需要有一定调整的,这样才能达到很好的效果。

  3. 第三是在改变背景颜色的时候,人物边缘会有一些色块、噪点出现,这就需要用到图像处理里面的腐蚀、膨胀了,我们对mask进行膨胀,使得人物和背景融合得更好。

看完案例的小伙伴们点个在看,顺便扫码帮忙关注一下呗,你的支持是我继续推新案例的动力。

利用Python制作证件照相关推荐

  1. 利用Python制作王者荣耀出装小助手,引来了老板的注意!

    导语 T_T并不玩这些游戏... 单纯来蹭个热点... 大概是因为蹭热点需要的技术含量比较低? 就这样吧~~~ 利用Python制作命令行版的王者荣耀出装小助手. Let's Go! 开发工具 Pyt ...

  2. 小哥哥你有98K吗?利用Python制作一款多功能变声器!

    前言 好吧,关于这句小哥哥你有98K吗?出自别人口中经常说的玩笑话,我也略懂一些游戏嘛.不过不常玩,废话不多说,开始咱们今天的教程,非常简单! 利用Python制作一款多功能变声器! 咱们首先登陆百度 ...

  3. python如何制作一个工程软件_如何利用python制作一个解压缩软件-Go语言中文社区...

    如何利用python制作一个解压缩软件 python实现解压缩的重要模块就是--zipfile,其次是os 安装zipfile模块 首先得安装zipfile模块,打开cmd输入一下命令即可安装 pip ...

  4. python拼图_利用python制作拼图小游戏的全过程

    开发工具 Python版本:3.6.4 相关模块: pygame模块: 以及一些Python自带的模块 关注公众号:Python学习指南,回复"拼图"即可获取源码 环境搭建 安装P ...

  5. 用python做头像_如何利用python制作微信好友头像照片墙?

    这个不难,主要用到itchat和pillow这2个库,其中itchat用于获取微信好友头像照片,pillow用于拼接头像生成一个照片墙,下面我简单介绍一下实现过程,代码量不多,也很好理解,实验环境wi ...

  6. 利用Python制作第一人称射击小游戏 含源代码

    大家好 我是毕加锁 (锁!) 今天教大家利用Python制作第一人称小游戏 涉及知识点 1.sprites 2.pygame混音器 3.图章    4.python基础语法 .代码 1发射声 from ...

  7. 利用python制作转盘

    利用python制作转盘 pip install threading(pip一定要为最新版本,不然容易出错) pip install tkinter pip install pyinstaller将t ...

  8. 利用Python制作微信机器人(三)实现爬取JD商品价格

    从前两篇的博客来看,目前已经实现了机器人单向给微信发消息,和与机器人进行交互式发消息,详情如下: 利用Python制作微信机器人(一)机器人单向发消息 利用Python制作微信机器人(二)与机器人进行 ...

  9. 利用Python制作微信跳一跳外挂,微信好友装逼神器!

    导语 前几天在GitHub上看到有人利用Python玩一款名为"跳一跳"的微信小程序,于是打算自己也来试一试,进群:711944363 获取微信跳一跳源码! 演示工具 电脑系统:W ...

  10. python表白代码照片墙-如何利用python制作微信好友头像照片墙?

    这个不难,主要用到itchat和pillow这2个库,其中itchat用于获取微信好友头像照片,pillow用于拼接头像生成一个照片墙,下面我简单介绍一下实现过程,代码量不多,也很好理解,实验环境wi ...

最新文章

  1. 拿到淘宝offer后的胡思乱想plus面试总结
  2. Struts 学习笔记1 -Struts Framework 概览
  3. 在Ubuntu上通过VNC Viewer连接Jetson nano桌面
  4. vue入门基础篇笔记1
  5. ActiveMQ 事务消息 手工签收
  6. 深度学习之卷积神经网络(5)表示学习
  7. 构建iOS风格移动Web应用程序的8款开发框架
  8. PyCharm下解决Unresolved Reference问题
  9. ansys怎么使用anand模型_详细剖析ANSYS有限元分析这个软件
  10. TransFM:基于因子分解机的序列推荐方法
  11. [Hive]Hive表文件压缩介绍
  12. 云服务器真假辨别奥秘
  13. matlab 数据透视表,excel表格怎样做数据透视表:如何将excel表格中大量数据导入matlab中并作图...
  14. (转)中国大学改名大全2007最新版(笑掉大牙)
  15. 联盟链系统开发 联盟链开发多钱
  16. 20175227张雪莹 2018-2019-2 《Java程序设计》第五周学习总结
  17. perl/tk_Perl / Tk的基础
  18. 什么是DOM,DOM的作用,以及DOM与JavaScript的关系
  19. 汇编语言——>>步进电机
  20. securecrt8注册码

热门文章

  1. Ubuntu系统清理瘦身
  2. 手机号码或账号查询支付宝名字和性别
  3. iOS---Xcode中删除描述文件Provisioning Profiles
  4. Excel获取目标时间点/日期的方法
  5. 联想移动裁员为求自保 摩托罗拉品牌逐渐消退
  6. 职场心理学-心理学第一天(非原创)
  7. 从入门到变现|全面解析视频号运营规则,看完少走3天弯路!
  8. google书签删除了怎么恢复?谷歌浏览器删除的书签怎么恢复?
  9. t420i升级固态硬盘提升_老电脑想升级,如何选购最适合的固态硬盘
  10. 2018山西中考计算机软件名称,2018年山西省中考试题