Python 클라이언트 라이브러리 v0.27로 마이그레이션

Python 클라이언트 라이브러리 v0.27에는 이전 클라이언트 라이브러리의 설계 방법에 대한 몇 가지 중요한 변경사항이 포함되어 있습니다. 이러한 변경사항은 다음과 같습니다.

  • 더 적은 수의 유형으로 모듈 통합

  • 유형화되지 않은 매개변수를 강력하게 유형화된 클래스 및 열거로 교체

이 주제는 Python 클라이언트 라이브러리 v0.27을 사용하기 위해 Speech-to-Text API 클라이언트 라이브러리에 필요한 Python 코드 변경사항을 자세히 설명합니다.

이전 버전의 클라이언트 라이브러리 실행

Python 클라이언트 라이브러리를 v0.27로 업그레이드할 필요는 없습니다. 그러나 Speech-to-Text API의 새로운 기능은 v0.27 및 이상 버전에서만 지원됩니다.

이전 버전의 Python 클라이언트 라이브러리를 계속 사용하고 코드를 마이그레이션하지 않으려면 앱에서 사용되는 Python 클라이언트 라이브러리 버전을 지정해야 합니다. 특정 라이브러리 버전을 지정하려면 requirements.txt 파일을 다음과 같이 편집합니다.

google-cloud-speech==0.26

삭제된 모듈

다음 모듈은 Python 클라이언트 라이브러리 v0.27 패키지에서 삭제되었습니다.

  • google.cloud.speech.alternatives

  • google.cloud.speech.client

  • google.cloud.speech.encoding

  • google.cloud.speech.operation

  • google.cloud.speech.result

  • google.cloud.speech.sample

필수 코드 변경

가져오기

Python 클라이언트 라이브러리 v0.27에 있는 새로운 유형 및 열거형에 액세스하려면 새로운 google.cloud.speech.typesgoogle.cloud.speech.enums 모듈을 포함시킵니다.

types 모듈에는 요청 생성에 필요한 새로운 클래스(예: types.RecognitionAudio)가 포함되어 있습니다. enums 모듈에는 오디오 인코딩을 지정하기 위한 열거형이 포함되어 있습니다. 'LINEAR16'과 같은 문자열을 계속 사용하여 오디오 인코딩을 지정할 수 있지만 enums 모듈에 있는 열거형을 사용하는 것이 좋습니다.

from google.cloud import speech
from google.cloud.speech import enums
from google.cloud.speech import types

클라이언트 만들기

Client 클래스가 SpeechClient 클래스로 대체되었습니다. Client 클래스에 대한 참조를 SpeechClient로 대체하세요.

이전 버전의 클라이언트 라이브러리:

old_client = speech.Client()

Python 클라이언트 라이브러리 v0.27:

client = speech.SpeechClient()

오디오 콘텐츠를 나타내는 객체 구성

로컬 파일 또는 Google Cloud Storage URI에서 오디오 콘텐츠를 식별하려면 새로운 RecognitionAudioRecognitionConfig 클래스를 사용합니다. 이제 language_code 매개변수와 같은 매개변수가 API 메서드에 매개변수로 전달되는 대신 RecognitionConfig 클래스의 일부로서 전달됩니다.

로컬 파일에서 오디오 콘텐츠를 나타내는 객체 구성

다음 예는 로컬 파일에서 오디오 콘텐츠를 나타내는 새로운 방법을 보여줍니다.

이전 버전의 클라이언트 라이브러리:

with io.open(file_name, 'rb') as audio_file:
    content = audio_file.read()

sample = old_client.sample(
    content,
    encoding='LINEAR16',
    sample_rate_hertz=16000)

Python 클라이언트 라이브러리 v0.27:

with io.open(speech_file, 'rb') as audio_file:
    content = audio_file.read()

audio = types.RecognitionAudio(content=content)
config = types.RecognitionConfig(
    encoding=enums.RecognitionConfig.AudioEncoding.LINEAR16,
    sample_rate_hertz=16000,
    language_code='en-US')

Google Cloud Storage URI에서 오디오 콘텐츠를 나타내는 객체 구성

다음 예는 Google Cloud Storage URI에서 오디오 콘텐츠를 나타내는 새로운 방법을 보여줍니다. gcs_uri는 Google Cloud Storage에 있는 오디오 파일에 대한 URI입니다.

이전 버전의 클라이언트 라이브러리:

sample = old_client.sample(
    source_uri=gcs_uri,
    encoding='LINEAR16',
    sample_rate_hertz=16000)

Python 클라이언트 라이브러리 v0.27:

audio = types.RecognitionAudio(uri=gcs_uri)
config = types.RecognitionConfig(
    encoding=enums.RecognitionConfig.AudioEncoding.FLAC,
    sample_rate_hertz=16000,
    language_code='en-US')

요청하기

동기식 요청하기

다음 예는 동기식 또는 비동기식 인식 요청을 하는 새로운 방법을 보여줍니다.

이전 버전의 클라이언트 라이브러리:

with io.open(file_name, 'rb') as audio_file:
    content = audio_file.read()

sample = old_client.sample(
    content,
    encoding='LINEAR16',
    sample_rate_hertz=16000)

alternatives = sample.recognize(language_code='en-US')

Python 클라이언트 라이브러리 v0.27:

with io.open(speech_file, 'rb') as audio_file:
    content = audio_file.read()

audio = types.RecognitionAudio(content=content)
config = types.RecognitionConfig(
    encoding=enums.RecognitionConfig.AudioEncoding.LINEAR16,
    sample_rate_hertz=16000,
    language_code='en-US')

response = client.recognize(config, audio)

비동기식 요청하기

다음 예는 동기식 또는 비동기식 인식 요청을 하는 새로운 방법을 보여줍니다.

이전 버전의 클라이언트 라이브러리:

with io.open(file_name, 'rb') as audio_file:
    content = audio_file.read()

sample = old_client.sample(
    content,
    encoding='LINEAR16',
    sample_rate_hertz=16000)

operation = sample.long_running_recognize(language_code='en-US')

Python 클라이언트 라이브러리 v0.27:

with io.open(speech_file, 'rb') as audio_file:
    content = audio_file.read()

audio = types.RecognitionAudio(content=content)
config = types.RecognitionConfig(
    encoding=enums.RecognitionConfig.AudioEncoding.LINEAR16,
    sample_rate_hertz=16000,
    language_code='en-US')

operation = client.long_running_recognize(config, audio)

스트리밍 요청하기

다음 예는 스트리밍 인식 요청을 하는 새로운 방법을 보여줍니다.

이전 버전의 클라이언트 라이브러리:

with io.open(file_name, 'rb') as audio_file:
    sample = old_client.sample(
        stream=audio_file,
        encoding='LINEAR16',
        sample_rate_hertz=16000)

    alternatives = sample.streaming_recognize(language_code='en-US')

Python 클라이언트 라이브러리 v0.27:

with io.open(stream_file, 'rb') as audio_file:
    content = audio_file.read()

# In practice, stream should be a generator yielding chunks of audio data.
stream = [content]
requests = (types.StreamingRecognizeRequest(audio_content=chunk)
            for chunk in stream)

config = types.RecognitionConfig(
    encoding=enums.RecognitionConfig.AudioEncoding.LINEAR16,
    sample_rate_hertz=16000,
    language_code='en-US')
streaming_config = types.StreamingRecognitionConfig(config=config)

# streaming_recognize returns a generator.
responses = client.streaming_recognize(streaming_config, requests)

응답 처리

동기식 인식 응답 처리

다음 예는 동기식 인식 요청을 처리하는 새로운 방법을 보여줍니다.

이전 버전의 클라이언트 라이브러리:

alternatives = sample.recognize(language_code='en-US')

for alternative in alternatives:
    print('Transcript: {}'.format(alternative.transcript))

Python 클라이언트 라이브러리 v0.27:

response = client.recognize(config, audio)
# Each result is for a consecutive portion of the audio. Iterate through
# them to get the transcripts for the entire audio file.
for result in response.results:
    # The first alternative is the most likely one for this portion.
    print(u'Transcript: {}'.format(result.alternatives[0].transcript))

비동기식 인식 응답 처리

다음 예는 비동기식 인식 요청을 처리하는 새로운 방법을 보여줍니다.

이전 버전의 클라이언트 라이브러리:

operation = sample.long_running_recognize('en-US')

# Sleep and poll operation.complete
# ...

if operation.complete:
    alternatives = operation.results
    for alternative in alternatives:
        print('Transcript: {}'.format(alternative.transcript))
        print('Confidence: {}'.format(alternative.confidence))

Python 클라이언트 라이브러리 v0.27:

operation = client.long_running_recognize(config, audio)

print('Waiting for operation to complete...')
response = operation.result(timeout=90)

# Each result is for a consecutive portion of the audio. Iterate through
# them to get the transcripts for the entire audio file.
for result in response.results:
    # The first alternative is the most likely one for this portion.
    print(u'Transcript: {}'.format(result.alternatives[0].transcript))
    print('Confidence: {}'.format(result.alternatives[0].confidence))

스트리밍 인식 응답 처리

다음 예는 스트리밍 인식 요청을 처리하는 새로운 방법을 보여줍니다.

이전 버전의 클라이언트 라이브러리:

alternatives = sample.streaming_recognize('en-US')

for alternative in alternatives:
    print('Finished: {}'.format(alternative.is_final))
    print('Stability: {}'.format(alternative.stability))
    print('Confidence: {}'.format(alternative.confidence))
    print('Transcript: {}'.format(alternative.transcript))

Python 클라이언트 라이브러리 v0.27:

responses = client.streaming_recognize(streaming_config, requests)

for response in responses:
    # Once the transcription has settled, the first result will contain the
    # is_final result. The other results will be for subsequent portions of
    # the audio.
    for result in response.results:
        print('Finished: {}'.format(result.is_final))
        print('Stability: {}'.format(result.stability))
        alternatives = result.alternatives
        # The alternatives are ordered from most likely to least.
        for alternative in alternatives:
            print('Confidence: {}'.format(alternative.confidence))
            print(u'Transcript: {}'.format(alternative.transcript))