Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/sadevans/eflipsystem

Веб-приложение для визуального распознавания произнесенных слов на видео
https://github.com/sadevans/eflipsystem

computer-vision deployment django docker web

Last synced: 20 days ago
JSON representation

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

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.

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

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

![program_infer](https://github.com/sadevans/EfLipSystem/assets/82286355/4fede64a-3d2b-4d0f-b3f3-55e6857c1b78)

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

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

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

### Обработка области интереса моделью
На данном этапе используется обученная модель, архитектура которой представлена ниже.
![photo_2024-06-13_00-52-23](https://github.com/sadevans/EfLipSystem/assets/82286355/97dcf13e-f5d0-48e7-89b5-1869628d7248)

Модель состоит из блока 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 (который мы сохранили на первом этапе). Также для демонстрации на исходное видео накладывается область и текст, предсказанный моделью.

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

![uml_web_app (1)](https://github.com/sadevans/EfLipSystem/assets/82286355/0554a098-7a8d-43e1-9862-613adc4374a5)