在我看来,这是非常了不起的一件作品:
17世纪的翻版的我
多亏了大量的开源工具和库,在一个下午的时间内,可以创建一些奇妙又具有一定功能的东西。
首先,找一些面部识别服务器。Kairos提供了一个免费的API,一旦在该API中输入图像的url,它就会提供一连串的信息:
Kairos地址:https://www.kairos.com/
通用输入图像
Returned JSON data (some image info removed for length)
{"images":
[{"faces":
[{"attributes":
{"age":40,
"asian":0.00539,
"black":0.00032,
"gender":{
"femaleConfidence":0.00002
"maleConfidence":0.99998,
"type":"M"},
"glasses":"None",
"hispanic":0.04204,
"lips":"Apart",
"other":0.01249,
"white":0.93976}
}]
}]
}
Kairos还允许将被标记的图像加入到数据库中,当未标记的图像被传递给API时,它将返回数据库中最相似的图像的标签。
虽然这是为了识别已经注册过的人,但它可以执行艺术识别任务(当它的相似性阈值设置得足够低时)。
为了找到合适的图片,我仔细研究了我试图模仿的服务(谷歌Arts & Culture),从谷歌Arts & Culture网站获得艺术品的url。如果我花了4个多小时的时间来做这件事,我可能会花时间给每件艺术品贴上一个独特的id,这个id与数据库中的图像、艺术品名称和艺术家联系在一起,以提供一个全面和轻松的用户体验。但我并没有这样做。
所以每个作品的标签都是简单的url,所以用户可以被重定向到与他们自拍匹配的艺术作品。
from flask import Flask, redirect
#Some function here, get a suitable image url as label
return redirect(label)
Flask提供了一个简单的选项,可以在使用python处理图像IO和进程的同时为用户提供一个网页。我不想在托管上花太长时间,我只是在本地运行这个站点。
Kairos需要一个公共图像url作为它的输入,所以要让我的站点在本地网络Ngrok之外显示,为我的本地主机提供一个安全通道。
下一个挑战是处理用户输入和API响应,同时继续为用户提供站点服务。为了处理异步事件,线程库可用于分离两个进程。
最后,是时候给网站提供朋友和家人的自拍照了,还有一些更普通的照片,结果如下所示: