이번에 영어로 된 48분정도 되는 음성 녹음을 녹취할 일이 있었는데, 도저히 혼자 힘으로는 할 수 없기에 구글의 힘을 빌려서 진행하였다.
1. Google Cloud Speech API
https://cloud.google.com/speech/docs/quickstart?hl=ko
문서를 참고해서 진행하면 된다.
1) SET UP A PROJECT 버튼을 눌러서 프로젝트를 고르고 (없다면 새로 만든다.) Private Key를 받아서 잘 저장한다.
Cloud Speech API를 활성화하기 위해서는 https://console.cloud.google.com/home/dashboard 를 타고 대시보드로 들어가서 APIs & Services의 Library 로 가서 Google Cloud Speech API를 검색해 Enable 시킨다.
2) Cloud SDK 설치
https://cloud.google.com/sdk/docs/ 링크를 따라가면 된다. Linux에서는 gcloud를 인스톨하고 gcloud init을 쳐주면 된다.
3) 매뉴얼에 나온 대로
gcloud auth activate-service-account --key-file=[PATH]
를 입력한다. 이때 [PATH]는 1)에서 받은 Private Key의 경로를 입력한다.
4) 문서에 나오진 않았지만, curl 도 설치해줘야 진행할 수 있다.
5) sync-request.json 파일을 문서에 나온 대로 설정해서 저장한다.
6) sync-request.json이 있는 경로에서 아래의 명령어를 입력하면 바로 리스폰스가 온다.
curl -s -H "Content-Type: application/json" \ -H "Authorization: Bearer "$(gcloud auth print-access-token) \ https://speech.googleapis.com/v1/speech:recognize \ -d @sync-request.json
이때 나는 임의로 query.json 으로 저장해서 명령을 날리니 뭐가 꼬였는지 동작하지 않았다. query.json 이라고는 하지 말자.
* 여기까지는 간단한데, 이제 음성 파일을 바꿔서 진행하려고 하니 5)에서
"uri":"gs://cloud-samples-tests/speech/brooklyn.flac"
대신에 뭐를 넣어야 할지 알아보자.
https://console.cloud.google.com/home/dashboard 에서 이번엔 Storage를 클릭한다.
여기에서 Create Bucket을 눌러 bucket을 만들어준다.
그리고 거기에 flac 파일을 올려준 다음, 파일 제일 오른쪽에 Public link를 체크하면 준비가 끝난다.
그러면 파일 경로는
gs://버킷이름/파일이름.flac
이 된다. 여기서 gs:// 대신 https://storage.googleapis.com/ 를 입력해서 브라우저에 입력하면 브라우저에서 바로 flac 이 재생되어야 한다.
* 준비한 음성 파일이 1분 이상이라면 이 방식으로 Speech 를 Text로 바꿀 수 없다.
에러 메시지에서 대신 longrunningrecognize 를 실행하라고 할 것이다.
이것은 https://cloud.google.com/speech/docs/async-recognize 에서 찾을 수 있다.
리퀘스트는 아래와 같이 하면 된다.
curl -X POST \
-H "Authorization: Bearer "$(gcloud auth print-access-token) \
-H "Content-Type: application/json; charset=utf-8" \
--data "{
'config': {
'language_code': 'en-US'
},
'audio':{
'uri':'gs://gcs-test-data/vr.flac'
}
}" "https://speech.googleapis.com/v1/speech:longrunningrecognize"
노란 줄 친 부분은 원하는 파일로 바꿔준다.
빨간칠 한 부분은 문서와 다른데, 저렇게 하면 동작하고 gcloud auth application-default print-access-token 로 하면 에러가 발생한다.
리퀘스트를 하면 name: 하고 숫자가 잔뜩 나올텐데, 이 숫자를 가지고 기다렸다가 아래와 같이 요청하면 응답이 온다.
curl -H "Authorization: Bearer "$(gcloud auth print-access-token) \
-H "Content-Type: application/json; charset=utf-8" \
https://speech.googleapis.com/v1/operations/your-operation-name
your-operation-name 대신에 name: 옆에 나온 숫자를 넣는다.
이때 대충 음성파일 길이의 3분의 1 ~ 2분의 1 정도의 시간이 걸렸다.