FastAPI 기반 한국어 발음 분석 서버입니다. 사용자가 업로드한 음성 파일과 텍스트를 비교해 발음 점수를 평가하고, 피드백 이력을 기반으로 발음 개선 과정을 수치화합니다.
- 🎙️ 발음 평가 (
/evaluate-pronunciation) - 🧠 G2P(문자 → 발음) 기반 비교
- 📈 발음 점수 기록 및 시각화 (
/score-history,/score-plot) - 📊 전체 평균 대비 개인 점수 비교 (
/compare-plot) - 🧾 개인 리포트 PDF 생성 (
/generate-report) - 🧠 ETRI API 연동으로 실시간 발음 인식
python -m venv venv
source venv/bin/activate # 윈도우: venv\Scripts\activate
pip install -r requirements.txtuvicorn main:app --reload서버가 실행되면 http://localhost:8000/docs에서 Swagger UI로 API 테스트 가능
.
├── main.py
├── routes/
│ ├── evaluate.py
│ ├── history.py
│ └── report.py
├── services/
│ └── pronunciation_service.py
├── models/
│ └── pronunciation_model.py
├── static/
│ └── NanumGothicCoding.ttf
├── data/
│ └── standard_pronunciation.wav
├── requirements.txt
├── Dockerfile
└── README.md
models/pronunciation_model.py에서 API_KEY를 발급받은 키로 교체하거나 .env 파일로 분리해 관리할 수 있습니다.
- 사용자 발음 → 음소 단위로 분해 → 표준 발음과 자모 단위 비교
- 실시간 점수 계산 항목:
syllable_score(음절 정확도)character_score(문자 정확도)jamo_score(자모 유사도)lcs_score(최장 공통 부분 수열 기반 점수)mfcc_score(음향 유사도)missing_score(누락 음절 수 기반 감점)
- 점수는
/score-history로 저장되어/score-plot에서 시각화되고,/compare-plot으로 다른 사용자 평균과 비교됩니다.
score_history = {
"user123": [
{
"word": "굳이",
"score": 83.1,
"breakdown": { ... },
"date": "2025-04-16T10:21:00"
},
...
]
}🔁 추후 MongoDB 또는 SQLite로 대체 가능하며,
score_history구조와 동일하게 컬렉션 또는 테이블 구성 권장.
루트 디렉토리에 아래 내용의 Dockerfile을 작성하세요.
# SayUp 발음 평가 서버 - Dockerfile
# 1. Python 베이스 이미지
FROM python:3.9-slim
# 2. 작업 디렉토리 설정
WORKDIR /app
# 3. requirements.txt 복사 및 패키지 설치
COPY requirements.txt .
RUN pip install --upgrade pip && \
pip install -r requirements.txt
RUN apt-get update && apt-get install -y fonts-nanum && \
fc-cache -fv && \
ln -s /usr/share/fonts/truetype/nanum/NanumGothic.ttf /usr/share/fonts/truetype/nanum/NanumGothicCoding.ttf
# 4. 전체 소스 복사
COPY . .
# 5. FastAPI 서버 실행 포트
EXPOSE 8000
# 6. 서버 실행 명령어
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]venv
__pycache__
*.pyc
*.pyo
*.pyd
*.log
*.sqlite3
.env
.DS_Store
docker build -t sayup-server .docker run -p 8000:8000 --name sayup-container sayup-serverdocker stop sayup-container: 컨테이너 중지docker start sayup-container: 재시작docker rm sayup-container: 컨테이너 삭제docker logs sayup-container: 로그 확인
file: 사용자의 음성 파일 (wav)text: 사용자가 발음해야 할 기준 문장user_id: 사용자 식별자
- 사용자 발음 점수 이력 조회
- 점수 추이 그래프 (PNG)
- 평균 대비 사용자 점수 비교 바 그래프
- PDF 리포트 생성 (점수 요약 + 그래프 포함)
이 프로젝트는 MIT 라이선스를 따릅니다. 자유롭게 사용, 수정, 배포할 수 있으며, 저작권 및 라이선스 고지를 포함해야 합니다.