Trong API Nhận dạng lời nói GenAI của Bộ công cụ học máy, bạn có thể chép lời nội dung âm thanh thành văn bản. API này hỗ trợ các chế độ sau:
- Nâng cao: Speech Recognition API sử dụng mô hình AI tạo sinh, mang lại phạm vi ngôn ngữ rộng hơn và chất lượng tổng thể tốt hơn. Bạn không cần phải tải một gói ngôn ngữ riêng cho từng ngôn ngữ, nhờ đó tiết kiệm được dung lượng lưu trữ.
- Cơ bản: API Nhận dạng lời nói sử dụng mô hình nhận dạng lời nói truyền thống trên thiết bị, tương tự như API SpeechRecognizer.
API Nhận dạng lời nói sẽ chép lời nội dung âm thanh thành văn bản bằng cùng một ngôn ngữ. Để chép lời âm thanh thành văn bản bằng một ngôn ngữ khác, hãy sử dụng Speech Translation API.
Các chức năng chính
- Ghi lại dữ liệu đầu vào trực tuyến từ micrô hoặc tệp âm thanh.
- Chép lời toàn bộ tệp được ghi trước bằng phương thức
AudioSource.fromFile()hoặcAudioSource.fromUri(). Để biết thông tin chi tiết, hãy xem phần Yêu cầu về đầu vào âm thanh. - Đối với dữ liệu đầu vào trực tuyến, tính năng này cung cấp thời gian bắt đầu chính xác của từng từ được nhận dạng để giúp bạn đồng bộ hoá ảnh động trên giao diện người dùng, tạo phụ đề hoặc làm nổi bật các từ khi chúng được nói. Thời gian bắt đầu (tính bằng mili giây) của mỗi từ được nhận dạng là độ lệch so với thời điểm bắt đầu sự kiện, tức là dấu thời gian 0.
- Văn bản được chép lại được cung cấp dưới dạng một luồng liên tục, ban đầu có thể là một phần (và có thể thay đổi) trước khi trở thành văn bản được nhận dạng cuối cùng.
Kết quả mẫu
| Âm thanh | Chế độ | Ngôn ngữ | Bản chép lời |
|---|---|---|---|
| audio_2 | Nâng cao | es-ES | "Este es un mensaje corto." |
| audio_1 | Cơ bản | en-US | "Đây là một tin nhắn ngắn" |
So sánh với API Nhận dạng lời nói của nền tảng
API Nhận dạng lời nói của Bộ công cụ học máy bao gồm chức năng cơ bản của API SpeechRecognizer của nền tảng khi sử dụng Chế độ cơ bản. Một lợi thế chính của Bộ công cụ học máy là không bị ràng buộc với một phiên bản nền tảng cụ thể.
Ngoài ra, API Nhận dạng lời nói của Bộ công cụ học máy còn hỗ trợ nhận dạng lời nói bằng mô hình Gemini trên thiết bị khi sử dụng Chế độ nâng cao, giúp mở rộng phạm vi ngôn ngữ.
Bắt đầu
Thêm API Nhận dạng lời nói của Bộ công cụ học máy làm phần phụ thuộc trong cấu hình build.gradle:
implementation("com.google.mlkit:genai-speech-recognition:1.0.0-alpha1")
Để tích hợp API Nhận dạng lời nói vào ứng dụng, hãy tạo một ứng dụng SpeechRecognizer. Kiểm tra trạng thái của các tính năng cần thiết của mô hình trên thiết bị và tải mô hình xuống nếu mô hình chưa có trên thiết bị. Sau khi
chuẩn bị dữ liệu âm thanh đầu vào trong SpeechRecognizerRequest, hãy chạy quy trình suy luận bằng
ứng dụng để nhận kết quả truyền trực tuyến từ luồng Kotlin. Cuối cùng, hãy nhớ đóng ứng dụng để giải phóng tài nguyên.
// 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()
}
Yêu cầu về đầu vào âm thanh
API Nhận dạng lời nói GenAI hỗ trợ dữ liệu đầu vào từ micrô hoặc một nguồn tuỳ chỉnh thông qua chỉ số mô tả tệp.
Nếu bạn sử dụng AudioSource.fromPfd(parcelFileDescriptor), thì âm thanh đầu vào phải đáp ứng các yêu cầu nghiêm ngặt sau:
- Định dạng: PCM 16 bit thô, không có tiêu đề.
- Kênh: Đơn âm (một kênh).
- Tốc độ lấy mẫu: 16 kHz.
Đối với hầu hết các trường hợp sử dụng, bạn nên dùng AudioSource.fromMic() vì lớp này tự động xử lý các quy tắc ràng buộc này.
Các định dạng đầu vào âm thanh được hỗ trợ
API Nhận dạng lời nói hỗ trợ các định dạng đầu vào âm thanh sau:
- Các tệp MP3, WAV, FLAC, M4A và OGG được giải mã tự động trên thiết bị.
- Âm thanh thô, không có tiêu đề (
.rawhoặc.pcm) phải ở định dạng PCM 16 bit, 16 kHz, đơn âm.
Nếu định dạng không hợp lệ hoặc không được hỗ trợ, thì giá trị ErrorResponse sẽ được trả về khi quá trình nhận dạng bắt đầu.
Triển khai Speech Recognition API
Sau đây là cách sử dụng API Nhận dạng lời nói để chép lời âm thanh và sử dụng thời gian của từ.
Chép lời âm thanh
API Nhận dạng lời nói hỗ trợ đầu vào âm thanh từ micrô của thiết bị, tệp được ghi sẵn hoặc quy trình tuỳ chỉnh bằng đối tượng ParcelFileDescriptor.
Để chuẩn bị dữ liệu âm thanh, hãy tạo một đối tượng AudioSource bằng một trong các phương thức nhà máy được liệt kê trong bảng sau:
| Phương thức | Chế độ âm thanh | Trường hợp sử dụng đề xuất |
|---|---|---|
AudioSource.fromMic() |
STREAMING |
Ghi lại dữ liệu đầu vào bằng giọng nói trực tiếp của người dùng. Yêu cầu quyền RECORD_AUDIO.
|
AudioSource.fromFile(file)AudioSource.fromUri(context, uri)
|
ONE_SHOT |
Chép lời các tệp âm thanh được ghi sẵn. Tự động giải mã các định dạng tệp tiêu chuẩn ngay trên thiết bị. |
AudioSource.fromPfd(pfd, mode)AudioSource.fromPfd(pfd, mode, audioFormat)
|
STREAMING hoặc ONE_SHOT |
Quy trình âm thanh tuỳ chỉnh (chẳng hạn như dữ liệu âm thanh được xử lý ở nơi khác trong ứng dụng của bạn). |
Hằng số AudioSource.Mode kiểm soát cách API xử lý âm thanh
đến:
- Hằng số
AudioSource.Mode.STREAMINGđịnh cấu hình trình nhận dạng để trả về kết quả chép lời một phần và kết quả chép lời cuối cùng liên tục khi dữ liệu âm thanh đến. Khi cung cấp đối tượngParcelFileDescriptortuỳ chỉnh, bạn phải ghi dữ liệu vào luồng theo tốc độ theo thời gian thực (khoảng 32.000 byte mỗi giây cho âm thanh PCM đơn âm, 16 bit, 16 kHz tiêu chuẩn). Việc ghi dữ liệu quá nhanh có thể làm tràn vùng đệm. - Hằng số
AudioSource.Mode.ONE_SHOTđịnh cấu hình trình nhận dạng để chờ toàn bộ nguồn âm thanh chuyển xong trước khi thực hiện suy luận và cung cấp bản chép lời cuối cùng. Bạn có thể ghi dữ liệu âm thanh nhanh nhất có thể, nhưng bạn phải đóng đầu ghi của chỉ số mô tả tệp để báo hiệu kết thúc tệp. Kết quả chép lời cuối cùng sẽ không được gửi cho đến khi nhận được tín hiệu kết thúc tệp này.
Ví dụ sau đây chép lời một tệp âm thanh được ghi sẵn:
suspend fun recognizeFromFile(recognizer: SpeechRecognizer, audioFile: File) {
val audioSource = AudioSource.fromFile(audioFile)
val request = speechRecognizerRequest { this.audioSource = audioSource }
try {
recognizer.startRecognition(request).collect { response ->
when (response) {
is SpeechRecognizerResponse.FinalTextResponse -> {
// Process the transcription of the whole file.
}
is SpeechRecognizerResponse.ErrorResponse -> {
// Handle the error, for example an unsupported audio format.
}
else -> {}
}
}
} finally {
audioSource.close()
}
}
Sử dụng tính năng đồng bộ hoá từ
Bạn có thể yêu cầu thời gian bắt đầu của từng từ được nhận dạng bằng cách đặt tham số enableWordTiming thành true trong khối cấu hình recognitionOptions của yêu cầu.
Khi bạn bật tính năng định thời gian cho từ, mỗi đối tượng SpeechRecognizerResponse.FinalTextResponse sẽ bao gồm một thuộc tính wordTimings chứa danh sách các đối tượng SpeechRecognizerResponse.WordTiming. Mỗi đối tượng cung cấp chuỗi từ được nhận dạng (text) và độ lệch tính bằng mili giây (timestampMs) bắt đầu từ thời điểm bắt đầu phiên nhận dạng lời nói. Khi tính năng định thời gian từ bị tắt (chế độ cài đặt mặc định), danh sách wordTimings sẽ được trả về trống.
Ví dụ về mã sau đây minh hoạ cách định cấu hình và bật tính năng định thời gian cho từ:
suspend fun recognizeWithWordTiming(recognizer: SpeechRecognizer) {
val request = speechRecognizerRequest {
audioSource = AudioSource.fromMic()
recognitionOptions { enableWordTiming = true }
}
recognizer.startRecognition(request).collect { response ->
if (response is SpeechRecognizerResponse.FinalTextResponse) {
for (wordTiming in response.wordTimings) {
val word: String = wordTiming.text
val timestamp: Long = wordTiming.timestampMs
}
}
}
}
Ngôn ngữ được hỗ trợ
| Chế độ | Ngôn ngữ |
| Nâng cao | ar-SA (beta), cmn-Hans-CN, cmn-Hant-TW, da-DK (beta), de-DE, en-US, es-ES, fr-FR, hi-IN (beta), id-ID (beta), it-IT, ja-JP, ko-KR, nl-NL (beta), pl-PL (beta), pt-PT, ru-RU, sv-SE (beta), th-TH, tr-TR (beta), vi-VN (beta) |
| Cơ bản | cmn-Hans-CN (beta), cmn-Hant-TW (beta), de-DE (beta), en-US, es-ES (beta), fr-FR (beta), hi-IN (beta), it-IT (beta), ja-JP (beta), ko-KR (beta), pl-PL (beta), pt-BR (beta), ru-RU (beta), tr-TR (beta), vi-VN (beta) |
Thiết bị được hỗ trợ
| Chế độ | Thiết bị được hỗ trợ |
| Cơ bản | Thiết bị Android sử dụng cấp độ API 31 trở lên. |
| Nâng cao |
Dòng Pixel 10 và Pixel 11, cùng với các thiết bị có Gemini Nano trên các chipset sau (bao gồm cả dòng Samsung Galaxy S26, Z Flip8 và Z Fold8, cùng nhiều dòng khác):
|
Các vấn đề thường gặp khi thiết lập
Các API GenAI của Bộ công cụ học máy dựa vào ứng dụng Android AICore để truy cập vào Gemini Nano. Khi một thiết bị vừa được thiết lập (bao gồm cả việc đặt lại) hoặc ứng dụng AICore vừa được đặt lại (ví dụ: xoá dữ liệu, gỡ cài đặt rồi cài đặt lại), ứng dụng AICore có thể không có đủ thời gian để hoàn tất quá trình khởi chạy (bao gồm cả việc tải các cấu hình mới nhất xuống từ máy chủ). Do đó, các API GenAI của Bộ công cụ học máy có thể không hoạt động như mong đợi. Dưới đây là các thông báo lỗi thiết lập thường gặp mà bạn có thể thấy và cách xử lý:
| Ví dụ về thông báo lỗi | Cách xử lý |
| AICore không thành công với loại lỗi 4-CONNECTION_ERROR và mã lỗi 601-BINDING_FAILURE: Dịch vụ AICore không liên kết được. | Điều này có thể xảy ra khi bạn cài đặt ứng dụng bằng API GenAI của Bộ công cụ học máy ngay sau khi thiết lập thiết bị hoặc khi AICore bị gỡ cài đặt sau khi ứng dụng của bạn được cài đặt. Bạn có thể khắc phục vấn đề này bằng cách cập nhật ứng dụng AICore rồi cài đặt lại ứng dụng. |
| AICore không thành công với loại lỗi 3-PREPARATION_ERROR và mã lỗi 606-FEATURE_NOT_FOUND: Tính năng ... không hoạt động. |
Điều này có thể xảy ra khi AICore chưa tải xong các cấu hình mới nhất. Khi thiết bị kết nối với Internet, quá trình cập nhật thường mất từ vài phút đến vài giờ. Việc khởi động lại thiết bị có thể đẩy nhanh quá trình cập nhật.
Lưu ý rằng nếu trình tải khởi động của thiết bị được mở khoá, bạn cũng sẽ thấy lỗi này. API này không hỗ trợ các thiết bị có trình tải khởi động đã mở khoá. |
| AICore không thành công với loại lỗi 1-DOWNLOAD_ERROR và mã lỗi 0-UNKNOWN: Tính năng ... không thành công với trạng thái không thành công 0 và lỗi esz: UNAVAILABLE: Không thể phân giải máy chủ lưu trữ ... | Duy trì kết nối mạng, đợi vài phút rồi thử lại. |
Mã mẫu
- Khám phá mã mẫu của API Nhận dạng lời nói trong Bộ công cụ học máy trên GitHub