Traduzione automatica · Originale inglese

Architettura — Android

speech-android è un sottile ponte Kotlin SDK + JNI sopra il speech-core Il motore C++.Tutta l'inferenza ML e l'orchestrazione delle tubazioni vivono in speech-core; speech-android gestisce solo l'imballaggio Android . Linux / automotive (Yocto, Qualcomm SA8295P/SA8255P con QNN) è ospitato direttamente in speech-core/examples/linux.

Stack

Il modello avvolge (Silero VAD, Parakeet STT, Kokoro TTS, DeepFilterNet3) implementare direttamente speech-core interfacce (VADInterface, STTInterface, TTSInterface, EnhancerInterface), così il ponte JNI li costruisce e le mani fanno riferimento a speech_core::VoicePipeline con nessun adattatore C-vtable piastra caldaia.

┌──────────────────────────────────────────────┐
│     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

La pipeline di discorso esegue tre fasi sequenziali: VAD → STT → TTS. Registrazione attività vocale attiva la registrazione, l'audio è trascritto da STT, e TTS genera la risposta. Il supporto barge-in consente di interrompere la riproduzione TTS quando l'utente inizia a parlare mid-response.

speech-core gestisce il rilevamento del turno, la gestione delle interruzioni e il contesto di conversazione. I wrapper del modello implementano le interfacce speech-core direttamente - nessun strato di adattatore C-vtable - rendendo altrettanto facile collegare gli backend non-ONNX (ad esempio le implementazioni CoreML / MLX in speech-swift) che si conformano alle stesse interfacce.

Modelli

Tutti i modelli utilizzano il formato ONNX con la quantizzazione INT8 come predefinito. I modelli sono ospitati su HuggingFace sotto soniqo org e scarico automatico sul primo utilizzo tramite ModelManager.kt.

ModelloCompitiQuantificazioneDimensione
Parakeet TDT v3STT (114 lingue, 8192 BPE vocab)INT8~ 891 MB
Kokoro-82MTTSINT8~ 330 MB
Pocket TTS 100M (opzionale)Streaming di testo-to-speech (Inglese, voce fissa Alba)dinamica INT8 + FP32120.3 MB
Silero VAD v5Rilevamento dell’attività vocalefloat32~ 2 MB
DeepFilterNet3Cancellazione del rumoreFP16~ 8 MB
Pocket TTS

Pocket TTS è un backend opzionale speech-core ONNX. Non è nell'attuale download predefinito speech-android o nella selezione del modello JNI; il cablaggio Kotlin SDK rimane il lavoro di follow-up.

Il download totale del modello è approssimativamente 1.2 GB . Dopo il download iniziale, tutta l'inferenza viene completamente offline.

Inferenza: OnnxEngine

L'involucro onnx_engine.h fornisce la selezione del fornitore di esecuzione (EP) di platform-aware.

PiattaformaChipsetAccelerazione
AndroidSnapdragon 8 Gen 1+NNAPI → Hexagon NPU
AndroidSamsung Exynos 2200+NNAPI → Samsung NPU
AndroidGoogle Tensor G2+NNAPI → Google TPU
Qualsiasi AndroidRimborso CPUXNNPACK

Per autoveicoli Qualcomm SA8295P / SA8255P con QNN (Hexagon DSP), vedi speech-core/examples/linux.

File chiave C++

FileOggetto
jni_bridge.cppCostruzioni speech_core::* modello wrapper e mani riferimenti a VoicePipeline
parakeet_stt.cppSTT con decoder avido TDT e normalizzazione mel per la temperatura
kokoro_tts.cppTTS con il modello E2E e la maschera di attenzione
kokoro_phonemizer.cppfonemizzatore a base di dizionario per TTS
silero_vad.cppRilevamento delle attività vocali
deepfilter.cppCancellazione del rumore con trattamento STFT/ERB
onnx_engine.hPiattaforma-aware ONNX Runtime wrapper (NNAPI su Android, QNN su Linux, CPU

Il modello avvolge e onnx_engine.h si è spostato in speech-core nel refattore di estrazione del modello; cfr. docs/models.md per l'inventario completo.

Struttura della fonte

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/

Codice sorgente: github.com / soniqo / speech-android