Aufbau einer Echtzeit-Emotionserkennung mit Python

Blog

Aufbau einer Echtzeit-Emotionserkennung mit Python

Aufbau einer Echtzeit-Emotionserkennung mit Python

Das Erkennen von Emotionen der Person in Echtzeit mit einer Kameraeingabe ist eine der erweiterten Funktionen im maschinellen Lernprozess. Die Erkennung von Emotionen einer Person mit einer Kamera ist für verschiedene Forschungs- und Analysezwecke nützlich. Die Erkennung von Emotionen erfolgt mithilfe des maschinellen Lernkonzepts. Sie können den trainierten Datensatz verwenden, um die Emotionen des Menschen zu erkennen. Um die verschiedenen Emotionen zu erkennen, müssen Sie zuerst diese verschiedenen Emotionen trainieren oder Sie können einen bereits im Internet verfügbaren Datensatz verwenden. In diesem Artikel besprechen wir die Erstellung eines Python-Programms, um Echtzeit-Emotionen eines Menschen zu erkennen, der die Kamera verwendet.

Abhängigkeiten installieren

Um dieses Machine-Learning-Konzept verwenden zu können, müssen Sie über die Eingabeaufforderung viele Abhängigkeiten in Ihrem System installieren. Der von mir verwendete Machine-Learning-Algorithmus war ein Tensor-Flow-Algorithmus, der von Google für Machine-Learning-Funktionen entwickelt wurde. Zur Analyse von Gesichtern. Sie müssen die Gesichter erkennen, um mehr über die Erkennung von Gesichtern mit Python zu erfahren, können Sie meinen Artikel lesen, indem Sie auf klicken Hier . Sie benötigen für diesen Vorgang eine Kaskadendatei, die Sie von meiner Git-Hub-Seite oder im Download-Bereich herunterladen können.

wo kann man miota kaufen

Sie können die Abhängigkeiten installieren, indem Sie die folgenden Befehle verwenden:

pip install opencv-python pip install tensor flow pip install numpy pip install pandas pip install keras pip install adam pip install kwargs pip install cinit

Den Datensatz trainieren

Zu Trainingszwecken verwende ich die vordefinierte CSV-Datei mit untrainiertem Datensatz als meine Haupteingabe für meine Eingaben zum Trainieren der Maschine. Sie können den unten angegebenen Code verwenden, um die Maschine mit dem Datensatz zu trainieren. Zuvor müssen Sie sicherstellen, dass sich alle erforderlichen Dateien im selben Repository befinden, in dem das Programm angezeigt wird, andernfalls tritt ein Fehler auf. Sie können den Datensatz herunterladen, indem Sie hier klicken.

Das ist der Bildtitel

import sys, os import pandas as pd import numpy as np from keras.models import Sequential from keras.layers import Dense, Dropout, Activation, Flatten from keras.layers import Conv2D, MaxPooling2D, BatchNormalization,AveragePooling2D from keras.losses import categorical_crossentropy from keras.optimizers import Adam from keras.regularizers import l2 from keras.utils import np_utils # pd.set_option('display.max_rows', 500) # pd.set_option('display.max_columns', 500) # pd.set_option('display.width', 1000) df=pd.read_csv('fer2013.csv') # print(df.info()) # print(df['Usage'].value_counts()) # print(df.head()) X_train,train_y,X_test,test_y=[],[],[],[] for index, row in df.iterrows(): val=row['pixels'].split(' ') try: if 'Training' in row['Usage']: X_train.append(np.array(val,'float32')) train_y.append(row['emotion']) elif 'PublicTest' in row['Usage']: X_test.append(np.array(val,'float32')) test_y.append(row['emotion']) except: print(f'error occured at index :{index} and row:{row}') num_features = 64 num_labels = 7 batch_size = 64 epochs = 30 width, height = 48, 48 X_train = np.array(X_train,'float32') train_y = np.array(train_y,'float32') X_test = np.array(X_test,'float32') test_y = np.array(test_y,'float32') train_y=np_utils.to_categorical(train_y, num_classes=num_labels) test_y=np_utils.to_categorical(test_y, num_classes=num_labels) #cannot produce #normalizing data between oand 1 X_train -= np.mean(X_train, axis=0) X_train /= np.std(X_train, axis=0) X_test -= np.mean(X_test, axis=0) X_test /= np.std(X_test, axis=0) X_train = X_train.reshape(X_train.shape[0], 48, 48, 1) X_test = X_test.reshape(X_test.shape[0], 48, 48, 1) # print(f'shape:{X_train.shape}') ##designing the cnn #1st convolution layer model = Sequential() model.add(Conv2D(64, kernel_size=(3, 3), activation='relu', input_shape=(X_train.shape[1:]))) model.add(Conv2D(64,kernel_size= (3, 3), activation='relu')) # model.add(BatchNormalization()) model.add(MaxPooling2D(pool_size=(2,2), strides=(2, 2))) model.add(Dropout(0.5)) #2nd convolution layer model.add(Conv2D(64, (3, 3), activation='relu')) model.add(Conv2D(64, (3, 3), activation='relu')) # model.add(BatchNormalization()) model.add(MaxPooling2D(pool_size=(2,2), strides=(2, 2))) model.add(Dropout(0.5)) #3rd convolution layer model.add(Conv2D(128, (3, 3), activation='relu')) model.add(Conv2D(128, (3, 3), activation='relu')) # model.add(BatchNormalization()) model.add(MaxPooling2D(pool_size=(2,2), strides=(2, 2))) model.add(Flatten()) #fully connected neural networks model.add(Dense(1024, activation='relu')) model.add(Dropout(0.2)) model.add(Dense(1024, activation='relu')) model.add(Dropout(0.2)) model.add(Dense(num_labels, activation='softmax')) # model.summary() #Compliling the model model.compile(loss=categorical_crossentropy, optimizer=Adam(), metrics=['accuracy']) #Training the model model.fit(X_train, train_y, batch_size=batch_size, epochs=epochs, verbose=1, validation_data=(X_test, test_y), shuffle=True) #Saving the model to use it later on fer_json = model.to_json() with open('fer.json', 'w') as json_file: json_file.write(fer_json) model.save_weights('fer.h5')

Das ist der Bildtitel

Erkennen von Emotionen in Echtzeit

Um die Emotion zu erkennen, müssen Sie zuerst die train.py Programm zum Trainieren der Daten. Dann können Sie den unten angegebenen Code verwenden:

Das ist der Bildtitel

import os import cv2 import numpy as np from keras.models import model_from_json from keras.preprocessing import image #load model model = model_from_json(open('fer.json', 'r').read()) #load weights model.load_weights('fer.h5') face_haar_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') cap=cv2.VideoCapture(0) while True: ret,test_img=cap.read()# captures frame and returns boolean value and captured image if not ret: continue gray_img= cv2.cvtColor(test_img, cv2.COLOR_BGR2GRAY) faces_detected = face_haar_cascade.detectMultiScale(gray_img, 1.32, 5) for (x,y,w,h) in faces_detected: cv2.rectangle(test_img,(x,y),(x+w,y+h),(255,0,0),thickness=7) roi_gray=gray_img[y:y+w,x:x+h]#cropping region of interest i.e. face area from image roi_gray=cv2.resize(roi_gray,(48,48)) img_pixels = image.img_to_array(roi_gray) img_pixels = np.expand_dims(img_pixels, axis = 0) img_pixels /= 255 predictions = model.predict(img_pixels) #find max indexed array max_index = np.argmax(predictions[0]) emotions = ('angry', 'disgust', 'fear', 'happy', 'sad', 'surprise', 'neutral') predicted_emotion = emotions[max_index] cv2.putText(test_img, predicted_emotion, (int(x), int(y)), cv2.FONT_HERSHEY_SIMPLEX, 1, (0,0,255), 2) resized_img = cv2.resize(test_img, (1000, 700)) cv2.imshow('Facial emotion analysis ',resized_img) if cv2.waitKey(10) == ord('q'):#wait until 'q' key is pressed break cap.release() cv2.destroyAllWindows

Ausgabeüberprüfung

Jetzt können Sie die videoTester.py Programm. Ihre Kamera schaltet sich automatisch ein und erkennt die Emotionen Ihres Gesichts.

Das ist der Bildtitel

Das ist der Bildtitel

Abschluss

Dies ist nur ein erster Schritt bei der Gesichtserkennung. Sie können die Programmdateien vom Git-Hub-Link herunterladen, indem Sie auf klicken Hier . Dankeschön!

#Python