본문 바로가기
다양한 TIP

STT(Speech To Text) 기술 오픈소스 및 예제(Google, OpenAI Whisper)

by 유기농프로그래밍 2023. 8. 31.
반응형

STT(Speech To Text) 란 무엇인가요?

사람이 말하는 음성 언어를 컴퓨터가 해석해 그 내용을 문자 데이터로 전환하는 처리하는 것입니다.

 

아래와 같이 음성을 입력하면 전처리로 잡음처리 및 특징추출 후 음향모델과 언어모델, 발음사전 등을 이용한 디코더로 음성을 텍스트로 변환하여 결과를 내는 프로세스입니다.

STT란 무엇인가? 로직

STT는 어디에 쓰일까요?

기본적으로 STT는 회의록, 유튜브자막, 인터뷰, 통화녹취, 상담기록, AI 스피커 등에 사용됩니다. VUI라고도 불리는 Voice User Interface에서도 사람의 음성을 인식하여 처리하는 방식에 사용되기도 합니다.

"Siri야"나 "하이 빅스비"와 같이 핸드폰 조작이나 차량 음성인식 같은 곳에서 음성추출 후 해당 문장의 내용을 바탕으로 액션을 취하는 분야도 있습니다.

 

점점 산업화가 통합되어지면서 새로운 시장을 창출해나갑니다. 그러한 주요한 길목에 있는 음성인식, 어떻게 내가 사용해야할지 이제 알아보도록 하겠습니다.

 

오픈소스 사용방법

오픈소스는 크게 두가지를 소개합니다.

Speech Recognition

첫번째는 Speech Recognition이라는 음성인식 라이브러리를 사용하는 방법입니다.

python에서 아래 두가지 라이브러리를 설치합니다.

pip install SpeechRecognition
pip install pyaudio

이제 python 코드를 작성할건데요.

 

import speech_recognition as sr

# 음성 인식 객체 생성
recognizer = sr.Recognizer()

# 음성 파일 경로
audio_file_path = "C:\\Users\\seahrin\\sample.wav"

# 음성 파일 불러오기
with sr.AudioFile(audio_file_path) as source:
    audio_data = recognizer.record(source)

# Google Web Speech API를 사용하여 음성을 텍스트로 변환
try:
    text = recognizer.recognize_google(audio_data, language="ko-KR")
    print("인식된 텍스트:", text)
except sr.UnknownValueError:
    print("음성을 인식하지 못했습니다.")
except sr.RequestError as e:
    print(f"Google Web Speech API 요청 에러: {e}")

간단하게 설명하자면, 일단 wav 음성파일이 필요합니다. wav 음성파일은 mp3에서 변환하면 되는데, ffmpeg 라이브러리를 사용하면 됩니다.

이 코드에서는 변환한 파일을 가지고 있다고 가정하고 시작합니다.

 

먼저 음성파일을 가져와서, recognize_google 함수를 이용합니다. 여기서 language를 선택하지 않으면 영어를 기본으로 하는 것 같습니다. 한국어인 ko-KR를 입력해주고 나서야 정상적인 한국어 음성인식이 되었습니다.

 

기본적으로 아래와 같이 여러회사에서 음성인식에 대한 함수를 제공합니다. 하지만 API사용 키를 발급받아야하고, 해당 회사의 라이브러리를 추가 설치해야합니다.

 

이 중에서 recognize_google() 을 사용한 것은 기본 API 키가 있어서 바로 사용이 가능하기 때문입니다.

recognize_sphinx()
recognize_bing()
recognize_google()
recognize_google_cloud()
recognize_houndify()
recognize_ibm()
recognize_wit()

OpenAI Whisper

두번째 방법은 OpenAI에서 개발한 자동 음성 인식 모델인 Whisper를 이용하는 것입니다.

 

680000 시간 분량의 다국어 및 다목적 감독 데이터를 학습했다고 하며 오픈 소스로 공개되었기 때문에 Python 설치로 사용 가능합니다.

크기 매개변수 영어 전용 모델 다국어 모델
tiny 39M O O
base 74M O O
small 244M O O
medium 769M O O
large 1550M N/A O

 

환경(테스트장비 스펙)

OS: Ubuntu 20.04.4 LTS
CPU: Intel(R) Core(TM) i9-10920X CPU @ 3.50GHz
RAM: 128G
그래픽카드: Nvidia 지포스 RTX 3090 24GB x 2
Python: python3.8.10

 

설치내용

pip install git+https://github.com/openai/whisper.git
pip3 install git+https://github.com/openai/whisper.git
pip3 install --upgrade --no-deps --force-reinstall git+https://github.com/openai/whisper.git
sudo apt update && sudo apt install ffmpeg

 

실행 명령어

whisper sample.wav --model large

 

실행하면 아래와 같은 결과가 나옵니다. 샘플파일은 제가 구독하고 있는 1분미만 유튜버 영상 내용인데요.

(문제가 되면 삭제하겠습니다)

 

tiny 와 large 사이에 정확도가 많이 다릅니다.

[tiny]

Detecting language using up to the first 30 seconds. Use `--language` to specify the language
Detected language: Korean
[00:00.000 --> 00:04.800]  자 오늘은 아직도 이기능은 모르는 분들이 많아 제작한 영상인데요.
[00:04.800 --> 00:09.200]  삼성이나 LG 등 안드로이드 스마트폰 체감 속도를 바로 빠르게 하는 방법입니다.
[00:09.200 --> 00:14.000]  이게 너무 너무 간단해서 아는 사람들은 세폰 사면 가장 먼저 세팅하는 기능인데요.
[00:14.000 --> 00:16.000]  빠르고 쉽게 알려드릴 테니 바로 따라하세요.
[00:16.000 --> 00:20.800]  일단 위에 서스크로를 내리고 이 작은 톱님 모양은 눌러서 설정에 들어가줍니다.
[00:20.800 --> 00:24.800]  그리고 가장 밑에 휴대전화 정보에 들어가면 이 화면이 나오는데요.
[00:24.800 --> 00:29.600]  여기서 다시 소프트웨어 정보를 누르면 굉장히 복잡해 보이는 창이 나옵니다.
[00:29.600 --> 00:31.760]  근데 다행히 우리가 할 건 딱 하나에요.
[00:31.760 --> 00:35.200]  여기 빌드 번호라는 부분을 그냥 대여서 번 눌러주면 되는데요.
[00:35.200 --> 00:38.000]  그럼 개발자 모드가 켜졌다는 메세지가 됐는데
[00:38.000 --> 00:39.040]  이러면 성공입니다.
[00:39.040 --> 00:43.600]  자 아까 휴대전화 정보 밑에 아무것도 없었는데 개발자 옵션이 생긴 게 보이시죠?
[00:43.600 --> 00:44.560]  바로 들어가줍니다.
[00:44.560 --> 00:46.400]  이제 딱 하나만 하면 되는데요.
[00:46.400 --> 00:48.480]  중간보드 약간 더 내려가다 보면
[00:48.480 --> 00:50.880]  이렇게 세 가지 배유를 도전할 수 있습니다.
[00:50.880 --> 00:53.760]  우리는 이걸 다 사용 안함으로 바꿔줄 거예요.
[00:53.760 --> 00:57.360]  이 세 가지를 다 사용 안함으로 바꿔셨다면 완전 끝나겁니다.
[00:57.360 --> 01:00.400]  자 이제 여러분의 스마트폰이 얼마나 빨라졌는지
[01:00.400 --> 01:01.680]  직접 써보시면 됩니다.
[01:01.680 --> 01:03.920]  오늘도 짧은 영상 봐주셔서 감사합니다.
[01:03.920 --> 01:06.720]  위크하셨다면 좋아요와 구독 부탁드릴게요.

[large]

 

Detecting language using up to the first 30 seconds. Use `--language` to specify the language
Detected language: Korean
[00:00.000 --> 00:04.820]  자 오늘은 아직도 이 기능을 모르는 분들이 많아 제작한 영상인데요
[00:04.820 --> 00:09.300]  삼성이나 엘지 등 안드로이드 스마트폰 체감속도를 바로 빠르게 하는 방법입니다
[00:09.300 --> 00:13.980]  이게 너무너무 간단해서 아는 사람들은 새폰 사면 가장 먼저 세팅하는 기능인데요
[00:13.980 --> 00:16.020]  빠르고 쉽게 알려드릴 테니 바로 따라하세요
[00:16.020 --> 00:20.860]  일단 위에서 스크롤을 내리고 이 작은 톱니 모양을 눌러서 설정에 들어가줍니다
[00:20.860 --> 00:25.220]  그리고 가장 밑에 휴대전화 정보에 들어가면 이 화면이 나오는데요
[00:25.220 --> 00:29.740]  여기서 다시 소프트웨어 정보를 누르면 굉장히 복잡해 보이는 창이 나옵니다
[00:29.740 --> 00:31.820]  근데 다행히 우리가 할 건 딱 하나에요
[00:31.820 --> 00:35.240]  여기 빌드 번호라는 부분을 그냥 대여섯 번 눌러주면 되는데요
[00:35.240 --> 00:39.040]  그럼 개발자 모드가 켜졌다는 메시지가 드는데 이러면 성공입니다
[00:39.040 --> 00:43.660]  자 아까 휴대전화 정보 밑에 아무것도 없었는데 개발자 옵션이 생긴 게 보이시죠?
[00:43.660 --> 00:44.600]  바로 들어가줍니다
[00:44.600 --> 00:46.440]  이제 딱 하나만 하면 되는데요
[00:46.440 --> 00:50.940]  중간보다 약간 더 내려가다 보면 이렇게 세 가지 배율을 조정할 수 있습니다
[00:50.940 --> 00:53.880]  우리는 이걸 다 사용 안 함으로 바꿔줄 거에요
[00:53.880 --> 00:57.420]  이 세 가지를 다 사용 안 함으로 바꾸셨다면 완전 끝난 겁니다
[00:57.420 --> 01:01.760]  자 이제 여러분의 스마트폰이 얼마나 빨라졌는지 직접 써보시면 됩니다
[01:01.760 --> 01:03.980]  오늘도 짧은 영상 봐주셔서 감사합니다
[01:03.980 --> 01:06.620]  유익하셨다면 좋아요와 구독 부탁드릴게요

비교해보면, 읽은 그대로를 적는게 tiny라면, large는 앞뒤 문맥에 맞게 단어변형이나 정확도가 훨씬 높은 걸 볼 수 있습니다.

 

위의 음성파일을 처리하는 시간을 정리했습니다. 스펙은 그래픽카드 3090 2개가 있음을 참고해주세요.

모드 Tiny Base Small Medium Large
처리시간 9초 10초 17초 30초 42초

 

Whisper AI를 이용한 GUI도 누군가 만들었는데, 쉘에서 사용하는 것보다 훨씬 사용하기 쉽습니다. 다만 나만의 프로그램을 만들어서 접목할거라면 이렇게 쉘명령어를 래핑해서 사용하는 것도 좋을 것 같네요.

반응형

댓글