전체 흐름(한 사이클)
- 웨이크워드 감지
- hotword_detector_worker()가 Porcupine으로 16kHz, mono, 512샘플 프레임을 읽으며 키워드 대기
- 감지되면 큐에 ("hotword_detected", device_index)를 넣고 스트림을 닫고 종료
- 같은 마이크를 STT가 바로 열 수 있도록 충돌 방지
- STT 녹음 시작
- record_and_transcribe(device_index=같은_인덱스) 호출
- sounddevice.InputStream(..., dtype="int16")로 int16 모노로 입력
- 콜백이 주는 가변 길이 오디오를 내부 byte 버퍼에 쌓고, 정확히 FRAME_MS(기본 20ms) 단위(= 320샘플 = 640바이트)로 프레임화
- VAD로 발화 구간 검출
- 각 프레임을 webrtcvad.is_speech(frame, 16000)에 넣음
- in_speech 전환 전에 PREROLL_FRAMES(기본 5프레임 ≈ 100ms) 를 계속 모았다가, 말이 시작되면 앞에 붙여서 문장 앞머리 잘림 방지
- 말이 진행되는 동안은 음성 프레임을 voiced_chunks에 추가
- 침묵 타임아웃으로 종료
- 말이 진행 중일 때 VAD가 연속 n 프레임의 무성(침묵) 을 보고하면 종료
- 이 n은 MAX_SILENCE_SEC와 FRAME_MS로 정해집니다
→ pad_needed = int((MAX_SILENCE_SEC*1000)/FRAME_MS)- 예) MAX_SILENCE_SEC=0.8, FRAME_MS=20ms → 40프레임 연속 무성이면 종료
- 또한 하드 상한으로 MAX_RECORD_SEC(기본 20초)을 넘으면 안전하게 종료
- Whisper 변환
- 모은 voiced_chunks(int16 프레임들)를 이어붙여 bytes → 메모리 WAV로 만든 뒤 faster-whisper로 STT 수행
- 결과 텍스트 출력
- 다시 웨이크워드 대기
- starter.py가 루프를 돌면서 웨이크워드 워커 재기동
🎙️ 1. OpenAI Whisper
👉 범용 Speech-to-Text (STT) 모델
- 목적: 음성을 텍스트로 변환 (음성 인식).
- 특징:
- OpenAI에서 공개한 대규모 Transformer 기반 음성 인식 모델.
- 수십만 시간의 다국어 음성+자막 데이터로 학습됨.
- 다국어 지원: 90개 이상 언어 인식 및 번역까지 가능.
- 강인성: 잡음이 많거나 억양이 섞인 환경에서도 좋은 성능.
- 버전: tiny → base → small → medium → large (모델 크기와 정확도/속도 트레이드오프).
- 사용 방식:
- 마이크나 파일 입력 → wave/wav/mp3 처리 → Whisper 모델 → 텍스트 결과.
- GPU/CPU에서 실행 가능하지만, 큰 모델은 리소스 많이 사용.
- 장점:
- 범용성 (여러 언어, 일반 문장).
- 강력한 정확도.
- 단점:
- 모델 크기가 크고 리소스 요구 높음 (실시간 처리 시 성능 고려 필요).
- 클라우드/API나 GPU 환경이 권장됨.
🎯 2. Picovoice Porcupine
👉 초경량 웨이크워드(Hotword) 감지 엔진
- 목적: 특정 “키워드”를 음성에서 실시간으로 감지 (“Hey Siri”, “Ok Google”, “헤이 류지” 같은 웨이크워드).
- 특징:
- Picovoice 사의 상용 솔루션.
- On-device 동작을 목표로 설계 → 아주 가볍고 빠름.
- CPU만으로도 저사양(라즈베리파이, IoT 기기)에서 실시간 감지 가능.
- 다양한 플랫폼 지원: C, Python, Android, iOS, Raspberry Pi, WebAssembly 등.
- 키워드(custom wake word)를 훈련시켜 원하는 단어를 감지 가능.
- 장점:
- 저지연·저전력 (항상 켜져 있어야 하는 웨이크워드에 최적).
- 네트워크 필요 없음 (개인정보 보호 측면).
- 단점:
- 특정 키워드만 감지 (범용 음성인식 불가).
- 키워드 감지 정확도는 높지만, 일반 문장 인식은 불가능.
'Projects > AI 아이트래킹 모델 프로젝트' 카테고리의 다른 글
| [프로젝트] 7. 프로젝트 트러블슈팅 및 향후과제 (0) | 2025.09.24 |
|---|---|
| [프로젝트] 6. Langgraph-yolo 이미지 처리 (0) | 2025.09.23 |
| [프로젝트] 4. 시선벡터 - 월드맵 정합 (0) | 2025.09.16 |
| [프로젝트 A-EYE] 3. 시선추적_월드 깊이맵 구현 (0) | 2025.09.16 |
| [프로젝트 A-EYE] 2. 시선추적_시선벡터 구하기 (0) | 2025.09.16 |