Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/sadevans/eflipsystem
Веб-приложение для визуального распознавания произнесенных слов на видео
https://github.com/sadevans/eflipsystem
computer-vision deployment django docker web
Last synced: 20 days ago
JSON representation
Веб-приложение для визуального распознавания произнесенных слов на видео
- Host: GitHub
- URL: https://github.com/sadevans/eflipsystem
- Owner: sadevans
- Created: 2024-06-15T17:00:09.000Z (8 months ago)
- Default Branch: main
- Last Pushed: 2024-06-16T15:45:38.000Z (8 months ago)
- Last Synced: 2024-11-18T01:19:33.181Z (3 months 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.## Принцип работы
### Принцип работы программного комплекса инференса модели
![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)