還記得咱們以前寫過一篇文章《手把手教你人臉識別自動開機》嗎?裏面用OpenCV對人臉進行簡單的識別,讓計算機訓練認識到某個特定人物後識別對象。今天來作點高級的,識別出人臉的情緒。python
本文分爲兩大部分:git
1.面部檢測:檢測圖像的臉部位置,輸出邊界框的座標github
2.情緒檢測:將面部的情緒分爲高興、生氣、悲傷、中性、驚訝、厭惡、恐懼。網絡
可使用上次文章( 《手把手教你人臉識別自動開機》 )中講到的方法—用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)
人類習慣從面部表情中吸取非言語暗示,那麼計算機能夠嗎?答案是確定的,可是須要訓練它學會識別情緒。今天咱們不太可能講收集數據、構建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 面部情緒識別