AiTechYun
编辑:xiaoshan
当我激动的室友第一次向我展示肖像搜索功能时,我对结果感到很惊讶(也觉得有点受侮辱)。对于那些不熟悉它的人来说,谷歌Arts & Culture的这一功能让你可以在谷歌的数字化艺术收藏中找到与你提交的自拍相似的艺术品。
在我看来,这是非常了不起的一件作品:
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响应,同时继续为用户提供站点服务。为了处理异步事件,线程库可用于分离两个进程。
最后,是时候给网站提供朋友和家人的自拍照了,还有一些更普通的照片,结果如下所示:
领取专属 10元无门槛券
私享最新 技术干货