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

相關文章
相關標籤/搜索