Tłumaczenie automatyczne · Oryginał angielski
Architektura - Android
speech-android jest cienkim Kotlin SDK + JNI most nad speech-core Silnik C++. Cała formacja ML i gazociąg na żywo w speech-core; speech-android obsługuje tylko opakowanie Android, a Linux - bezpośrednio w samochodach (Yocto, Qualcomm SA8295P / SA8255P). speech-core / przykłady / linux.
Stack
Opakowania modelu (Silero VAD, Parakeet STT, Kokoro TTS, DeepFilterNet3) bezpośrednio wdrożyć speech-core interfejsy (VADInterface, STTInterface, TTSInterface, EnhancerInterface), więc most JNI buduje je i ręce odniesienia do speech_core::VoicePipeline bez adaptera C- vtable.
┌──────────────────────────────────────────────┐
│ SpeechPipeline (Kotlin public API) │
│ ↓ JNI │
│ jni_bridge.cpp (~250 lines) │
└──────────────────┬───────────────────────────┘
│
┌──────────────────┴───────────────────────────┐
│ speech_core_models (git submodule) │
│ Silero / Parakeet / Kokoro / DeepFilter │
│ speech_core │
│ Turn detection · Interruptions · Context │
└──┬────────┬────────┬────────┬────────────────┘
│ │ │ │ direct interface impl
┌──┴──┐ ┌──┴──┐ ┌──┴──┐ ┌─┴────────┐
│ VAD │ │ STT │ │ TTS │ │ Enhancer │
└──┬──┘ └──┬──┘ └──┬──┘ └─┬────────┘
└────────┴────────┴────────┘
ONNX Runtime (CPU / NNAPI)Pipeline
Gazociąg mowy przebiega kolejno w trzech etapach: VAD → STT → TTS. Wykrywanie aktywności głosowej uruchamia nagrywanie, audio jest zapisywane przez STT, a TTS generuje odpowiedź. Barge- in support pozwala przerwać odtwarzanie TTS, gdy użytkownik zaczyna mówić po średniej odpowiedzi.
speech-core zarządza wykrywaniem skrętu, przerywaniem obsługi i kontekstem rozmowy. Opakowania modelu implementują bezpośrednio interfejsy speech-core - bez warstwy adaptera C- vtable - co sprawia, że równie łatwo podłączyć inne niż-ONNX (np. implementacje CoreML / MLX w speech-swift) które odpowiadają tym samym interfejsom.
Modele
Wszystkie modele używają formatu ONNX z kwantyzacją INT8 jako domyślną. Modele są hostowane na HuggingFace pod soniqo org i auto- download przy pierwszym użyciu poprzez ModelManager.kt.
| Wzór | Zadanie | Ilościowanie | Rozmiar |
|---|---|---|---|
| Parakeet TDT v3 | STT (114 languages, 8192 BPE vocab) | INT8 | - 891 MB |
| Kokoro-82M | TTS | INT8 | - 330 MB |
| Pocket TTS 100M (nieobowiązkowo) | Streaming text- to- mowy (angielski, stały głos Alba) | dynamiczny INT8 + FP32 | 120,3 MB |
| Silero VAD v5 | Wykrywanie aktywności głosowej | float32 | ~ 2 MB |
| DeepFilterNet3 | Anulowanie hałasu | FP16 | ~ 8 MB |
Pocket TTS jest opcjonalnym backendem speech-core ONNX. Nie znajduje się on w aktualnym domyślnym pobraniu speech-android ani w wyborze modelu JNI; okablowanie Kotlin SDK pozostaje kontynuacją.
Całkowity model do pobrania jest około 1.2 GB. Po wstępnym pobraniu, wszystkie wnioski są w pełni wyłączone.
Wniosek: OnnxEngine
W onnx_engine.h wrapper zapewnia wybór dostawcy wykonań (EP) na platformów- świadomej platformówce. Sonda umożliwia EPs w czasie biegu i wraca z wdziękiem:
| Platforma | Chipset | Przyspieszenie |
|---|---|---|
| Android | Dragon 8 Gen 1 + | NNAPI → Sześciokąt NPU |
| Android | Samsung Exynos 2200 + | NNAPI → Samsung NPU |
| Android | Google Tensor G2 | NNAPI → Google TPU |
| Każdy Android | Opadek CPU | XNNPACK |
Dla samochodów Qualcomm SA8295P / SA8255P z QNN (Heksagon DSP), patrz: speech-core / przykłady / linux.
Klucz Pliki C++
| Plik | Cel |
|---|---|
jni_bridge.cpp | Konstrukcje speech_core::* opakowania modelu i odniesienia do rąk VoicePipeline |
parakeet_stt.cpp | STT z łakomym dekoderem TDT i perfekcyjną normalizacją młową |
kokoro_tts.cpp | TTS z modelem E2E i maską uwagi |
kokoro_phonemizer.cpp | Dictionary- based phonemizer for TTS input |
silero_vad.cpp | Wykrywanie aktywności głosu |
deepfilter.cpp | Anulowanie hałasu przy przetwarzaniu STFT / ERB |
onnx_engine.h | Platform- aware ONNX Runtime w opakowaniu (NNAPI na Android, QNN on Linux, CPU omdlenia) |
Opakowania modelu i onnx_engine.h przemieszczenie do speech-core w refaktorze ekstrakcji modeli; patrz docs / models.md dla pełnego inwentarza.
Struktura źródła
speech-android/
speech-core/ C++ engine + ONNX model wrappers (git submodule)
sdk/src/main/
cpp/jni_bridge.cpp Thin JNI bridge over speech_core::VoicePipeline
cpp/CMakeLists.txt Pulls speech-core via add_subdirectory(SPEECH_CORE_WITH_ONNX=ON)
kotlin/.../speech/ Kotlin public SDK (SpeechPipeline, ModelManager)
sdk/src/androidTest/ Instrumented e2e tests
app/ Demo application
Linux / automotive (C ABI, ALSA demo, CLI tools) lives at:
speech-core/examples/linux/Kod źródła: github.com /soniqo/speech-android