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

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

本文分爲兩大部分:git

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

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

1、面部檢測

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

這裏咱們嘗試一下face_recognition項目, face_recognition 安裝:code

Face_recognition須要用到一個包叫dlib, 經過pip可能不必定裝得上,所以這裏推薦你們使用anaconda安裝dlib:對象

conda install -c conda-forge dlib

而後再安裝Face_recognition:教程

pip install face_recognition

用face_recognition三句代碼就能識別圖像中的臉部:ip

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

2、情緒檢測

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

如今就調用模型識別一下孫哥在這張圖裏的情緒吧:

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實用寶典

相關文章
相關標籤/搜索