Введение:
В современном мире компьютерного зрения и глубокого обучения обнаружение эмоций по выражению лица в реальном времени представляет собой интригующее приложение с многочисленными потенциальными вариантами использования. В этой статье представлен тщательно созданный код Python, который органично сочетает в себе возможности сверточных нейронных сетей (CNN) из библиотеки Keras и универсальные возможности компьютерного зрения OpenCV. Благодаря этой интеграции мы создали интерактивную систему, способную обнаруживать эмоции по видеопотоку с веб-камеры в реальном времени, тем самым открывая двери для множества приложений в различных областях.
Предварительные требования:
Прежде чем углубляться в код, убедитесь, что ваша среда оснащена следующими библиотеками:
- Керас
- Тензорфлоу
- OpenCV
- NumPy
Понимание кода:
- Импорт библиотек и предварительная обработка:
Для начала код импортирует необходимые библиотеки и настраивает генераторы данных для данных обучения и проверки. Путем изменения масштаба изображений до диапазона [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.
На простом английском языке
Спасибо, что вы являетесь частью нашего сообщества! Прежде чем уйти:
- Обязательно аплодируйте и следуйте за автором! 👏
- Еще больше контента вы можете найти на PlainEnglish.io 🚀
- Подпишитесь на нашу бесплатную еженедельную рассылку. 🗞️
- Следуйте за нами в Twitter, LinkedIn, YouTube > и Discord.