Traduzione automatica · Originale inglese

Iniziare — Android

speech-android fornisce un'elaborazione vocale on-device per Android utilizzando ONNX Runtime. La pipeline funziona VAD + STT + TTS con supporto per barge-in, completamente offline dopo il download del modello.

Requisiti

Scarica l'app demo pre-costruita per provarla immediatamente:

Dipendenza del grado

Aggiungi il SDK al tuo build.gradle.kts:

implementation("audio.soniqo:speech:0.0.20")

Avvio rapido

val modelDir = ModelManager.ensureModels(context)
val pipeline = SpeechPipeline(SpeechConfig(modelDir = modelDir))
pipeline.events.collect { event ->
    when (event) {
        is SpeechEvent.TranscriptionCompleted -> println(event.text)
        is SpeechEvent.ResponseDone -> pipeline.resumeListening()
        else -> {}
    }
}
pipeline.start()
pipeline.pushAudio(samples) // 16kHz mono float32
Importante

I modelli predefiniti auto-download da HuggingFace sul primo utilizzo (~500 MB totale). Dopo il download iniziale, tutte le inferenze vengono completamente offline.

Rilevamento di fine turno

Abilita Smart Turn v3.2 quando una pausa VAD dovrebbe essere trattata come una domanda piuttosto che un punto finale immediato; segna gli ultimi otto secondi del giro corrente una volta dopo ogni pausa confermata; un punteggio sotto la soglia mantiene la stessa svolta aperta, mentre il tappo di massima silenzio garantisce un eventuale punto di fine.

val modelDir = ModelManager.ensureModels(context, enableSmartTurn = true)
val pipeline = SpeechPipeline(
    SpeechConfig(
        modelDir = modelDir,
        enableSmartTurn = true,
        turnCompletionThreshold = 0.5f,
        turnCompletionMaxSilenceSec = 2.0f,
    )
)

Questo opt-in aggiunge un modello 11.1 MB int8 pinned; l'inferenza rimane completamente offline. Smart Turn è stato creato da Pipecat/Daily ed è distribuito sotto BSD-2-Clause.

Input vocale di sistema (RecognitionService)

La SDK spedisce un ready-made SpeechRecognitionService che si inserisce nel quadro di Android SpeechRecognizer API — nessun codice da scrivere. Una volta che l'app è selezionata come il riconoscimento vocale predefinito, qualsiasi app di terze parti chiama SpeechRecognizer.createSpeechRecognizer(context) (con il no) ComponentName) ottiene completamente on-device STT attraverso la vostra pipeline.

1. Discussione RECORD_AUDIO e servizio in AndroidManifest.xml

<uses-permission android:name="android.permission.RECORD_AUDIO" />

<application>
    <service
        android:name="audio.soniqo.speech.service.SpeechRecognitionService"
        android:exported="true"
        android:permission="android.permission.RECORD_AUDIO">
        <intent-filter>
            <action android:name="android.speech.RecognitionService" />
        </intent-filter>
        <meta-data
            android:name="android.speech"
            android:resource="@xml/recognition_service" />
    </service>
</application>

2. Aggiungi app/src/main/res/xml/recognition_service.xml

<?xml version="1.0" encoding="utf-8"?>
<recognition-service xmlns:android="http://schemas.android.com/apk/res/android" />

3. Impostare il servizio come impostazione predefinita del sistema (Impostazioni → Sistema → Lingue e input → Presa vocale su stock Android, o tramite adb):

adb shell settings put secure voice_recognition_service \
  your.package/audio.soniqo.speech.service.SpeechRecognitionService

4. Verificare eseguendo la schermata Recognizer test , che chiama SpeechRecognizer.createSpeechRecognizer(ctx) (nessun componente) e registra ogni callback quadro — utile per confermare il round-trip del legante senza bisogno di logcat.

Il servizio implementa onCheckRecognitionSupport (API 33+) riportando le cover 27 BCP-47 delle lingue Parakeet TDT v3 marcate installedOnDeviceLanguage una volta che i modelli sono presenti (o pendingOnDeviceLanguage mentre stanno scaricando). L'attenzione audio viene acquisita con AUDIOFOCUS_GAIN_TRANSIENT per la durata di una sessione.

Caveat

Gboard, Samsung Keyboard, e Google Assistant raggruppano i propri riconosciutori e saltano il default del sistema. Le app che chiamano esplicitamente il framework SpeechRecognizer API (o costruiscono il proprio UI sopra di esso) sono quelle che fluiscono attraverso il vostro servizio.

Modelli

Tutti i modelli vengono eseguiti tramite ONNX Runtime con l'accelerazione NNAPI. INT8 quantizzata per impostazione predefinita.

ModelloCompitiDimensione
Parakeet TDT v3 ( INT8)Discorso al testo (114 lingue)891 MB
Kokoro-82M (INT8)Testo a velocità (8 lingue)330 MB
Silero VAD v5Rilevamento dell’attività vocale2 MB
DeepFilterNet3Cancellazione del rumore8 MB

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

Prossimo passo