เริ่มต้น — Android
speech-android มอบการประมวลผลเสียงพูดแบบบนอุปกรณ์สำหรับ Android โดยใช้ ONNX Runtime ไปป์ไลน์รัน VAD + STT + TTS พร้อมรองรับการขัดจังหวะ (barge-in) ทำงานออฟไลน์อย่างสมบูรณ์หลังจากดาวน์โหลดโมเดลแล้ว
ข้อกำหนด
- Android 8+ (API 26)
- สถาปัตยกรรม arm64-v8a
ดาวน์โหลดแอปสาธิตที่สร้างไว้ล่วงหน้าเพื่อทดลองใช้ทันที:
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
ขั้นตอนถัดไป
- Benchmarks — ประสิทธิภาพการ inference บน Android
- Linux C API — การติดตั้งบน Linux แบบฝังตัว