码上生活

毕业照合成器

此图像的alt属性为空;文件名为毕业照.png

毕业季马上就要到了。由于疫情原因,拍摄班级毕业照成为了很多毕业生的奢望。为了避免这样的遗憾,本人设计出了毕业照自动合成器。

论文摘要

毕业季马上就要到了。由于疫情原因,拍摄班级毕业照成为了很多毕业生的奢望。为了避免这样的遗憾,本人设计出了毕业照自动合成器。

本文章为技术杂学铺公众号第191篇推文,阅读全文预计约10分钟。

本期封面素材取自作者大学好友的“友拍YOUPAI”平台

该平台已随着好友的毕业而“倒闭”……

1.绪论

又是一年毕业季,只不过今年的情况非常特殊。由于疫情的原因,很多学生迟迟没有返校。对应届毕业生来说,返校只有回去收拾行李的一两天的时间,与好友线下见面都成了一种奢望,更别说照毕业照了。

针对于目前毕业季大学生无法拍摄毕业照的痛点,本论文设计了毕业照自动合成器。用户给出毕业学生的大头照,该合成器可以自动识别人脸、自动抠图并自动合成毕业照。全程无需手工操作,一键自动生成毕业照!

图一:毕业照合成器算法流程图

2.相关研究

目前有很多高校采用手工合成的方式制作毕业照。比如铁岭莲花乡池水沟子大学的每个学生上传一张自己的大头像,后期合成人员手动抠图并合成毕业照。合成效果如图二所示。

图二:手动合成的毕业照(人脸已打码)

然而手工合成的方法需要人工扣出每个学生的头像、统一各头像的亮暗程度、调整学生头像的高度……总而言之,手工合成方法的人工成本高,制作时间慢长,难以快速满足海量的毕业照合成需求。

为解决人工合成毕业照费时费力的问题,本论文设计并实现了毕业照自动合成器。

3.人脸检测算法实现

毕业照合成器的核心算法之一就是能够自动检测出学生的人脸并进行智能抠图

常用的检测算法常常为深度学习算法,如RCNN,fasterRCNN等等。在同性交友平台github上即可找到开源的人脸检测算法。

但即便是最简单的深度学习人脸检测算法,在运行时仍旧需要不小的计算力。为了能大幅度降低人脸检测算法所需的计算量,本论文提出了能人脸检测并消除障碍算法。简称为智障算法

图三:常用的深度学习算法,不好!
本论文的智障算法,好!

智障算法的使用建立在两个假设之下:

1. 假设在学生照片中,学生都位于画面中央。

2. 假设背景是纯色,学生与背景的差异明显。

图四:学生照片说明

当图片符合上述两个假设的时候,我们就可以用传统的计算机视觉方法来自动检查头像并抠图了。

为了能更好地说明智障算法的原理,我们以精神小伙郭同学来进行举例

图五:精神小伙郭同学

图六明确地展示了本论文的智障算法能够处理什么样的图片。

图六:图片说明

首先,我们将图片进行灰度处理,此时各个像素点的取值在0-255之间

图七:图片灰度图与直方图

紧接着,我们将去除背景颜色。

之后,计算图片左上角区域所有像素点的平均值。

图八:计算左上角像素点平均值

由于智障算法建立在学生在画面中央且背景是纯色的假设下,因此左上角区域的平均值可以代表为整张图片的背景颜色的平均值。

对郭同学照片左上角区域进行计算后,得到该照片背景颜色的平均值为123.0

在直方图中,大量的像素点分布在150-160直接,且像素点的均值为154。

图九:图片背景色与像素点中值的对比

图片的背景颜色123小于图片像素点的中值154,即我们认为所有取值在154以下的像素点大概率为背景,而取值大于154的像素点可能是头像。因此我们分布在将直方图中左侧区域的像素点的取值全部置零,而将分布在直方图右侧区域的像素点全部设置为255。

【额外细节:由于分布在150-160之间的像素点太多,大概率为背景,因此无论背景颜色是比154低(舍去左半边)还是比154高(舍弃右半边),150-160区域都必须扣除】

经过智障算法后,去除背景的郭同学图片如下

图十:去除背景的郭同学

扣除背景后,下一步是智能检测出图片中头像在哪里

由图十可以看出,尽管我们已经成功地扣除了背景,但是郭同学的手还在。

为此,本论文的智障算法采用统计xy轴像素点分布的方法来智能选出图片中头像所在的位置。

我们先采用开操作来消除图片中的细节部分

图十一:采用开操作后的图片

然后,我们统计图片x轴方向上,白色像素点的分布情况,并让程序自动截取像素点分布最多的区域。

图十二:统计图片x轴上像素点分布最多的区域

截取出的区域如图十三

图十三:沿x轴截取出的图片

同理,对y轴,我们也进行同样的操作

图十四:统计图片y轴上像素点分布最多的区域

在经过了诸多精妙的程序设计后,最终,截取出的图像如下。

图十五:沿x轴截取出的图片

该区域所对应的原图为:

图十六:截取出的图片在原图的中位置

额……

我们发现智障算法并没有精确地识别出郭同学的头像,而是识别出了其大脑门

针对这个问题,本人仔细筛查智障算法的各个步骤,并最终将问题锁定在“沿y轴统计像素点分布并截取图片”步骤上。

由于原图中郭同学的眼睛、嘴巴部分被当成背景扣除了,因此在y轴像素统计阶段,郭同学的头像被分成了上半脸和下半脸两部分。

图十七:问题分析

本论文的“检测像素点分布最多区域”的算法只检测到了上半脸(图十七中红框部分)而漏掉了下半脸。

经过研究发现,智障算法有五成的概率可以正确识别出人脸,有五成的概率会检测出脑门。

图十八:智障算法有五成概率会只检测出脑门

为了解决此问题,本论文尝试了大量的看上去可行的解决方案。

比如尝试轮廓识别:

图十九:轮廓识别

尝试了sobel算子梯度计算:

图二十:梯度计算

甚至尝试了傅立叶变换:

图二十一:傅立叶变换

但实验结果表明这些算法除了能扩充本毕设论文的长度以外,毫无任何作用。

最终,为了解决本论文的智障算法只能检测出郭同学的大脑门,而无法识别头像的问题。

我将本论文的研究方向以及毕业照合成器的核心算法识别人脸改为识别脑门,有时能识别人脸

该创新性的改进方法完美地解决了智障算法人脸识别效果不足的问题。

最终,本论文提出的智能大脑门检测并消除障碍算法,简称智障算法,可以高效地识别照片中人像的大脑门。

4.毕业照合成器使用步骤

我们将第三节所讲的智能大脑门检测算法融合到毕业照合成器中。本节我们将讲述该合成器的使用方法。

首先,我们要先给出学士服的模板以及背景图片。

图二十二:学士服模板
图二十三:背景图片
(图片来自于网络)

其次,我们要收集好所有学生的大头照相片

图二十四:项目文件

最终,我们将图片按照规范命名并和程序放在同一文件夹内。运行程序后,合成的照片就自动保存在当前文件夹下了。

一个软件智能自动合成的毕业照如下:

图二十五:合成的毕业照

由于智障算法的目标是“识别脑门,有时能识别人脸”,因此有时学士服帽下是一个学生的脑门为正常情况,请勿慌张。

除了上述功能外,毕业照合成器还额外提供付费服务。用户购买付费服务可以使得毕业照更加“绚丽多彩”

首先是皮肤收费

免费版只提供默认的一种衣服,但用户可以付费解锁多种多样的其他皮肤。

比如硕士服10元,博士服20元,导师服50元,校长服100元

除此之外,我们还提供活动限定服装,此类服装是非卖品,必须参与制定活动才能获得。

图二十六:皮肤付费项目

其次,我们提供收费特效

阴影、发光、马赛克、影流之主等特效一律5元,统统5元。5元买不了吃亏,5元买不了上当。

用户只需5元就可以加一点特效:

图二十七:购买了特效的毕业照

再加一点特效:

图二十八:付费一定程度后的毕业照

再再再加一点特效:

图二十九:忠实付费用户的毕业照

综上所述,当用户付费到一定程度后,可以制作出超级华丽的毕业照:

图三十:付费特效毕业照

注:只识别出学生脑门为正确情况,本图片合成服务一律不退费。

5.总结与个人感悟

本论文针对毕业年级同学们难以拍摄毕业照的痛点,提出了智能毕业照合成器。同学们只需提供自己的大头照,合成器便可以自动生成毕业照。

本合成器的核心算法——智障算法可以高效地识别出照片中的大脑门(有时候也可以识别出人脸),并扣除无关背景。合成器可以智能地将大脑门(人脸)、毕业服装以及背景图片三者结合,大大节省了人工合成毕业照所需的人力物力。

最终,我想谈谈我做毕设的感悟。

几个月的毕设时光转瞬即逝

仿佛刚开始毕设时就在昨天早上10点37分31秒

那个时候发现有一个月没写公众号文章了,想赶紧水一篇文章的情景还历历在目

而在毕设期间,让我印象最深的

不是不断调试Bug时的沮丧

不是熬夜改论文的每个夜晚

也不是找不到方向时的苦恼

而是

……

……

……

……

……

……

……

……

……

……

……

……

……

……

……

郭冬临的那个大脑门

老师评语:

贾老师:这个毕设不错,同学你有没有兴趣申请专利啊!

甄老师:不对啊,你这毕业论文咋看起来像是公众号文章啊?你这论文里咋还有动图啊?

景老师:我推荐你去关注一下技术杂学铺,里面有很多比你还有意思的研究。

毕业论文的写法请不要参考本文章

One more thing

我毕业了

发表评论