集智专栏
资源加载中,请稍后...
集智专栏

人均颜值怎么算?来瞅瞅世界杯每支球队的平均脸!

船长

2018 世界杯马上就进行到一半了,频繁爆冷的赛事也让本届世界杯看点满满,但是在看球赛的时候,不知道你(比如像集智君这样的伪球迷...)有没有遇到一个问题:除了梅西、C罗、内马尔这些极少数的世界级球星还能认出来,剩下的球员压根分不清谁是谁,一眼望过去感觉他们都长得一样的....

脸盲这种事儿,懂的人自然懂脸盲这种事儿,懂的人自然懂

特别是同一个球队的球员,每当此时都特别佩服荧屏里的解说员认得这么准。

那么集智君就比较好奇,这些球队球员的平均脸是怎么样的?

平均脸,指从一定数量的普通人脸提取面部特征,根据测量数据求平均值,再利用计算机技术得到一张合成脸,就变成了一张具有吸引力的脸。比如 2013 年英国格拉斯大学的科学家就曾用计算机程序计算出了全球 41 个国家和地区女性的平均脸。

部分国家女性的平均容貌部分国家女性的平均容貌

那么我们下面就试试计算本届世界杯 32 支参赛球队中每队球员的平均脸。

准备数据

要想计算各个球队的平均脸,我们就需要获取每个球员的脸部照片,而且对照片的要求相当高,比如照片背景必需简单,像素相同,最好大小也相同。幸好,FIFA 把这件工作已经做好了,我们在线就能获取这些球员的头像:戳这里

检查每个球员的元素,就能获取球员照片的 URL,然后可以通过程序下载下来。

最终我们会得到 32 支球队所有球员的方形面部图像。

计算平均脸

将一张图像进行平均计算,有个比较简单的方式,就是使用 Numpy,而且只需十几行代码:

import numpy as np
import imageio
countries = ['argentina', 'belgium', 'colombia', 'croatia', ...]
for country in countries:
    images_stacked = np.zeros((23, 300, 300, 3))
    for i in range(0, 23):
        images_stacked[i] = imageio.imread('images-input/%s/%s_%s.jpg' % (country, country, i))
    results = np.zeros((300, 300, 3))
    for color in range(0, images_stacked.shape[3]):
        for x_pos in range(0, images_stacked.shape[1]):
            for y_pos in range(0, images_stacked.shape[2]):
                results[x_pos, y_pos, color] = np.mean(images_stacked[:, x_pos, y_pos, color])
imageio.imwrite('images-output/%s_naive_averager.png' % country, results)

当然,这里的代码仍有改进的空间,但我们的兴趣不在这里,更看重实际结果。执行上面代码后的结果如下:

瑞典队球员平均脸瑞典队球员平均脸

我们再看一个球队的结果:

巴西队球员平均脸巴西队球员平均脸

...虽然生成的平均脸看着也算比较“标准”了,但是计算像素的平均值并没有创建出脸部很清晰的图像。(至少不是能拿出去给人展示的水平)

Face Morpher

幸好,还有一些更好的方法供我们使用,比如 Face Morpher。它能用不同的方式找出很多张人脸的平均脸,而非只简单的计算像素的平均值。Face Morpher 能通过识别脸部元素,比如眼睛,创建脸部的几何图像。然后,它会计算图像中这些部位的平均值。

这次生成的结果就清晰的多了,借此就能创建出每支球队的平均脸:

或者这张巴西队的平均脸:

效果看起来很好,但是仍然缺少一些很重要的元素,比如头发、耳朵和球衣。

脸部艺术再创造

现在我们综合利用上面两种方法生成的结果,将它们结合起来。使用 Sketch 将图像融合,将第一种 Numpy 生成的结果作为图像背景,然后用 Face Morpher 生成的结果以半透明的形式覆盖上去。

最后我们得到了本届世界杯 32 支球队的球员平均脸:

这么一看人均颜值真是高啊!这么一看人均颜值真是高啊!

甚至我们还可以更进一步,计算这 32 支球队的所有球员的平均脸

嗯...“看他的样子平平无奇”嘛嗯...“看他的样子平平无奇”嘛


参考资料: www.fsanmartin.co/soccer-world-cup-2018-average-face-by-team/

您也许喜欢这些文章

集智专栏

[Pandas] 10分钟Pandas之旅 01

发表至数据科学
Pandas是基于BSD协议的开源Python扩展库,提供高能、易用的结构化数据分析工具。 这是一个面向新手的极简上路指南。本篇介绍Pandas的基础用法,包括:观察数据、取值赋值和处理缺失数据。
集智专栏

一小时建立终身受害的AI创作系统

发表至趣味项目
使用TensorFlow框架,搭建一个简单的LSTM(长短记忆神经元)示例。LSTM是目前自然语言处理领域的核心算法,因为它可以很好地处理序列数据中的前后顺序依赖问题。文末提供了在线开发环境,读者可以自由地尝试修改参数。
集智专栏

Python超简洁教程,现在就开始加入数据科学大军

发表至数据科学
现在,Python几乎成为了每个想要涉足数据科学、人工智能等领域的学生和从业者所必需掌握的程序语言,虽然它好用、易学,但仍需要一定的知识积累和实践过程来加以掌握。本文就简要介绍了一些常用的Python语法和使用规范,可以帮助数据科学的初学者快速掌握开发和实践方法。

文章评论(1)

simbol 发表于 4月前回复
选Poland