您的位置:首页 > 其它

如果换圣诞帽是真的,分析一下技术实现方案

2017-12-25 00:00 344 查看

这个周末,朋友圈被“请给我一个圣诞帽@微信官网”刷屏了。如果你能“理智”一点,自然知道这和十年前某个QQ里疯传的某些段子没有“本质”区别,例如:

今天是腾讯老总马化腾的生日,只要把这条消息转发给5个QQ群,就会有100Q币拿,昵称会变红,系统还会自动给你加一个太阳。

相信在朋友圈里试过的朋友心里都知道结果了。不过没关系,即便被骗了也没事,就当“愚人节”的幽默好了,挺好玩的。

作为一个技术人,按照职业习惯,我会来想想如果我真收到这么一个需求,怎么来实现它。所以今天简单梳理一下技术方案,给大家做一个分享,抛砖引玉:

首先,先将整个需求分拆为三个不同的执行步骤:

解析用户发布的文字,进行语义分析,识别出需要处理的指令;

读取用户头像图片,执行人脸识别;

根据识别的结果进行图片处理,刷新头像;

细说步骤1的方案:

具体来讲,语义识别这个任务,一个可行的做法是另起一个异步任务,通过一个“过滤器”和“触发器”来执行。例如,在活动期间,发一条朋友圈消息后,服务端通过触发器写一条异步消息,异步消息的消费端通过过滤器去分析里面是否包含换圣诞帽的关键字,然后写到一个独立的队列中。
有同学要问,为什么不放入主线程中,同步实现发朋友圈实时变头像呢?
主要原因在于,人脸识别+图像处理是一个计算密集(计算、逻辑判断、循环),存储新头像图片又是一个IO密集(网络传输、读取硬盘),在朋友圈换圣诞帽这样的高并发CASE下,且不说延迟对用户体验的影响,即便我拥有一个强大的服务器集群,我也会很担心被击穿。
另外,圣诞帽活动是不应该与“发朋友圈消息”耦合在一起的,需要能随时插拔掉。
最后来说说语义识别,对于一个初级版本而言,利用正则表达式就足够了,将“圣诞帽”和“颜色”给匹配出来,并将“动词”进行识别出来。

再说说步骤2的方案:

对于人脸识别,这几年已经有不少公司做出了很不错的开发产品提供出来,比如Face++或者百度AI的人脸识别或者查找API,所以快速的做法,就是接入第三方服务,进行二次开发即可。



当然,如果要自己搭一整套人脸识别的系统,可以参考OpenFace方案中实现人脸识别的pipeline,这个pipeline可以看做是使用深度卷积网络处理人脸问题的一个基本框架,很有学习和参考的价值,它的结构如下图所示:



更多的信息,有兴趣的朋友可以在网络上找到相关的介绍,我就不再这里一一解释了。

最后说说步骤3的技术方案:

需要提前准备后足够多的圣诞帽的素材,用于对原有头像,根据姿势、大小、颜色作相应的调整的适配。

新建一个 canvas 图层导入原有头像, 适配准备好的素材,将结果保存并更新

给前端推送消息,更新用户头像。

最后,顺着这条线走下去,还有很多技术点可以挖掘,例如多人物头像/背身无面部头像的处理/给动物/卡通人物换圣诞帽等等,还是很有趣的。

扫描二维码或手动搜索微信公众号【架构栈】: ForestNotes
欢迎转载,带上以下二维码即可                     


点击阅读原文”,所有【架构栈】近期的架构文章汇总
↓↓↓
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: