Python 超簡單實現人類面部情緒的識別

pythondict發表於2020-05-16

還記得我們之前寫過一篇文章《手把手教你人臉識別自動開機》嗎?裡面用OpenCV對人臉進行簡單的識別,讓計算機訓練認識到某個特定人物後識別物件。今天來做點高階的,識別出人臉的情緒。

本文分為兩大部分:

1.面部檢測:檢測影像的臉部位置,輸出邊界框的座標

2.情緒檢測:將面部的情緒分為高興、生氣、悲傷、中性、驚訝、厭惡、恐懼。

一、面部檢測

可以使用上次文章( 《手把手教你人臉識別自動開機》 )中講到的方法—用openCV檢測,也可以使用face_recognition專案非常簡單地實現面部檢測。

這裡我們嘗試一下face_recognition專案, face_recognition 安裝:

Face_recognition需要用到一個包叫dlib, 通過pip可能不一定裝得上,因此這裡推薦大家使用anaconda安裝dlib:


conda install -c conda-forge dlib

然後再安裝Face_recognition:


pip install face_recognition

用face_recognition三句程式碼就能識別影像中的臉部:


import face_recognition

image = face_recognition.load_image_file("1.png")

face_locations = face_recognition.face_locations(image)

二、情緒檢測

人類習慣從面部表情中吸收非言語暗示,那麼計算機可以嗎?答案是肯定的,但是需要訓練它學會識別情緒。今天我們不太可能講收集資料、構建CNN模型等邏輯流程。我們直接用priya-dwivedi訓練好的模型,他們用Kaggle開源資料集(人臉情感識別 FER)訓練了一個六層卷積神經網路模型。

現在就呼叫模型識別一下孫哥在這張圖裡的情緒吧:


import face_recognition

import numpy as np

import cv2

from keras.models import load_model

emotion_dict= {'生氣': 0, '悲傷': 5, '中性': 4, '厭惡': 1, '驚訝': 6, '恐懼': 2, '高興': 3}

image = face_recognition.load_image_file("1.png")

# 載入影像

face_locations = face_recognition.face_locations(image)

# 尋找臉部

top, right, bottom, left = face_locations[0]

# 將臉部框起來

face_image = image[top:bottom, left:right]

face_image = cv2.resize(face_image, (48,48))

face_image = cv2.cvtColor(face_image, cv2.COLOR_BGR2GRAY)

face_image = np.reshape(face_image, [1, face_image.shape[0], face_image.shape[1], 1])

# 調整到可以進入該模型輸入的大小

model = load_model("./model_v6_23.hdf5")

# 載入模型

predicted_class = np.argmax(model.predict(face_image))

# 分類情緒

label_map = dict((v,k) for k,v in emotion_dict.items()) 

predicted_label = label_map[predicted_class]

# 根據情緒對映表輸出情緒

print(predicted_label)

結果:


$python emotion.py

高興

從下面終端輸出的結果我們可以看到孫哥現在是高興的情緒,這個結果應該正確(畢竟孫哥還是表裡如一的)。

雖然簡單,但還是建議有興趣的同學從頭到尾做一遍試一下,過程中會遇到不少的坑,慢慢百度谷歌解決就好了。

文章到此就結束啦,如果你喜歡今天的Python 教程,請持續關注Python實用寶典,如果對你有幫助,麻煩在下面點一個贊/在看哦有任何問題都可以在下方留言區留言,我們會耐心解答的!


​Python實用寶典 (pythondict.com)

不只是一個寶典

歡迎關注公眾號:Python實用寶典

原文來自Python實用寶典:Python 面部情緒識別

Python實用寶典

本作品採用《CC 協議》,轉載必須註明作者和本文連結

Python實用寶典, pythondict.com

相關文章