프로젝트 소개
AWS Transcribe를 이용해 자막 파일을 만들기
- 유튜브 오디오 추출 사이트에서 오디오 파일을 만들고, S3에 업로드
- S3에 있는 파일을 람다 함수를 이용해 Transcribe를 자동으로 돌려서 결과(음성->문자 파일)를 S3 버킷에 업로드
추가적으로?
그걸 다시 가져와서, Translate 돌리기
또는 S3에 오디오 파일을 자동으로 저장하기 등등..
아직은.. 내 손으로 한 건 없다
그래서 뭘 했냐면
S3 버킷을 생성해 거기에 오디오 파일을 올려둔 상태이다
(버킷 이름은 온 AWS 세상에서 고유해야함)
람다 함수를 생성해서
https://docs.aws.amazon.com/transcribe/latest/dg/subtitles.html
위 링크에 있는 코드를 가져와서 돌린다
참고로 python버전으로 람다 함수를 생성했다
from __future__ import print_function
import time
import boto3
transcribe = boto3.client('transcribe', 'us-west-2')
job_name = "my-first-transcription-job" #유일무이
job_uri = "s3://DOC-EXAMPLE-BUCKET/my-input-files/my-media-file.flac" #오디오파일이 담긴 버킷
transcribe.start_transcription_job(
TranscriptionJobName = job_name,
Media = {
'MediaFileUri': job_uri
},
OutputBucketName = 'DOC-EXAMPLE-BUCKET', #결과를 저장할 s3 버킷 이름
OutputKey = 'my-output-files/', #s3버킷 내에 저장될 객체 이름
LanguageCode = 'en-US', #AWS Transcribe에서 지원할 언어
Subtitles = {
'Formats': [
'vtt','srt' #자막 파일 출력 형식 지정
],
'OutputStartIndex': 1 #첫번째 자막 세그먼트에 할당되는 시작 값을 의미, 0과 1 중 1을 추천
}
)
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)
주석 단 부분만 수정하면 되는 것이다...
근데 아마 저렇게 하고 람다 함수 생성해서 돌리면 제대로 되지 않을 것
왜냐면 boto3 버전이 달라서..
그렇기에..,,다시 한 번..
cmd창이든 터미널이든 boto3 라이브러리가 든 파이썬 zip 파일을 만들기 위해 아래 명령어를 입력한다
이때 pip3가 설치되어 있어야 한다..
모르겠으면 전 게시물 보세용
pip3 install boto3 폴더이름
그러면 뭐 다운이 되겠지?
나는 python이라는 폴더에 담아두었다
C드라이브 밑에 python이라는 폴더를 만들어서 그 밑에 boto3 라이브러리가 다운받아졌다
모르겠으면 이 링크 참고하기 : https://aws.amazon.com/premiumsupport/knowledge-center/lambda-python-runtime-errors/?nc1=h_ls
그리고 이 python 파일을 .zip으로 압축하면 된다
그리고 이제 생성한 람다 함수, 거기에 레이어(layer, 계층)을 넣어야 한다
AWS Lambda 람다 콘솔 - 추가리소스 중 계층 선택
https://us-east-1.console.aws.amazon.com/lambda/home?region=us-east-1#/layers
계층 생성 누르기
이름 넣어주고 [.zip파일 업로드] 선택하고 [업로드] 버튼을 눌러서 위에서 만든 python.zip 파일을 넣어준다.\
boto3 라이브러리가 담긴 zip 파일을 넣으면 됨~!~!
그리고 [생성]버튼을 눌러서 마무리
이걸 이제 아까 생성한 람다 함수에 추가하면 된다
어떻게 할거나면
아까 생성한 람다 함수 페이지에서 맨 밑으로 내리면 [계층]이라는 게 있다
[Add a layer]를 눌러주고
사용자 지정 계층이나 ARN 지정으로 선택하면 되는데
원래는 [사용자 지정 계층]에 있겠지만, 만약 없다면 [ARN 지정]을 눌러서 ARN을 추가하면 된다
이 ARN은 우리가 방금 만든 boto3_python이라는 계층 페이지에서 볼 수 있다
가린 링크 저게 바로 ARN인 것이다..
이렇게 추가해주고, 확인 버튼 누르고 [추가]버튼 누르면 계층이 추가된다!
짝짝 이로서 새로운 버전의 boto3를 사용할 수 있음!
좀 웃긴게 뭐냐면...
코드 넣고 [Deploy] - [Test] 하면 이렇게 로그가 뜨는데 상태도 Failed라고 뜬다
근데 정작 버킷을 확인해보면?
버킷 내에 객체에 이렇게 뜨는 것이다... 욱김...,,, 뭐지 왜지..?
암튼 파일을 확인 해보면,,.. srt형식이랑 vtt, json 파일 모두 잘 만들어졌고,
시간이랑 문장 모두 잘 추출되었음을 확인할 수 있다
신기하고 어리둥절..
아 만약에
{ "errorMessage": Task timed out after 3.06 seconds" }
라는 에러 메시지가 뜬다면
람다 함수 페이지 - 구성 - 일반 구성 - 편집을 눌러서 제한 시간을 늘려주면 된다. 기본은 3초인데 10초로 늘려줌
사실 이거 안고쳐도 Transcribe는 잘 된다..싱기
참고한 블로그 : https://dev.classmethod.jp/articles/amazon-transcribe-subtitles-parameter-error-on-lambda-boto3/
오늘은 여기까지!
'AWS > PROJECT' 카테고리의 다른 글
EC2 인스턴스가 인터넷 연결이 되지 않을 때... (0) | 2022.12.23 |
---|---|
AWS IoT Greengrass 구성요소로 기계학습 추론 수행하기 (0) | 2022.12.13 |
AWS Lambda로 S3 버킷에 있는 파일의 형식 바꾸기 (0) | 2022.09.19 |
[프로젝트] json 형식을 txt로 변환해서 translate 실행 (0) | 2022.09.06 |
[프로젝트] AWS Translate 사용 방법 (0) | 2022.08.20 |