目前來看,人工智能技術在圖像處理領域發展得最好,其中人臉識別是最最成熟、應用最廣的一項技術。國內大公司都已經推出了成熟的人臉識別云服務,以便分享這一塊大蛋糕。然而,很多應用場景不適合使用云服務,這樣使得中小廠商整合技術推出自己的系統。那么,有哪些成熟的技術可以學習使用呢?
首先,我們要搞清楚幾個基本概念:
人臉檢測
找出一幅圖片中是人臉的區域并標記出來(一般用矩形表示),如下圖所示(百度結果):
人臉關鍵點檢測
定位并返回人臉五官與輪廓的關鍵點坐標位置。關鍵點包括人臉輪廓、眼睛、眉毛、嘴唇以及鼻子輪廓。關鍵點的個數根據算法不同也會有所不同,比如dlib給出的是69點,Face++給出的是83點,百度給出的是72點。
如下圖所示(百度結果):
人臉特征
把人臉區域作為輸入通過一定算法計算出人臉特征(一般用1xN的多維向量表示,N越大特征越豐富,計算量也越大)。
人臉對比
計算兩張臉的相似程度,并給出相似度評分,以便分析屬于一個人的可能性。
人臉搜索
針對一個新的人臉,在一個已有的人臉集合中搜索相似的人臉。算法會返回一系列相似人臉,以及相似度評分。
下面概括一下成熟技術。
一、OpenCV
OpenCV可以做“人臉檢測”和“人臉識別(人臉特征提取)”,但是精準度較深度學習的方法差不少,但它的速度(只有CPU,無GPU)更快一些。
OpenCV已經包含多個預訓練好的分類型來分類人臉,眼睛,笑臉等。相應的XML配置文件存儲在opencv/data/haarcascades/ 目錄下。
接下來我們創建人臉和眼睛的分類器。
加載相應XML創建分類器,并讀取要檢測的圖片
找到人臉和眼睛并顯示
結果顯示如下:
二、Dlib
Dlib也是一個很成熟的圖像識別的庫,在人臉識別方面它包含了已經訓練好的模型,可以進行人臉檢測、人臉特征提取、人臉識別。有人對它進行了進一步封裝,使得它用起來非常簡單,號稱是“The world’s simplest facial recognition api for Python and the command line”(世界上最簡單的人臉識別Python API 和 命令行工具),有興趣的可以一試:?https://github.com/ageitgey/face_recognition
三、深度學習框架
最近幾年深度學習的興起,極大促進了圖像處理的速度和精度,出現了幾個比較成熟的深度學習框架,如:TensorFlow、MxNet、PyTorch等等。在這些框架的基礎上,實現各種神經網絡模型用于人臉檢測、人臉特征提取等任務。比較有名的有:
人臉檢測:mtcnn
人臉特征:ResNet
有興趣的可以到github上面找相關項目進行學習。
更多關于Python技術知識將分享在我的博客:www.yuanrenxue.com
公眾號:猿人學Python