Jupitor's Blog

Google cloud Speech-to-text api를 이용하여 동영상 음성을 텍스트로 변환해보기 in python 본문

잡다한것

Google cloud Speech-to-text api를 이용하여 동영상 음성을 텍스트로 변환해보기 in python

Jupitor6245 2020. 9. 15. 02:51

코로나 때문에 원격수업이 한창이다.

 

실시간 온라인 강의도 있지만 저는 이 동영상 강의를 들을때마다

아, 교수님이 말씀하신 걸 좀 한눈에 확인하면 훨씬 더 빠르지 않을까. 그럼 놓치는 것도 없을 것이고.

라고 생각했고, 검색해서 나온게 Speech to text 라는 api가 있더라. 뭐 이미 유명하고,,,

 

크게 IBM과 google 것이 있는데, IBM 것을 해보니까 정확도가 영, 너무 나쁘다.

반면 google의 서비스는 굉장히 정확도가 높았다.

 

간단하게 사용하려면 Google docs의 voice typing 을 사용하면 되지만

나는 한 강의에 1시간이 족히 넘는 강의들을 text로 변환해야 하기 때문에, 뭐 가능은 하겠지만

굉장히 비효율적일 것이다...

 

그래서 구글 클라우드의 speech to text 서비스를 사용해보기로 했다.

 

 

 

IBM과 비슷하게 클라우드를 처음 사용하고 문제가 없는 구글 계정은( 문제가 없는걸 뭘로 판단하는지는 잘... )

가입할때 300$ 가량의 무료 credit을 줬다. 3달간. 뭐 이거면 충분하겠지.

 

 

 

 

 

가입을 하고, google cloud platform 에서 speech-to-text api를 활성화하고, 

credential을 생성하여 다운로드 받았다. 나는 google cloud에 있는 오디오 파일이 아닌

local storage에 있는 파일을 쓸 것 이기 때문이다.

web document에 다 나와있더라.

 

cloud.google.com/speech-to-text/docs/quickstart-client-libraries#client-libraries-install-python

 

빠른 시작: 클라이언트 라이브러리 사용  |  Cloud Speech-to-Text 문서  |  Google Cloud

클릭하여 다음을 수행하세요. 프로젝트를 만들거나 선택합니다. 프로젝트에 Cloud Speech-to-Text API를 사용 설정합니다. 서비스 계정을 만듭니다.비공개 키를 JSON으로 다운로드합니다. 언제든지 Cloud

cloud.google.com

 

파일은 mp3파일은 검색해보니까 지원은 하는데 beta api 머시기~라고 해서

그냥 맘편하게 mp3파일을 wav 파일로 변환했다. 

참고로 변환할 때 1 chennel로 변환해야 한다.  스테레오 말고, 모노로.

그리고 샘플링 레이트도 변경해주어야 한다.

 

 

 위에 보면 알겠지만 mp3 지원을 하지만 v1p1beta1 에서만 가능하다는데, 이 api의 다른 function 인듯. RecognitionConfig 가봐도 별거 안나오더라. 

 

 

그리고 python을 이용했는데, windows에서 파이썬을 사용해서 할려면 

환경변수로 $GOOGLE_APPLICATION_CREDENTIALS 변수를 export로 등록해주어야 한다.

( 아까 다운받은 json 파일의 전체경로를 넣어주면 된다 )

나는 이 과정에서 Ubuntu WSL을 이용하였다.

 

그런데 python3 이용하는데 pip 을 이용하여 google cloud 를 또 설치해야 했다.

cloud.google.com/speech-to-text/docs/quickstart-client-libraries

 

아주 뭔 놈의 api하나 쓰는데 이렇게... 복잡한건지 =.=;

 

아, python 코드는

github.com/googleapis/python-speech/blob/master/samples/snippets/quickstart.py

 

이 예시 코드를 썼다. 

transcribe_file 이 google cloud 에 있는 파일이 아닌 내 컴퓨터에 있는 파일을 쓰는 함수이다.

 

 

위에 중간에 sample_rate_hertz 를 변환한 파일과 맞춰주어야 하고

language_code 또한 한국어를 처리할 것이기 때문에 ko-KR로 바꿔준다.

 

 

우여곡절 끝에 테스트로 간단한 문장을 보내봤는데, 

 

 

굿굿. 아주 굿이다.

 

내 계획은 이제 이 서버로부터 보내 온 내용을 text file에 쓸 예정이다.

 

python은 전에 opencv강의 들을 때 말곤 안해봤는데, 뭐 또 검색하면 다 나오겠지.

구글에 python write to a file을 검색해서 찾아본다.

 

대충 파일이름 정해서 시도

 

나름 잘된다. 문제는 줄이 너무 길어서 보기가 힘들다.

이제 45분 정도의 강의로 시도해봤는데

 

 

 

흠... payload가 너무 커서 불가능하단다.

어쩌지... 그럼 google docs로 일일히 해야 하나.... =.=;;

 

일단 오늘은 여기까지.... 

 

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

 

stackoverflow.com/questions/51601697/invalid-argument-request-payload-size-exceeds-the-limit-10485760-bytes

 

에 따르면, local file의 한계는 최대 10분이란다.

결국 10분보다 긴 파일을 변환하려면 google cloud storage에 직접 파일을 올려야 한다는 소리.

젠장...

 

 

 

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

 

 

그래서 결국 다음 글에서 클라우드에 직접 파일을 올려 음성을 텍스트로 추출하기로 했다.