Google Cloud Platform 을 활용해서 음성파일을 Speech-to-Text 하는법

3 minute read

이번에 진행하게 된 프로젝트는 다음과 같다.

  1. 딥러닝 기술을 활용해서 음성파일의 노이즈(background sound)를 최대한 제거하기. 유효한 speech 요소만 남기기
  2. speech-to-text 로 음성을 텍스트로 변환하여 정확성을 높이기

오늘 포스팅은 Google Cloud Platform을 활용해서 STT를 하는법이다.

(이거 관련해서 이틀 정도 수없이 많이 삽질을… 정말 감사하게도 친절하게 설명된 블로그 글을 보았고 도움을 많이 받았다. 이번 포스팅은 개인적으로 겪었던 어려운 점들을 조금 추가해서 진행할 생각이다.)

[블로그 링크] google cloud platform을 이용하여 speech-to-text로 음성을 텍스트로 변환해보자

로컬 환경이 아닌 클라우드 환경을 이용하는 이유

  • 로컬 환경은 파일 크기에 제한이 걸린다. 다른 블로그 글들을 살펴보니 10분이내에 음성파일은 문제없이 진행되는 것 같던데, 나는 3분짜리 영상조차 데이터 초과란다… 그래서 깔끔하게 포기했다. 혹시나 로컬 환경에서 작업할 필요가 있다면 아래 블로그 주소를 참고하면 좋을 것 같다.

[블로그 링크] 음성인식, Google Cloud Speech-to-Text API 사용해보기

개발환경 만들기

  • google cloud에 접속해서 가입을 진행하면 최초 90일은 무료로 사용할 수 있도록 credit을 준다. (아마 카드등록을 해야했던 것 같다. 나중에 무료 사용기간이 끝나고 나서 본인이 직접 확장신청을 하지 않는 이상 요금은 청구되지 않는다니까 일단 지켜볼 생각이다…)
  • google cloud platform 언어를 영어로 선택해서 따라오도록 하자!

계정을 생성하고 나면 새로운 프로젝트를 만들어주어야한다.

홈마크 옆에 화살표를 눌러서 새 프로젝트를 만들어준다.

프로젝트 이름은 편한걸로 지어주면 된다.

해당 프로젝트로 들어간 후 검색창에 speech to text를 검색한다.

Cloud Speech-to-Text API를 선택하고 활성화해준다.

활성화하고 나서 APIs & Services 메뉴로 들어간다.

Credentials 로 가서 create credentials 선택!

Service account 로 설정해준다.

이름을 설정하고, Google Cloud Storage에 접근할 수 있도록 권한을 줘야한다.

storage 를 검색하고 Storage Admin 을 선택한다.

마지막 단계는 건너뛰고 Credentials 에서 생선된 service account 목록을 확인한다.

이메일 주소는 따로 복사해두던가 해서 기억해두자! (이따가 사용)

계정 옆에 연필 모양 클릭

KEYS 항목에서 ADD KEY -> Create new key

json 파일 형식의 key 가 자동으로 다운로드 되고 이 인증파일을 사용해야한다.

처음에는 이름이 길고 복잡하니까 편한 이름으로 바꾼다. (ex key.json)

왼쪽 상단에 네비게이션 바(3줄)에서 Cloud Storage 로 이동!

create bucket 클릭 !

이름 설정하고 multi-region -> standard -> fine-grained -> None 설정하고 생성!

생성한 버켓에서 아까 내려받은 key 파일과 오디오 파일을 업로드한다. (드래그 해주면 됨)

우측 상단에 cloud console을 열어준다.

ls 명령어로 현재 폴더에 들어있는 파일을 확인할 수 있다.

인증파일과 업로드 한 오디오 파일이 잘 있는지 확인해보자!

gsutil 명령어로 파일을 가져와줄 수 있다.

gsutil mv gs://{버켓이름}/{파일이름} ./{저장할파일이름}

ex)
gsutil mv gs://mybucket0409/key.json ./key.json

이제 아래 명령어로 환경변수를 등록해준다.

export GOOGLE_APPLICATION_CREDENTIALS=key.json

환경변수가 제대로 설정되었는지 확인

cat $GOOGLE_APPLICATION_CREDENTIALS

다음 코드로 계정에 권한설정을 해준다.

gcloud auth activate-service-account {이메일주소} --key-file={인증파일}

ex)
gcloud auth activate-service-account myspeechtotext@fluted-reporter-342702.iam.gserviceaccount.com --key-file=key.json

변환 준비 끝!

STT 변환하기

이제 변환만 하면 된다.

긴 오디오파일의 경우 recognize-long-running 을 사용하는데, 3분정도 짧은 것도 잘 작동하는거 같다.

오디오파일로는 .wav 를 사용한다.

  • 기본 명령어
gcloud ml speech recognize-long-running {파일경로} 옵션1 옵션2 ... 

파일경로는 gs://{버켓이름}/{파일이름} 이다.

여기에 필요한 옵션들을 뒤에 붙여주면 된다.

실시간 변환할 필요는 없으므로 async, 한국어 음성 파일이므로 ‘ko-KR’ 로 언어코드 설정

진짜 중요한거는 해당 명령어의 기본 설정은 mono 형식이라는 점!! (한개의 채널만을 가지는 음성파일)

이거 모르고 무작정 돌리다가 삽질 엄청했다….

내가 가진 모든 데이터는 stereo 형식(두개의 채널을 가짐)이었고, 이 모든 데이터를 mono 로 바꾸자니 그것도 좋은 생각은 아닌 것 같았다..

그래서 최대한 다중채널로 적용할 수 있는 방법을 찾아보다가 역시 google cloud 공식문서 뒤져보면 다 나오더라…ㅜ

위에 명령어 공식문서에서 옵션 설정만 해주면 되는거였다…

gcloud ml speech recognize-long-running

옵션 [–audio-channel-count = AUDIO_CHANNEL_COUNT –separate-channel-recognition] 을 뒤에 추가로 붙여주면 된다.

stereo 파일이니까 2 입력!

  • 변환 명령어
gcloud ml speech recognize-long-running 'gs://mybucket0409/SBS_C0000.wav' --language-code='ko-KR' --async --audio-channel-count=2 --separate-channel-recognition

명령어 입력하고 변환 시작!

  • operation 체크 (name에 이번 실행화면에서 나온 일련번호를 전달하면 된다.)
gcloud ml speech operations describe {name}

변환 끝!

다음 포스팅에서는 이 변환된 결과를 내려받아서 파이썬 코드를 이용해서 .txt 로 보기 편하게 추출하는 방법에 관해서 작성할 예정!

참고자료

Leave a comment