{"id":20841134,"url":"https://github.com/sadevans/eflipsystem","last_synced_at":"2025-04-10T13:55:28.240Z","repository":{"id":244593198,"uuid":"815631097","full_name":"sadevans/EfLipSystem","owner":"sadevans","description":"Веб-приложение для визуального распознавания произнесенных слов на видео","archived":false,"fork":false,"pushed_at":"2024-06-16T15:45:38.000Z","size":97,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-24T12:39:39.796Z","etag":null,"topics":["computer-vision","deployment","django","docker","web"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sadevans.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-06-15T17:00:09.000Z","updated_at":"2024-08-16T08:38:08.000Z","dependencies_parsed_at":"2024-06-15T22:36:50.710Z","dependency_job_id":"11dae646-0647-48ef-9fd1-9bdee8ecb96d","html_url":"https://github.com/sadevans/EfLipSystem","commit_stats":null,"previous_names":["sadevans/eflipsystem"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sadevans%2FEfLipSystem","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sadevans%2FEfLipSystem/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sadevans%2FEfLipSystem/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sadevans%2FEfLipSystem/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sadevans","download_url":"https://codeload.github.com/sadevans/EfLipSystem/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248229614,"owners_count":21068943,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["computer-vision","deployment","django","docker","web"],"created_at":"2024-11-18T01:18:55.872Z","updated_at":"2025-04-10T13:55:28.220Z","avatar_url":"https://github.com/sadevans.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Веб-приложение для визуального распознавания произнесенных слов на видео\nТема ВКР: \"Реализация нейросетевого классификатора для визуального распознавания речи\"\n\nВо время подготовке ВКР была проведена большая исследовательская работа в области визуального распознавания речи. В результате исследования была выбрана статья, в которой описана вычислительно эффективная архитектура. Основной целью ВКР являлось реализовать архитектуру, описанную в статье, со всей необходимой программной функциональностью. Задача не являлась тривиальной, поскольку открытый код модели не был доступен, а в самом тексте статьи совсем не много конкретики. Дополнтельно было разработано веб-приложения для использования уже обученной модели.\n\nРепозиторий https://github.com/sadevans/EfLipSystem содержит в себе разработанное веб-приложение для взаимодействия с обученной моделью. Архитектура модели подгружается в качестве сабмодуля. \nСерверная часть написана на Django, клиентская - на Vanilla JS.\n\n## Установка зависимостей\nДля того, чтобы установить необходимую среду разработки, необходимо:\n\n### 1. Собрать docker-image следующей командой\n\n```bash\ndocker build -t lipread:latest .\n```\n### 2. Запустить docker-compose проект\n\n```bash\ndocker compose --env-file .env-file up -d\n```\n## Описание конфигурации проекта\n\n- Файл `setup.py` отвечает за сборку бэкенд части проекта.\n- В папке `model` находится сабмодуль - проект с моделью.\n- Модуль `pipelines` содержит в себе пайплайн, который является связующим звеном между бэкенд частью проекта и моделью. В модуле `pipelines` содержится файл `pipelines.py`, который реализует логику обработки данных для подачи в модель, вызов модели, вызов обработки результирующего видео.\n- Модуль `pipelines/utils` содержит в себе скрипт обработки результирующего видео - наложение области интереса и субтитров на исходное видео.\n- Модуль `pipelines/data` содержит в себе скрипты для обработки входного видеофайла для его подачи в модель.\n- Модуль `pipelines/detectors` содержит в себе скрипты для обнаружения лиц на кадре и поиска ключевых точек с помощью детектора **mediapipe**.\n- Модуль `backend/lipread/templates` содержит в себе html шаблон веб-страницы.\n- Модуль `backend/lipread/static` содержит в себе *.css* и *.js* скрипты.\n- Модуль `backend/lipread/lipread` содержит в себе базовые файлы фреймворка Django. \n- Модуль `backend/lipread/lipread/core` содержит в себе основную бэкенд логику проекта. В корне этого модуля содержатся стандартные скрипты, генерируемые Django.\n\n## Принцип работы\n\n### Принцип работы программного комплекса инференса модели\n\n![program_infer](https://github.com/sadevans/EfLipSystem/assets/82286355/4fede64a-3d2b-4d0f-b3f3-55e6857c1b78)\n\nСхема работы состоит из трех этапов:\n1. Кадры исходного видео поступают из веб-приложения от клиента и прередобрабатываются. Итогом выполнения этого шага является область интереса на кадрах видео.\n2. Область интереса обрабатывается модель. Результатом этого шага является текст. произнесенный на видео.\n3. Затем текст и область интереса накладываются на исходное видео и отдаются обратно в клиентскую часть веб-приложения.\n\nРассмотрим каждый шаг подробнее.\n\n### Предобработка кадров видео\nНа этом этапе с помощью `mediapipe` находится лицо человека на кадре, координаты его bounding box'а сохраняются для последующего использования. После этого ищутся ключевые точки лица, их в этом случае 4 - правый глаз, левый глаз, кончик носа и середина рта. Далее с помощью найденных ключевых точек на кадрах видео обрезается область интереса размером 88х88 пикселей.\n\n### Обработка области интереса моделью\nНа данном этапе используется обученная модель, архитектура которой представлена ниже.\n![photo_2024-06-13_00-52-23](https://github.com/sadevans/EfLipSystem/assets/82286355/97dcf13e-f5d0-48e7-89b5-1869628d7248)\n\nМодель состоит из блока 3D сверточной сети, отмасштабированной EfficientNetV2, энкодера трансформера и блока временной сверточной сети (TCN). Розовым на рисунке обозначена внешняя часть сети (frontend), выполняющая извлечение признакв, оранжевым - внутренняя часть сети (backend), отвечающая за обработку признаков.\n\nМодель предсказывает логарифм вероятности принадлежности произнесенного на видео слова к одному из 500 классов, представленных в датасете LRW. \nПодробнее про модель можно посмотреть вот тут: https://github.com/sadevans/EfLipReading . В репозитории представлена реализация [статьи](https://www.researchgate.net/publication/360794222_Accurate_and_Resource-Efficient_Lipreading_with_Efficientnetv2_and_Transformers?enrichId=rgreq-f863c780260845c92418bc773235cd22-XXX\u0026enrichSource=Y292ZXJQYWdlOzM2MDc5NDIyMjtBUzoxMTQzMTI4MTA5NTk5NTA2N0AxNjY4MDY3MjI5NDM5\u0026el=1_x_2\u0026_esc=publicationCoverPdf) (открытый код модели отсутсвовал, мною все было реализовано с нуля).\n\n### Обработка результирующего видео\nНа этом этапе на исходном видео выделяется лицо обнаруженного человека в boundind box (который мы сохранили на первом этапе). Также для демонстрации на исходное видео накладывается область и текст, предсказанный моделью.\n\n## Диаграмма последовательности работы веб-приложения\n\n![uml_web_app (1)](https://github.com/sadevans/EfLipSystem/assets/82286355/0554a098-7a8d-43e1-9862-613adc4374a5)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsadevans%2Feflipsystem","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsadevans%2Feflipsystem","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsadevans%2Feflipsystem/lists"}