1. 程式人生 > >人臉識別技術在HBase中的探索和應用

人臉識別技術在HBase中的探索和應用

一、HBase基礎與儲存的優勢
HBase主要具有五大核心優勢,即海量儲存、列式儲存、易擴充套件、高併發以及稀疏矩陣。HBase所能夠應用的場景包括物件儲存、使用者畫像推薦、聊天訊息實時流、索引、報表以及軌跡資料和監控資料等。

二、HBase應用分享
這裡主要分享一下HBase在人臉識別場景中的應用。在京東,人臉識別主要應用於無人超市、動態廣告牌以及AR試裝鏡等專案中。人臉識別主要可以分為離線人臉識別和線上人臉識別兩個方面。分別而言,離線人臉識別包括人臉屬性識別,包括性別、年齡以及表情等的識別,其次是小場景人臉識別,比如手機人臉識別等,小場景人臉識別速度比較高,資料和模型都儲存在本地。第三個就是人臉個數檢測,比如通過攝像頭判斷和分析某區域的客流量。對於線上人臉識別而言,需要對人臉資訊進行錄入,其次還有人臉搜尋,比如常用的門禁場景。第三就是人臉校驗,比如身份證與本人的對應識別。

日誌記錄
對於離線人臉識別而言,只需要將資料儲存在本地即可,不需要在雲端進行匹配,而需要定期將資料批量寫入伺服器。而對於人臉搜尋這樣的場景,比如門禁場景,當人去刷臉的時候,客戶端會扣取圖片中的人臉圖,先判斷圖片中是否有人,如果有人才會去雲端進行多執行緒搜尋,只要其中一個執行緒能夠搜尋成功就認為搜尋成功,之後就可以開啟門禁。以上這些都屬於日誌批量寫入的場景。

image

其次是列式儲存場景,一些資料可能存在交叉,但是又不完全一樣,比如上圖中的6種場景,人臉搜尋、人臉檢驗、人臉校驗、人臉屬性檢測、人臉特徵以及人臉活體等。在京東基於HBase的人臉識別實踐中,主表的RowKey設計使用的data_time_uuid,其中time為最大時間減去當前時間,這樣使得最新的資料放在最上面,而uuid則是隨機id。因為直接通過主表查詢資料比較麻煩,因此根據不同的業務維度建立不同的索引表,索引表中儲存了當前的主表的RowKey。因此可以按照不同的業務維度找索引表,進而找到主表中的資料。

三、HBase資料分析
如下圖所示,在剛開始的時候,按照不同的型別、不同的時間和不同的使用者進行統計,寫不同的work,如果統計的維度越多,那麼work就越多,那麼當需求無限增加,那麼就需要使用更多地任務。並且這樣一來使得任務管理變得異常繁瑣。

image

因此,對於上述部分進行了如下圖所示的改進。上層的各種應用將會把資料寫入到HBase裡面,同時實時地接入Kafka直接進入資料倉庫裡面,此外,資料倉庫每天會增量地將HBase中的資料增量地抽取過去。

image

如下圖所示的是資料倉庫的設計,當將資料抽取過來之後需要對於資料進行清洗。因為有些欄位沒有作用,因此需要進行清洗之後,按照維度進行劃分,最後按照需求歸入到不同應用裡面提供服務。

image

HBase中的資料將會主要應用於兩個方面,其一是統計報表,離線查詢基於Hive實現,因此這樣就比較方便。另外一個方面就是實時資料大屏,需要將資料實時寫入HBase,並對外提供API服務。

四、HBase使用中遇到的問題
在使用HBase的過程中也遇到了很多的問題,第一個就是因為專案是基於Spring實現的,但由於Spring HBase效能較差,發現當資料量變大之後,其讀寫效能變得很差,主要原因就是經常會出現需要重新連線的情況,根據這樣的情況,在實踐中選用了原生的API。其次,還出現了HBase的熱點問題,在實踐中採用預分割槽的方式進行了解決。

因為HBase具有諸多優勢,因此非常適合大資料場景下的資料儲存應用,比如當前比較熱門的人臉識別場景,人臉識別分為線上和離線兩種,各種方案具有不同的業務特點,而基於HBase的資料儲存方案,能夠滿足多種需求。雖然目前而言,在專案實踐中,HBase也需要面對效能以及熱點問題等諸多挑戰,但是往往都能夠找到應對之道。