Vosk 확장 프로그램
기본적으로 Runtime Speech Recognizer 플러그인은 인식을 위해 whisper.cpp를 사용합니다. whisper.cpp에서 GPU 가속을 지원하지 않는 플랫폼, 특히 Meta Quest와 같은 Android 기반 플랫폼에서는 인식이 CPU + intrinsics로 대체되어 속도가 느리고 배터리 소모가 큽니다. Vosk 확장 플러그인은 제한된 하드웨어에서 잘 작동하고 특히 Meta Quest에서 뛰어난 성능을 보이는 경량 음성 인식 툴킷인 Vosk 기반의 대체 제공자를 추가합니다.
whisper.cpp와 Vosk 사이를 전환하는 것은 Blueprint 노드 몇 개만으로 충분하며, 다시 되돌리는 것도 그만큼 쉽습니다. 따라서 두 옵션을 모두 유지하고, 필요하다면 플랫폼별로 제공자를 선택할 수 있습니다.
설치
Vosk 확장 기능을 사용하려면:
-
메인 Runtime Speech Recognizer 플러그인이 프로젝트에 이미 설치되어 있는지 확인하세요.
-
Vosk 확장 플러그인을 여기에서 다운로드하세요.
-
다운로드한 아카이브에서 폴더를 추출하여 프로젝트의
Plugins폴더에 넣습니다 (이 폴더가 없으면 생성합니다). -
프로젝트를 다시 빌드하세요 (이 확장 기능은 C++ 프로젝트가 필요합니다.)
-
Vosk 확장 프로그램은 Unreal Engine 5.0부터 5.8까지 지원합니다.
-
이 확장 프로그램은 소스 코드로 제공되며 사용하려면 C++ 프로젝트가 필요합니다.
-
플러그인을 수동으로 빌드하는 방법에 대한 자세한 내용은 플러그인 빌드 튜토리얼을 참조하십시오.
Vosk 제공자로 전환
확장 프로그램이 설치되면, 음성 인식기를 Vosk로 전환하는 작업은 CreateSpeechRecognizer 바로 다음에 오는 세 개의 노드로 요약됩니다:

- Set Speech Recognizer Provider를 호출하고, Vosk 제공자 클래스를 전달합니다.
- 결과를 Cast To Runtime Vosk Speech Recognizer Provider로 캐스팅합니다.
- 캐스트 결과에 대해 **Set Vosk Model Path (By Name)**를 호출하고, 드롭다운에서 다운로드된 모델을 선택합니다.
기존 설정의 다른 모든 것(Start Speech Recognition, Process Audio Data, 델리게이트, VAD 등)은 수정 없이 그대로 작동합니다. whisper.cpp로 다시 전환하려면 이 세 개의 노드를 제거하거나, Set Speech Recognizer Provider를 전혀 호출하지 마세요. whisper.cpp가 기본값이기 때문입니다.
Vosk 모델 다운로드 중
Vosk 모델은 프로젝트 설정 -> 플러그인 -> Runtime Speech Recognizer Vosk에서 다운로드 및 관리됩니다. 패널에는 언어별로 그룹화된 사전 정의 모델 카탈로그가 나열되며, 각 항목에는 다운로드 버튼이 있습니다. 다운로드 및 압축 해제가 진행되는 동안 진행 표시줄이 표시되고, 모델이 디스크에 있으면 삭제 버튼이 표시됩니다.

다운로드된 모델은 Content/RuntimeSpeechRecognizerVosk/Models 아래에 압축이 풀리며, 플러그인이 해당 폴더를 패키징용으로 자동으로 스테이징합니다. 또한 패키징된 단일 모델에 제한되지 않습니다. 다운로드한 모든 모델은 계속 사용 가능하며 런타임에서 Set Vosk Model Path (By Name) 을 사용하여 선택할 수 있습니다. Android에서는 모델 파일이 패키징된 앱 내에 포함되며, 최초 사용 시 영구 저장소로 복사됩니다. 이 작업은 모델이 선택될 때 내부적으로 처리됩니다.
지원 언어 (클릭하여 펼치기)
미리 정의된 카탈로그에는 다음 언어에 대한 모델이 포함됩니다: 영어, 인도 영어, 중국어, 러시아어, 프랑스어, 독일어, 스페인어, 포르투갈어/브라질 포르투갈어, 그리스어, 터키어, 베트남어, 이탈리아어, 네덜란드어, 카탈루냐어, 아랍어, 튀니지 아랍어, 페르시아어, 필리핀어, 우크라이나어, 카자흐어, 스웨덴어, 일본어, 에스페란토, 힌디어, 체코어, 폴란드어, 우즈베크어, 한국어, 브르타뉴어, 구자라트어, 타지크어, 텔루구어, 키르기스어, 조지아어와 함께 전용 화자 식별 모델도 포함됩니다.
일부 언어는 패널에 여러 변형이 있습니다(예: 모바일 하드웨어에 적합한 더 작은 모델과 더 크고 정확한 모델이 함께 있음). 따라서 대상 언어에 대해 하나만 있다고 가정하지 말고 프로젝트 설정 패널에서 직접 옵션을 검토하는 것이 좋습니다. 각 변형의 정확도, 크기 및 라이선스에 대한 자세한 내용은 전체 Vosk 모델 목록을 참조하세요.
파라미터 및 동작
Vosk는 whisper.cpp와 근본적으로 다른 인식기이므로, 인식 매개변수 목록의 대부분 항목은 Vosk에 적용되지 않습니다. Vosk 제공자에서 지원되지 않는 setter를 호출해도 아무 효과가 없으므로, whisper.cpp용으로 작성된 Blueprint 로직은 제공자를 전환한 후에도 수정 없이 계속 작동합니다. Vosk에 실제로 영향을 주는 함수는 다음과 같습니다.
- 언어 설정: 사용할 모델의 언어를 선택합니다. Vosk는 자동 언어 감지를 지원하지 않으므로 언어를 Auto로 설정하면 무시됩니다.
- 스텝 크기 설정: 인식 대상으로 보내기 전에 누적되는 오디오의 양입니다. whisper.cpp와 동일한 메커니즘입니다. Vosk는 스트리밍 인식기이므로 작은 값(기본값 200ms)을 설정하면 부분 결과의 응답성이 유지됩니다.
- 최대 토큰 설정: Vosk용으로 용도가 변경되며, 아래에서 설명합니다.
최대 토큰 및 스트리밍 출력 설정
Set Max Tokens 매개변수는 Vosk 제공자가 인식된 텍스트를 On Recognized Text Segment를 통해 전달하는 방식을 제어합니다:
- 0(기본값): 텍스트가 내부적으로 누적되며, 인식이 완료되면 단일 완성 세그먼트로 전달됩니다. 이는 VAD 트리거 중지(예: 음성 활성화 명령 인식 또는 자동 초기화 음성 인식 예제)를 통하거나, 프로젝트의 어떤 로직이든 Stop Speech Recognition을 호출하거나 마지막 오디오 청크를 강제로 전달하는 경우입니다. 이는 whisper.cpp가 사용하는 세그먼트 기반 동작과 일치합니다.
- 0보다 큰 경우: 공급자가 스트리밍 모드로 전환합니다. 완성된 세그먼트를 기다리는 대신, 인식이 진행됨에 따라 부분 결과를 브로드캐스트하며, 각 결과는 이전 결과를 같은 문구의 더 긴 버전으로 대체합니다. 세그먼트가 완료되고 텍스트가 다음 세그먼트를 위해 재설정될 때까지 이 과정이 반복됩니다. 짧은 발화는 On Recognized Text Segment의 여러 브로드캐스트를 통해 다음과 같이 보일 수 있습니다.
"The"
"The cat"
"The cat is"
"The cat is sleeping"
정확한 숫자 값은 Vosk 자체에는 중요하지 않습니다. Vosk에는 내장된 토큰 제한이 없기 때문입니다. 0보다 큰 값은 스트리밍 전달을 활성화합니다.
부분 결과는 오디오가 큐에 추가되는 만큼만 도착하므로(Set Step Size에 의해 결정됨), 낮은 Max Tokens와 낮은 Step Size를 함께 설정하면 응답성이 좋은 라이브 출력을 얻을 수 있습니다.
플랫폼 지원
Vosk 확장 프로그램은 Windows, Android 및 Meta Quest와 같은 Android 기반 플랫폼에서 작동합니다. whisper.cpp에 GPU 가속 경로가 없는 Android와 Meta Quest에서 가장 유용하며, 특히 Meta Quest에서 특히 뛰어난 성능을 발휘합니다. 이미 Vulkan 또는 Metal 가속을 사용할 수 있는 Windows 또는 기타 데스크톱 플랫폼을 사용 중이라면 whisper.cpp가 더 나은 기본값일 가능성이 높습니다. Vosk는 whisper.cpp가 가장 취약한 플랫폼을 위한 대안입니다.
고급: 모델을 직접 다루기
프로젝트 설정 패널은 대부분의 프로젝트에서 모델 다운로드 및 삭제를 처리합니다. 프로젝트가 편집기 패널에 의존하는 대신 모델을 직접 작업해야 하는 경우(예: 런타임 시 사용 가능 여부 확인 또는 파일 관리) 플러그인은 기본 라이브러리 함수를 노출합니다:
- Get Available Vosk Model Names: 지금 바로 사용할 수 있는 모델들의 이름을 반환합니다. 이미 디스크에 추출되었거나 패키징만 되어 첫 사용을 기다리는 모델들을 포함합니다. 이는 Set Vosk Model Path (By Name) 의 드롭다운을 지원합니다.
- Is Vosk Model Available: 위와 동일한 확인을 단일 모델 ID로 수행합니다.
- Get Vosk Models Directory: 런타임에 모델을 읽어오는 디렉터리의 절대 경로를 반환합니다.
- Get Vosk Model Folder Path: 디스크에서 특정 모델 폴더의 절대 경로를 반환합니다.
- Delete Vosk Model Files: 모델의 추출된 파일을 디스크에서 삭제합니다.