Skip to content

TechieQuokka/VocalSense

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

VocalSense - 실시간 음성 활동 감지

VocalSense는 ONNX Runtime과 함께 Silero VAD 모델을 사용하는 실시간 음성 활동 감지(VAD) 시스템의 C# 구현입니다.

주요 기능

  • NAudio를 사용한 실시간 오디오 스트림 캡처
  • Silero VAD ONNX 모델을 사용한 음성 활동 감지
  • 감지된 음성 세그먼트의 자동 녹음
  • 음성 활동 변화에 대한 이벤트 기반 알림 시스템
  • 대화형 컨트롤이 있는 콘솔 UI
  • 구성 가능한 임계값, 장치 및 녹음 옵션

아키텍처

시스템은 깔끔한 계층 아키텍처를 따릅니다:

  • 프레젠테이션 계층: 이벤트 처리가 있는 콘솔 UI
  • 애플리케이션 계층: 모든 구성 요소를 조정하는 VoiceActivityDetectionService
  • 도메인 계층: 핵심 비즈니스 로직 (AudioProcessor, VADEngine, RecordingManager)
  • 인프라스트럭처 계층: NAudio 통합, ONNX Runtime, 파일 시스템 스토리지

자세한 아키텍처 문서는 docs/architecture.md를 참조하세요.

사전 요구사항

  • .NET 8.0 SDK 이상
  • Windows (NAudio WaveIn 지원용)
  • Silero VAD ONNX 모델 파일

설치

1. VAD 모델 다운로드

Silero VAD 모델을 다운로드하여 models 디렉토리에 배치합니다:

# models 디렉토리 생성
mkdir models

# 모델 다운로드 (PowerShell)
Invoke-WebRequest -Uri "https://github.com/snakers4/silero-vad/raw/master/src/silero_vad/data/silero_vad.onnx" -OutFile "models/silero_vad.onnx"

또는 다음에서 수동으로 다운로드: https://github.com/snakers4/silero-vad

2. 솔루션 빌드

dotnet build

3. 테스트 실행

dotnet test

사용법

기본 사용법

기본 설정으로 실행 (장치 0, 임계값 0.5, 녹음 활성화):

dotnet run --project src/VocalSense.Console

명령줄 옵션

dotnet run --project src/VocalSense.Console -- [옵션]

옵션:
  -m, --model <경로>       ONNX 모델 파일 경로 (기본값: models/silero_vad.onnx)
  -t, --threshold <>     신뢰도 임계값 0.0-1.0 (기본값: 0.5)
  -d, --device <번호>      오디오 입력 장치 번호 (기본값: 0)
  -o, --output <경로>      녹음 출력 디렉토리 (기본값: recordings)
  --no-recording           자동 녹음 비활성화
  -h, --help               도움말 메시지 표시

사용 예시

# 다른 마이크 사용 (장치 1)
dotnet run --project src/VocalSense.Console -- -d 1

# 감도 조정 (낮을수록 더 민감함)
dotnet run --project src/VocalSense.Console -- -t 0.3

# 녹음 비활성화, 감지만 수행
dotnet run --project src/VocalSense.Console -- --no-recording

# 사용자 지정 출력 디렉토리
dotnet run --project src/VocalSense.Console -- -o "my_recordings"

대화형 명령

실행 중:

  • Q: 애플리케이션 종료
  • R: VAD 상태 재설정
  • S: 통계 표시

프로젝트 구조

VocalSense/
├── src/
│   ├── VocalSense.Core/              # 도메인 계층
│   │   ├── Models/                    # 데이터 모델
│   │   ├── Interfaces/                # 핵심 추상화
│   │   └── Services/                  # 비즈니스 로직
│   ├── VocalSense.Infrastructure/     # 인프라스트럭처 계층
│   │   ├── Audio/                     # NAudio 통합
│   │   ├── Storage/                   # 파일 시스템 스토리지
│   │   └── ML/                        # ONNX VAD 구현
│   ├── VocalSense.Application/        # 애플리케이션 서비스
│   │   ├── Services/                  # 오케스트레이션 서비스
│   │   └── Configuration/             # 구성
│   └── VocalSense.Console/            # 콘솔 UI
├── tests/
│   ├── VocalSense.Core.Tests/
│   ├── VocalSense.Infrastructure.Tests/
│   └── VocalSense.Integration.Tests/
├── models/                             # ONNX 모델 파일
│   └── silero_vad.onnx                # (별도 다운로드)
├── recordings/                         # 출력 디렉토리 (런타임에 생성됨)
└── docs/
    └── architecture.md                 # 아키텍처 문서

성능

  • 지연 시간: <100ms (오디오 캡처 → VAD 결과)
  • 처리량: 16,000 샘플/초 (16kHz 샘플링)
  • 메모리: 최대 ~100MB (버퍼 포함)

적용된 최적화

  • 오디오 처리를 위한 SIMD 벡터화
  • ArrayPool을 사용한 메모리 풀링
  • I/O 작업을 위한 Async/await
  • System.Threading.Channels을 사용한 생산자-소비자 패턴
  • 최적화된 버퍼 크기 (50ms 청크)

구성

VadConfiguration 옵션

var config = new VadConfiguration
{
    ModelPath = "models/silero_vad.onnx",
    ConfidenceThreshold = 0.5f,
    AudioDeviceNumber = 0,
    OutputDirectory = "recordings",
    EnableRecording = true,
    MinimumRecordingDurationSeconds = 0.5,
    MaximumRecordingDurationSeconds = 300.0,
    ChannelCapacity = 100
};

임계값 튜닝

  • 0.3-0.4: 매우 민감함, 배경 소음을 잡을 수 있음
  • 0.5: 균형 잡힘 (기본값)
  • 0.6-0.7: 덜 민감함, 명확한 음성만
  • 0.8+: 매우 엄격함, 작은 음성을 놓칠 수 있음

종속성

  • NAudio 2.2.1: 오디오 I/O 및 WAV 파일 처리
  • Microsoft.ML.OnnxRuntime 1.16.3: ONNX 모델 추론
  • System.Reactive 6.0.0: 이벤트를 위한 Observable 패턴
  • .NET 8.0: 대상 프레임워크

문제 해결

모델을 찾을 수 없음

Silero VAD 모델이 다운로드되어 models/silero_vad.onnx에 배치되었는지 확인하세요.

오디오 장치를 찾을 수 없음

마이크가 연결되어 있고 Windows 사운드 설정에서 활성화되었는지 확인하세요.

녹음 권한

애플리케이션이 Windows 개인 정보 설정에서 마이크 액세스 권한을 가지고 있는지 확인하세요.

빌드 오류

NuGet 패키지 복원:

dotnet restore

라이선스

이 프로젝트는 MIT 라이선스로 라이선스가 부여된 Silero VAD 모델을 사용합니다.

크레딧

About

실시간 음성 활동 감지(VAD) 시스템 - Silero VAD ONNX 모델을 사용한 C# 구현

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages