תרגום מכונה · המקור באנגלית

להתחיל - Android

speech-android מספק עיבוד דיבור על שכפול עבור Android באמצעות ONNX Runtime. הצינור פועל VAD + STT + TTS עם תמיכה ב- barge-in, באופן לא מקוון לחלוטין לאחר ההורדה.

דרישות דרישות

הורד את אפליקציית ההדגמה שנבנתה מראש כדי לנסות את זה מיד:

תלות מוגברת

הוסף את SDK שלך build.gradle.kts:

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

התחלה מהירה

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
חשוב

מודל ברירת המחדל אוטומטי הורד מ HuggingFace על השימוש הראשון (500 MB סה"כ) לאחר ההורדה הראשונית, כל ההקצאה פועלת באופן מלא לא מקוון.

גילוי סוף-החזרה

ניתן Smart Turn v3.2 כאשר VAD הפסקה צריך להיות מטופל כמו שאלה ולא נקודת קצה מיידית.זה מעלה את שמונה השניות האחרונות של התור הנוכחי פעם לאחר כל הפסקה אישרה; ציון מתחת לסף ממשיך את אותו תור פתוח, בעוד הכניעה המקסימלית מבטיחה בסופו של דבר קצה.

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

ה- Opt-in מוסיף מודל 11.1 MB int8; השוויון נשאר לגמרי לא מקוון. Smart Turn נוצר על ידי Pipecat/Daily והוא מחולק תחת BSD-2-Clause

מערכת Voice Input (Recognition Service)

SDK מטביעה מוכנה SpeechRecognitionService זה מתחבר למסגרת של Android SpeechRecognizer API - שום קוד לכתוב ברגע שהאפליקציית שלך נבחרת כזיהוי קול ברירת המחדל, כל אפליקציה של צד שלישי הקוראת SpeechRecognizer.createSpeechRecognizer(context) (עם לא ComponentName(הופנה מהדף STT דרך הצינור שלך)

1. Declare RECORD_AUDIO והשירות ב 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. הוסף 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. הגדר את השירות כמו ברירת מחדל המערכת (Settings) מערכת שפה & קלט פנקס קלט קול על מלאי Android, או באמצעות adb):

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

4. לבדוק על ידי הפעלת מבחן Recognizer Test מסך, אשר קורא SpeechRecognizer.createSpeechRecognizer(ctx)

הטמעת השירות onCheckRecognitionSupport (API 33+בחזרה את 27 BCP-47 שפות Parakeet TDT v3 כיסויים, מסומן installedOnDeviceLanguage פעם יש מודלים (או pendingOnDeviceLanguage בזמן שהם מורידים את תשומת הלב של Audio Focus נרכשת עם AUDIOFOCUS_GAIN_TRANSIENT למשך תקופת ישיבה.

Caveat

Gboard, Samsung Keyboard, ו-Google Assistant מפצירים את המזהים שלהם ומדלפקים את המערכת כברירת מחדל. Apps שמכנים במפורש את המסגרת SpeechRecognizer API (או בונים את UI שלהם על גבי זה) הם אלה שזרמו באמצעות השירות שלך.

מודלים

כל המודלים רצים באמצעות ONNX Runtime עם האצה NNAPI. INT8 המוגדרת כברירת מחדל.

מודל מודלמשימותגודל
Parakeet TDT v3 (INT8)דיבור אל-טקסט (114 שפות)891 MB
Kokoro-82M (INT8)טקסט-to-Speech (8 שפות)330 MB
Silero VAD v5זיהוי פעילות קולית2 MB
DeepFilterNet3ביטול רעש8 MB

קוד מקור: github.com/soniqo/speech-android

צעדים הבאים