如果换圣诞帽是真的,分析一下技术实现方案
2017-12-25 00:00
344 查看
这个周末,朋友圈被“请给我一个圣诞帽@微信官网”刷屏了。如果你能“理智”一点,自然知道这和十年前某个QQ里疯传的某些段子没有“本质”区别,例如:
今天是腾讯老总马化腾的生日,只要把这条消息转发给5个QQ群,就会有100Q币拿,昵称会变红,系统还会自动给你加一个太阳。
相信在朋友圈里试过的朋友心里都知道结果了。不过没关系,即便被骗了也没事,就当“愚人节”的幽默好了,挺好玩的。
作为一个技术人,按照职业习惯,我会来想想如果我真收到这么一个需求,怎么来实现它。所以今天简单梳理一下技术方案,给大家做一个分享,抛砖引玉:
首先,先将整个需求分拆为三个不同的执行步骤:
解析用户发布的文字,进行语义分析,识别出需要处理的指令;
读取用户头像图片,执行人脸识别;
根据识别的结果进行图片处理,刷新头像;
细说步骤1的方案:
具体来讲,语义识别这个任务,一个可行的做法是另起一个异步任务,通过一个“过滤器”和“触发器”来执行。例如,在活动期间,发一条朋友圈消息后,服务端通过触发器写一条异步消息,异步消息的消费端通过过滤器去分析里面是否包含换圣诞帽的关键字,然后写到一个独立的队列中。
有同学要问,为什么不放入主线程中,同步实现发朋友圈实时变头像呢?
主要原因在于,人脸识别+图像处理是一个计算密集(计算、逻辑判断、循环),存储新头像图片又是一个IO密集(网络传输、读取硬盘),在朋友圈换圣诞帽这样的高并发CASE下,且不说延迟对用户体验的影响,即便我拥有一个强大的服务器集群,我也会很担心被击穿。
另外,圣诞帽活动是不应该与“发朋友圈消息”耦合在一起的,需要能随时插拔掉。
最后来说说语义识别,对于一个初级版本而言,利用正则表达式就足够了,将“圣诞帽”和“颜色”给匹配出来,并将“动词”进行识别出来。
再说说步骤2的方案:
对于人脸识别,这几年已经有不少公司做出了很不错的开发产品提供出来,比如Face++或者百度AI的人脸识别或者查找API,所以快速的做法,就是接入第三方服务,进行二次开发即可。
当然,如果要自己搭一整套人脸识别的系统,可以参考OpenFace方案中实现人脸识别的pipeline,这个pipeline可以看做是使用深度卷积网络处理人脸问题的一个基本框架,很有学习和参考的价值,它的结构如下图所示:
更多的信息,有兴趣的朋友可以在网络上找到相关的介绍,我就不再这里一一解释了。
最后说说步骤3的技术方案:
需要提前准备后足够多的圣诞帽的素材,用于对原有头像,根据姿势、大小、颜色作相应的调整的适配。
新建一个 canvas 图层导入原有头像, 适配准备好的素材,将结果保存并更新
给前端推送消息,更新用户头像。
最后,顺着这条线走下去,还有很多技术点可以挖掘,例如多人物头像/背身无面部头像的处理/给动物/卡通人物换圣诞帽等等,还是很有趣的。
扫描二维码或手动搜索微信公众号【架构栈】: ForestNotes
欢迎转载,带上以下二维码即可
点击“阅读原文”,所有【架构栈】近期的架构文章汇总
↓↓↓
相关文章推荐
- 全面分析IDC双线路实现技术方案
- 全面分析IDC双线路实现技术方案
- 全面分析IDC双线路实现技术方案(转载)
- 人机协作机器人关键技术之零力控制实现方案对比分析
- 全面分析IDC双线路实现技术方案
- 用户从手机的浏览器访问www.baidu.com,看到的可能跟桌面PC电脑,是不太一样的网页效果,会更适合移动设备使用。请简要分析一下,实现这种网页区分显示的原因及技术原理。
- Web系统页面打印技术实现与分析
- WCF技术的不同应用场景及其实现分析
- NetSarang软件中nssock2.dll模块被植入恶意代码技术分析与防护方案
- Solr分布式搜索技术实现分析
- 网络环境中数据加密技术实现与分析
- Jboot集成Redis来实现缓存技术方案
- Android语音通话实现方案及相关技术介绍
- 用VML技术实现统计图形的绘制(考试系统中的试卷分析模块)
- 【redhat5.5】linux服务器负载均衡LB Cluster的(LVS)技术 实现方案
- JBoss下的单点登陆(SSO)技术实现分析(1)
- Android基于WIFI实现电脑和手机间数据传输的技术方案研究
- 5-爬虫的运行原理及实现技术分析
- HTTP Live Streaming直播(iOS直播)技术分析与实现
- 也谈WEB打印(二):简单的分析一下IE的打印原理并实现