Skip to content

Веб-приложение для визуального распознавания произнесенных слов на видео

Notifications You must be signed in to change notification settings

sadevans/EfLipSystem

Repository files navigation

Веб-приложение для визуального распознавания произнесенных слов на видео

Тема ВКР: "Реализация нейросетевого классификатора для визуального распознавания речи"

Во время подготовке ВКР была проведена большая исследовательская работа в области визуального распознавания речи. В результате исследования была выбрана статья, в которой описана вычислительно эффективная архитектура. Основной целью ВКР являлось реализовать архитектуру, описанную в статье, со всей необходимой программной функциональностью. Задача не являлась тривиальной, поскольку открытый код модели не был доступен, а в самом тексте статьи совсем не много конкретики. Дополнтельно было разработано веб-приложения для использования уже обученной модели.

Репозиторий https://github.com/sadevans/EfLipSystem содержит в себе разработанное веб-приложение для взаимодействия с обученной моделью. Архитектура модели подгружается в качестве сабмодуля. Серверная часть написана на Django, клиентская - на Vanilla JS.

Установка зависимостей

Для того, чтобы установить необходимую среду разработки, необходимо:

1. Собрать docker-image следующей командой

docker build -t lipread:latest .

2. Запустить docker-compose проект

docker compose --env-file .env-file up -d

Описание конфигурации проекта

  • Файл setup.py отвечает за сборку бэкенд части проекта.
  • В папке model находится сабмодуль - проект с моделью.
  • Модуль pipelines содержит в себе пайплайн, который является связующим звеном между бэкенд частью проекта и моделью. В модуле pipelines содержится файл pipelines.py, который реализует логику обработки данных для подачи в модель, вызов модели, вызов обработки результирующего видео.
  • Модуль pipelines/utils содержит в себе скрипт обработки результирующего видео - наложение области интереса и субтитров на исходное видео.
  • Модуль pipelines/data содержит в себе скрипты для обработки входного видеофайла для его подачи в модель.
  • Модуль pipelines/detectors содержит в себе скрипты для обнаружения лиц на кадре и поиска ключевых точек с помощью детектора mediapipe.
  • Модуль backend/lipread/templates содержит в себе html шаблон веб-страницы.
  • Модуль backend/lipread/static содержит в себе .css и .js скрипты.
  • Модуль backend/lipread/lipread содержит в себе базовые файлы фреймворка Django.
  • Модуль backend/lipread/lipread/core содержит в себе основную бэкенд логику проекта. В корне этого модуля содержатся стандартные скрипты, генерируемые Django.

Принцип работы

Принцип работы программного комплекса инференса модели

program_infer

Схема работы состоит из трех этапов:

  1. Кадры исходного видео поступают из веб-приложения от клиента и прередобрабатываются. Итогом выполнения этого шага является область интереса на кадрах видео.
  2. Область интереса обрабатывается модель. Результатом этого шага является текст. произнесенный на видео.
  3. Затем текст и область интереса накладываются на исходное видео и отдаются обратно в клиентскую часть веб-приложения.

Рассмотрим каждый шаг подробнее.

Предобработка кадров видео

На этом этапе с помощью mediapipe находится лицо человека на кадре, координаты его bounding box'а сохраняются для последующего использования. После этого ищутся ключевые точки лица, их в этом случае 4 - правый глаз, левый глаз, кончик носа и середина рта. Далее с помощью найденных ключевых точек на кадрах видео обрезается область интереса размером 88х88 пикселей.

Обработка области интереса моделью

На данном этапе используется обученная модель, архитектура которой представлена ниже. photo_2024-06-13_00-52-23

Модель состоит из блока 3D сверточной сети, отмасштабированной EfficientNetV2, энкодера трансформера и блока временной сверточной сети (TCN). Розовым на рисунке обозначена внешняя часть сети (frontend), выполняющая извлечение признакв, оранжевым - внутренняя часть сети (backend), отвечающая за обработку признаков.

Модель предсказывает логарифм вероятности принадлежности произнесенного на видео слова к одному из 500 классов, представленных в датасете LRW. Подробнее про модель можно посмотреть вот тут: https://github.com/sadevans/EfLipReading . В репозитории представлена реализация статьи (открытый код модели отсутсвовал, мною все было реализовано с нуля).

Обработка результирующего видео

На этом этапе на исходном видео выделяется лицо обнаруженного человека в boundind box (который мы сохранили на первом этапе). Также для демонстрации на исходное видео накладывается область и текст, предсказанный моделью.

Диаграмма последовательности работы веб-приложения

uml_web_app (1)

About

Веб-приложение для визуального распознавания произнесенных слов на видео

Topics

Resources

Stars

Watchers

Forks