Это официальный репозиторий статьи "Automated Sign Language Tutor: A Dual-Language Real-Time Approach for RSL and ASL".
Внешний вид и видео работы стенда:
Важное примечание: Этот репозиторий содержит бэкенд-систему для распознавания языка жестов (компоненты Streaming Sign Recognition Engine и Controller Process). Предоставленный фронтенд (ws.html, ws.css, ws.js) служит базовым примером реализации для демонстрации функциональности бэкенда и не является готовым к эксплуатации приложением. Разработчики должны создавать свои собственные фронтенд-реализации, соответствующие конкретным случаям использования, используя этот бэкенд в качестве сервиса распознавания.
Также возможно использование бэкенда с альтернативными моделями.
- Два режима работы:
- LIVE: Режим реального времени для распознавания жестов
- Тренировка: Режим для обучения модели новым жестам
- Поддержка двух языков: Русский и английский интерфейс и модели распознавания
- Взаимодействие через WebSocket: Клиент отправляет видеопоток, сервер возвращает распознанные жесты
- Визуальная обратная связь: Система уведомлений для пользователя
- Python 3.7+
- Веб-камера
pip install -r requirements.txtСкачайте модели
- https://rndml-team-cv.obs.ru-moscow-1.hc.sbercloud.ru/rsl/demostand_models/tsm/ru/mobilenet_demostand_ru.onnx
- https://rndml-team-cv.obs.ru-moscow-1.hc.sbercloud.ru/rsl/demostand_models/tsm/en/mobilenet_demostand_en.onnx
и поместите их в папку models/checkpoints/.
python server_fapi.pyСервер запустится на localhost:3003.
docker build -t sign-tutor .
docker run -it -d -v $PWD:/app -p 3003:3003 sign-tutor- Откройте
ws.htmlв браузере - Нажмите "Включить камеру" для доступа к веб-камере
- После включения камеры станет доступна кнопка "Запустить стрим"
- Выберите режим работы:
- LIVE: Распознавание жестов в реальном времени
- Тренировка:
- Введите название жеста в текстовое поле
- Нажмите "Выбрать жест"
- Показывайте жест перед камерой
- Система сообщит, когда жест распознан правильно
- Переключение языка интерфейса и модели: используйте кнопки RU/EN в правом верхнем углу
- Результат распознавания отображается в консоли сервера.
-
Поместите ONNX модели для русского и английского языков в папку
models/checkpoints/ -
Измените конфигурационные файлы:
models/config_ru.yamlдля русской модели,models/config_en.yamlдля английской модели.
Используйте имеющиеся файлы как примеры.
- Измените файлы с классами жестов:
models/constants_ru.pyс переменнойclassesдля русского языка,models/constants_en.pyс переменнойclassesдля английского языка.
Используйте имеющиеся файлы как примеры.
-
Установка соединения:
- Клиент открывает WebSocket соединение с
ws://localhost:3003/ - Сервер инициализирует модель для языка по умолчанию (русский)
- Клиент открывает WebSocket соединение с
-
Основной цикл работы:
sequenceDiagram
participant Клиент
participant Сервер
participant Модель
Клиент->>Сервер: {"type": "LANGUAGE", "lang": "ru"}
Сервер->>Модель: Инициализация русской модели
Модель-->>Сервер: Модель готова
Сервер-->>Клиент: {"status": 200, "message": "Language changed to ru"}
Клиент->>Сервер: {"type": "MODE", "mode": "TRAINING"}
Сервер-->>Клиент: {"status": 200, "message": "New MODE TRAINING setted correctly"}
Клиент->>Сервер: {"type": "GLOSS", "gloss": "привет"}
Сервер-->>Клиент: {"status": 200, "message": "New GLOSS привет setted correctly"}
loop Каждый кадр (30 FPS)
Клиент->>Сервер: {"type": "IMAGE", "image": "data:image/jpeg"}
Сервер->>Модель: Обработка кадра
Модель-->>Сервер: Результат распознавания
alt Жест распознан
Сервер-->>Клиент: {"text": "привет", "type": "WORD"}
end
end
Клиент (Frontend):
view/ws.html: Основной HTML-файл интерфейсаview/ws.css: Стили интерфейсаview/ws.js: Логика работы с камерой и WebSocket
Сервер (Backend):
server_fapi.py: Основной серверный код (FastAPI)models/model.py: Логика работы с моделью распознаванияRunner: Класс для управления потоком обработки видеоRecognitionMP: Процесс для распознавания жестов в отдельном потоке
Модель:
- ONNX-модели для распознавания жестов
- Конфигурационные файлы для русской и английской версий
- Файлы с классами жестов для каждого языка
-
Управление камерой:
- Получение доступа к веб-камере через WebRTC
- Захват и кодирование кадров в base64
- Отправка кадров с заданной частотой (30 FPS)
-
Управление режимами:
- Плавное переключение между режимами LIVE и Тренировка
- Динамическое отображение элементов интерфейса в зависимости от режима
-
Локализация:
- Полная поддержка русского и английского языков
- Сохранение выбора языка между сессиями
- Автоматическое определение языка браузера
-
Обратная связь:
- Система уведомлений с анимацией
- Визуальное подтверждение действий пользователя
- Обработка и отображение ошибок
-
Обработка видео:
- Декодирование base64 в изображение OpenCV
- Предобработка кадров для нейронной сети
- Буферизация кадров для анализа последовательностей
-
Управление моделью:
- Динамическая загрузка моделей для разных языков
- Многопоточная обработка для минимизации задержек
- Корректное освобождение ресурсов при переключении языков
-
Распознавание жестов:
- Анализ последовательности кадров для распознавания жестов
- Пороговая фильтрация для уменьшения ложных срабатываний
- Частота кадров: Измените значение
FPSвws.js - Разрешение видео: Измените атрибуты
widthиheightу элемента<video>вws.html - Порог распознавания: Измените значение
thresholdв конфигурационных файлах моделей
- Создайте новый конфигурационный файл
models/config_<язык>.yaml - Добавьте файл с классами жестов
models/constants_<язык>.py - Обновите словари переводов в
ws.js:
const translations = {
// ...
<язык>: {
title: "...",
startWebcam: "...",
// ... остальные тексты
}
}-
Не работает камера:
- Проверьте разрешения браузера
- Убедитесь, что нет других приложений, использующих камеру
- Попробуйте перезагрузить страницу
-
Нет соединения с сервером:
- Убедитесь, что сервер запущен (
python server_fapi.py) - Проверьте адрес WebSocket в
ws.js - Убедитесь, что нет блокировки брандмауэром
- Убедитесь, что сервер запущен (
-
Модель не загружается:
- Проверьте пути к моделям в конфигурационных файлах
- Убедитесь, что файлы моделей существуют
- Проверьте содержимое файлов с классами жестов
- Клиент: Откройте консоль разработчика в браузере (F12)
- Сервер: Логи выводятся в консоль, где запущен сервер
Проект распространяется под лицензией APACHE. Подробнее см. в файле LICENSE.
Для вопросов и предложений обращайтесь в раздел Issues проекта.
