GenAI Speech Recognition API

ภายใน ML Kit's GenAI Speech Recognition API คุณสามารถถอดเสียงเป็นข้อความได้ API นี้รองรับโหมดต่อไปนี้

  • พื้นฐาน: Speech Recognition API ใช้โมเดลการจดจำเสียงพูดแบบเดิมในอุปกรณ์ ซึ่งคล้ายกับ SpeechRecognizer API
    • พร้อมให้บริการโดยทั่วไปในอุปกรณ์ Android ส่วนใหญ่ที่มีระดับ API 31 ขึ้นไป
  • ขั้นสูง: Speech Recognition API ใช้โมเดล GenAI ซึ่งให้ การครอบคลุมภาษาที่กว้างขึ้นและคุณภาพโดยรวมที่ดีขึ้น
    • พร้อมใช้งานในอุปกรณ์ Pixel 10 และเรากำลังพัฒนาให้พร้อมใช้งานในอุปกรณ์อื่นๆ

ความสามารถหลัก

  • บันทึกอินพุตการสตรีมจากไมโครโฟนหรือไฟล์เสียง
  • ข้อความที่ถอดเสียงจะแสดงเป็นสตรีมต่อเนื่อง ซึ่งในตอนแรกอาจเป็นเพียงบางส่วน (และอาจมีการเปลี่ยนแปลง) ก่อนที่จะกลายเป็นเนื้อหาสุดท้าย

ตัวอย่างผลการแข่ง

เสียง โหมด ภาษา การถอดเสียงเป็นคำ
audio_1 พื้นฐาน en-US "This is a short message"
audio_2 ขั้นสูง es-ES "Este es un mensaje corto."

การเปรียบเทียบกับแพลตฟอร์ม Speech Recognition API

เมื่อใช้โหมดพื้นฐาน ML Kit Speech Recognition API จะมีฟังก์ชันการทำงานหลักที่คล้ายกับแพลตฟอร์ม Speech Recognition API ข้อได้เปรียบที่สำคัญของ ML Kit คือการรองรับแพลตฟอร์ม Android เวอร์ชันที่หลากหลายกว่า โดยกำหนดให้ใช้ระดับ API 31 ขึ้นไป ซึ่งกว้างกว่า API ของแพลตฟอร์มบางรายการ

นอกจากนี้ ML Kit Speech Recognition API ยังใช้โมเดล Gemini ในอุปกรณ์ในโหมดขั้นสูง ซึ่งให้การครอบคลุมภาษาที่กว้างขึ้น

เริ่มต้นใช้งาน

เพิ่ม ML Kit Speech Recognition API เป็นการขึ้นต่อกันในการกำหนดค่า build.gradle

implementation("com.google.mlkit:genai-speech-recognition:1.0.0-alpha1")

หากต้องการผสานรวม Speech Recognition API เข้ากับแอป ให้สร้างไคลเอ็นต์ SpeechRecognizer ตรวจสอบสถานะของฟีเจอร์โมเดลที่จำเป็นบนอุปกรณ์และดาวน์โหลดโมเดลหากยังไม่ได้อยู่ในอุปกรณ์ หลังจาก เตรียมอินพุตเสียงใน SpeechRecognizerRequest แล้ว ให้เรียกใช้การอนุมานโดยใช้ ไคลเอ็นต์เพื่อรับเอาต์พุตการสตรีมจาก โฟลว์ Kotlin สุดท้ายนี้ อย่าลืมปิดไคลเอ็นต์เพื่อปล่อยทรัพยากร

// 1. Create a SpeechRecognizer with desired options.
val options: SpeechRecognizerOptions =
    speechRecognizerOptions {
        locale = Locale.US
        preferredMode = SpeechRecognizerOptions.Mode.MODE_ADVANCED
    }
val speechRecognizer: SpeechRecognizer = SpeechRecognition.getClient(options)

// 2. Check if the recognition model is available or needs downloading.
launch {
    val status: Int = speechRecognizer.checkStatus()
    if (status == FeatureStatus.DOWNLOADABLE) {
        // 3. If needed, download the model and monitor progress.
        speechRecognizer.download.collect { downloadStatus ->
            when (downloadStatus) {
                is DownloadStatus.DownloadCompleted -> {
                    // Model is ready, start recognition.
                    startMyRecognition(speechRecognizer)
                }
                is DownloadStatus.DownloadFailed -> {
                    // Handle download failure (e.g., inform the user).
                }
                is DownloadStatus.DownloadProgress -> {
                    // Handle download progress (e.g., update a progress bar).
                }
            }
        }
    } else if (status == FeatureStatus.AVAILABLE) {
        // Model is already ready, start recognition immediately.
        startMyRecognition(speechRecognizer)
    } else {
        // Handle other statuses (e.g., DOWNLOADING, UNAVAILABLE).
    }
}

// 4. Define your recognition logic using a suspend function.
suspend fun startMyRecognition(recognizer: SpeechRecognizer) {
    // Create a request (e.g., specifying audio source).
    val request: SpeechRecognizerRequest
        = speechRecognizerRequest { audioSource = AudioSource.fromMic() }
    // Start recognition and process the continuous stream of responses.
    recognizer.startRecognition(request).collect {
        // Process the SpeechRecognitionResponse data here.
    }
}

// 5. Stop recognition and clean up resources when the session is complete.
launch {
    recognizer.stopRecognition()
    recognizer.close()
}

ข้อกำหนดของอินพุตเสียง

GenAI Speech Recognition API รองรับอินพุตจากไมโครโฟนหรือแหล่งที่มาที่กำหนดเองผ่านตัวอธิบายไฟล์

หากคุณใช้ AudioSource.fromPfd(parcelFileDescriptor) เสียงอินพุตต้องเป็นไปตามข้อกำหนดที่เข้มงวดต่อไปนี้

  • รูปแบบ: Raw, headerless 16-bit PCM
  • ช่อง: โมโน (ช่องเดียว)
  • อัตราการสุ่มตัวอย่าง: 16 kHz

สำหรับ Use Case ส่วนใหญ่ เราขอแนะนำให้ใช้ AudioSource.fromMic() เนื่องจากจะจัดการข้อจำกัดเหล่านี้โดยอัตโนมัติ

ภาษาและอุปกรณ์ที่รองรับ

โหมด ภาษา
พื้นฐาน en-US, fr-FR (เบต้า), it-IT (เบต้า), de-DE (เบต้า), es-ES (เบต้า), hi-IN (เบต้า), ja-JP (เบต้า), pt-BR (เบต้า), tr-TR (เบต้า), pl-PL (เบต้า), cmn-Hans-CN (เบต้า), ko-KR (เบต้า), cmn-Hant-TW (เบต้า), ru-RU (เบต้า), vi-VN (เบต้า)
ขั้นสูง ภาษาที่มีความแม่นยำสูงโดยทั่วไป ได้แก่: en-US, ko-KR, es-ES, fr-FR, de-DE, it-IT, pt-PT, cmn-Hans-CN, cmn-Hant-TW, ja-JP, th-TH, ru-RU, nl-NL (เบต้า), da-DK (เบต้า), sv-SE (เบต้า), pl-PL (เบต้า), hi-IN (เบต้า), vi-VN (เบต้า), id-ID (เบต้า), ar-SA (เบต้า), tr-TR (เบต้า)

อุปกรณ์ที่รองรับ

โหมด อุปกรณ์ที่รองรับ
พื้นฐาน อุปกรณ์ Android ที่ใช้ระดับ API 31 ขึ้นไป
ขั้นสูง Pixel 10

ปัญหาการตั้งค่าที่พบบ่อย

ML Kit GenAI API อาศัยแอป Android AICore ในการเข้าถึง Gemini Nano เมื่อเพิ่งตั้งค่าอุปกรณ์ (รวมถึงการรีเซ็ต) หรือเพิ่งรีเซ็ตแอป AICore (เช่น ล้างข้อมูล ถอนการติดตั้งแล้วติดตั้งใหม่) แอป AICore อาจมีเวลาไม่พอที่จะทำการเริ่มต้นให้เสร็จสมบูรณ์ (รวมถึงการดาวน์โหลดการกำหนดค่าล่าสุดจากเซิร์ฟเวอร์) ด้วยเหตุนี้ ML Kit GenAI API จึงอาจทำงานไม่เป็นไปตามที่คาดไว้ ข้อความแสดงข้อผิดพลาดในการตั้งค่าที่พบบ่อยที่คุณอาจเห็นและวิธีจัดการมีดังนี้

ตัวอย่างข้อความแสดงข้อผิดพลาด วิธีจัดการ
AICore ล้มเหลวโดยมีข้อผิดพลาดประเภท 4-CONNECTION_ERROR และรหัสข้อผิดพลาด 601-BINDING_FAILURE: บริการ AICore ผูกไม่สำเร็จ ข้อผิดพลาดนี้อาจเกิดขึ้นเมื่อคุณติดตั้งแอปโดยใช้ ML Kit GenAI API ทันทีหลังจากตั้งค่าอุปกรณ์ หรือเมื่อถอนการติดตั้ง AICore หลังจากติดตั้งแอปแล้ว การอัปเดตแอป AICore แล้วติดตั้งแอปของคุณอีกครั้งน่าจะช่วยแก้ไขปัญหาได้
AICore ล้มเหลวโดยมีข้อผิดพลาดประเภท 3-PREPARATION_ERROR และรหัสข้อผิดพลาด 606-FEATURE_NOT_FOUND: ฟีเจอร์ ... ไม่พร้อมใช้งาน ข้อผิดพลาดนี้อาจเกิดขึ้นเมื่อ AICore ดาวน์โหลดการกำหนดค่าล่าสุดไม่เสร็จ เมื่ออุปกรณ์เชื่อมต่อกับอินเทอร์เน็ต โดยปกติแล้วระบบจะใช้เวลา 2-3 นาทีถึง 2-3 ชั่วโมงในการอัปเดต การรีสตาร์ทอุปกรณ์จะช่วยเร่งการอัปเดตได้

โปรดทราบว่าหาก Bootloader ของอุปกรณ์ปลดล็อกอยู่ คุณจะเห็นข้อผิดพลาดนี้ด้วย เนื่องจาก API นี้ไม่รองรับอุปกรณ์ที่มี Bootloader ที่ปลดล็อก
AICore ล้มเหลวโดยมีข้อผิดพลาดประเภท 1-DOWNLOAD_ERROR และรหัสข้อผิดพลาด 0-UNKNOWN: ฟีเจอร์ ... ล้มเหลวโดยมีสถานะความล้มเหลว 0 และข้อผิดพลาด esz: UNAVAILABLE: แก้ไขโฮสต์ ... ไม่ได้ เชื่อมต่อเครือข่ายไว้ รอสักครู่ แล้วลองอีกครั้ง

โค้ดตัวอย่าง

  • สำรวจตัวอย่างโค้ด ML Kit Speech Recognition API บน GitHub