浅谈一下如果真的发朋友圈换圣诞帽的技术实现方案

首先用户会发一条朋友圈说我想要圣诞帽子并艾特微信官方,只要写一个定时任务定时去朋友圈数据库里找含有这种关键字的发言,找到这种用户。

然后读取该用户的当前头像,用人脸识别技术识别出脸的位置,再用图像处理技术,把最符合此头像画风的红色圣诞帽放到脸的上面。

最后替换用户的头像图片,update成有圣诞帽的头像。

如果有的用户头像不是人脸,或者照片里位置不正,或者是风景照人太小了,这些都有可能识别人脸失败导致没有换上圣诞帽。这一部分可以把圣诞帽放到一个默认或随机位置,或者干脆就不换圣诞帽了。

其实上面说的定时任务每分钟执行一次已经是一个简化的模型,真正要做的时候应该是发一条朋友圈服务端写一条异步消息,异步消息的消费端去分析里面是否包含换圣诞帽的关键字,然后写到一个独立的表。定时任务每分钟去查这个新的表,去人脸识别、图像处理、换头像。这需要评估每分钟发朋友圈的数量来具体决定。

为什么不能发朋友圈的时候同时换头像?因为人脸识别和图像处理加圣诞帽都是计算密集,存储新头像图片又是IO密集,这部分注定是耗时的。如果发朋友圈换圣诞帽的人太多,会有可能把服务器打死的,就算把这里的同步代码改成异步,线程池最后也会满,最终难逃一死,这是一方面。再一方面是换圣诞帽是一项活动,这种代码不应该和原有代码耦合在一起。