C#로 실시간 음성 인식 및 번역 구현: Whisper 활용법
이 애플리케이션은 팀즈 같은 플랫폼의 오디오 스트림을 캡처하고, 음성 세기와 정지 시간 기반으로 문장 단위로 분할한 후, 러시아어, 영어, 프랑스어 등에 대해 Whisper를 이용해 음성-텍스트 변환(STT)을 수행한 다음 번역합니다. C# 구현은 약 20%의 커스텀 코드를 사용하며, 나머지는 통합을 통해 구성됩니다. 단일 언어가 선택된 경우 사전 모드(자막 모드)를 지원하며, 오디오 저장 옵션 포함 전사만 가능합니다.
설정에서는 다음과 같은 항목을 보정할 수 있습니다:
- 음성 감지용 음성 세기 임계값
- 문장 간 정지 시간
하단 우측에 표시되는 통계 정보는 현재 오디오 레벨과 감지 플래그를 제공하여 정밀 조정에 적합합니다. 오디오 캡처는 시스템 믹서(헤드폰/스피커)를 통해만 작동하며, 직접 마이크 입력은 지원하지 않습니다.
Whisper 모델 선택과 성능 비교
로컬 STT 솔루션을 테스트한 결과:
- Sherpa (ONNX): 스트리밍 프랑스어 버전이 아키텍처와 맞지 않음
- Foundry Local (마이크로소프트): 원시 파일 기반 통신, Whisper 기반
결국 우리는 Whisper를 선택했습니다.
| 모델 | 속도 | 논리 처리 | 비고 |
|-------|-------|-------|-------|
| Base | 빠름 | 없음 | 최소 기능, 맥락 없음 |
| Small | 중간 | 있음 | 최적 균형, 온도 0.1–0.2 |
| Medium | 느림 | 좋음 | 실시간 회의 중 청크 큐 증가 |
NPU/GPU 없이도 RAM 사용량이 증가하지만, 고품질 회의 오디오에서는 결과가 여전히 만족스럽습니다.
번역 서비스 통합 방법
두 가지 옵션 제공:
- OpenAI: 설정에서 API 키, 모델, URL을 지정 가능.
- Azure Translator: 무료 요금제는 월 200만 자까지 제공; 계정 필요.
ITranslationService 인터페이스를 통해 새로운 제공업체 추가가 용이합니다 (예: 유안덱스 API, 결제 기반). 로컬 번역기는 품질 기준을 충족하지 못했습니다.
Azure 예시 구성:
public class AzureTranslationService : ITranslationService
{
private readonly string _key;
// ...
}
실제 적용 사례와 제약 사항
이 도구는 녹화 없이 실시간 다국어 회의 요구를 해결합니다. 프랑스어, 영어, 러시아어로 테스트 완료. 모든 녹화 도구는 아님 — 오직 시스템 오디오 출력만 캡처 가능.
중급 이상 개발자에게 추천: 스트리밍 청크 처리 중심의 모듈식 아키텍처. STT/번역 엔진 교체 또는 새 VAD 알고리즘 추가로 확장 가능.
핵심 요약:
- VAD 유사 파라미터로 시스템 오디오 캡처 및 문장 분할
- 실시간 사용에 최적: Whisper Small, 온도 0.1–0.2, GPU 필요 없음
- 간단한 번역 인터페이스; Azure는 월 200만 자 무료 제공
- 번역 없이 전사만 가능한 STT 전용 모드
- 음성 감지 정확도 조정을 위한 실시간 통계 제공
— Editorial Team
아직 댓글이 없습니다.