基于人脸识别和图像分割技术制作证件照

我们经常会遇到这样的问题,报名参加考某种考试, 需要提交符合指定背景、尺寸要求的照片,但是手上只有生活中,或者照片尺寸符合要求,但是背景不符合要求的情况。 今天我教大家基于人脸识别和图像分割技术制作证件照,其关键代码不足10行。

1. 读取图像节点,使用PIL库的Image对象的Open方法打开图片

Image.open(fp)
2. 修改尺寸节点,使用if……else判断语句
3. 人脸轮廓检测节点,使用paddlepaddle深度学习框架,调用模face_landmark_localization推理
face_landmark = hub.Module(name="face_landmark_localization")
result = face_landmark.keypoint_detection(images=[np.array(raw_img)])
face = np.array(result[0]['data'][0], dtype=np.int64)
4. 裁剪尺寸节点,依据步骤3人脸轮廓,根据人脸裁剪一定大小的图片

face[:, 0].min()
right = face[:, 0].max()
w = right - left
cw = (right+left) // 2

upper = face[:, 1].min()
lower = face[:, 1].max()
# h = lower - upper
ch = (lower + upper) // 2

h = crop_size[1] * w // crop_size[0]

box = (cw - rate * w, ch-rate * h, cw + rate * w, ch + rate * h)

cropped_img = raw_img.crop(box)
5. 人物分割节点,使用tensorflow深度学习框架,调用模型DeepLab推理
resized_image, seg_map = model.run(img)  # model为DeepLabV3
6. 修改背景节点,使用opencv库,对非人物区域进行膨胀操作,然后修改非人物区间rgb值
person = []
mask = np.array((mask < 180), dtype=np.uint8)
mask = cv.dilate(mask, None, iterations=2)
mask = np.array(mask, dtype=np.bool)
for i in range(3):
    a = img[i]
    a[mask] = rgb[i]
    person.append(a)

img = np.array(person).transpose((1, 2, 0))
new_image = Image.fromarray(img)
std_new_img = new_image.resize(std_size, Image.ANTIALIAS)
7. 保存图像节点,使用PIL库的Image对象的save方法保存图片
img2.save(out_path + file_name)
完整代码参考地址:https://github.com/actboy/ai-id-photo/blob/master/src/algo/precision_id_photo.py

应用示例
该功能十分有用,我把该功能开发成了一个web小应用,分享出来免费使用。 
访问地址:在线证件照

todo 
1. 训练face_landmark_localization模型
2. 训练DeepLabV3模型(已完成),可参考基于PASCAL VOC 2012数据集训练deeplab图像分割模型_eton_liu的专栏-CSDN博客基于PASCAL VOC 2012数据集训练deeplab图像分割模型依赖安装测试是否安装成功设置shell脚本变量创建目录下载VOC 2012数据集合并进行格式转换下载预训练模型训练模型评估模型导出模型查看训练/评估日志说明todo依赖python== 3.7.11tensorflow==1.15.0安装git clone git@github.com:actboy/deeplab.gitcd deeplabexport PYTHONPATH=$PYTHONPATH:`pwd`:`pwdhttps://blog.csdn.net/eton_liu/article/details/121969235

http://www.niftyadmin.cn/n/1030600.html

相关文章

Unity实时反射相关优化

一&#xff0e;优化最终效果及消耗 8人同屏&#xff0c;最高画质&#xff0c;耗时1.1ms&#xff08;高通 骁龙710&#xff09;。因为项目未上线原因&#xff0c;只能用测试图进行相关说明。 二、原反射脚本源码 1. 源码 using UnityEngine; using System.Collections;[Execute…

UWA服务模式调整通知

从2022年2月15日晚8点起&#xff0c;UWA服务模式将做如下调整&#xff0c;请UWA会员了解调整信息&#xff0c;以便您更好的使用UWA服务。 UWA服务中的真人真机测试、GOT Online、本地资源检测将不再单独销售。 已购买相应UWA服务的UWA会员&#xff0c;您可在原有的期限内继续使…

海外设备上偶现的报错处理方式

1&#xff09;海外设备上偶现的报错处理方式 ​2&#xff09;Shader冗余则ShaderLab占用大小问题 3&#xff09;URP Renderer Feature实现二次元描边&#xff0c;Cutout的处理问题 4&#xff09;Unity中视频播放的解决方案 这是第286篇UWA技术知识分享的推送。今天我们继续为大…

基于PASCAL VOC 2012数据集训练deeplab图像分割模型

基于PASCAL VOC 2012数据集训练deeplab图像分割模型前言依赖安装测试是否安装成功设置shell脚本变量创建目录下载VOC 2012数据集合并进行格式转换下载预训练模型训练模型评估模型导出模型查看训练/评估日志说明todo前言 在《基于人脸识别和图像分割技术制作证件照》博文中&…

GPU Counter、Timeline功能上线 | 性能优化快人一步

近几年&#xff0c;无论是哪种品类的游戏&#xff0c;都在游戏画面上越来越“攻坚”了。细腻的建模、自然的光影、炫目的特效...这些无一不给游戏性能带来更高的挑战。随着玩家对游戏画面的需求不断提高&#xff0c;大多数项目的渲染压力也一路水涨船高。 为了更好地解决这个痛…

Unity将核心脚本打成DLL是否有性能影响

1&#xff09;Unity将核心脚本打成DLL是否有性能影响 ​2&#xff09;预制物嵌套导致AssetBundleName修改后对母预制物丢失引用 3&#xff09;真人真机测试报告中AB.LoadFromFile耗时较高 4&#xff09;如何剔除掉Shader中某一个Pass 这是第287篇UWA技术知识分享的推送。今天我…

UIToolkit下一代UI系统

1. UIToolkit运行时――下一代UI系统 UIToolkit的前身是UIElement&#xff0c;发布于Unity 2018。起初它用于开发Editor编辑面板中的UI&#xff0c;自Unity 2019、Unity 2020起正式支持运行时UI并且更名为UIToolkit&#xff0c;它以Package包的形式存在。自Unity 2021.2起&…

2D项目大量物品图标Draw Call优化方案

1&#xff09;2D项目大量物品图标Draw Call优化方案 ​2&#xff09;UGUI SpriteAtlas的热更新问题 3&#xff09;iOS平台突然有一帧UI渲染开销很高 4&#xff09;iOS上频繁Crash&#xff0c;堆栈很奇怪 这是第288篇UWA技术知识分享的推送。今天我们继续为大家精选了若干和开发…