當前位置:
首頁 > 新聞 > 8行代碼實現人臉識別以及情緒檢測,關鍵準確度還不錯!

8行代碼實現人臉識別以及情緒檢測,關鍵準確度還不錯!

8行代碼實現人臉識別以及情緒檢測,關鍵準確度還不錯!

【新智元導讀】實現人臉檢測、人臉識別以及情緒檢測最少需要多少代碼?8行!目前在人臉識別方面已經做的非常成熟了,但對於開發者來說,對效率的追求是永遠不會停止的。通過不斷精簡代碼,目前能夠同時實現上述3個功能所需的最少代碼是8行,代碼已在Github開源。

人類具有識別和區分面部的天生能力,但人類也存在臉盲的現象。現在計算機也能夠識別並區分人臉,並且這項技術已經非常成熟。人臉檢測和識別可以用來改善訪問和安全性,就像最新的Apple iPhone一樣(參見下面的gif),用戶可以在沒有實體支付卡(例如銀行卡、信用卡等)的情況下,實現刷臉移動支付、啟用犯罪識別並允許個性化的醫療保健和其他服務。

人臉檢測和識別是一個被廣泛研究的課題,在網上可以找到大量的資源。今天向大家展示的一個最簡單的實現方式。為了找出最簡化、同時又具備一定準確度的實現,本問作者嘗試了多個開源項目,而且還創建了一個pipeline,只需8行代碼就可以對任何輸入圖像進行人臉檢測,人臉識別和情感理解! 代碼yiji在Github上開源的。

通過這8行代碼,我們要實現以下3個功能:

  • 面部檢測:能夠檢測任何輸入圖像或幀中的面部位置。 輸出是檢測到的面的邊界框坐標
  • 面部識別:將多個面部進行比較以識別哪些面部屬於同一個人。 這是通過比較面嵌入向量來完成的
  • 情緒檢測:將臉上的情緒分類為快樂,憤怒,悲傷,中立,驚訝,厭惡或恐懼

面部檢測

面部檢測是pipeline的第一部分。使用python庫的Face Recognition,這庫非常易於安裝並且在檢測面部時非常準確。此庫掃描輸入圖像並返回所有檢測到的面的邊界框坐標,如下所示:

8行代碼實現人臉識別以及情緒檢測,關鍵準確度還不錯!

系統需求:

  • Python 3.3+ or Python 2.7
  • macOS or Linux

安裝指南

首先確保你已經安裝了dlib。如果沒有可以谷歌如何安裝。

然後通過下面命令進行安裝(缺人你的Python版本,如果是2就把pip3改成pip2)

pip3 install face_recognition

下面的代碼段顯示了如何使用face_recognition庫來檢測面部

face_locations = face_recognition.face_locations(image)
top, right, bottom, left = face_locations[0]
face_image = image[top:bottom, left:right]

有關安裝人臉識別和使用它的完整說明也在Github上


面部識別

面部識別用於驗證兩張臉是否相同。面部識別的使用在安全性、生物指標、娛樂、人身安全等方面有著巨大的需求和價值。用於面部檢測的python庫face_recognition也可以用於面部識別。

測試顯示,該庫具有良好的性能。給定兩張臉進行匹配,最終得出對比結果為True或False。面部識別涉及的步驟是

  • 在圖像中查找面部
  • 分析面部特徵
  • 比較2個輸入面的特徵
  • 如果匹配則返回True,否則返回False

執行此操作的代碼段如下所示。我們為兩張臉創建臉部的編碼矢量,然後使用內置函數來比較矢量之間的距離。

encoding_1 = face_recognition.face_encodings(image1)[0]
encoding_2 = face_recognition.face_encodings(image1)[0]
results = face_recognition.compare_faces([encoding_1],encoding_2,tolerance = 0.50)

現在用下面兩張圖來測試模型:

8行代碼實現人臉識別以及情緒檢測,關鍵準確度還不錯!

8行代碼實現人臉識別以及情緒檢測,關鍵準確度還不錯!

如圖所示,我們有兩張不同姿勢的萊昂納多迪卡普里奧的臉。甚至第一個照片里的臉還不是正面鏡頭。使用上面代碼進行識別,我們的人臉識別程序能夠確定這兩張臉屬於同一個人!


情緒檢測

8行代碼實現人臉識別以及情緒檢測,關鍵準確度還不錯!

人類習慣於察言觀色。現在,計算機在讀懂人類面部情緒方面,做的越來越好了。所以計算機是如何做到檢測圖像中的情緒呢?這裡我們使用一個開源數據集,來自Kaggle的Face Emotion Recognition(FER ),並構建了一個CNN來檢測情緒。我們定義情緒可分為7類:快樂,悲傷,恐懼,厭惡,憤怒,無所謂和驚訝。

首先讓我們在Keras中構建一個6層卷積神經網路(CNN),並使用圖像增強來提高模型性能。嘗試了許多不同的模型之後,我們找出了最佳實現,並將此開源,讀者可以訪問以下鏈接查看代碼:

https://github.com/priya-dwivedi/face_and_emotion_detection/blob/master/src/EmotionDetector_v2.ipynb

現在你可以使用以下兩行代碼載入預訓練模型並在圖像上運行它:

model = load_model("./emotion_detector_models/model.hdf5")
predicted_class = np.argmax(model.predict(face_image)

結論

如你所見,面部識別在今天看來,已經是一個非常簡單的任務,你甚至僅僅使用8行代碼就可以實現。當然精確度可能有待商榷,但起碼在一半情況下是完全具備可用性的。

參考鏈接:

https://towardsdatascience.com/face-detection-recognition-and-emotion-detection-in-8-lines-of-code-b2ce32d4d5de

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 新智元 的精彩文章:

ICLR高分論文說,非理性AI能讓AI更聰明?
Python開發者年度報告:Python3部署超84%,就業率高達62%

TAG:新智元 |