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

前言

前期咱們作了一個小程序,實現集體照片的自動分發。簡單來講就是用戶上傳一張集體照,凡是出如今集體照中的人都能自動關聯到此張照片,有點相似 QQ 和 FB 以前的標記用戶,可是整個過程是自動的,無需人爲分發,問題就出如今自動上。算法

1、初版算法

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

每位用戶首先上傳一張本身的大頭照,主要是爲了去匹配集體照,某位用戶上傳一張照片,就將此集體照與全部的用戶大頭照逐一比對,凡是能匹配成功的關聯之。小程序

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

2、實時比對

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

彷佛陷入了僵局,然而咱們來換一個角度思考此問題,咱們爲什麼不將億次的比對減小到能夠實時的量級?優化

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

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

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

3、結論

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

相關文章
相關標籤/搜索