VR虚拟红包的技术实现

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

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

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索引、近邻查询。post

来看一张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提供了坚实的技术基础,不只能存,更能高效处理。

转载自:  http://blog.csdn.net/xiangzhihong8/article/details/61437562?ref=myrecommend

相关文章
相关标签/搜索