AWS/실습 기록

Amazon transcribe로 한국어 음성인식 Speech To Text(STT) 사용하기

daeunnniii 2021. 8. 2. 20:31
728x90
반응형

프로젝트 진행 시 음성인식 기능을 포함해야해서 구글, 카카오, 네이버, ETRI, Mozilla 등등 정말 많은 STT API를 분석하고 실습해보았다. 다들 장단점이 있는 것 같다. 어떤 STT API는 정확도는 비교적 높지만, 제한 시간이 매우 짧았고, 또 어떤 STT API는 제한 시간이 비교적 길었지만 정확도가 비교적 떨어졌다. 따라서 이번에는 Amazon에서 제공하는 STT API를 사용해보려고 한다.

 

AWS Transcribe의 경우에는 프리티어로 사용할 경우 매월 60분이 무료이다! 60분이 넘지 않도록 조심하자ㅎㅎ

1. 사전 준비

먼저 AWS transcribe를 이용하기 위해서는 음성파일을 올릴 S3 버킷이 생성되어있어야하고, AWS CLI가 설치되어있어야한다. 이 부분에 대해서는 아래 링크를 참고하면 된다!

 

https://daeunnniii.tistory.com/120

 

AWS S3 버킷 생성하고 파일 업로드 및 삭제 방법 알아보기

1. AWS S3란? S3는 Simple Storage Service의 약자로, AWS에서 제공하는 파일 저장 인터넷 저장소이며 용량은 무제한이다. HTTP를 이용하여 파일 접근 및 업로드, 다운로드가 가능하다. S3는 버킷(Bucket)과 객

daeunnniii.tistory.com

https://daeunnniii.tistory.com/121

 

AWS CLI 설치 및 초기 설정하기

1. AWS CLI란? AWS CLI는 AWS 서비스를 관리할수 있는 통합도구이며, AWS를 Command Line Interface로 사용할 수 있어 간편하다. 2. AWS Access key 생성 이 부분은 이미 액세스 키가 이미 있다면 해당 액세스 키..

daeunnniii.tistory.com

 

 

2. AWS Transcribe 사용하기

다음은 AWS Transcribe를 사용하기 위한 파이썬 코드이다.

음성인식에 적용할 음성파일을 S3 버킷에 업로드 해놓았으면, 해당 URL을 넣어주고, JOB 이름은 원하는 이름으로 넣어준다. 그리고 코드를 실행 준다!

from __future__ import print_function
import time
import boto3
transcribe = boto3.client('transcribe')
job_name = "[job 이름 입력]"
job_uri = "s3://[버킷이름]/[음성파일 이름]"
transcribe.start_transcription_job(
    TranscriptionJobName=job_name,
    Media={'MediaFileUri': job_uri},
    MediaFormat='wav',				#형식 지정
    LanguageCode='ko-KR'
)
while True:
    status = transcribe.get_transcription_job(TranscriptionJobName=job_name)
    if status['TranscriptionJob']['TranscriptionJobStatus'] in ['COMPLETED', 'FAILED']:
        break
    print("Not ready yet...")
    time.sleep(5)
print(status)

 

3. AWS Transcribe 실행 결과

5분이 살짝 넘는 음성 파일을 넣었는데, Not ready yet이 6번 뜬 뒤 결과가 출력 되었다!

생각보다 빨리 결과가 출력돼서 놀랐다.

결과는 다음과 같다. "result"의 value 값으로 결과가 들어있다. 그리고 이 부분은 transcripts와 items로 나뉘는데, transcripts에는 음성을 텍스트로 변환한 결과가 들어있고, item에는 각 어절마다의 시작 시간, 종료 시간, 변환 결과 등이 나온다.


{
   "jobName":"KoreanSampleVoice",
   "accountId":"002409590457",
   "results":{
    	"transcripts":[
        	{
            	"transcript":"안녕하세요. ////생략//// 감사합니다."
            }
         ],
         "items":[
         	{
            	"start_time":"0.69",
                "end_time":"1.24",
                "alternatives":[{"confidence":"1.0","content":"안녕하세요"}],
                "type":"pronunciation"
           	},
            {
            	"alternatives":[{"confidence":"0.0","content":"."}],
                "type":"punctuation"
            },
            {
            	"start_time":"1.24",
                "end_time":"1.93",
                "alternatives":[{"confidence":"0.6154","content":"검사입니다"}],
                "type":"pronunciation"
             },
             {
             	"alternatives":[{"confidence":"0.0","content":"."}],
                "type":"punctuation"
             },             
			////////생략////////
			{
            	"start_time":"309.84",
                "end_time":"310.67",
                "alternatives":[{"confidence":"0.9994","content":"감사합니다"}],
                "type":"pronunciation"
             },
             {
             	"alternatives":[{"confidence":"0.0","content":"."}],
                "type":"punctuation"
             }
		]
	},
    "status":"COMPLETED"
}

 

그리고 AWS의 Amazon Transcribe>Transcription jobs에 들어가면 python 코드로 transcription했던 내역이 저장되어있다. job 이름을 클릭해보자.

그러면 job에 대한 세부사항이 나와있고, 음성인식 결과를 다시 확인할 수 있다!

 

마지막으로 정확도에 대해서 말해보자면, 개인적으로 나쁘지 않았다. 하지만 이름이나, 생소한 단어, 아니면 조금 흐리게 들리는 단어의 경우에는 정확도가 조금 떨어지는 것 같긴 했다. 음성번역 결과를 보다가 셰문서라고 적혀져있길래 이게 뭐지??하고 음성파일을 다시 들어봤더니 새문서였다...^0^

지금까지 SST API를 사용해본 결과, 한 문장의 짧은 음성파일을 넣었을 경우 대부분 다 잘 인식했지만, 긴 음성파일을 넣게 되었을 경우 속도가 매우 느려지거나 정확도가 떨어지는 부분이 많았다. 개인적으로 AWS는 이러한 점에서 비교하면 중상????정도라고 생각한다. (나쁘지 않다는 뜻)

 

웹서비스에 AWS Transcribe로 음성인식 기능을 구현하게 된다면, 업로드 된 음성 파일을 S3 버킷에 음성 파일을 올리고 AWS Transcribe를 적용한 json 파일을 S3 버킷에 다시 저장한 뒤 결과를 빼올 수 있는 방법들을 조금 더 고려해봐야할 것 같다.

728x90
반응형