2019年6月18日 星期二

超實用-人臉辨識點名系統理論與實作

     
    拜類神經網路的發展所賜,人臉辨識的技術越來越成熟
相關的應用也如雨後春筍冒出,其實從擷取到人臉區域到校正影像並擷取特徵點,
這裡面的每一步都需要一些較複雜的理論做支撐,關於影像辨識與CNN相關的探討
可以參考底下這一篇文章:

我們比較關心的是,有沒有比較簡單的方法可以讓我們跳過那些複雜的知識理解
直接實作出的人臉識別的系統,簡單在網路上搜尋一下
透過 python 引用 opencv 及 dlib 這兩個知名的函式庫似乎是一個不錯的選擇
底下是一些網友分享的做法:





大部分的做法是一個人臉的類別只用一張照片擷取特徵後當作參考,所以我們會有一個
照片庫,裡面就是每個不同的人臉類別各放一張照片,所以人臉資料庫裡面會有很多個
照片檔,檔名各自被標記為該張人臉的姓名或ID,例如 王小明.jpg 、張三.jpg、李四.jpg ...
不想直接存照片檔的話,也可以存特徵向量,
這樣在準備人臉資料庫的時候也可以剩下一些運算時間…

剩下該做的事就是將從webcam 或擷取到的照片的特徵值和
人臉資料庫中的不同特徵值做比對,找到最相近的那一張人臉特徵 ,
假設它上面標示的名稱叫"王小明"

我們就認為待測的照片很可能對應的就是人臉資料庫裡面的這一張人臉 "王小明"

         至於怎麼衡量照片間的相似度呢? 直接看特徵向量之間的歐氏距離就可以了,

距離越近相似度越高…

         如果每個類別我們都收集了很多張相片,例如光是 "王小明"的照片我們就有100張

那麼這邊還可以再套一些機器學習的演算法進來改進辨識效果。

不過對一些要求不高的應用程式來說,每個類別存一張照片的方法應該已經夠用了

我這裡幫大家整理一下相關的流程把它包裝成 python 安裝包:    pyfacetrace

相關使用方法可以參考新版網站:

https://reurl.cc/V65WRb



以上方法的全靠本地運算,所以可以裝到如 Raspberry Pi 或 NVIDIA 等小型處理器上面,讓 Edge端就可以直接做人臉辨識,如此能延伸許多應用,網路也有很多人在分享,相關網站如下:


缺點就是…如果Edge端的處理器運算速度不夠的話,是無法做到即時運算的

其實也有網路服務在做這一些AI的服務…

如果是靠微軟的Azure、亞馬遜的AWS或是google cloud等網路服務,扣掉網路傳輸的時間的話運算速度會快很多,不過重點就是它通常有辨識筆數的限制,要真正能夠上線運作的話還是得乖乖從口袋把錢掏出來給這一些公司。