본문 바로가기
취미

[STT] Python STT AWS Transcribe

by climb_JJIYO 2024. 1. 23.
반응형

AWS SDK는 AWS의 다양한 기능을 개발자가 손쉽게 활용할 수 있도록 지원하는 도구 모음입니다. 이 중에서도 음성을 텍스트로 변환하는 기능은 음성 데이터를 효과적으로 처리하고 이를 텍스트 형식으로 변환하여 활용할 수 있는 중요한 기능 중 하나입니다. 이 글에서는 AWS SDK를 사용하여 음성을 텍스트로 변환하는 과정에 대해 설명하겠습니다.

AWS Transcribe 으로 음성을 텍스트로 변환

AWS Transcirbe에 대한 자세한 설명은 AWS > 설명서 > Transcirbe > 개발자 가이드에 있습니다.

 

1. AWS 가입 : AWS에 계정을 생성합니다.

2. IAM 사용자 생성 : 1-1에서 생성한 계정은 root계정, 사용자 계정을 생성합니다.

3. 액세스 ID/Key 받습니다.

4. AWS CLI 버전2 설치합니다.

  - aws config

    AWS Access Key ID : 액세스 ID 입력

    AWS Secret ACCESS Key : 액세스Key 입력

    Default region name : ap-northeast-2

    Defalut output format : json

5. 사용자 계정으로 로그인 하여 s3버킷 만듭니다.

 

1. AWS SDK for Python 활용

AWS Transcribe 사용하여 음성파일을 텍스트로 변환할 수 있는 코드입니다.

AWS의 SDK를 파이썬 환경에서 사용합니다.

from urllib import request
from ast import literal_eval
import boto3
from botocore.config import Config

bucket = '버킷이름'
file_nm = '음성파일이름'
file_dir = '음성파일위치'

# 음성파일
audio = open('{}{}.wav'.format(file_dir,file_nm), 'rb')
# 파일 S3에 업로드
s3 = boto3.resource('s3')
upload = s3.Bucket(bucket).put_object(Key='{}.wav'.format(file_nm), Body=audio)

# Transcribe를 위한 Config 설정
my_config = Config( 
	region_name = 'ap_northeast-2',
    signature_version = 'v4',
    retries={
    	'max_attempts':5,
        'mode':'standard'
    	}
    )

# Transcribe 실행
transcribe =boto3.client('transcribe', config=my_config)
# s3에 업로드한 파일 URL
job_uri = 'https://s3.ap-northeast-2.amazonaws.com/{}/{}.wav'.format(bucket,file_nm)
transcribe.start_transcription_job(
    TranscriptionJobName=file_nm,
    Media={'MediaFileUri': job_uri},
    MediaFormat='wav',
    LanguageCode='ko-KR',
    Settings={
        'ShowSpeakerLabels' : True, # 화자분리 기능 True or False
        'MaxSpeakerLabels' : 2 # 화자수 
    }
)

# Transcribe job 작업이 끝나면 결과값 불러옴
while True:
    status = transcribe.get_transcription_job(TranscriptionJobName=file_nm)
    if status['TranscriptionJob']['TranscriptionJobStatus'] in ['COMPLETED', 'FAILED']:
        save_json_uri = status['TranscriptionJob']['Transcript']['TranscriptFileUri']
        break
        
# Transcribe 결과가 저장된 웹주소
save_json_uri = status['TranscriptionJob']['Transcript']['TranscriptFileUri']   

 # 웹서버 결과 파이썬으로 불러오기
load = request.urlopen(save_json_uri)
confirm = load.status
rst = load.read().decode('utf-8')

# 문자열을 딕셔너리로 변환 후 결과 가져오기
transcribe_text = literal_eval(rst)['results']['transcripts'][0]['transcript']

print(transcrib_text) 

 

Transcribe Job name은 중복 불가합니다.

즉, 같은 이름으로 Transcirbe를 실행하면 Badquest오류가 발생합니다.

 

2. AWS Transcribe Job 삭제 코드

 

등록된 Job을 삭제하는 코드입니다.

# Job 삭제하기
del_transcribe =boto3.client('transcribe', config=my_config)
res = del_transcribe.delete_transcription_job(
    TranscriptionJobName = file_nm
)

res['ResponseMetadata']['HTTPStatusCode'] == '200'

 

3. AWS S3에 업로드된 파일 삭제 코드

s3에 업로드된 파일을 삭제하는 코드입니다.

# 같은 이름으로 s3에 업로드하면 덮어쓰기가 됨
client = boto3.client('s3')
s3_client_delete_object(Bucket=bucket, Key='{}.wav'.format(file_nm)

 

결론적으로, AWS가 제공하는 SDK for Python 코드를 참고하면 더 많은 기능 활용할 수 있습니다. AWS SDK로 음성을 텍스트로 변환하는 기능은 음성 데이터 처리 및 텍스트 변환에 매우 유용합니다. 이를 활용하여 다양한 응용 프로그램 및 서비스를 개발할 수 있으며, 이를 통해 사용자 경험을 향상시키고 비즈니스에 가치를 더할 수 있습니다.

반응형