예전부터 좀 궁금했었던게 하나 있었는데 "유튜브 자막은 어떻게 달았을까?" 라는 궁금증이 있었습니다.
이거와 관련되어서 궁금증을 해결해준게 바로 이번 AI 음성 인식 서비스 였습니다.
유료 결제를 해야하는 부분이 있어서 그전까지만 했었습니다.

음성 인식 -> 텍스트 변환 : Speach-To-Text(STT)라고 불립니다.
아래 같은 과정으로 크게 진행되는데요
대표적인 활용 사례는 아래가 있습니다.
- 스마트폰 가상 비서 서비스 - 빅스비, 시리
- 자동차 네비게이션 서비스 - 카카오 내비, 티맵
- 음성 메모 서비스
자동 음성 인식 - 컴퓨터가 사용자의 말을 자동으로 인식하고 이해하는 시스템
스팩트로그램 - 시간에 따른 소리 주파수를 2차원 이미지로 표현한 그래프
SRT 포맷 - 비디오 파일에 대한 자막을 저장하는데 사용되는 텍스트 기반 파일 포맷

1단계 : 사용자가 원하는 유튜브 영상 링크를 입력하게 해주는 유튜브 링크 입력 UI 필요
2단계 : 유튜브 링크를 기반으로 영상 정보 및 음성정보를 출력하는 "유튜브 정보 추출기" 구현
3~4단계 : 음성 정보를 음성 인식 모델 추론기에 입력 -> 텍스트로 변환 -> 후처리로 자막파일로 생성 -> UI로 보기 및 다운로드 가능
5단계 : 이제 영상과 자막 합쳐서 새로운 영상 생성
음성 인식모델이 갖추어야할 기본 능력
발화감지 - 음성 정보에 사람의 말 포함 감지
발화 시간 감지 - 어느 시점에 사람의 말이 등장했는지 감지
언어 감지 - 어떤 언어인지 감지
OpneAI의 whisper모델 사용 예정
680,000시간 분량의 다국어 음성 데이터를 학습함
사실 글로는 어려워서 글 아래있는 그림으로 보면 편합니다;;
트랜스포머로 구현된 인코더-디코더 구조
토큰 구조
PREV : 이전 텍스트 정보임을 표시하는 토큰
SOT : 음성 텍스트 변환 작업의 시작을 표시하는 토큰
No SPEECH : 음성 속 발화 없으면 발생하는 토큰
LANGUAGE TAG : 음성의 언어 나타내는 토큰 EN, KO
TRANSCRIBE : 음성-텍스트 변환 작업을 표시
NO TIMESTAMPTS : 발화 시간 감지를 하지 않도록 설정하는 경우 이를 표시하는 토큰
EOT : 음성-텍스트 변환 작업의 마지막을 표시하는 토큰

colab
from IPython.display import Audio # 오디오 컨텐츠를 불러오기 위해 사용함
from openai import OpenAI # OpenAI의 모델을 가져오기 가능
import whisper
model = whisper.load_model("large")
audio_path = "examples/example.wav"
Audio(audio_path)
result = model.transcribe(audio_path)
result["text"]
" 그는 괜찮은 척하려고 애쓰는 것 같았다." 라는 결과가 나옵니다
그래서 이걸 보고 react에서 음성을 보내면 flask에서 텍스트로 변환 해서 응답 반환하는 사이트를 만들었는데 실패했습니다.
환경의 차이
IPython.display.Audio는 코랩의 노트북 환경에서 음성을 직접 재생할 수 있는 기능을 제공하지만 로컬 서버에서는 웹 브라우저에서 음성을 처리하는 방식과 관련하여 웹 애플리케이션의 HTTP 요청과 응답을 다루어야 합니다
CORS 문제
이건 flask에 cors해결하는 방식을 적었는데도 계속 떠서 결국 해결하지 못했습니다.. 내부ip끼리 제대로 연동이 안되는 문제가 있어서 해결을 해야할거 같습니다.
저번과 마찬가지로 꽤나 간단하게 AI모델을 가져와서 실제 구현을 볼 수 있었습니다.
각 AI 서비스들이 어떻게 돌아가고 내가 만들 포트폴리오에 적합하게 넣기 위해 노력...해보겠습니다