Skip to content
sofiyagpuPublic

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

MURA — музыка в твоих руках

Интерактивный музей казахских музыкальных инструментов: встань перед веб-камерой и играй на домбре, кобызе или дауылпазе движениями руки — или направь камеру на стол и играй на жетыгене пальцами. Распознавание, синтез звука и AR работают прямо в браузере, ничего устанавливать не нужно.

Кейс ADMIT Hackathon «Motion: камера вместо джойстика», свободный вариант — музыкальный инструмент в воздухе.

▶ Живая версия: mura.sofiyaram.workers.dev

Коллекция инструментов Разбор выступления

Проверка за две минуты

  1. Откройте деплой (или npm ci && npm run dev → http://localhost:5173).
  2. Выберите инструмент.
  3. Без камеры: «Попробовать демо без камеры» — приёмы, счёт и разбор работают. С камерой: совместите точку на кисти с меткой и задержите на секунду — выступление начнётся само.
  4. Ошибитесь — подсказка скажет, что именно исправить, а на видео появится метка со стрелкой.
  5. После 9 приёмов или 45 секунд — разбор: точность, лучшая серия, частые ошибки. Рекорды — во вкладке «Мои достижения».
  6. Языки в шапке: RU / EN / ҚАЗ.

Прямые ссылки: домбра, кобыз, дауылпаз, жетыген. QR-код каждого экспоната скачивается из приложения для печати.

Камера доступна только по HTTPS или на localhost, поэтому с телефона открывайте деплой, а не локальный IP.

Жетыген: на телефоне включается основная камера — поставьте телефон так, чтобы она смотрела на стол. На ноутбуке наклоните экран, чтобы веб-камера видела руку на столе.


Твист: режим «Ошибка»

Вместо «движение не распознано» система говорит, где рука и что сделать:

Что увидела система Что советует
Рука слишком слева Сдвинь кисть вправо, к струнам
Пальцы соединились Разомкни большой и указательный — отпусти струну
Сейчас нужен край Сдвинь кисть к метке сбоку, затем ударь вниз

Правила — src/lib/gestures.ts, показ подсказок без мерцания — src/lib/coaching.ts. Ожидаемый приём влияет только на текст подсказки, не на классификацию движения.

Распознавание

MediaPipe даёт 21 точку кисти. Всё остальное написано для этого проекта: анализ траектории центра костяшек и расстояния между большим и указательным пальцами.

Инструмент Приёмы Как распознаётся
Домбра бой вниз, бой вверх, щипок пересечение линии струн с амплитудой; щипок — полный цикл «сблизил — разомкнул»
Кобыз смычок вправо/влево, короткий штрих горизонтальные сегменты, порог адаптируется к размеру кисти
Дауылпаз центр, край, двойной удар пересечение мембраны отрезком между кадрами — быстрый удар не теряется; двойной — второй удар до 500 мс
Жетыген 7 струн на столе кончики пальцев в системе координат ладони: палец отошёл от позы покоя — поднят, вернулся — касание стола; струна — по месту касания. Движение и поворот всей руки звука не дают

Защита от ложных нот: автокалибровка размера кисти, дрожания и позы пальцев на столе, гистерезис, подтверждение резких скачков, восстановление коротких разрывов трекинга, выбор «своей» руки при двух в кадре.

Счёт: нужный приём +100, другой −25, максимум 900.

Что ещё

  • AR поверх видео — инструмент, смычок и колотушка следуют за рукой, струны жетыгена лежат на столе (ARInstrument.tsx).
  • Звук синтезирован в Web Audio (Карплус—Стронг, смычковый и ударный синтез), ни одного аудиофайла.
  • Приватность — видео никуда не уходит, модель и WASM раздаются с самого сайта.
  • Мобильные — адаптивная сцена, Wake Lock, облегчённый режим и автооткат GPU → CPU на слабых устройствах.
  • Рекорды и история — локально в браузере.

Стек: React 19, TypeScript, Vite, MediaPipe Tasks Vision, Web Audio API. Деплой — Cloudflare Workers Static Assets (wrangler.jsonc, public/_headers).

Запуск и тесты

npm ci
npm run dev       # http://localhost:5173
npm run build     # проверка типов + сборка в dist/
npm test          # 49 юнит-тестов распознавания и аудио
npm run test:e2e  # браузерные сценарии (Playwright, нужен Chromium: npx playwright install chromium или CHROME_PATH)

На реальном железе: node scripts/check-real-camera.mjs, node scripts/check-audio.mjs.

Ограничения

  • Имитация техники одной рукой, а не оценка мастерства: вторая рука и аппликатура не распознаются.
  • AR — 2D-наложение, а не WebXR.
  • Звук — цифровая интерпретация, не записи оригиналов.
  • Слабый свет, низкий FPS и перекрытие пальцев ухудшают распознавание.
  • Жетыген: касание определяется по позе пальцев (указательный — мизинец), а не по глубине, поэтому пороги подбирались на синтетических данных и могут требовать подстройки под конкретную камеру. Большой палец и вторая рука не учитываются; веб-камера над столом объективом вниз может показать струны зеркально.

источники

Иллюстрации нарисованы для проекта. Сторонние компоненты — THIRD_PARTY_NOTICES.md.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages