AIAIAIAI

음성변환(STT) / Google STT 사용기/ Colab...ContextualVersionConflict: (protobuf 3.17.3 (/usr/local/lib/python3.7/dist-packages), Requirement.parse('protobuf>=3.19.0'), {'proto-plus'})

summerorange 2022. 4. 30. 23:57
반응형

google API를 가지고 STT 시도한 후기. 후.. 오늘도 에러를 어떻게 해결했는지 올립니다. 멘탈 털린 건 30분~ 60분 짜리 오디오 파일을 텍스트로 변환할 때 코드 짜다가...ㅠㅠ. STT 관련 정보가 너무 없어서 일단 해결한 방식을 간단하게 나마 정리해서 올립니다. 

짧은 오디오 파일을 텍스트로 변환 

짧은 음성을 텍스트 번역하는 건 그다지 어렵지 않습니당.. 

작업 환경은 따로 환경 설정 해줄 필요 없는. 늘 애용하는 Colab 으로 돌렸습니다.

!pip install SpeechRecognition

이 코드만 치고 돌리면 사실 다 끝난 겁니다.

import speech_recognition as sr

sound_file = '/content/drive/MyDrive/proj/output_before/myang.wav'
r = sr.Recognizer()
with sr.AudioFile(sound_file) as source:
     audio = r.record(source)
text_1 = r.recognize_google(audio, language='ko-KR')
text_1

이렇게 넣으면 해당 텍스트가 나옵니다. 코랩을 google drive로 연결해주고 해당 파일에 음성 파일이 있어서 연결시켜줬습니다.

오디오 파일이 현재 경로에 있으면 굳이 저렇게 치지 않고 with sr.AudioFile("audioName.wav") as source: 

오디오 파일을 직접 넣고 이렇게 치면 됩니다. 참고로 파일 종류는 mp4, mp3는 안되는 점. wav는 가능해서 이것도 변환해줬는데 ffmpeg로 활용했습니다. 이건 자료가 많으니 일단 패쓰. 나중에 시간 나면 변환 방법을 포스팅하겠습니다:)

물론 음성 인식이 완벽한 건 아님...! AI는 아직 데이터가 필요함ㅎㅎ

녹음 했을 때, '지금은 새벽 두시고 이제 적대적 인공신경망 연습을 한다고 영상을 찍고 있습니다' 인데

'지금 새벽 주시고 내일 박대섭 인공신경망 연습을 한다고 영상을 찍고 있습니다.' 로 뜸. 새벽 두시에 즐겁고 행복해하는 건데. 사실 반어법ㅋㅋㅋ 목소리 톤과 말 뜻이 다르다. 언젠가 인공지능에서 이걸 분석해낼 것인가. 단순 텍스트로만 보면 워커홀릭 수준. 목소리 들으면 아 진짜 힘들구나 라고 느껴질텐데ㅋㅋㅋㅠㅠ

일부 단어는 다르게 인식하는 것이라서 사실 여기까지는 뭐 so-so 입니다. 인식하는 것도 정말 신기했고, 생각보단 빠르게 변환해서 상당히 편리했음:) 네이버 클로바 api로 STT 했었는데 구글이 좀 더 정확한 것 같단 느낌적인 느낌이ㅋㅋㅋ

긴 오디오 파일을 텍스트로 변환

문젠... 긴 오디오 파일을 텍스트로 변환하는 건데. 이거 구글에서 나눠준 코드를 써봤는데 이상하게 자꾸 에러가 난다. 30분짜리 음성이라서 구글 API를 써야 하는데 os 경로도 설정해주고 구글 api 신청하면서 내 카드 결제, JSON 파일도 모두 등록하고 코드 짜도 에러가.

import os
os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = '/content/내구글apiJSON파일이름.json'

!ls -l $GOOGLE_APPLICATION_CREDENTIALS

api등록으로 환경설정 셋업해주었다. 그외에

!pip3 install google-cloud-speech 
등등 설치하고

이 부분도 그렇고,

이 부분도...ContextualVersionConflict: (protobuf 3.17.3 (/usr/local/lib/python3.7/dist-packages), Requirement.parse('protobuf>=3.19.0'), {'proto-plus'})

이 부분을 해결하기 위해서 protobuf 설치 엄청하고 다르게 해보고,

본격 두더지 게임. 여기 잡으면 저기 튀어나오고. 저기 잡으면 여기서 튀어나오죠.

이렇게 구글에서 speech recognition notebook 있는 colab파일을 다 돌려보기도 하고,

구글 문서 참고해서 저 코드를 돌려보기도 했는데 이상하게 되지 않았다.ㅎㅎ... 책상앞에 앉아 있는 시간이 몇 시간이 넘어갈 쯤 

일단 밖에 나가고! 차가운 바람을 맞으며 다시 충전하고 좀 더 다르게 시도했다. 시간 상 텍스트만 건지겠음. 이렇게 된 이상 구글로 들어간다. 포아이아.

<다르게 해결>

우선 google cloud platform을 열었습니다. 이거 설정할 때 프로젝트 이름만들고 api 설정해줘야 하는데 그 부분은 옛날에 했던 거라서 사실 까먹었는데 그다지 어렵진 않았습니다. 맨 처음 만든다면 프로젝트 이름이랑 프로젝트 정보를 만들어줘야 할 겁니다. colab으로 하기 위해서 json 코드도 받긴 했는데. 이 플랫폼을 이용하면 굳이 json 코드까진 만들 필요는 없는듯.

브라우저 있고 옆 쪽에 버킷 만들기 있어서 버킷 만들기 클릭, 혹은 중간에 빠르게 시작하기 옆에 있는 버킷 만들기 클릭해도 됩니다.

버킷 이름 지정하고,

데이터 저장 위치 선택. 일단 전부 디폴트로 설정했습니다.

굳이 백업까지.. standard

일단 공개는 안되어서 공개 엑세스 방지 적용

객체 데이터를 보호하는 방법 선택인데. 이것도 해당되는 항목에 클릭

그렇게 다음과 같이 버킷이 만들어졌습니다. 이제 이 버킷에 음성 변환을 할 파일을 올립니다.

파일 업로드 클릭 후 업로드합니다.

 

다음으로 google cloud platform에서 speech-to-Text로 바로 들어갑니다. 그럼 다음과 같이 3가지 순서가 나타납니다.

방금 업로드 했던 파일을 클릭하고,

인코딩 방식 클릭하기.

흠... 디폴트

다음으로 2번째는 한국어로 설정

모델 설정이 있던데 그냥 default 누르고 계속.

고급 설정도 있는데 일단은 결과가 나오는지 확인하는 게 우선이었다.

요 데이터 쓴단 얘기인 것 같다. 일단은 이 부분은 스킵했다. 특정 단어는 잘 캐치하도록 만드는 것 같은데 굳이 그럴 필요는 없어서.

 

이제 저기 작업 공간을 만들 때, 찾아보기 해서 방금 만들었던 작업 공간을 선택해주었다.

요 버킷. 결과만 담을 새로운 작업공간이 필요하면 추가해서 그걸로 만들면 된다. 버킷 선택하고 선택 누르면

이렇게 끝나고 제출을 누르면 된다.

이렇게 대기 중으로 뜹니다. 그런데 시간은 좀 걸려요. 파일이 커서 오래 걸린다. 파일 이름 클릭하면 this transcription is still in progress라고 나옵니다. 변환 중

커피 한 잔 끓이고 마시면서 기다리면 아래와 같이 성공했다고 상태가 뜹니다.

다시 이름 클릭해서 Transcription details로 들어가면 스크립트가 나온다.

시간대별로 스크립트를 만들어줍니다

시간, 언어, 그리고 신뢰도 수준 92% 까지 나옵니다. 스크립트는 비공개라서 여기까지.. 

일단은 이렇게나마 긴 오디오 파일을 STT로 돌려봤습니다! 코드는.. 후... 좀 더 공부해봐야 할 것 같네요. 코랩으로 어떻게 돌리면 되는지. 혹시 google speech 불러올 때 라이브러리 중에 뭔가 버전이 바뀌었는지 등등을 확인해야 할 것 같습니다..

추가로 프로젝트 api 번호 json으로 받는 방법은

나는 관리자다!

여기에서 아이 앰 관리자로 들어가서

서비스 계정 - 키 로 들어가면 해당 수정하기 누르면 다음과 같은 창이 뜹니다.

만들기 누르고 다운 받으면 해당 파일을 구글 드라이브나 프라이빗 저장소에 넣어서 연결해서 쓰면 됩니당.

 

포스팅이 너무 길어졌네요. 오늘은 여기까지!

반응형