實現人臉識別以及情緒檢測最短需要幾行代碼?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

  • 發佈留言

    發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *