[发明专利]一种基于非限定环境下所拍摄照片生成证件照的方法在审
| 申请号: | 202110898874.3 | 申请日: | 2021-07-29 |
| 公开(公告)号: | CN113870176A | 公开(公告)日: | 2021-12-31 |
| 发明(设计)人: | 卢闰霆;阳文兵;马伟;李春虎;马文广;李冰;赵金 | 申请(专利权)人: | 金科智融科技(珠海)有限公司;北京工业大学 |
| 主分类号: | G06T7/00 | 分类号: | G06T7/00;G06T7/194;G06T7/62;G06N3/04;G06N3/08 |
| 代理公司: | 北京思海天达知识产权代理有限公司 11203 | 代理人: | 刘萍 |
| 地址: | 519000 广东省珠海*** | 国省代码: | 广东;44 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 一种 基于 限定 环境 拍摄 照片 生成 证件 方法 | ||
1.一种基于非限定环境下所拍摄照片生成证件照的方法,其特征在于:包括以下步骤:
获取待处理的图像,利用现有的人脸检测方法,对图像中的人物进行检测,得到图像中每个人物人脸的包围框,计算每个包围框的面积大小,将面积最大的包围框对应的人物作为图像中的主体人物;
判断包围框的个数;
如果包围框的个数为0,则说明图像中没有发现人物,返回“没有检测到人物”提示;
如果包围框的个数为1,则说明图像中只有一个人,则利用包围框对图像进行裁剪,得到主体人物图像;然后利用MODNet抠图模型,对主体人物图像进行抠图,得到主体人物的前景图像和前景不透明度图像;
如果包围框的个数大于1,则说明图像中有多个人存在,则利用Mask-RCNN对图像中的人物进行实例分割,得到每个人物的掩膜,将除了主体人物的掩膜进行合并,得到其他人物的掩膜,利用其他人物的掩膜,去除掉图像中的其他人物;再利用神经网络的图像修复模型,对图像中其他人物的区域进行修复,使图像中被其他人物掩膜去除的区域与背景相似;然后在对被修复的图像进行抠图,得到前景人物图像与前景不透明度图像,最后利用主体人物的包围框对前景人物图像与前景不透明度图像进行裁剪,得到主体人物的前景图像与前景不透明度图像;
利用MTCNN人脸检测的神经网络模型,对得到主体人物前景图像进行人脸检测,得到主体人物人脸的边界框;
根据人脸边界框对主体人物的前景图像与前景不透明度图像进行裁剪,从而使其符合证件照的尺寸要求;
最后,对生成的证件照进行检测,检测人物的头部姿态是否正常,人物是否带了帽子,脸上是否有手势遮挡,是否带了口罩;如果检测合格,返回证件照,如果检测不合格,则返回相应的不合格原因,提示用户重新拍摄。
2.根据权利要求1所述的方法,其特征在于:包含两大部分,一是通过非限定环境下拍摄的照片生成证件照,二是对生成的证件照进行智能的标准化与否的分析;
第一部分,通过非限定环境下拍摄的照片生成证件照;
S101:检测输入图像中人物数量,并获取图像中主体人物的包围框;
使用的是YOLOv5神经网络模型,加载预训练过的权重参数,检测输入图像中每个人物的包围框;计算包围框的数量,如果包围框的数量为小于1,则令图像中人物数量为0;如果包围框的数量等于1,令图像中的人物数量为1,将唯一的包围框作为图像主体人物的包围框;如果包围框的数量大于1,令图像中人物数量为2,然后计算每个包围框的面积大小,将面积最大的包围框作为图像主体人物的包围框;
S102:判断图像中的人物数量,根据图像中的人物数量,使用不同的抠图方法,得到主体人物的前景图像与前景不透明度;
首先从S101中得到图像中人物数量;
如果图像中的人物数量为0,返回“没有检测到人物”提示,结束证件照的生成;
如果图像中的人物数量为1,则进行单人场景的抠图;该过程包括以下步骤;
S201:利用S101中主体人物的包围框对输入图像进行裁剪,得到主体人物图像;
获取输入图像,利用S101中主体人物的包围框对输入图像进行裁剪,得到主体人去的图像,记作main_img;
S202:对主体人物图像进行抠图,得到主体人物的前景图像与前景不透明度图像;
获取S101中裁剪得到主体人物图像,记作main_img,利用MODNet抠图模型,对图像进行抠图,可以得到图像中主体人物的前景不透明度图,记作matte,matte中每个元素的取值范围为[0,1];
S203:对主体人物图像进行人体分割,得到主体人物的掩膜;
使用BodyPix模型,对主体人物图像main_img中的人体进行分割,得到人体的掩膜,记作main_mask,掩膜为0/1的二值图像;
S204:将主体人物的掩膜与前景不透明度图像进行融合,得到增强的前景不透明度图像,然后利用增强的不透明度图像得到前景图像;
首先利用图像形态学上的腐蚀操作,对main_mask进行腐蚀,然后利用下列公式得到新的不透明度图像matte;
matte[main_mask>0]=1
即main_mask所大于0的位置,在matte对应的位置中,matte所在位置的值都变为1;
获取一张与主体人物图像大小相同的图像bg_img,作为背景图像,用的是全白的背景图像bg_img;
利用下列公式计算得到主体人物的前景图像,记作fore_img:
fore_img=main_img*matte+bg_img*(1-matte)
如果图像中的人物数量大于1,则进行多人场景的抠图;参照图3,示出了多人场景时生成主体人物前景图像与前景不透明度图像的过程,该过程包括以下步骤;
S301:对输入的图像进行人物实例分割,获取主体人物的掩膜与其他人物的掩膜;
获取输入图像input_img,利用现有的神经网络实例分割算法对输入的图像进行实例分割,分割算法为Mask-RCNN算法模型,获得输入图像中每个人物的掩膜,然后计算每个掩膜的面积大小,将面积最大的作为主体人物的掩膜main_mask,掩膜为0/1的二值图像,将其他人物的掩膜进行合并,得到其他人物的掩膜other_mask,掩膜为0/1的二值图像;
S302:获取其他人物掩膜,通过图像修复去除图像中的其他人物;
获取S301中其他人物的掩膜other_mask,然后利用下列公式去除输入图像中的其他人物,得到去除其他人物的图像,记作delete_img;
delete_img=input_img*(1-other_mask)
然后通过神经网络图像修复模型,使用Generative Image Inpainting模型,对delete_img图像中其他人物的区域进行修复,使得其他人物的区域与背景相似,得到修复图像,记作inpaint_img;
S303:对去除其他人物的修复图像进行抠图,得到修复图像的前景不透明度图像;
使用MODNet抠图模型对S302中的修复图像inpaint_img进行抠图,得到去除了其他人物的修复图像的前景不透明度图像matte,matte的取值范围为[0,1];
S304:利用前景不透明度图像与输入图像,得到前景图像;
获取S303中的前景不透明度图像matte与S301中的输入图像input_img;利用与S204中的相同操作,可以得到人物的前景图像fore_img;
S305:利用S101中主体人物的包围框,对前景不透明度图像与前景图像进行裁剪,得到主体人物前景不透明度图像与前景图像;
获取S303中的前景不透明度图像matte与S305中的人物前景图像fore_img,利用S101中主体人物的包围框,对matte图像与fore_img图像进行裁剪,得到主体人物的前景图像与前景不透明度图像;
S103:检测主体人物的前景不透明图像中主体人物人脸的边界框;
获取S102中得到的主体人物前景图像;使用神经网络人脸检测算法模型,用的是MTCNN模型,检测主体人物前景图像中人脸的边界框,设人脸边界框左上角与右下角的坐标分别为(x1,y1),(x2,y2);
S104:利用人脸边界框对前景图像进行裁剪,使其符合证件照图像规格;
获取S102中主体人物的前景图像fore_img,得到前景图像fore_img的高与宽(h,w);获取S103中前景人物人脸的边界框,对人脸的边界框进行调整,具体的操作如下:
x1=max(0,x1-x1*0.6)
y1=max(0,y1-y1*0.6)
x2=min(w,x2+x2*0.6)
y2=min(h,y2+y2*0.7)
得到新的符合证件照要求的边界框(x1,y1,x2,y2);利用新的边界框对主体人物的前景图像fore_img与前景不透明度图像matte进行裁剪,得到符合要求的证件照图像与对应的前景不透明度图像;
第二部分,对生成的证件照进行智能的标准化与否的分析;
S401:检测证件照图片中人脸的边界框;
获取S103中得到证件照图像;使用神经网络人脸检测算法模型,用的是MTCNN模型,检测主体人物前景图像中人脸的边界框,设人脸边界框左上角与右下角的坐标分别为(x1,y1),(x2,y2);得到证件照图像的高与宽(h,w);
S402:对用户的头部姿态进行检测,如果头部出现上下翻转、左右翻转、平面内旋转等情况,则为不合规,否则通过;
获取S104中生成的证件照图像,通过神经网络模型对图像进行头部姿态估计;用的头部姿态估计算法为img2pose算法模型,获得输入图像中人体头部姿态的三个欧拉角:pitch、yaw、roll,三个欧拉角分别代表上下旋转,左右旋转,平面内旋转的欧拉角;
分别判断三个欧拉角的大小,如果三个欧拉角大于或者小于某值,则判断为不合规,返回相应的提示,如果都符合要求,则返回“正常”;
pitch>0.28,判断为不合规,返回“头部向上旋转”提示;
pitch<-0.28,判断为不合规,返回“头部向下旋转”提示;
yaw>0.15,判断为不合规,返回“人脸向右旋转”提示;
yaw<-0.15,判断为不合规,返回“人脸向左旋转”提示;
roll>0.15,判断为不合规,返回“头部向左旋转”提示;
roll<-0.15,判断为不合规,返回“头部向右旋转”提示;
S403:检测用户是否佩戴帽子,如果检测出用户佩戴帽子,则判断为不合规,否则通过;
获取S402中的证件照图像,获取S401中的人脸边界框,利用人脸边界框对其进行裁剪,具体的操作如下:
x1=max(0,x1-x1*0.75)
y1=max(0,y1-y1*0.75)
x2=min(w,x2+x2*0.75)
y2=min(h,y2+y2*0.75)
得到新的边界框(x1,y1,x2,y2),利用新的边界框对证件照进行裁剪,得到符合人脸解析算法要求的人脸图像;
通过神经网络模型对裁剪后的图像进行人脸解析,用的是BiSeNet网络模型,获得图像中帽子的掩膜hat_mask;
计算掩膜hat_mask中大于0的像素点的个数,当大于0的像素点个数占掩膜hat_mask总体像素个数的比大于大于2%时,则判断用户带了帽子,返回“不能带帽子”的提示,否则通过;
S404:检测用户人脸附近是否出现手势,出现手势为不合规,否则通过;
获取S403中证件照图像,通过神经网络模型检测图像中是否出现了手势,用的是MediaPipe库中检测手掌关键点的模型Hands,获取手掌关键点检测结果与置信度,当检测到图像中出现手掌的关键点且置信度大于0.7时,则判断图像中出现了手势,返回“有手势”的提示,否则通过;
S405:检测用户是否佩戴口罩,如果佩戴口罩,则判断为不合规,否则通过;
获取S404中的证件照图像,获取S401中的人脸边界框,利用人脸边界框对其进行裁剪,具体的操作如下:
x1=max(0,x1-x1*0.75)
y1=max(0,y1-y1*0.75)
x2=min(w,x2+x2*0.75)
y2=min(h,y2+y2*0.75)
得到新的边界框(x1,y1,x2,y2),利用新的边界框对证件照进行裁剪,得到符合口罩检测算法要求的人脸图像;
通过神经网络模型对裁剪后的图像进行口罩检测,用的是YOLOv5模型,获取口罩检测结果与置信度,当检测到用户佩戴口罩且置信度大于0.7时,返回“佩戴口罩”的提示,否则通过;
S406:检测用户人脸的表情,若表情为自然或者开心则通过,否则不通过;
获取S405中的证件照图像,获取S401中的人脸边界框,利用人脸边界框(x1,y1,x2,y2)对其进行裁剪,得到符合表情识别算法要求的人脸图像;
通过神经网络模型对裁剪后的图像进行表情识别,用的是ARM模型,获取表情识别结果,若表情为开心或者自然则通过,否则返回“表情不合规”的提示;
S407:检测用户眼睛与嘴唇,如果眼睛闭合或者嘴唇张开则为不合规,否则通过;
获取S406中证件照前景图像,使用神经网络模型检测眼睛与嘴唇的关键点,用的是Mediapipe库中检测人脸关键点的模型Face Mesh,获得眼睛的周围的6个关键点,将两个眼角的分别记作点p1与点p4,上眼皮和下眼皮分别两个,记作p2,p3与p5,p6;
计算眼睛的横纵比eye_ratio,当横纵比小于0.15时,判断为眼睛闭合,返回“眼睛闭合”的提示,否则通过;眼睛横纵比eye_ratio的具体计算方式为:
height1=euclidean(p2,p6)
height2=euclidean(p3,p5)
weight=euclidean(p1,p4)
其中euclidean函数为计算两个点之间的欧几里得距离;
获得嘴巴的20个关键点,2个嘴角的关键点,上下嘴唇各9个关键点;同理,可以上下嘴唇9对关键点的欧几里得距离,求和取平均,得到上下嘴唇的距离,记作m_height,然后计算2个嘴角关键点的欧几里得距离,记作m_weight;通过下面的公式,计算嘴唇的横纵比mouth_ratio:
当嘴唇的横纵比大于0.07时,则判断嘴唇为张开状态,返回“嘴巴张开”的提示,否则通过。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于金科智融科技(珠海)有限公司;北京工业大学,未经金科智融科技(珠海)有限公司;北京工业大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202110898874.3/1.html,转载请声明来源钻瓜专利网。





