GenAI Speech Recognition API

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

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

주요 기능

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

결과 예시

오디오 모드 언어 스크립트 작성
audio_1 기본 en-US "This is a short message"
audio_2 고급 es-ES "Este es un mensaje corto."

플랫폼 음성 인식 API와 비교

기본 모드를 사용하는 경우 ML Kit 음성 인식 API는 플랫폼 음성 인식 API와 유사한 핵심 기능을 제공합니다. ML Kit의 주요 이점은 더 넓은 범위의 Android 플랫폼 버전을 지원한다는 점입니다. 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 Flow에서 스트리밍 출력을 수신합니다. 마지막으로 리소스를 해제하려면 클라이언트를 닫아야 합니다.

// 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()
}

오디오 입력 요구사항

생성형 AI 음성 인식 API는 파일 설명자를 통해 마이크 또는 맞춤 소스의 입력을 지원합니다.

AudioSource.fromPfd(parcelFileDescriptor)를 사용하는 경우 입력 오디오는 다음 엄격한 요구사항을 충족해야 합니다.

  • 형식: 헤더가 없는 원시 16비트 PCM.
  • 채널: 모노 (단일 채널).
  • 샘플링 레이트: 16kHz.

대부분의 사용 사례에서는 이러한 제약 조건을 자동으로 처리하므로 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 (베타)

지원되는 기기

모드 지원되는 기기
기본 API 수준 31 이상을 사용하는 Android 기기
고급 Pixel 10

일반적인 설정 문제

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

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

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

샘플 코드

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