Jupitor's Blog

google cloud platform을 이용하여 speech-to-text 로 음성을 텍스트로 변환해보자 본문

잡다한것

google cloud platform을 이용하여 speech-to-text 로 음성을 텍스트로 변환해보자

Jupitor6245 2020. 9. 17. 06:27

지난 시간에 컴퓨터에 있는 음성 파일을 하다가 실패했다.

10분이 한계였기 때문이다.

이 한계를 늘리는 방법을 검색해보니 나오기는 한데 더 복잡할 것 같아서

google cloud stoage 에 파일을 직접 올리고 그것을 google cloud console에서 

speech-to-text api를 이용, transcript를 만들어보자.

 

 

아래는 몇 시간이나 지났을지 모를 검색과 삽질의 결과물이다(...)

 

 

 

google cloud의 무료 계정은 생성했다고 치고, ( 한번도 안써봤으면 그냥 google cloud 들어가면 무료 credit을 준다)

왼쪽 옵션( 줄3개 ) 에 들어가서 IAM & Admin -> Manage Resources

 

 

그다음 create project를 하여 새로운 프로젝트를 생성한다.

( 처음 계정 만드는 사람은 알아서 프로젝트 만드라고 한다. 거기서 걍 만들면 됨 )

 

걍 아무렇게나 기본으로 떠있는 My Proejct 78740 이란 이름으로 생성해보았다.

 

그다음 해당 프로젝트에 speech to text API 를 활성화 시켜주어야 한다.

 

 

cloud speech-to-text api를 선택, 그다음 방금 만든 프로젝트에 활성화한다.

 

그다음 credential 을 만들어야 한다. 서버에 요청을 보낼때 쓰이는 인증이다. 

활성하 하고 나면 알아서 side menu의 APIs & Services -> Cloud Speech to text 탭으로 이동해진다.

거기서 왼쪽에 Credentials 로 가서, Create Credentials 로 새로 생성.

 

 

Service account 로 생성해준다. 

 

이름을 설정해주고, 이 Account에 GCS (google cloud storage)에 접근할 수 있는 권한을 내려준다.

검색란에 storage라고 치면 나온다.

 

 

Storage Admin 을 추가해준다. 그래야 Storage에 올린 파일을 이용하여 stt를 사용할 수 있다.

 

3번째 step은 무시하고, 이제 credential 만드는 걸 끝내게 되면 알아서 json파일을 하나 받게 되는데 이게

어디에 쓰이는지는 잘 모르겠다. 혹시 모르니 저장해두자.

 

그리고 이제 Credential에 보면 아래에 아까 생성한 service account의 Email 등등의 정보가 나오는데,

Email은 필요하므로 복사 또는 기억해두고, 오른쪽에 연필 부분을 클릭해보자.

 

여기서 아래에 Keys에서 Key를 생성해주어야 한다. Add key -> create new key 해주자.

알아서 다운로드 되는데,

이게 바로 그 인증 파일이다. 나중에 환경변수에 이 파일을 등록해야 하므로 편하게 key.json 으로 이름을 바꿔주자.

 

 

 

 

 

이제 왼쪽 메뉴에 하단에 storage로 가서 bucket을 만들어야 한다.

bucket은 간단하게 생각하면 c 드라이브, d 드라이브 같은 저장공간이다. 그냥 폴더라고 생각해도 괜찮고.

 

 

크레이뚜 빠껫 해준다.

나중에 버켓에 올린 파일을 gs://bucket_name/filename.ext 이런 식으로 접근한다.

그래서 편한 이름으로. 근데 globally 하게 unique 해야 하므로 숫자를 좀 섞어줘야한다.

 

 

2번째 단계에서 물리적으로 어디에 저장할건지 선택하라고 나온다.

그냥 Region, 즉 특정 지역에만 저장하게 하면 가장 낮은 지연시간을 확보할 수 있고,

Multi region, 여러 지역에 나누어 저장하면 접근성을 높게 가져갈 수 있다. Dual은 그 중간.

그닥 상관 없으니 multi region 해주자.

뭐 전문적으로 대용량의 파일을 관리할 것도 아니고 커봤자 300MB 정도의 음성파일을 저장할건데 뭐...

 

마찬가지로 대충 다음 단계에서 standard, Fine grained, google-managed key 설정해주고

버켓 생성을 완료하자.

 

이제 이 버켓에 아까 받았던 인증파일과 변환할 오디오 파일을 업로드해준다.

 

오디오 파일의 확장자는 cloud.google.com/speech-to-text/docs/encoding

여기서 확인할 수 있다. mp3로 할려면 뭘 또 해야 되서 본인은 wav파일로 변환 후 사용하기로 했다.

 

 

이제 우측 상단에 있는 cloud console을 열어주자.

 

여기서는 linux와 환경이 거의 똑같다고 보면 된다.

먼저 gsutil 로 인증 파일을 가져와주자.

 

gsutil mv gs://{아까만들었던 버켓이름}/{인증파일이름} ./{저장할파일이름} 이렇게 해주면 된다.

예를들면,

 

 

이렇게. 명령어 입력하면 gsutil 은 어떤 권한을 사용하는데 권한을 허용할건지 나온다. 당연히 허용해주자.

이제 ls 명령어로 확인하면 현재 폴더에 인증파일이 와있는 것을 알 수 있다.

export GOOGLE_APPLICATION_CREDENTIALS=key.json 으로 환경변수를 등록해준다.

 

잘 됬는지 확인을 위해서 cat $GOOGLE_APPLICATION_CREDENTIALS 한번 쳐주자.

뭐가 좌르륵 나오면 성공이다. ( 오타주의 )

 

본적으로 변환을 하기 전에 먼저 권한설정을 해주어야 한다.

계정에 인증 파일을 엮어주어야 한다.

이 작업은 클라우드에 접속할때마다 해줘야 되는듯 싶다. 귀찮게...

아무튼, 

 

gcloud auth activate-service-account SERVICE_ACCOUNT_EMAIL_ADDRESS --key-file=service_account_filename.json

 

이 명령어 에서 SERVICE_ACCOUNT_EMAIL_ADDRESS는, 메뉴의 APIs & Services의,

Credentials에서 아까 생성한 service account의 Email 부분을 말한다.

그리고 --key-file={아까 옮겨놓은 파일이름} 딱 해주면 된다.

 

 

 

이제 드디어 명령어를 사용할 때가 왔다.

긴 파일이므로 실시간 변환이 아니므로 async를, 긴 음성 파일으로 long recognize를 써주어야 한다.

한국어 음성 파일이므로 language code도 붙여준다.

예를 들면, 내 버켓의 이름은 mybucket97987이고 파일이름은 art-2-1 이므로,

 

gcloud ml speech recognize-long-running 'gs://mybucket97987/art-2-1.wav' --language-code='ko-KR' --async

 

그러면 드디어 변환 시작이다. ㅋㅋㅋ.

 

 

operation 을 체크해보란다. 

 

gcloud ml speech operations describe {name} 해주면

 

 

 

progressPercent, 진행도를 나타내준다. 

이게 안뜨면 아직 시작도 안했다는 뜻이므로 조금만 기다려보자.

 

완료되면 따로 알려주지는 않는다. 좀 이따가 다시 위 명령어를 실행해보면,

 

 

변환이 완료되면 server에서 json 형식으로 결과를 반환해준다.

그런데 음성 파일이 너~무 길면 짤려서 나온다. 보기도 힘들고.

그래서 이 결과물을 파일에 저장하자. 

 

gcloud ml speech operations describe {name} > result.json 이 명령어를 해주면,

result.json에 해당 출력이 이 파일에 저장된다.

 

 

 

나는 여기서 이 파일을 가지고 분석하여 텍스트 파일을 만들어보려고 한다.

파이썬을 이용해볼 예정이다. 이용하기 쉬운 파이썬 짱짱맨.

 

일단 콘솔에서 파일을 바로 다운로드 받자.

cloudshell download result.json

cloudshell download result.json

 

왜 안되지. 안되면 gsutil mv result.json gs://{bucket}/{filename} 해가지고 storage에 옮겨서 받자.

 

 

python의 json package로 json 파일을 분석하고 텍스트파일에 썼다.

 

아래는 소스코드.

 

 

 

결과는...

 

 

 

 

잘 나온다. 그런데 오히려 글로 읽는데 이해하기가 어려운건 덤...

아무래도 더 좋은 stt model을 설정해주어야 할 듯.

 

아무튼 좋은 경험이었다. 고생고생해서 결국 강의에 도움은 별로 안된 것 같지만

google cloud api도 써보고 파이썬도 또 써보고. 음;

파이썬은 참 매력있는 언어인 것 같다. 쉬워서 그런가.

 

------------------------------------------------------------------------------------------------------------

 

parsing file 수정본이다.

 

 

실행된 텍스트파일 

 

 

 

 

굿!