Распознавание эмоций по выражению лица
Проект распознавания эмоций по выражению лица на основе TensorFlow 1.x.
2020.8.22, перестроен весь код репозитория, для реализации всей системы используется keras API Tensorflow 2. Учитывая, что использование jupyter notebook для обучения не очень удобно, здесь реализован скрипт на Python.
2020.12.18, на основе обратной связи, оптимизатор Jaffe был изменён.
Добавлен детектор лиц blazeface.
Используя свёрточную нейронную сеть, построена вся система. На основе традиционных методов извлечения признаков лица, таких как Gabor и LBP, была создана глубокая модель, которая показала значительные результаты. Модель была оценена на трёх наборах данных для распознавания эмоций: FER2013, JAFFE и CK+.
На основе Python 3 и Keras 2 (с использованием TensorFlow в качестве бэкенда), конкретные зависимости для установки следующие (рекомендуется использовать conda для создания виртуальной среды).
git clone https://github.com/luanshiyinyang/FacialExpressionRecognition.git
cd FacialExpressionRecognition
conda create -n FER python=3.6 -y
conda activate FER
conda install cudatoolkit=10.1 -y
conda install cudnn=7.6.5 -y
pip install -r requirements.txt
Если вы пользователь Linux, просто выполните команду bash env.sh
в корневом каталоге, чтобы настроить среду одним щелчком мыши.
Наборы данных и предварительно обученные модели были загружены на Baidu Cloud, ссылка предоставлена, пароль — 2pmd. После загрузки распакуйте файл model.zip
в папку models
в корне проекта и распакуйте data.zip
в dataset
, чтобы получить сжатые файлы, содержащие несколько наборов данных изображений (файлы с расширением rar являются исходными данными из JAFFE, рекомендуется использовать обработанные мной данные).
Используется классическая свёрточная нейронная сеть. Структура сети основана на нескольких статьях CVPR 2018 года и дизайне Going Deeper от Google. Входной слой сопровождается добавлением слоя (1,1) свёртки для увеличения нелинейного представления и имеет относительно небольшую глубину и небольшое количество параметров (большая часть параметров сосредоточена в полносвязном слое).
Обучение проводилось в основном на FER2013, JAFFE и CK+, достигая точности около 67% на FER2013 Pub Test и Pri Test (в этом наборе данных есть проблемы с маркировкой, водяными знаками и анимированными изображениями, собранными пауками). Точность на JAFFE и CK+ составила около 99% при 5-кратной перекрестной проверке (эти наборы данных собраны в лаборатории и считаются более точными).
Выполнив следующую команду, можно обучить модель на указанном наборе данных (fer2013 или jaffe или ck+) в течение указанного количества эпох с указанным размером пакета. Процесс обучения будет генерировать соответствующие графики визуализации процесса обучения.
python src/train.py --dataset fer2013 --epochs 300 --batch_size 32
По сравнению с традиционными методами, свёрточные нейронные сети показали лучшие результаты. Используя эту модель для построения системы распознавания, предоставляются графический интерфейс пользователя (GUI) и функция обнаружения в реальном времени с помощью камеры (камера должна обеспечивать достаточное освещение). При прогнозировании изображение переворачивается горизонтально, поворачивается на 15 градусов, перемещается и т. д., чтобы создать несколько распределений вероятностей. Эти распределения вероятностей взвешиваются и суммируются, чтобы получить окончательное распределение вероятностей, и метка с наибольшей вероятностью выбирается в качестве результата (используется инференционное усиление данных).
Обратите внимание, что графический интерфейс отображает только наиболее вероятное выражение лица, но все обнаруженные лица будут отмечены на изображении, и эти отмеченные изображения будут сохранены в каталоге output.
Запустите следующую команду, чтобы открыть программу с графическим интерфейсом. Эта программа разработана с использованием PyQT. Тестирование на тестовом изображении (полученном из Интернета) дало следующий результат.
python src/gui.py
Графический интерфейс предоставляет обратную связь, одновременно обнаруживая и распознавая выражения лиц на изображении. Обработанное изображение выглядит следующим образом.
Обнаружение в реальном времени основано на OpenCV. Оно предназначено для использования камеры для прогнозирования видеопотока в реальном времени. Также было учтено, что некоторые пользователи хотят протестировать видео, не используя камеру. В этом случае параметры командной строки должны быть изменены.
Следующая команда откроет камеру для обнаружения в реальном времени (нажмите ESC для выхода). Если вы хотите указать видеофайл для тестирования, используйте вторую команду.
python src/recognition_camera.py
python src/recognition_camera.py --source 1 --video_path 视频绝对路径或者相对于该项目的根目录的相对路径
Ниже показано динамическое распознавание на видео с YouTube.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )