Realtime Speech-to-Text
OvenMediaEngine Enterprise 0.20.0.0-1 버전부터 Whisper를 활용한 Realtime Speech-to-Text (STT) 기능을 지원합니다.
OvenMediaEngine (OME) 0.20.0 이상 버전부터 whisper.cpp와의 연동을 통해 실시간 자동 자막을 지원합니다. 이 기능은 Live Audio Stream을 실시간으로 Text로 변환하며, 인식된 음성을 선택적으로 영어로 번역할 수 있습니다.
실시간 변환 성능을 위해 NVIDIA GPU가 필요합니다. CPU를 통한 추론은 속도가 느려 번역 싱크가 맞지 않거나 불완전한 텍스트를 출력할 수 있으므로 지원하지 않습니다.

Prerequisites
NVIDIA GPU 및 Driver
다음 명령어를 사용하여 GPU 및 Driver 상태를 확인하십시오:
Driver가 설치되어 있지 않은 경우, NVIDIA 웹사이트에서 다운로드하거나 OvenMediaEngine Repo에서 제공하는 helper script를 사용하십시오.
공식 Driver: https://www.nvidia.com/en-us/drivers/
OvenMediaEngine Helper Script: https://github.com/OvenMediaLabs/OvenMediaEngine/blob/master/misc/install_nvidia_driver.sh
이 스크립트는 OvenMediaEngine에서 권장하는 버전을 설치합니다. 최신 버전 설치가 필요한 경우, 파라미터를 변경하십시오.
CUDA Toolkit
GPU Acceleration을 사용하여 whisper.cpp를 빌드하려면 CUDA Toolkit이 필요합니다.
사용 중인 GPU 세대와 일치하는 버전을 사용하십시오.
권장 CUDA Toolkit 버전: v12.0 ~ v12.8
whisper.cpp 빌드 및 설치
whisper.cpp 빌드 및 설치OvenMediaEngine 소스 루트 경로에서 최신 prerequisites.sh 스크립트를 실행하여 whisper.cpp를 빌드하고 설치하십시오.
STT Configuration
STT Configuration은 두 개의 섹션으로 나뉩니다.
Server.xml내 <Modules><Whisper>: 시작 시, Model File을 GPU 메모리에 미리 로드합니다.<Application><Subtitles>: STT Output이 기록될 Subtitle Rendition (
label,language등)을 정의합니다.<Application><OutputProfiles><MediaOptions><STT>: STT Engine을 통해 입력된 Audio Track을 Subtitle Rendition에 연결합니다.
중요 변경 사항: <Subtitles><Rendition> 내부의 <Transcription> 요소는 제거되었습니다.
기존 Configuration에서 <Subtitles><Rendition><Transcription>을 사용하고 있었다면 더 이상 동작하지 않습니다. 아래 설명과 같이 <OutputProfiles><MediaOptions><STT><Rendition>으로 마이그레이션하십시오.
Step 1: Model 사전 로드 (Server.xml)
Server.xml)Server 시작 시, 로드할 Whisper Model File을 <Modules><Whisper> 내부에 선언하십시오. 여러 개의 <PreloadModel> 항목을 사용할 수 있습니다. GPU 활용도를 극대화하기 위해 Model은 File Size가 큰 순서대로 로드됩니다.
각 <PreloadModel> 항목은 다음 필드를 가집니다:
Path
Model File의 경로입니다. 절대 경로 또는 Configuration Directory 기준 상대 경로를 지정하여 사용할 수 있습니다.
Devices
Model을 로드할 CUDA Device 인덱스 목록입니다. 쉼표로 구분하여 입력합니다.
사용예:
0,0,1,2
all로 설정하면 사용 가능한 모든 GPU에 로드합니다. 이를 생략하면 기본값은 Device 0입니다.
<PreloadModel>은 선택 사항입니다. 생략하면 해당 Model은 이를 사용하는 첫 번째 Stream이 Publish될 때, On-demand 방식으로 로드됩니다. 따라서, 프로덕션 환경에서는 첫 번째 Stream에서 발생할 수 있는 지연을 최소화하기 위해 사전 로드를 권장합니다.
Step 2: Subtitle Rendition 정의
STT Output이 기록될 Subtitle Track을 정의합니다. <Subtitles>에 대한 자세한 내용은 Subtitles 섹션을 참조하십시오.
Step 3: OutputProfiles에서 STT 구성
OutputProfiles에서 STT 구성<OutputProfiles><MediaOptions><STT> 내 Audio-to-Subtitle 매핑마다 하나의 <Rendition>을 추가하십시오. <OutputSubtitleLabel> 값은 <Subtitles>에 정의된 <Label>과 일치해야 합니다.
<STT><Rendition> configuration에는 다음 옵션이 포함됩니다:
Engine
사용할 STT Engine을 선택합니다.
현재는
whisper만 지원합니다.
Model
whisper.cpp Model File의 경로입니다. 절대 경로 또는 Configuration Directory (Server.xml이 위치한 경로) 기준, 상대 경로를 사용할 수 있습니다.
InputAudioIndex
변환할 Input Stream 내 Audio Track의 Index입니다.
기본값은
0이고, 이는 첫 번째 Audio Track을 의미합니다.
OutputSubtitleLabel
변환 결과를 기록할 Subtitle Rendition의 Label입니다. 이 값은 <Subtitles>에 정의된 값을 사용합니다.
SourceLanguage
Input Audio의 언어 코드입니다. ISO 639-1 형식을 사용합니다.
언어 코드 예:
ko,en,ja
자동 감지 기능을 사용하려면 auto로 설정하십시오.
Translation
true로 설정하면 인식된 Text를 영어로 번역합니다.
현재 Whisper는 영어 번역만 지원합니다.
StepMs
각 추론 호출 전에 수집할 새로운 Audio 길이 (밀리초)입니다.
기본값은
2000입니다.
이값을 낮추면 Subtitle 지연은 줄어들지만 GPU 부하가 증가할 수 있습니다.
LengthMs
각 추론 호출 시, Whisper에 전달되는 Audio Window의 전체 길이 (밀리초)입니다.
기본값은
10000입니다.
Window가 클수록 Model이 더 많은 문맥을 확보할 수 있어 정확도 향상에 도움을 줄 수 있습니다.
KeepMs
Context Reset 이후 이전 Window에서 다음 Window로 유지할 Audio 길이(밀리초)입니다.
기본값은 1500입니다.
Window 경계에서 단어가 잘리는 현상을 줄이는 데 도움을 줄 수 있습니다.
Modules
이 STT Rendition을 실행할 GPU를 선택합니다. Video Encoder Modules와 동일한 형식 (nv:0, nv:1)을 사용합니다. 이를 생략하면 GPU 0이 선택되며, 여러 Rendition을 서로 다른 GPU에 분산하려는 경우에 사용하십시오.
Model
Model File을 https://huggingface.co/ggerganov/whisper.cpp에서 다운로드할 수 있습니다:
ggml-small.bin과 같은 더 작은 Model은 더 빠른 추론 속도를 제공하는 대신 정확도가 낮습니다.ggml-medium.bin또는ggml-large.bin과 같은 더 큰 Model은 더 높은 정확도를 제공하지만, 그만큼 더 많은 GPU 메모리와 연산 시간이 필요합니다.
REST API를 통한 Runtime Control
STT는 Server를 재시작하거나 Stream을 다시 생성하지 않아도 Runtime 중 일시 중지하거나 재개할 수 있습니다. 이 기능은 특정 Stream에서 일시적으로 변환을 비활성화해야 하는 경우에 유용합니다. 예를 들어, 광고 중이거나, 해당 Stream 내 Audio 비중이 낮은 경우 이 기능을 통해 GPU Resource를 절약할 수 있습니다.
요청/응답 상세 및 오류 코드를 포함한 전체 API는 STT Control을 참조하십시오.
POST :enableStt
해당 Stream에 대해 STT 추론을 재개합니다.
POST :disableStt
STT 추론을 일시 중지하며, GPU 처리 없이 Audio Frame을 Drop합니다.
POST :sttStatus
현재 활성화 상태와 Rendition별 Configuration을 조회합니다.
시작 시, STT 비활성화하기
<STT> Block 내부에 <Enable>false</Enable>를 설정하면, STT가 비활성화된 상태 (일시 중지 상태)로 시작할 수 있습니다. 이 경우 Stream이 :enableStt Call을 받기 전까지 GPU 추론을 수행하지 않습니다.
Last updated