Spaces:
Runtime error
Runtime error
Jeongsoo1975
Initial commit: Gradio text-based speaker separation app for Hugging Face Spaces
ae9ec05
# 2인 대화 STT 처리기 (AI 화자 분리) | |
Whisper STT + Gemini AI를 결합하여 오디오 파일을 텍스트로 변환하고 화자별로 자동 분리하는 애플리케이션입니다. | |
## 주요 기능 | |
1. **WAV 파일 자동 감지**: data 폴더의 모든 WAV 파일을 자동으로 감지 | |
2. **고정밀 음성 인식**: OpenAI Whisper를 사용한 음성-텍스트 변환 | |
3. **AI 화자 분리**: Google Gemini를 사용한 텍스트 기반 2인 대화 분리 | |
4. **결과 저장**: | |
- 전체 대화 (원본 + 화자 분리) | |
- 화자별 개별 대화 | |
- JSON 형태 상세 데이터 | |
## 기술 스택 | |
- **UI Framework**: tkinter (Python GUI) | |
- **음성 인식**: OpenAI Whisper | |
- **AI 화자 분리**: Google Gemini Pro | |
- **로깅**: Python logging | |
## 폴더 구조 | |
``` | |
sttUsingAPI/ | |
├── data/ # WAV 파일을 여기에 넣으세요 | |
├── output/ # 처리 결과가 저장됩니다 | |
├── logs/ # 로그 파일이 저장됩니다 | |
├── .env # API 키 설정 | |
├── audio_summarizer.py # 메인 애플리케이션 | |
└── test_stt.py # 테스트 스크립트 | |
``` | |
## 설치 및 설정 | |
### 1. 의존성 설치 | |
```bash | |
pip install torch torchaudio python-dotenv google-generativeai | |
pip install git+https://github.com/openai/whisper.git | |
``` | |
### 2. API 키 설정 | |
`.env` 파일에 Google AI API 키를 설정하세요: | |
```env | |
# Google AI API 키 (https://aistudio.google.com/app/apikey) | |
GOOGLE_API_KEY=your_google_api_key_here | |
``` | |
### 3. WAV 파일 준비 | |
처리할 WAV 파일을 `data/` 폴더에 넣으세요. | |
### 4. 실행 | |
```bash | |
# GUI 애플리케이션 | |
python audio_summarizer.py | |
# 또는 테스트 스크립트 | |
python test_stt.py | |
``` | |
## 사용 방법 | |
1. 애플리케이션 실행 | |
2. `.env` 파일에 Google API 키 설정 확인 | |
3. WAV 파일이 `data/` 폴더에 있는지 확인 | |
4. "파일 목록 새로고침" 버튼으로 파일 목록 업데이트 | |
5. 개별 파일 처리: 파일 선택 후 "선택된 파일 처리" 클릭 | |
6. 전체 파일 처리: "모든 파일 처리" 클릭 | |
7. `output/` 폴더에서 결과 확인 | |
## 처리 과정 | |
1. **음성 인식**: Whisper가 WAV 파일을 텍스트로 변환 | |
2. **화자 분리**: Gemini가 텍스트 분석으로 화자별 발언 구분 | |
3. **결과 저장**: 다양한 형태로 결과 파일 생성 | |
## 출력 파일 형식 | |
각 WAV 파일에 대해 다음 파일들이 생성됩니다: | |
- `{파일명}_전체대화_{타임스탬프}.txt`: 원본 + 화자 분리 결과 | |
- `{파일명}_화자1_{타임스탬프}.txt`: 화자1의 발언만 | |
- `{파일명}_화자2_{타임스탬프}.txt`: 화자2의 발언만 | |
- `{파일명}_data_{타임스탬프}.json`: JSON 형태 상세 데이터 | |
### 화자 분리 결과 예시 | |
``` | |
원본 텍스트: | |
안녕하세요, 오늘 회의에 참석해주셔서 감사합니다. 네, 안녕하세요. 준비된 자료가 있나요? 네, 프레젠테이션 자료를 준비했습니다. | |
화자별 분리 결과: | |
[화자1] 안녕하세요, 오늘 회의에 참석해주셔서 감사합니다. | |
[화자2] 네, 안녕하세요. 준비된 자료가 있나요? | |
[화자1] 네, 프레젠테이션 자료를 준비했습니다. | |
``` | |
## API 키 발급 | |
### Google AI API 키 | |
1. [Google AI Studio](https://aistudio.google.com/app/apikey) 방문 | |
2. 구글 계정으로 로그인 | |
3. "Create API Key" 클릭 | |
4. 생성된 키를 `.env` 파일에 추가 | |
## 로그 | |
- 모든 처리 과정과 오류는 `logs/stt_processor.log` 파일에 기록됩니다. | |
## 화자 분리 정확도 | |
Gemini AI의 텍스트 기반 화자 분리는 다음 요소들을 분석합니다: | |
- **대화 맥락**: 질문과 답변의 패턴 | |
- **말투 변화**: 존댓말/반말, 어조 변화 | |
- **주제 전환**: 화자별 관심사나 역할 | |
- **언어 패턴**: 개인별 표현 습관 | |
## 주의사항 | |
- WAV 형식의 오디오 파일만 지원됩니다. | |
- 최초 실행 시 Whisper 모델 다운로드로 인해 시간이 소요될 수 있습니다. | |
- 인터넷 연결이 필요합니다 (모델 다운로드 및 API 호출). | |
- Google AI API 사용량에 따라 비용이 발생할 수 있습니다. | |
- 2인 대화에 최적화되어 있습니다. | |
## 화자 분리 정확도 향상 팁 | |
1. **명확한 역할 구분**: 인터뷰어-인터뷰이, 강사-학생 등 | |
2. **대화 흐름**: 자연스러운 질문과 답변 형태 | |
3. **말투 차이**: 존댓말/반말, 전문용어 사용 차이 | |
4. **음질**: 깨끗하고 명확한 음성 | |
5. **화자 간 중복 발언 최소화**: 동시에 말하는 구간 최소화 | |
## 문제 해결 | |
### API 키 오류 | |
- `.env` 파일에 올바른 Google AI API 키가 설정되어 있는지 확인 | |
- API 키의 권한 및 할당량 확인 | |
### 화자 분리 정확도 문제 | |
- 대화 내용이 너무 짧거나 단조로운 경우 정확도 저하 가능 | |
- 두 명 이상의 화자가 있는 경우 부정확할 수 있음 | |
### 모델 로딩 오류 | |
- 인터넷 연결 상태 확인 | |
- 가상환경 및 패키지 설치 상태 확인 | |