เริ่มต้น — Android

speech-android มอบการประมวลผลเสียงพูดแบบบนอุปกรณ์สำหรับ Android โดยใช้ ONNX Runtime ไปป์ไลน์รัน VAD + STT + TTS พร้อมรองรับการขัดจังหวะ (barge-in) ทำงานออฟไลน์อย่างสมบูรณ์หลังจากดาวน์โหลดโมเดลแล้ว

ข้อกำหนด

ดาวน์โหลดแอปสาธิตที่สร้างไว้ล่วงหน้าเพื่อทดลองใช้ทันที:

Gradle Dependency

เพิ่ม 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) หลังจากการดาวน์โหลดครั้งแรก การ inference ทั้งหมดทำงานออฟไลน์อย่างสมบูรณ์

การตรวจจับจบเทิร์น

เปิดใช้ 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,
    )
)

ฟีเจอร์แบบเลือกใช้นี้เพิ่มโมเดล int8 ขนาด 11.1 MB ที่ตรึงเวอร์ชันไว้หนึ่งโมเดล และการ inference ยังคงออฟไลน์ทั้งหมด Smart Turn สร้างโดย Pipecat/Daily และเผยแพร่ภายใต้ BSD-2-Clause

การป้อนเสียงของระบบ (RecognitionService)

SDK มาพร้อม SpeechRecognitionService สำเร็จรูปที่เสียบเข้ากับ API SpeechRecognizer ของ framework Android โดยตรง — ไม่ต้องเขียนโค้ดเพิ่ม เมื่อแอปของคุณถูกเลือกเป็นตัวรู้จำเสียงเริ่มต้น แอปบุคคลที่สามใดที่เรียก SpeechRecognizer.createSpeechRecognizer(context) (โดยไม่มี ComponentName) จะได้รับ STT แบบบนอุปกรณ์ทั้งหมดผ่านไปป์ไลน์ของคุณ

1. ประกาศ RECORD_AUDIO และ service ใน 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. ตั้ง service เป็นค่าเริ่มต้นของระบบ (Settings → System → Languages & input → Voice input picker บน Android สต็อก หรือผ่าน adb):

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

4. ตรวจสอบโดยเปิดหน้าจอ Recognizer test ในแอปสาธิต ซึ่งเรียก SpeechRecognizer.createSpeechRecognizer(ctx) (โดยไม่มี component) และบันทึก callback ทุกอันของ framework — มีประโยชน์ในการยืนยัน round-trip ผ่าน binder โดยไม่ต้องใช้ logcat

Service ใช้งาน onCheckRecognitionSupport (API 33+) คืนค่า 27 ภาษา BCP-47 ที่ Parakeet TDT v3 รองรับ ทำเครื่องหมายเป็น installedOnDeviceLanguage เมื่อโมเดลพร้อมใช้ (หรือ pendingOnDeviceLanguage ขณะที่กำลังดาวน์โหลด) โฟกัสเสียงถูกขอด้วย AUDIOFOCUS_GAIN_TRANSIENT ตลอดช่วงเวลาของเซสชัน

หมายเหตุ

Gboard, Samsung Keyboard และ Google Assistant มาพร้อมตัวรู้จำของตัวเองและข้ามค่าเริ่มต้นของระบบ แอปที่เรียก API SpeechRecognizer ของ framework โดยตรง (หรือสร้าง UI ของตัวเองบนนั้น) คือแอปที่ส่งผ่าน service ของคุณ

โมเดล

โมเดลทั้งหมดทำงานผ่าน ONNX Runtime พร้อมการเร่งความเร็วด้วย NNAPI ใช้การ quantize แบบ INT8 เป็นค่าเริ่มต้น

โมเดลงานขนาด
Parakeet TDT v3 (INT8)เสียงพูดเป็นข้อความ (114 ภาษา)891 MB
Kokoro-82M (INT8)ข้อความเป็นเสียงพูด (8 ภาษา)330 MB
Silero VAD v5การตรวจจับกิจกรรมเสียงพูด2 MB
DeepFilterNet3การตัดเสียงรบกวน8 MB

ซอร์สโค้ด: github.com/soniqo/speech-android

ขั้นตอนถัดไป