GenAI Speech Recognition API

ML Kit의 생성형 AI 음성 인식 API 내에서 오디오 콘텐츠를 텍스트로 변환할 수 있습니다. 이 API는 다음 모드를 지원합니다.

  • 기본: Speech Recognition API는 SpeechRecognizer API와 유사한 기존 온디바이스 음성 인식 모델을 사용합니다.
    • API 수준 31 이상인 대부분의 Android 기기에서 일반적으로 사용 가능
  • 고급: Speech Recognition API는 더 넓은 언어 지원 범위와 더 나은 전반적인 품질을 제공하는 생성형 AI 모델을 사용합니다.
    • Pixel 10 기기에서 사용할 수 있으며, 더 많은 기기에서 개발 중입니다.

주요 기능

  • 마이크 또는 오디오 파일에서 스트리밍 입력을 캡처합니다.
  • 전사된 텍스트는 연속 스트림으로 제공되며, 처음에는 부분적일 수 있고 변경될 수 있으며 최종 콘텐츠가 됩니다.

결과 예시

오디오 모드 언어 스크립트 작성
audio_1 기본 en-US '짧은 메시지입니다.'
audio_2 고급 es-ES 'Este es un mensaje corto.'

플랫폼 음성 인식 API와의 비교

기본 모드를 사용하는 경우 ML Kit 음성 인식 API는 플랫폼 음성 인식 API와 유사한 핵심 기능을 제공합니다. ML Kit의 주요 장점은 더 광범위한 Android 플랫폼 버전을 지원한다는 점입니다. ML Kit에는 API 수준 31 이상이 필요하며 이는 일부 플랫폼 API보다 광범위합니다.

또한 ML Kit 음성 인식 API는 고급 모드에서 기기 내 Gemini 모델을 사용하여 더 광범위한 언어를 지원합니다.

시작하기

build.gradle 구성에 ML Kit 음성 인식 API를 종속 항목으로 추가합니다.

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

음성 인식 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()
}

지원되는 언어 및 기기

Mode(최빈값) 언어
기본 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 (베타)

지원되는 기기

Mode(최빈값) 지원되는 기기
기본 API 수준 31 이상을 사용하는 Android 기기
고급 Pixel 10

일반적인 설정 문제

ML Kit 생성형 AI API는 Android AICore 앱을 사용하여 Gemini Nano에 액세스합니다. 기기가 설정된 직후 (초기화 포함) 또는 AICore 앱이 초기화된 직후 (예: 데이터 삭제, 제거 후 재설치)에는 AICore 앱이 초기화 (서버에서 최신 구성 다운로드 포함)를 완료할 시간이 충분하지 않을 수 있습니다. 따라서 ML Kit 생성형 AI API가 예상대로 작동하지 않을 수 있습니다. 표시될 수 있는 일반적인 설정 오류 메시지와 처리 방법은 다음과 같습니다.

오류 메시지 예 처리 방법
AICore가 오류 유형 4-CONNECTION_ERROR 및 오류 코드 601-BINDING_FAILURE로 실패했습니다. AICore 서비스가 바인딩되지 않았습니다. 이는 기기 설정 직후 ML Kit 생성형 AI API를 사용하여 앱을 설치하거나 앱이 설치된 후 AICore가 제거된 경우 발생할 수 있습니다. AICore 앱을 업데이트한 후 앱을 다시 설치하면 문제가 해결됩니다.
AICore가 오류 유형 3-PREPARATION_ERROR 및 오류 코드 606-FEATURE_NOT_FOUND로 실패했습니다. 기능 ...을 사용할 수 없습니다. 이는 AICore가 최신 구성 다운로드를 완료하지 않은 경우 발생할 수 있습니다. 기기가 인터넷에 연결되어 있으면 업데이트하는 데 일반적으로 몇 분에서 몇 시간이 걸립니다. 기기를 다시 시작하면 업데이트 속도를 높일 수 있습니다.

기기의 부트로더가 잠금 해제된 경우에도 이 오류가 표시됩니다. 이 API는 부트로더가 잠금 해제된 기기를 지원하지 않습니다.
AICore가 오류 유형 1-DOWNLOAD_ERROR 및 오류 코드 0-UNKNOWN으로 실패했습니다. 기능 ...이 실패 상태 0 및 오류 esz: UNAVAILABLE로 실패했습니다. 호스트 ...를 확인할 수 없습니다. 네트워크 연결을 유지하고 몇 분 정도 기다린 후 다시 시도합니다.

샘플 코드

  • GitHub에서 ML Kit 음성 인식 API 코드 샘플 살펴보기