我如何將億次的計算降爲實時

前言

前期我們做了一個小程序,實現集體照片的自動分發。簡單來說就是用戶上傳一張集體照,凡是出現在集體照中的人都能自動關聯到此張照片,有點類似 QQ 和 FB 之前的標記用戶,但是整個過程是自動的,無需人爲分發,問題就出現在自動上。

一、第一版算法

首先如果自動的話就涉及到照片比對技術,如果自己技術實力雄厚(比如你是吳恩達)可以從底層神經網絡開始寫起,或者使用開源的人臉識別框架,我使用了百度騰訊的人臉識別接口,用着還可以,基本是免費的(需求不高的時候)。

每位用戶首先上傳一張自己的大頭照,主要是爲了去匹配集體照,某位用戶上傳一張照片,就將此集體照與所有的用戶大頭照逐一比對,凡是能匹配成功的關聯之。

看似非常簡單的功能,其實裏面存在一個巨大的坑,如果用戶量上千萬或者上億的時候,用戶每上傳一張集體照就要進行億次的比對,這根本不可能實時,所以我們剛開始的時候考慮每天定時去比對一次,比如在晚上 12 點,所有當天上傳的集體照去逐一比對,問題看似能夠解決,但是沒有了實時性,非常影響用戶體驗。我苦思冥想了幾天後終於找到了一個實時的解決方案。

二、實時比對

對問題進行分析,解決方案就來了,只要我能夠優化比對程序,將億次的比對實現實時操作,問題即可解決。然而我不是吳恩達,換作吳恩達可能也沒辦法,我們真的做不到億次比對實時操作。

似乎陷入了僵局,然而我們來換一個角度思考此問題,我們爲何不將億次的比對減少到可以實時的量級?

那麼,如何降低比對次數呢?解決方案如下:

  1. 用戶上傳大頭照的時候對此用戶在我們的數據庫中進行標記,即每個用戶都有一個唯一的 faceid,並將此 faceid 和大頭照存到百度或者騰訊的人臉庫中;

  2. 上傳集體照的時候,將集體照按照人臉進行切割,逐一的去百度或者騰訊的人臉庫進行比對,如果能夠匹配上,則能取到此人的 faceid,用此 faceid 即能查到所關聯的用戶,於是即可實現照片的自動分發。

三、結論

簡單的兩步即解決了實時比對的問題,有的時候換一個角度去思考問題,問題便迎刃而解!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章