前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >​【Python案例】一键自动抠图生成证件照

​【Python案例】一键自动抠图生成证件照

原创
作者头像
superhua
发布2022-05-03 18:00:16
1.2K0
发布2022-05-03 18:00:16
举报
文章被收录于专栏:CNNCNN

0 效果与体验

不想去照相馆?担心肖像隐私被第三方获取?不会抠图?本文实现基于人工智能的一键自动抠图生成证件照。在进入正文之前,先看最终效果:

效果展示
效果展示

为了让读者快速体验,我写了个小程序: 证照工具箱,可打开直接体验。

证照工具箱
证照工具箱

1 人脸检测

在制作证件照时,首选需要检测人脸。根据指定的输出大小将人脸区域等比裁剪。

裁剪效果
裁剪效果

1.1 人脸检测

这里使用了Retina人脸检测模型,因为篇幅原因,具体使用方法不再描述详细调用过程,如有需要请关注我的公众号:Python学习实战,后台回复:Retina。即可获取作者已封装好的人脸检测调用源码。

1.2 人脸裁剪

具体实现代码逻辑如下:

代码语言:python
复制
def crop(rgb, dh, dw):
    oh, ow, _ = rgb.shape
    bgr = cv2.cvtColor(rgb, cv2.COLOR_RGB2BGR)
    box = infer_face_detector(bgr)

    leye_x, leye_y, reye_x, reye_y = box[5:9]
    lzb_x, lzb_y, rzb_x, rzb_y = box[11:15]
    left = int(leye_x - (reye_x - leye_x) * 2)
    right = int(reye_x + (reye_x - leye_x) * 2)
    ceye_y = (leye_y + reye_y) / 2
    czb_y = (lzb_y + rzb_y) / 2
    top = int(ceye_y - (czb_y - ceye_y) * 2)
    bottom = int(czb_y + (czb_y - ceye_y) * 2)

    th = dh * (right - left) / dw 
    tag = abs(th - (bottom - top)) / 2
    if th < bottom - top:  
        top = int(top + tag)
        bottom = int(bottom - tag)
    else:   
        top = int(top - tag)
        bottom = int(bottom + tag) 

    if top < 0:
        rgb = np.pad(rgb, ((-top, 0), (0, 0), (0, 0)), "edge") 
        top = 0 
    if left < 0:
        rgb = np.pad(rgb, ((0, 0), (-left, 0), (0, 0)), "edge")
        left = 0
    if right > ow:
        rgb = np.pad(rgb, ((0, right - ow), (0, 0), (0, 0)), "edge")
    if bottom > oh:
        rgb = np.pad(rgb, ((0, 0), (0, bottom - oh), (0, 0)), "edge")  
    rgb = rgb[top:bottom, left:right, :] 
    
    return rgb

2 自动抠图

github下载基于深度学习的自动抠图模型,得到一张alpha图。alpha图将前景和背景分离,同样,因为篇幅原因,这里不具体描述如何去调用。如有需要请关注我的公众号:Python学习实战,后台回复:抠图。即可获取作者已封装好的人像抠图调用源码。这里只展示抠图效果:

抠图效果
抠图效果

3 合成证件照

合成证件照公式:out = src * alpha + (1 - alpha) * bg,输出示意图如下:

合成证件照
合成证件照

4 在线体验

搜索小程序 :证照工具箱,即可直接体验。

相关源码获取:

  1. 关注我的公众号:Python学习实战
  2. 后台回复:抠图。获取作者已封装好的人像抠图调用源码。
  3. 后台回复:Retina。获取作者已封装好的人脸检测调用源码。

欢迎关注我的公众号:Python学习实战,专注于PythonPytorchNumpy等技术,第一时间获取最新更新。如果您觉得本文有帮助,帮忙点个赞,这是对我最大的鼓励!

关注【Python学习实战】
关注【Python学习实战】

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0 效果与体验
  • 1 人脸检测
  • 1.1 人脸检测
  • 1.2 人脸裁剪
  • 2 自动抠图
  • 3 合成证件照
  • 4 在线体验
相关产品与服务
人脸识别
腾讯云神图·人脸识别(Face Recognition)基于腾讯优图强大的面部分析技术,提供包括人脸检测与分析、比对、搜索、验证、五官定位、活体检测等多种功能,为开发者和企业提供高性能高可用的人脸识别服务。 可应用于在线娱乐、在线身份认证等多种应用场景,充分满足各行业客户的人脸属性识别及用户身份确认等需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档