https://github.com/sadevans/eflipsystem
Веб-приложение для визуального распознавания произнесенных слов на видео
https://github.com/sadevans/eflipsystem
computer-vision deployment django docker web
Last synced: 12 months ago
JSON representation
Веб-приложение для визуального распознавания произнесенных слов на видео
- Host: GitHub
- URL: https://github.com/sadevans/eflipsystem
- Owner: sadevans
- Created: 2024-06-15T17:00:09.000Z (almost 2 years ago)
- Default Branch: main
- Last Pushed: 2024-06-16T15:45:38.000Z (almost 2 years ago)
- Last Synced: 2025-03-24T12:39:39.796Z (about 1 year ago)
- Topics: computer-vision, deployment, django, docker, web
- Language: Python
- Homepage:
- Size: 94.7 KB
- Stars: 4
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Веб-приложение для визуального распознавания произнесенных слов на видео
Тема ВКР: "Реализация нейросетевого классификатора для визуального распознавания речи"
Во время подготовке ВКР была проведена большая исследовательская работа в области визуального распознавания речи. В результате исследования была выбрана статья, в которой описана вычислительно эффективная архитектура. Основной целью ВКР являлось реализовать архитектуру, описанную в статье, со всей необходимой программной функциональностью. Задача не являлась тривиальной, поскольку открытый код модели не был доступен, а в самом тексте статьи совсем не много конкретики. Дополнтельно было разработано веб-приложения для использования уже обученной модели.
Репозиторий https://github.com/sadevans/EfLipSystem содержит в себе разработанное веб-приложение для взаимодействия с обученной моделью. Архитектура модели подгружается в качестве сабмодуля.
Серверная часть написана на Django, клиентская - на Vanilla JS.
## Установка зависимостей
Для того, чтобы установить необходимую среду разработки, необходимо:
### 1. Собрать docker-image следующей командой
```bash
docker build -t lipread:latest .
```
### 2. Запустить docker-compose проект
```bash
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.
## Принцип работы
### Принцип работы программного комплекса инференса модели

Схема работы состоит из трех этапов:
1. Кадры исходного видео поступают из веб-приложения от клиента и прередобрабатываются. Итогом выполнения этого шага является область интереса на кадрах видео.
2. Область интереса обрабатывается модель. Результатом этого шага является текст. произнесенный на видео.
3. Затем текст и область интереса накладываются на исходное видео и отдаются обратно в клиентскую часть веб-приложения.
Рассмотрим каждый шаг подробнее.
### Предобработка кадров видео
На этом этапе с помощью `mediapipe` находится лицо человека на кадре, координаты его bounding box'а сохраняются для последующего использования. После этого ищутся ключевые точки лица, их в этом случае 4 - правый глаз, левый глаз, кончик носа и середина рта. Далее с помощью найденных ключевых точек на кадрах видео обрезается область интереса размером 88х88 пикселей.
### Обработка области интереса моделью
На данном этапе используется обученная модель, архитектура которой представлена ниже.

Модель состоит из блока 3D сверточной сети, отмасштабированной EfficientNetV2, энкодера трансформера и блока временной сверточной сети (TCN). Розовым на рисунке обозначена внешняя часть сети (frontend), выполняющая извлечение признакв, оранжевым - внутренняя часть сети (backend), отвечающая за обработку признаков.
Модель предсказывает логарифм вероятности принадлежности произнесенного на видео слова к одному из 500 классов, представленных в датасете LRW.
Подробнее про модель можно посмотреть вот тут: https://github.com/sadevans/EfLipReading . В репозитории представлена реализация [статьи](https://www.researchgate.net/publication/360794222_Accurate_and_Resource-Efficient_Lipreading_with_Efficientnetv2_and_Transformers?enrichId=rgreq-f863c780260845c92418bc773235cd22-XXX&enrichSource=Y292ZXJQYWdlOzM2MDc5NDIyMjtBUzoxMTQzMTI4MTA5NTk5NTA2N0AxNjY4MDY3MjI5NDM5&el=1_x_2&_esc=publicationCoverPdf) (открытый код модели отсутсвовал, мною все было реализовано с нуля).
### Обработка результирующего видео
На этом этапе на исходном видео выделяется лицо обнаруженного человека в boundind box (который мы сохранили на первом этапе). Также для демонстрации на исходное видео накладывается область и текст, предсказанный моделью.
## Диаграмма последовательности работы веб-приложения
