pasjonatprogramowania/stt-docker-watus

Python

0

1 commits

updated Sep 18, 2026

See the code

README

STT Arena — porównanie lokalnych modeli rozpoznawania mowy (STT) na języku polskim

Nagrałeś/wgrywasz audio i w jednym miejscu porównujesz transkrypcje 7 modeli ASR działających w 100% lokalnie (w kontenerach Docker/Linux, które na Windowsie działają przez WSL2).

Modele

ModelRozmiarJęzykiLicencjaSilnik
Faster-Whisper Medium~1.5 GB99 (w tym pl)MITCTranslate2
Faster-Whisper Small~0.5 GB99 (w tym pl)MITCTranslate2
Vosk small-pl~50 MBtylko plApache-2.0Vosk
Qwen3-ASR 0.6B~0.7 GB30 (w tym pl)Apache-2.0transformers 5.13+
NVIDIA Parakeet TDT 0.6B v3~1 GB25 języków UECC-BY-4.0NVIDIA NeMo (Linux)
NVIDIA Canary 1B v2~1.2 GB25 języków UECC-BY-4.0NVIDIA NeMo (Linux)
NVIDIA Nemotron 3.5 ASR 0.6B~1 GB40 locale (pl-PL)OpenMDW-1.1NVIDIA NeMo (Linux)

Wagi pobierane są do folderu models/ w projekcie (montowany wolumen ./models:/app/models).

Wymagania

  • Docker Desktop (Windows) z backendem WSL2 — sprawdzone: docker w wersji 29, docker compose v2
  • ~10 GB wolnego miejsca na modele + ~5 GB na obraz Dockera
  • Internet tylko przy pierwszej instalacji / pobieraniu modeli; potem wszystko offline

Komendy Docker (krok po kroku)

# 0. Docker Desktop musi byc uruchomiony; sprawdz silnik
docker version

# 1. Budowa obrazow (pierwszy raz ~10-20 min)
docker compose build

# 2. Pobranie wag modeli do .\models (jednorazowo, kilka GB)
docker compose run --rm download

# 3. Start serwisow
docker compose up -d

# 4. UI: http://localhost:5000

# 5. Test wszystkich modeli na polskiej probce TTS (wyniki na konsoli)
docker compose run --rm api python backend/selftest.py

# 6. Test na wlasnym pliku (wrzuc plik do .\models\audio\, np. test.mp3)
docker compose run --rm api python backend/selftest.py /app/models/audio/test.mp3
#    zapis wynikow do pliku:
docker compose run --rm api python backend/selftest.py /app/models/audio/test.mp3 > selftest.log 2>&1

# 7. Logi / zatrzymanie / restart
docker compose logs -f api
docker compose down
docker compose up -d          # po restarcie Dockera wystarczy to jedno

# 8. Test po wczytaniu zmienionego kodu backendu (przebudowa kontenera api)
docker compose build api
docker compose up -d

# 9. Czyszczenie od zera
docker compose down --rmi all
Remove-Item -Recurse -Force .\models   # usunie pobrane wagi

Uruchomienie (skrót przez skrypty)

.\setup.ps1   # buduje obrazy + pobiera modele (jednorazowo, kilka GB)
.\run.ps1     # startuje serwisy i otwiera http://localhost:5000
.\selftest.ps1 # uruchamia selftest na polskiej probce TTS

Następnie w przeglądarce:

  1. Nagraj przez mikrofon albo wgraj plik (mp3/wav/m4a/ogg/webm).
  2. Zaznacz modele do porównania (domyślnie wszystkie dostępne).
  3. Kliknij "Uruchom STT na zaznaczonych" — wyniki pojawią się obok siebie z czasem przetwarzania.

Przykładowa fragmentacja:

Architektura

  • api (port 5000) — Flask: serwuje UI, konwertuje audio ffmpeg → 16 kHz mono WAV, obsługuje whisper/vosk/qwen i proxy do serwisu NVIDIA.
  • nemo (port wewnętrzny 5001) — osobny kontener z NVIDIA NeMo (potrzebny, bo NeMo nie wspiera Windows natywnie; izolacja zależności torch/transformers) — parakeet/nemotron/canary.
  • download — jednorazowy kontener pobierający wagi do models/.

Skróty

  • GET /api/models — lista modeli + dostępność wag
  • POST /api/transcribe (multipart: file, models=JSON tablica id) — transkrypcja wszystkimi zaznaczonymi

Znane ograniczenia

  • NeMo działa na CPU — pierwsze ładowanie modelu (parakeet/canary/nemotron) trwa ~30-60 s, długi plik może przetwarzać się w minutach. GPU w Dockerze na Windowsie wymaga ręcznej konfiguracji NVIDIA Toolkit w WSL2.
  • ponytail: modele trzymane są w pamięci po pierwszym załadowaniu (brak ewikcji) — przy 7 wybranych modelach zajmie to ok. 4-6 GB RAM. Dodaj ewikcję LRU, jeśli użyjesz na dziesiątkach plików pod rząd.

pasjonatprogramowania/stt-docker-watus

Python

0

1 commits

updated Sep 18, 2026

See the code

README

STT Arena — porównanie lokalnych modeli rozpoznawania mowy (STT) na języku polskim

Nagrałeś/wgrywasz audio i w jednym miejscu porównujesz transkrypcje 7 modeli ASR działających w 100% lokalnie (w kontenerach Docker/Linux, które na Windowsie działają przez WSL2).

Modele

ModelRozmiarJęzykiLicencjaSilnik
Faster-Whisper Medium~1.5 GB99 (w tym pl)MITCTranslate2
Faster-Whisper Small~0.5 GB99 (w tym pl)MITCTranslate2
Vosk small-pl~50 MBtylko plApache-2.0Vosk
Qwen3-ASR 0.6B~0.7 GB30 (w tym pl)Apache-2.0transformers 5.13+
NVIDIA Parakeet TDT 0.6B v3~1 GB25 języków UECC-BY-4.0NVIDIA NeMo (Linux)
NVIDIA Canary 1B v2~1.2 GB25 języków UECC-BY-4.0NVIDIA NeMo (Linux)
NVIDIA Nemotron 3.5 ASR 0.6B~1 GB40 locale (pl-PL)OpenMDW-1.1NVIDIA NeMo (Linux)

Wagi pobierane są do folderu models/ w projekcie (montowany wolumen ./models:/app/models).

Wymagania

  • Docker Desktop (Windows) z backendem WSL2 — sprawdzone: docker w wersji 29, docker compose v2
  • ~10 GB wolnego miejsca na modele + ~5 GB na obraz Dockera
  • Internet tylko przy pierwszej instalacji / pobieraniu modeli; potem wszystko offline

Komendy Docker (krok po kroku)

# 0. Docker Desktop musi byc uruchomiony; sprawdz silnik
docker version

# 1. Budowa obrazow (pierwszy raz ~10-20 min)
docker compose build

# 2. Pobranie wag modeli do .\models (jednorazowo, kilka GB)
docker compose run --rm download

# 3. Start serwisow
docker compose up -d

# 4. UI: http://localhost:5000

# 5. Test wszystkich modeli na polskiej probce TTS (wyniki na konsoli)
docker compose run --rm api python backend/selftest.py

# 6. Test na wlasnym pliku (wrzuc plik do .\models\audio\, np. test.mp3)
docker compose run --rm api python backend/selftest.py /app/models/audio/test.mp3
#    zapis wynikow do pliku:
docker compose run --rm api python backend/selftest.py /app/models/audio/test.mp3 > selftest.log 2>&1

# 7. Logi / zatrzymanie / restart
docker compose logs -f api
docker compose down
docker compose up -d          # po restarcie Dockera wystarczy to jedno

# 8. Test po wczytaniu zmienionego kodu backendu (przebudowa kontenera api)
docker compose build api
docker compose up -d

# 9. Czyszczenie od zera
docker compose down --rmi all
Remove-Item -Recurse -Force .\models   # usunie pobrane wagi

Uruchomienie (skrót przez skrypty)

.\setup.ps1   # buduje obrazy + pobiera modele (jednorazowo, kilka GB)
.\run.ps1     # startuje serwisy i otwiera http://localhost:5000
.\selftest.ps1 # uruchamia selftest na polskiej probce TTS

Następnie w przeglądarce:

  1. Nagraj przez mikrofon albo wgraj plik (mp3/wav/m4a/ogg/webm).
  2. Zaznacz modele do porównania (domyślnie wszystkie dostępne).
  3. Kliknij "Uruchom STT na zaznaczonych" — wyniki pojawią się obok siebie z czasem przetwarzania.

Przykładowa fragmentacja:

Architektura

  • api (port 5000) — Flask: serwuje UI, konwertuje audio ffmpeg → 16 kHz mono WAV, obsługuje whisper/vosk/qwen i proxy do serwisu NVIDIA.
  • nemo (port wewnętrzny 5001) — osobny kontener z NVIDIA NeMo (potrzebny, bo NeMo nie wspiera Windows natywnie; izolacja zależności torch/transformers) — parakeet/nemotron/canary.
  • download — jednorazowy kontener pobierający wagi do models/.

Skróty

  • GET /api/models — lista modeli + dostępność wag
  • POST /api/transcribe (multipart: file, models=JSON tablica id) — transkrypcja wszystkimi zaznaczonymi

Znane ograniczenia

  • NeMo działa na CPU — pierwsze ładowanie modelu (parakeet/canary/nemotron) trwa ~30-60 s, długi plik może przetwarzać się w minutach. GPU w Dockerze na Windowsie wymaga ręcznej konfiguracji NVIDIA Toolkit w WSL2.
  • ponytail: modele trzymane są w pamięci po pierwszym załadowaniu (brak ewikcji) — przy 7 wybranych modelach zajmie to ok. 4-6 GB RAM. Dodaj ewikcję LRU, jeśli użyjesz na dziesiątkach plików pod rząd.