一起来聊聊虚拟红包的技术实现

xiangzhihong8 xiangzhihong8     2022-08-24     460

关键词:

2017年1月20日,腾讯发布消息称将推出Q-Glass,除了一般VR眼镜的标配功能外,Q-Glass还能实现眨眼抢红包。听起来是不是很酷炫?上市时间可要在10年后。不过,2016年底支付宝首推AR实景红包,QQ也紧随其后,一场AR实景红包大战悄然打响。
作为最近两年比较热门的技术,VR技术悄然成为移动技术之后有一大竞相追逐的技术,目前市面上比较成熟和出名的VR开发商,诸如:Google VROculusHTC Vivi。而已Google VR最为成功并商业化。关于这个可以参考我之前的介绍Google VR实践

不过今天我要说的是VR在我们生活中的应用,并且是大家已经用过的,相信大家在2017年年底的时候,一定玩过支付宝/qq(AR虚拟现实)藏红包、找红包吧,想象一下,你可以把你的红包藏在世界各地的任意角落,让全世界的人通过扫描来找红包,是不是觉得很酷,那么要实现这种功能,怎么做呢?

AR实景红包

这里写图片描述

这里写图片描述

相信大家都玩过AR红包,这里就不介绍如何玩了。

AR红包技术实现分析

其实AR红包综合了GIS(LBS)、图像识别与秒杀技术等技术:

藏红包

  1. 藏红包的地点,即地球坐标(经纬度),在藏红包时会记录下这个红包的经纬度。
  2. 藏红包的标识(图片),即藏红包现场拍的照片,在藏红包时,会存下这张图。
  3. 藏好红包后,将生成的红包数据打包到服务器

找红包

  1. 将你附近的红包展示出来,比如方圆2公里有哪些人藏了红包,并且把他们的坐标信息也在地图上展示出来,方便你前往找红包
  2. 当你抵达红包坐标附近(比如50米内)时,你就可以拿起手机,根据红包提供的模糊化图片线索,扫描物体(即藏红包的图片),当你扫描的图片和藏红包时拍的图片完全匹配时,找红包成功。

当就这两个功能来说,主要涉及到以下技术:

  1. 地理位置信息的处理:红包位置的展示(将你的位置以及附近藏的红包位置分别在地图上展示出来),近邻查询(根据你所在的经纬度,查找你附近的红包)
  2. 图片相似度识别:找红包的人拍的照片 与 藏红包时拍下的照片 进行比对,相似度达到一定程度时,表示红包被找到了。
  3. 秒杀特性:例如你在一处藏了一个红包,那么可能有很多人同时在抢(不过这个秒杀应该比不上双十一,因为是小范围秒杀)。

不过,这几个功能在PostgreSQL数据库中都可以高效的实现,是不是很棒?那么接下来我们来看看PostgreSQL如何处理这两项需求的吧,顺便看看性能如何?

PostGIS插件

在AR红包的业务中,地理位置信息的处理主要包括以下两个方面:

  1. 根据你的位置,搜索附近的红包。即KNN搜索(如 select * from table where loc <-> poc<1公里orderbyloc<−>poc<1公里orderbyloc<−>poc)
  2. 根据用户的位置,红包的位置,计算用户与红包的距离。而在这个模型中,有个最常见的外围插件–PostGIS

PostGIS在军工、科研、民用场景都非常的流行,包括我们常见的精细地表raster探测,天文研究、地图、路径规划等应用中都可以看到PostGIS的影子,本文只用到了PostGIS的一小部分功能:GIS数据类型、GIST索引、近邻查询。

来看一张PostGIS在实际应用的图解:
这里写图片描述

详细的用法和测试方法参考

《PostgreSQL 百亿地理位置数据 近邻查询性能》

更多文章和详细的PostGIS功能可以参考

《如何建立GIS测试环境 - 将openstreetmap的样本数据导入PostgreSQL PostGIS库》

《聊一聊双十一背后的技术 - 物流、动态路径规划》

图像近似度处理

在PostgreSQL的的生态圈中,有很多这样的插件来满足图片搜索的需求,同时也支持图像相似度值的计算

1,使用Haar wavelet算法的imgsmlr插件

https://github.com/postgrespro/imgsmlr

2,使用图片RGB点阵组成的数组来计算相似度的插件-smlar

《从相似度算法谈起 - Effective similarity search in PostgreSQL》

参考

《从相似度算法谈起 - Effective similarity search in PostgreSQL》

《PostgreSQL 在视频、图片去重,图像搜索业务中的应用》
https://github.com/postgrespro/imgsmlr

3,使用图片RGB点阵组成的数组转成tsvector来计算相似度的插件-RUM

RUM计算相似度时带上了位置信息,精确度更高。比如(0,1,2,3,4,5与0,0,2,3,4,5与5,1,4,2,3,0与2,3,4,5,0,1)。其中0,1,2,3,4,5是原始点阵的值,那么0,0,2,3,4,5可能是有一定误差的值(因为依旧是线性相关的),而2,3,4,5,0,1出现了角度偏差(可以通过技术手段比如rum,把数据拉成环状修正),可能是图片拍摄角度造成的。但是5,1,4,2,3,0可能就不是那个图像了。

参考:
《从难缠的模糊查询聊开 - PostgreSQL独门绝招之一 GIN , GiST , SP-GiST , RUM 索引原理与技术背景》

AR 藏红包如何计算图片匹配

我们在AR藏红包的业务中,只需要用到计算近似值的功能即可,以上两个插件都可以很好的满足。比如使用RGB点阵时,在应用程序端生成RGB点阵,发送给数据库,与存储在数据库中的点阵进行相似度计算即可。

藏红包时的图像数字化流程如下:

  1. 拍照,点阵RGB串成数组或转换为tsvector(带距离计算,相似度更加准确),将红包的位置信息、图片RGB点阵存储到数据库中

找红包,匹配图像时的流程如下:

  1. 拍照,生成点阵,提交给服务端,进行图像匹配,匹配方法参考前面的三种方法之一即可,当然也可以考虑更高效的方法,搞进PostgreSQL的插件里面来。

注意,如果从服务端提取点阵,在客户端比对,这种做法虽然节省了服务端开销,但是这种做法可能存在漏洞,客户端可以被HACK,直接匹配上。

秒杀

目前业务层面只支持近距离找红包,所以通常来说,抢一个红包的人群不会太多。并且我们肯定会对操作数量限制的做淘汰操作。那么如果有上亿人同时秒杀一个红包怎么做呢?PostgreSQL同样有独门秘技来支持秒杀。

参考:

《聊一聊双十一背后的技术 - 不一样的秒杀技术, 裸秒》
《PostgreSQL 使用advisory lock或skip locked消除行锁冲突, 提高几十倍并发更新效率》

总结

随着AR的技术越来越流行,地理位置、图像、视频、声音等特殊数据类型的处理会越来越常见,数据库应该与时俱进,不能再仅仅存储和处理文本、数字这么简单的功能,其综合技术的发展将日新月异。
而另一方面,PostgreSQL的高扩展能力,为AR提供了坚实的技术基础,不仅能存,更能高效处理。

社区说|一起来聊聊rasa3.0

...(本周四)20:00-21:00活动日程20:00-20:45主题分享一起来聊聊Rasa3.0介绍热门对话机器人框架Rasa 探讨最新3.0版本的研发情况20:45-21:00互动问答举办社区GDG上海B站直播访问以下链接或点击阅读原文获取更多资讯https://live.bilibili... 查看详情

我们一起来聊聊中间人攻击

  在聊中间人攻击之前,不了解HTTPS握手过程的同学可以查看我的前一篇HTTPS握手介绍。一、HTTPS握手过程(请点击)三、中间人攻击  https握手过程的证书校验环节就是为了识别证书的有效性唯一性等等,所以严格意... 查看详情

2021-02-03【技术】聊聊keep-alive组件的使用及其实现原理

...允许组件有条件地进行缓存。这里的component组件会被缓存起来。举个栗子在点击button时候,coma与comb两个组件会发生切换,但是这时候这两个组件的状态会被缓存起来,比如说coma与comb组件中都有一个input标签,那么input标签中的... 查看详情

切西瓜法实现微信抢红包功能(代码片段)

...,我们将来实现一个微信红包相关的分红包功能。一起来了解叭~☑️一、需求分析-分红包问题假设我们现在要进行发一个红包,这个红包的金额为100元,红包数量是10个。那么我们要怎么样分配,才能不失公平性... 查看详情

面经美团测试1,2,3面,一起来聊聊?(代码片段)

前言最近因为公司层面的关系,我被迫营业开始了一些面试。最近面的公司有:美团、阿里、字节、B站、携程等等。从面试中呢也有了一些感受,比如面试形式、内容、面试官的关注点、其他balabala…一、关于面试首... 查看详情

聊聊推送的架构及关键技术实现

推送是在日常终端使用场景中经常碰到,特别是移动互联网普及之后,手机终端成为了消息推送的主战场,例如生活服务类的优惠券推送,咨询类的新闻推送,电商类的购物推送等等,在业务用户触达上起到了至关重要的作用,... 查看详情

聊聊虚拟内存

大家好,我是良许。熟悉计算机的小伙伴都知道,我们常说的主机三大件分别是主板,CPU,内存,可见内存在计算机主机中的角色也非同一般,喜欢DIY主机的小伙伴对这三大件的了解更是精益求精。编写过程序的小伙伴对于程序... 查看详情

聊聊区块链

...稍微深入一些,讲解了基本技术原理、算法、生态,但读起来也没有什么门槛。建议两本结合起来读,会对区块链理解的更为深刻一些。这两本书我都读过,所以 查看详情

对话腾讯天琴董治:聊聊元宇宙与ai技术驱动虚拟人

热度只增不减的元宇宙,让众多互联网公司为之不惜加码,投入大量的人力、物力和财力,从不同角度切入元宇宙这条新赛道。对此,我们很荣幸地邀请到了腾讯音乐天琴实验室,计算机视觉负责人董治老师&#... 查看详情

虚拟化技术之虚拟化技术介绍及xen的应用实现

虚拟化技术是什么: 在计算机中,虚拟化(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破实体结构间的不可切割的障碍,使用户可... 查看详情

聊聊连接池和线程

...池?我们为什么需要它?连接池允许多个客户端使用缓存起来的连接对象,这些对象可以连接数据库,它们是共享的、可被重复使用的。打开/关闭数据库连接开销很大,连接池技术允许我们在连接池里维护连接对象,这样可以... 查看详情

聊聊连接池和线程

...池?我们为什么需要它?连接池允许多个客户端使用缓存起来的连接对象,这些对象可以连接数据库,它们是共享的、可被重复使用的。打开/关闭数据库连接开销很大,连接池技术允许我们在连接池里维护连接对象,这样可以... 查看详情

一起来聊聊ip地址局域网广域网ipv4和ipv6

背景谁都知道IP地址是干嘛的,但是它出现的前因后果你真的知道吗?我觉得很有必要重新复习下计算机网络基础知识,实在太太太重要了本篇文章素材均来自:https://www.bilibili.com/video/BV1DD4y127r4;这个UP感觉还是很不错bytheway:... 查看详情

随机红包算法

...想把他分成5(或者N)份,每份的数是不一样的,但是加起来要是100,而且每份不能差距太大,这个用php如何实现?这样我们就需要下面的PHP将一个数字划分成随机值,总和与数字相同的函数了大致思路1)取份数的平均值2)根据... 查看详情

web技术分享|虚拟列表实现(代码片段)

...多节点渲染使页面卡死或卡顿,特地封装一个简易的虚拟列表,大家可在此基础上进行针对修改组件基于vue3+elementplus+ts+tailwindcss开发设计思路分为三部分:父容器占位;一个子容器展示通过滚动条计算的... 查看详情

(12)虚拟化技术之虚拟化技术简介

虚拟化技术是伴随着计算机的出现而产生和发展起来的,虚拟化意味着对计算机资源的抽象。虚拟化技术已经成为构建云计算环境的一项关键技术。 虚拟化技术的核心思想是利用软件或固件管理程序构成虚拟化层,把物理资... 查看详情

聊聊kotlin的委派(一)

基本目录1.类的委派2.实现源码3.委派属性4.实现源码5.总结有种完成工作的方式就是把工作委派给其他人。当然我并非讨论的是,你将你的工作委派给你的朋友,而是将你的工作从一个对象委派到另外一个对象,质量... 查看详情

聊聊vdi虚拟桌面的重复sid问题(下)

?上一篇聊到了主流VDI厂商官方KB告诉咱们,重复SID不是个事儿。可毕竟多年AD的经验在这,SID相同还是不大放心对吧?没问题,咱们往微软的知识库和文档文章去找找答案。?开始寻找最终答案之前,我们来聊一下曾经非常强大的... 查看详情