如何以正确的姿态让 @微信官方给我戴一个圣诞帽
原标题:如何以正确的姿态让 @微信官方给我戴一个圣诞帽与技术实现原理剖析
昨天到今天,朋友圈在刷屏这样一句话:
给我一个圣诞帽!@微信官方
当然啦,我也发现了许多好友头像戴着一顶红色的圣诞帽(也有部分是一顶绿色的帽子)。但是让人想不到的是,这么简单的互动产生了两类质疑:
- 发个朋友圈就真的可以给头像加个圣诞帽,假的吧?
- 为什么我发了朋友圈,头像没有变呢?
那么告诉你,在阅读完这篇原理介绍之后,并按照指导规范,相信你一定能顺利的带上圣诞帽,在朋友面前炫耀一番。下面就进入详细的解答模式。
首先我们来看,微信究竟是怎么做到的呢,从发布这段话到实际给头像戴上圣诞帽都历经了些什么?从技术角度实现来看,要实现这样一个功能,需要历经如下几个步骤:
读取用户发布文字,识别操作指令;
获取用户头像图片资源,进行人脸识别与定位;
针对用户需求与实际的识别结果进行图层添加,并更新;
所以这么看,整体来说还是很简单的。我相信有一部分同学肯定想了解的更多,那么我就再多介绍些上线上的细节与原理。
1. 识别“添加圣诞帽”的指令
首先是根据用户发布的内容进行操作指令的识别。由于这是微信官方在圣诞节为大家发布的一个互动新功能(即日后不会变成常驻功能),所以不涉及到复杂的逻辑,正则表达式足以 handle 这里的所有难题。
一个正则表达式通常被称为一个模式(pattern),为用来描述或者匹配一系列匹配某个句法规则的 字符串。例如:Handel、Händel和Haendel这三个字符串,都可以由“H(a|ä|ae)ndel”这个模式来描述。 —— 维基百科
正则表达式的强大之处在于它可以通过一个模式匹配批量的“变种”文字内容,例如我们可以通过如下表达式匹配一个 Email 地址:
[\w!#$%&'*+/=^_——{|}——-]+(:\.[\w!#$%&'*+/=^_——{|}——-]+)*@(:[\w](:[\w-]*[\w])\.)+[\w](:[\w-]*[\w])
根据大家在朋友圈发布的内容和效果来看,微信采取的正则匹配策略包含如下几点:
识别文字尾部的“@微信官方”触发器(作为内容结尾,匹配一次);
识别文字开头到触发器之间的文字,必须包含“圣诞帽”字样(匹配一次),个数以及颜色作为可选项(匹配任意次数)进行匹配;
所以这就是为什么“你也发了朋友圈,但头像没有变”的原因了: