Введение:

В современном мире компьютерного зрения и глубокого обучения обнаружение эмоций по выражению лица в реальном времени представляет собой интригующее приложение с многочисленными потенциальными вариантами использования. В этой статье представлен тщательно созданный код Python, который органично сочетает в себе возможности сверточных нейронных сетей (CNN) из библиотеки Keras и универсальные возможности компьютерного зрения OpenCV. Благодаря этой интеграции мы создали интерактивную систему, способную обнаруживать эмоции по видеопотоку с веб-камеры в реальном времени, тем самым открывая двери для множества приложений в различных областях.

Предварительные требования:

Прежде чем углубляться в код, убедитесь, что ваша среда оснащена следующими библиотеками:

  • Керас
  • Тензорфлоу
  • OpenCV
  • NumPy

Понимание кода:

  1. Импорт библиотек и предварительная обработка:

Для начала код импортирует необходимые библиотеки и настраивает генераторы данных для данных обучения и проверки. Путем изменения масштаба изображений до диапазона [0, 1] данные становятся пригодными для последующего обучения CNN.

import numpy as np
import cv2
from keras.models import Sequential
from keras.layers import Dense, Dropout, Flatten, Conv2D, MaxPooling2D
from keras.optimizers import Adam
from keras.preprocessing.image import ImageDataGenerator
# Data generators for training and validation
train_datagen = ImageDataGenerator(rescale=1./255)
val_datagen = ImageDataGenerator(rescale=1./255)
# ...

2. Построение модели распознавания эмоций:

Архитектура модели распознавания эмоций построена с использованием серии сверточных слоев, чередующихся со слоями максимального пула и слоями исключения, чтобы ограничить переобучение. Последний слой с функцией активации softmax обеспечивает прогнозирование эмоций.

emotion_model = Sequential()
emotion_model.add(Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=(48, 48, 1)))
# ...
emotion_model.add(Dense(7, activation='softmax'))

3. Определение графика скорости обучения:

Здесь код использует класс ExponentialDecay TensorFlow для разработки динамического графика скорости обучения. Этот адаптивный механизм обеспечивает оптимальную конвергенцию во время обучения.

import tensorflow as tf
# Learning rate schedule
learning_rate_schedule = tf.keras.optimizers.schedules.ExponentialDecay(
    initial_learning_rate=0.0001,
    decay_steps=10000,
    decay_rate=0.9
)
# Initialize optimizer with learning rate schedule
optimizer = tf.keras.optimizers.Adam(learning_rate=learning_rate_schedule)
emotion_model.compile(loss='categorical_crossentropy', optimizer=optimizer, metrics=['accuracy'])

4. Обнаружение эмоций в реальном времени:

OpenCV выходит на сцену для обнаружения эмоций в реальном времени. Каждый видеокадр, снятый с веб-камеры, подвергается распознаванию лиц с помощью каскадного классификатора Хаара. Обнаруженные лица затем передаются в модель распознавания эмоций для прогнозирования эмоций.

# Dictionary to map emotion indices to labels
emotion_dict = {0: "Angry", 1: "Disgusted", 2: "Fearful", 3: "Happy", 4: "Neutral", 5: "Sad", 6: "Surprised"}
# Load Haar Cascade Classifier for face detection
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
# Capture video from the webcam
cap = cv2.VideoCapture(0)
while True:
    ret, frame = cap.read()
    if not ret:
        break
    # Detect faces in the frame
    gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    num_faces = face_cascade.detectMultiScale(gray_frame, scaleFactor=1.3, minNeighbors=5)
    for (x, y, w, h) in num_faces:
        # ...
        # Perform emotion prediction on the detected face
        emotion_prediction = emotion_model.predict(cropped_img)
        maxindex = int(np.argmax(emotion_prediction))
        cv2.putText(frame, emotion_dict[maxindex], (x+20, y-60), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 255, 255), 2, cv2.LINE_AA)
    # Display the video feed with overlays
    cv2.imshow('Video', cv2.resize(frame, (1200, 860), interpolation=cv2.INTER_CUBIC))
    
    # Exit loop on 'q' key press
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
# Release webcam and close windows
cap.release()
cv2.destroyAllWindows()

Вывод:

В этой статье представлен сложный, но элегантный код Python, который объединяет методы глубокого обучения с помощью Keras и возможности компьютерного зрения через OpenCV для обнаружения эмоций в реальном времени из видеопотоков веб-камеры. Бесшовная интеграция этих библиотек приводит к созданию интерактивной системы, способной распознавать эмоции и накладывать прогнозы на обнаруженные лица. Запуск этого кода открывает окно в слияние искусственного интеллекта и компьютерного зрения, демонстрируя потенциал технологии распознавания эмоций в различных приложениях.

Загрузите данные «поезда и теста отсюда.»

Ознакомьтесь с полным функциональным кодом Python здесь.

Использованная литература:

«Распознавание выражений лица с помощью глубокого обучения: современное состояние», Моллахоссейни и др., 2019.

Шолле, Франсуа. «Keras: библиотека глубокого обучения Python». Журнал исследований машинного обучения 2017.

Брадски, Гэри. «Библиотека OpenCV». Доктор. Журнал Добба о программных инструментах 2000.

Абади, Мартин и др. «TensorFlow: крупномасштабное машинное обучение в гетерогенных системах». 2015.

Харрис, Крис Р. «Программирование массивов с помощью NumPy». Природа 2020.

На простом английском языке

Спасибо, что вы являетесь частью нашего сообщества! Прежде чем уйти: