ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 음성인식, Google Cloud Speech-to-Text API 사용해보기
    Python/음성인식 2018. 9. 21. 12:28


    Cloud Speech API 서비스 계정 키를 발급받아서 샘플 코드를 실행하는 방법을 설명합니다.



    마지막 업데이트 - 2018. 9. 20



    1. Cloud Speech API 키 발급 받기


    2. Cloud SDK 설치


    3. 파이썬 예제 테스트 해보기


    4. 참고





    동영상을 제외한 음성인식의 경우 60분까지 무료로 사용할 수 있습니다. 자세한 내용은 다음 링크에서  확인하세요.


    https://cloud.google.com/speech-to-text/




    1. Cloud Speech API 키 발급 받기


    1. 다음 사이트에 접속하여 프로젝트를 생성 후, Cloud Speech API를 위한 API 키를 발급받아야 합니다.


    https://console.cloud.google.com/apis/dashboard




    2. 오른쪽 상단에 보이는 프로젝트 만들기를 선택합니다.





    3. 만들기를 선택합니다.





    4. 프로젝트 이름을 적어주고 만들기를 선택합니다. 프로젝트 생성될 때까지 잠시 기다려야 합니다.





    5. API 및 서비스 사용 설정을 선택합니다.





    6. cloud speech api를 검색하여 선택합니다.





    7. 사용 설정을 선택합니다.





    8. 이제 Cloud Speech API가 활성화 되었습니다.  왼쪽 항목에서 사용자 인증 정보를 선택합니다.





    9. 사용자 인증 정보 만들기를 선택합니다.





    10. 서비스 계정 키를 선택합니다.





    11. 서비스 계정 항목에 보이는 콤보박스 선택을 선택합니다.





    12.적당한 서비스 계정 이름을 입력하고 역할 선택에서 Project > 소유자를 선택합니다.





    13. 전체 리소스에 접근이 가능하기 때문에 이후 배포를 고려할 때에는 바꿔야할지도 모르겠습니다.

    키 유형으로는 JSON이 디폴트로 선택됩니다. 이제 생성을 클릭합니다.





    14. 비공개 키(확장자 json) 파일이 컴퓨터에 저장됩니다.





    15. 윈도우의 경우 파일은 다음 위치에 다운로드 됩니다.


    C:\Users\사용자이름\Downloads\서비스계정키이름.json



    명령 프롬프트에서 다음처럼 입력하여 서비스 계정 키를 위한 환경 변수를 등록합니다.


    set GOOGLE_APPLICATION_CREDENTIALS=C:\Users\사용자이름\Downloads\서비스계정키이름.json




    매번 입력하는게 번거로우면 시스템 속성의 환경 변수에 등록하면 됩니다.

    이후 API 테스트시 필요하므로 반드시 등록해줘야 합니다.



    변수 이름

    GOOGLE_APPLICATION_CREDENTIALS


    변수 값

    C:\Users\사용자이름\Downloads\서비스계정키이름.json




    2. Cloud SDK 설치

    1. Cloud SDK 사이트 ( https://cloud.google.com/sdk )에 접속합니다.




    2. WINDOWS용 설치를 클릭합니다.





    3. Google Cloud SDK installer를 클릭하여 설치 파일을 다운로드 받은 후 실행합니다.

    옵션 변경없이 Next만 계속 클릭하면 됩니다.






    4. 설치 완료 후, 명령 프롬프트 창에서 cloud init 명령이 실행됩니다. 잠시 후 로그인해야 한다고 물어보면 y를 입력하고 엔터키를 입력합니다.


    기존 설정을 지우려면 C:\Users\webnautes\AppData\Roaming에 있는 gcloud 폴더를 삭제하세요.





    5. 잠시 후, 웹 브라우저가 실행되어서  Google Cloud SDK에서 구글 계정에 접근하는 것을 허용할지 물어봅니다.  허용을 선택합니다.





    6. 다시 명령 프롬프트를 확인해보면 다음처럼 사용할 프로젝트를 선택하라고 물어봅니다.

    Cloud Speech API를 위해 만든 프로젝트 번호를 입력하고 엔터키를 입력합니다.





    7.  설정이 완료되었습니다.





    3. 파이썬 예제 테스트 해보기

    1. 파이썬 3를 설치합니다.

    https://www.python.org/downloads/windows/





    2. 명령 프롬프트에서 다음처럼 virtualenv를 설치합니다.

    (참고. http://timmyreilly.azurewebsites.net/python-pip-virtualenv-installation-on-windows/ )


    pip install virtualenv


    pip install virtualenvwrapper-win





    3. 가상환경을 위한 디렉토리를 생성하고 이동합니다.





    4. 가상환경을 만들고 사용하기 위해 필요한 것들을 설치합니다.





    5. 다음 명령으로 가상환경을 활성화 합니다.

    현재 디렉토리 경로명 앞에 앞에서 지정한 이름  (env)가 붙습니다.





    6. 가상환경에서 빠져나오려면 다음 명령을 사용합니다.





    7. 다시 가상환경을 활성화하고 Google Cloud Client Library for Python를 설치합니다.





    8. Visual Studio가 설치안되어 있다면 진행하기 전에 Visual C++ 2015 Build Tools를 아래 링크에서 다운로드 받아 설치해줘야 합니다.

    http://landinghub.visualstudio.com/visual-cpp-build-tools





    9. Cloud Speech API Client Library를 설치합니다.





    10. 서비스 계정을 활성화합니다. 한번 해주면 이후 해줄필요가 없습니다.


    (env) C:\Users\webnautes\speech>gcloud auth activate-service-account --key-file="C:\Users\webnautes\Downloads\Cloud Speech-to-Text API Test-934c33ff3343.json"




    11. 마이크 사용을 위해 필요한 패키지를 설치합니다.


    (env) C:\Users\webnautes\speech>pip install pyaudio




    12. 먼저 실시간으로 음성인식을 테스트합니다.


    다음 주소에 있는 마이크를 이용한 스트림 코드를 가져와 transcribe_streaming_mic.py 이름으로 저장합니다.


    https://github.com/GoogleCloudPlatform/python-docs-samples/blob/master/speech/microphone/transcribe_streaming_mic.py


    코드에서 아래 부분을 인식 시킬 언어로 변경합니다.

       language_code = 'en-US'  # a BCP-47 language tag


    여기에서는 ko-KR로 변경하겠습니다.

       language_code = 'ko-KR'  # a BCP-47 language tag



    실행하고 마이크에 말을 하면 다음 줄에 실시간으로 스크립트를 출력해줍니다.


    (env) C:\Users\webnautes\speech>python transcribe_streaming_mic.py
    안녕




    13. 이번엔 녹음을 하여 음성파일을 생성해서 음성인식을 테스트합니다.


    다음 코드를 실행하여 녹음을 하면 현재 디렉토리에  file.wav 파일이 생성됩니다.


    (env) C:\Users\webnautes\speech>python sound_recorder.py



    # https://gist.github.com/mabdrabo/8678538

    import pyaudio
    import wave

    FORMAT = pyaudio.paInt16
    CHANNELS = 1  #only mono
    RATE = 16000  
    CHUNK = 1024  #확인 필요
    RECORD_SECONDS = 10 #10초 녹음

    WAVE_OUTPUT_FILENAME = "file.wav"

    audio = pyaudio.PyAudio()

    # start Recording
    stream = audio.open(format=FORMAT, channels=CHANNELS,
                   rate=RATE, input=True,
                   frames_per_buffer=CHUNK)
    print ("recording...")
    frames = []

    for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
       data = stream.read(CHUNK)
       frames.append(data)
    print ("finished recording")


    # stop Recording
    stream.stop_stream()
    stream.close()
    audio.terminate()

    waveFile = wave.open(WAVE_OUTPUT_FILENAME, 'wb')
    waveFile.setnchannels(CHANNELS)
    waveFile.setsampwidth(audio.get_sample_size(FORMAT))
    waveFile.setframerate(RATE)
    waveFile.writeframes(b''.join(frames))
    waveFile.close()




    다음 파이썬 코드를 실행하면 현재 디렉토리에 있는 file.wav에 대한 스크립트를 출력해줍니다.


    (env) C:\Users\webnautes\speech>python quickstart.py



    #!/usr/bin/env python

    # Copyright 2016 Google Inc. All Rights Reserved.
    #
    # Licensed under the Apache License, Version 2.0 (the "License");
    # you may not use this file except in compliance with the License.
    # You may obtain a copy of the License at
    #
    #     http://www.apache.org/licenses/LICENSE-2.0
    #
    # Unless required by applicable law or agreed to in writing, software
    # distributed under the License is distributed on an "AS IS" BASIS,
    # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    # See the License for the specific language governing permissions and
    # limitations under the License.


    def run_quickstart():
       # [START speech_quickstart]
       import io
       import os

       # Imports the Google Cloud client library
       # [START migration_import]
       from google.cloud import speech
       from google.cloud.speech import enums
       from google.cloud.speech import types
       # [END migration_import]

       # Instantiates a client
       # [START migration_client]
       client = speech.SpeechClient()
       # [END migration_client]

       # The name of the audio file to transcribe
       file_name = os.path.join(
           os.path.dirname(__file__),
           '.',
           'file.wav')

       # Loads the audio into memory
       with io.open(file_name, '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='ko-KR')

       # Detects speech in the audio file
       response = client.recognize(config, audio)

       for result in response.results:
           print('Transcript: {}'.format(result.alternatives[0].transcript))
       # [END speech_quickstart]


    if __name__ == '__main__':
       run_quickstart()





    4. 참고

    https://cloud.google.com/speech/docs/quickstart?hl=ko


    https://cloud.google.com/docs/authentication/getting-started?hl=ko


    https://cloud.google.com/sdk/docs/quickstart-windows


    https://cloud.google.com/speech/docs/reference/libraries




    포스트 작성시에는 문제 없었지만 이후 문제가 생길 수 있습니다.
    댓글로 알려주시면 빠른 시일내에 답변을 드리겠습니다.

    여러분의 응원으로 좋은 컨텐츠가 만들어집니다. 지금 본 내용이 도움이 되었다면 유튜브 구독 부탁드립니다. 감사합니다 : )

    유튜브 구독하기


    댓글 24

    • 김무진 2018.11.13 16:33


      좋은 포스팅 감사합니다. 저장된 transcribe_streaming_mic.py 파일을 어느 폴더에 저장 시켜야 하는지 알수 있을까요?

      • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2018.11.13 16:37 신고


        감사합니다.^^

        virtualenv를 사용하여 가상환경을 만든 위치에 저장하면 됩니다.

        포스팅의 경우에는 c:\User\webnautes\speech입니다.

    • 김무진 2018.11.13 18:57


      감사합니다!! 아주 잘작동되네요 큰 공부가 되었습니다 고맙습니다

    • 123 2019.01.29 16:18


      좋은 글 감사합니다.


      마지막 예제로 올려주신

      파일 --> 텍스트화 하는 파이썬 예제를 실행하면, 결과 스크립트가 어디에 생성되나요??

    • 복분자한잔 2019.03.04 19:51


      from google.cloud import speech
      부분에서 import오류가 나는데 어떻게 해결해야하나요?

    • 0000 2019.03.10 20:37


      파이썬 완전 초보인데..

      실시간 음성인식 테스트하는 부분에서

      Traceback (most recent call last):
      File "C:/Users/XXX/speech/transcribe_streaming_mic.py", line 31, in <module>
      from google.cloud import speech
      ModuleNotFoundError: No module named 'google'

      이런 오류가 뜨는데 왜 그런건지 알려주실수있나요? ㅠㅠ

      • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.03.10 21:10 신고


        검색해보니 안되는 이유가 여러가지네요..

        아래 링크에 나오는 해결방법인 다음을 해보고 안되면 다른 답변을 해보세요.
        https://stackoverflow.com/questions/36183486/importerror-no-module-named-google

        아래 명령을 해보세요.
        pip install --upgrade google-api-python-client

    • 고고 2019.04.10 00:57


      좋은 포스팅 감사합니다. 혹시 화면에 출력되는 텍스트를 파일로 저장하는 방법을 알 수 있을까요?
      따로 텍스트 문서로 저장하는 방법이 궁금합니다^^

      • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.04.10 07:45 신고


        여기에서 출력하는 문자열을 파일로 저장하면 됩니다.

        for result in response.results:
        print('Transcript: {}'.format(result.alternatives[0].transcript))

    • 감사합니다 2019.09.18 15:41


      streaming_mic를 사용해서 cmd에 출력되는 텍스트를 따로 파일로 저장하는 방법은 혹시 무엇인가요?

    • 질문드려요!! 2019.09.22 22:03


      혹시 transcribe_streaming_mic.py 를 종료하고싶을때 ctrl+c 말고 정상적으로 종료시키는 방법이 있을까요?
      루프를 빠져나가는 방법이 궁금합니다.

    • 음성인식도전자 2019.09.25 20:03


      감사합니다
      CHUNK 와 RATE는 무엇을 의미하는건가요??

      • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.09.25 20:11 신고


        음성분야 전문가가 아니라서 정확히는 모릅니다. 주석을 봐서는 CHUNK은 1초당 저장하는 크기를 바이트로.. RATE는 샘플레이트를 의미하는 듯합니다.

    • 안녕하세요 2019.12.17 23:09


      안녕하세요, 가이드 감사합니다. 다 따라한다고 따라했는데 마지막 서비스계정 등록하기에서
      'gcloud'은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는
      배치 파일이 아닙니다.
      라고 뜨네요. 어떻게 해결할 수 있나요?

      • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.12.18 08:16 신고


        다음 두개의 경로를 path에 추가하세요

        C:\Program Files\Google\Cloud SDK\google-cloud-sdk\bin

        C:\Program Files\Google\Cloud SDK\google-cloud-sdk.staging\bin

    • 초보 2020.01.31 04:27


      감사합니다!! 이글을 참고해서 Google Cloud TTS Api 이용할수 있었습니다. 제 은인이십니다!!

    • 그림 2020.02.11 09:53


      좋은 글 고맙습니다.
      가상환경이 아니더라도 실행은 되더라구요. 그런데, transcribe_streaming_mic.py 에서 305초 지나도 계속 음성인식하게 할 수는 없나요?

Designed by Tistory.