Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

purestory/whisper-service

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

3 Commits

Repository files navigation

🎀 Faster Whisper μŒμ„± 인식 μ„œλΉ„μŠ€

πŸ“– ν”„λ‘œμ νŠΈ κ°œμš”

SYSTRAN의 faster-whisperλ₯Ό 기반으둜 ν•œ κ³ μ„±λŠ₯ μŒμ„±-ν…μŠ€νŠΈ λ³€ν™˜ μ›Ή μ„œλΉ„μŠ€μž…λ‹ˆλ‹€. OpenAI Whisper λŒ€λΉ„ μ΅œλŒ€ 4λ°° λΉ λ₯Έ μ„±λŠ₯으둜 μ‹€μ‹œκ°„ μŒμ„± 인식을 μ œκ³΅ν•©λ‹ˆλ‹€.

μ£Όμš” κΈ°λŠ₯

  • 고속 μŒμ„± 인식: OpenAI Whisper λŒ€λΉ„ 4λ°° λΉ λ₯Έ 처리 속도
  • μ΅œμ‹  터보 λͺ¨λΈ: large-v3-turbo둜 8λ°° 더 λΉ λ₯Έ μ‹€μ‹œκ°„ 처리
  • λ‹€μ–‘ν•œ λͺ¨λΈ 지원: tinyλΆ€ν„° large-v3-turboκΉŒμ§€ μ„±λŠ₯/속도 μ΅œμ ν™” λͺ¨λΈ
  • μ‹€μ‹œκ°„ μ›Ή μΈν„°νŽ˜μ΄μŠ€: 직관적이고 λ°˜μ‘ν˜• UI/UX
  • λ‹€κ΅­μ–΄ 지원: 100+ μ–Έμ–΄ μžλ™ 감지 및 인식
  • κ³ κΈ‰ μ˜΅μ…˜: 단어별 νƒ€μž„μŠ€νƒ¬ν”„, VAD ν•„ν„°, λΉ” μ„œμΉ˜ μ΅œμ ν™”
  • GPU 가속: CUDA μ§€μ›μœΌλ‘œ μ΄ˆκ³ μ† 처리

πŸ—οΈ μ‹œμŠ€ν…œ ꡬ쑰

whisper/
β”œβ”€β”€ backend/ # FastAPI Python λ°±μ—”λ“œ
β”‚ β”œβ”€β”€ app.py # 메인 API μ„œλ²„
β”‚ └── __pycache__/ # Python μΊμ‹œ
β”œβ”€β”€ vite-frontend/ # React + Vite ν”„λ‘ νŠΈμ—”λ“œ
β”‚ β”œβ”€β”€ src/ # μ†ŒμŠ€ μ½”λ“œ
β”‚ β”œβ”€β”€ dist/ # λΉŒλ“œλœ 정적 파일
β”‚ β”œβ”€β”€ public/ # 정적 λ¦¬μ†ŒμŠ€
β”‚ └── package.json # μ˜μ‘΄μ„± μ„€μ •
β”œβ”€β”€ .venv/ # Python κ°€μƒν™˜κ²½ (ν˜„μž¬ μ‚¬μš©μ€‘)
β”œβ”€β”€ tmp/ # nginx μ„€μ • λ°±μ—…
β”œβ”€β”€ requirements.txt # Python μ˜μ‘΄μ„±
└── README.md # ν”„λ‘œμ νŠΈ λ¬Έμ„œ

πŸš€ μ„œλΉ„μŠ€ 운영 μƒνƒœ

ν˜„μž¬ 운영 쀑인 μ„œλΉ„μŠ€

  • λ°±μ—”λ“œ μ„œλ²„: systemd둜 κ΄€λ¦¬λ˜λŠ” μ„œλΉ„μŠ€

    • μ„œλΉ„μŠ€λͺ…: whisper-backend.service
    • 포트: 3401 (FastAPI + uvicorn)
    • μƒνƒœ: active (running)
    • μžλ™ μ‹œμž‘: enabled (λΆ€νŒ… μ‹œ μžλ™ μ‹œμž‘)
  • ν”„λ‘ νŠΈμ—”λ“œ: nginxκ°€ 정적 파일 직접 μ„œλΉ™

    • λΉŒλ“œ 파일: /home/purestory/whisper/vite-frontend/dist/
    • nginx μ„€μ •: /whisper/ 경둜둜 μ ‘κ·Ό

μ›Ή μ ‘κ·Ό μ£Όμ†Œ

  • μ™ΈλΆ€ μ ‘κ·Ό: http://itsmyzone.iptime.org/whisper/
  • API μ—”λ“œν¬μΈνŠΈ: http://itsmyzone.iptime.org/whisper-api/
  • ν—¬μŠ€ 체크: http://itsmyzone.iptime.org/whisper-api/status

πŸ”§ μ‹œμŠ€ν…œ 관리 λͺ…λ Ήμ–΄

λ°±μ—”λ“œ μ„œλΉ„μŠ€ 관리

# μ„œλΉ„μŠ€ μƒνƒœ 확인
systemctl status whisper-backend.service
# μ„œλΉ„μŠ€ μž¬μ‹œμž‘
sudo systemctl restart whisper-backend.service
# μ„œλΉ„μŠ€ 쀑지
sudo systemctl stop whisper-backend.service
# μ„œλΉ„μŠ€ 둜그 확인
sudo journalctl -u whisper-backend.service -f

ν”„λ‘ νŠΈμ—”λ“œ μ„œλΉ„μŠ€ 관리

# μ„œλΉ„μŠ€ μƒνƒœ 확인
systemctl status whisper-frontend.service
# μ„œλΉ„μŠ€ μž¬μ‹œμž‘
sudo systemctl restart whisper-frontend.service

포트 μ‚¬μš© 확인

# λ°±μ—”λ“œ 포트 확인
lsof -i :3401
# ν”„λ‘œμ„ΈμŠ€ 확인
ps aux | grep whisper

πŸ› οΈ 개발 및 배포

ν”„λ‘ νŠΈμ—”λ“œ μˆ˜μ • μ‹œ

  1. μ½”λ“œ μˆ˜μ •: /home/purestory/whisper/vite-frontend/src/ μ—μ„œ μˆ˜μ •
  2. λΉŒλ“œ:
    cd /home/purestory/whisper/vite-frontend
    npm run build
  3. μžλ™ 반영: nginxκ°€ /home/purestory/whisper/vite-frontend/dist/ λ₯Ό 직접 μ„œλΉ™ν•˜λ―€λ‘œ λΉŒλ“œλ§Œ ν•˜λ©΄ 됨
  4. ⚠️ 주의: μˆ˜λ™ 볡사 μž‘μ—… κΈˆμ§€!

λ°±μ—”λ“œ μˆ˜μ • μ‹œ

  1. μ½”λ“œ μˆ˜μ •: /home/purestory/whisper/backend/ μ—μ„œ μˆ˜μ •
  2. μ„œλΉ„μŠ€ μž¬μ‹œμž‘:
    sudo systemctl restart whisper-backend.service
  3. λ™μž‘ 확인:
    curl http://localhost:3401/status

μƒˆ λͺ¨λΈ μΆ”κ°€

# κ°€μƒν™˜κ²½ ν™œμ„±ν™”
cd /home/purestory/whisper
source .venv/bin/activate
# Pythonμ—μ„œ λͺ¨λΈ λ‹€μš΄λ‘œλ“œ (μžλ™)
python3 -c "from faster_whisper import WhisperModel; WhisperModel('large-v3')"
# μ΅œμ‹  터보 λͺ¨λΈ λ‹€μš΄λ‘œλ“œ
python3 -c "from faster_whisper import WhisperModel; WhisperModel('large-v3-turbo')"

🌐 nginx μ„€μ •

ν˜„μž¬ nginx μ„€μ •

  • 정적 파일: /whisper/ β†’ /home/purestory/whisper/vite-frontend/dist/
  • API ν”„λ‘μ‹œ: /whisper-api/ β†’ http://localhost:5173/

nginx μ„€μ • 파일 μœ„μΉ˜

  • 메인 μ„€μ •: /etc/nginx/sites-available/purestory
  • λ°±μ—…: /home/purestory/tmp/purestory_nginx_updated.conf

πŸ“Š μ§€μ›ν•˜λŠ” λͺ¨λΈ

λͺ¨λΈ 크기 λ©”λͺ¨λ¦¬ μš”κ΅¬λŸ‰ νŠΉμ§•
tiny 39MB ~1GB μ΄ˆκ³ μ†, κΈ°λ³Έ ν’ˆμ§ˆ
base 74MB ~1GB 빠름, μ–‘ν˜Έν•œ ν’ˆμ§ˆ
small 244MB ~2GB κ· ν˜•μž‘νžŒ μ„±λŠ₯
medium 769MB ~5GB 높은 ν’ˆμ§ˆ
large-v1 1550MB ~10GB 졜고 ν’ˆμ§ˆ
large-v2 1550MB ~10GB κ°œμ„ λœ ν’ˆμ§ˆ
large-v3 1550MB ~10GB μ΅œμ‹  버전, 졜고 μ„±λŠ₯
large-v3-turbo 1550MB ~10GB πŸš€ μ΅œμ‹  터보 λͺ¨λΈ, 8λ°° λΉ λ₯Έ 속도
distil-large-v2 756MB ~6GB κ²½λŸ‰ν™”λœ large λͺ¨λΈ
distil-large-v3 756MB ~6GB μ΅œμ‹  κ²½λŸ‰ν™” λͺ¨λΈ

🌍 μ§€μ›ν•˜λŠ” μ–Έμ–΄

  • ν•œκ΅­μ–΄ (ko) - μ£Όμš” 지원 μ–Έμ–΄
  • μ˜μ–΄ (en) - μ΅œμ ν™” λͺ¨λΈ 있음
  • 일본어 (ja) - λ™μ•„μ‹œμ•„ μ–Έμ–΄
  • 쀑ꡭ어 (zh) - 간체/번체
  • μŠ€νŽ˜μΈμ–΄ (es) - 라틴 μ–Έμ–΄
  • ν”„λž‘μŠ€μ–΄ (fr) - 유럽 μ–Έμ–΄
  • 독일어 (de) - 게λ₯΄λ§Œ μ–Έμ–΄
  • μ΄νƒˆλ¦¬μ•„μ–΄ (it) - 둜망슀 μ–Έμ–΄
  • 포λ₯΄νˆ¬κ°ˆμ–΄ (pt) - 브라질/포λ₯΄νˆ¬κ°ˆ
  • λŸ¬μ‹œμ•„μ–΄ (ru) - 슬라브 μ–Έμ–΄
  • μ•„λžμ–΄ (ar) - μ…ˆμ‘± μ–Έμ–΄
  • νžŒλ””μ–΄ (hi) - 인도 μ–Έμ–΄
  • 기타 90+ μ–Έμ–΄ - μžλ™ 감지 지원

πŸ“ μ§€μ›ν•˜λŠ” μ˜€λ””μ˜€ ν˜•μ‹

μž…λ ₯ ν˜•μ‹

  • MP3: κ°€μž₯ 널리 μ‚¬μš©λ˜λŠ” ν˜•μ‹
  • WAV: 무손싀 μ˜€λ””μ˜€
  • MP4: λΉ„λ””μ˜€μ—μ„œ μ˜€λ””μ˜€ μΆ”μΆœ
  • M4A: Apple μ˜€λ””μ˜€ ν˜•μ‹
  • FLAC: 무손싀 μ••μΆ•
  • OGG: μ˜€ν”ˆμ†ŒμŠ€ ν˜•μ‹
  • μ΅œλŒ€ 크기: 200MB

좜λ ₯ ν˜•μ‹

  • ν…μŠ€νŠΈ: 순수 ν…μŠ€νŠΈ
  • SRT: μžλ§‰ 파일 (νƒ€μž„μŠ€νƒ¬ν”„ 포함)
  • VTT: WebVTT ν˜•μ‹
  • JSON: API 응닡 ν˜•μ‹

πŸ”§ API μ—”λ“œν¬μΈνŠΈ

GET /status

μ„œλ²„ μƒνƒœ 및 ν˜„μž¬ λ‘œλ“œλœ λͺ¨λΈ 정보

{
 "status": "healthy",
 "current_model": "large-v3",
 "gpu_available": true,
 "memory_usage": "1.4GB"
}

GET /models

μ‚¬μš© κ°€λŠ₯ν•œ λͺ¨λΈ λͺ©λ‘

{
 "models": ["tiny", "base", "small", "medium", "large-v3"],
 "current": "large-v3"
}

POST /transcribe

μŒμ„± νŒŒμΌμ„ ν…μŠ€νŠΈλ‘œ λ³€ν™˜

curl -X POST "http://localhost:3401/transcribe" \
 -F "file=@audio.mp3" \
 -F "model_size=large-v3" \
 -F "language=ko" \
 -F "word_timestamps=true"

Parameters:

  • file: μŒμ„± 파일 (multipart/form-data)
  • model_size: λͺ¨λΈ 크기 (κΈ°λ³Έκ°’: "large-v3")
  • language: μ–Έμ–΄ μ½”λ“œ (선택사항, μžλ™ 감지)
  • word_timestamps: 단어별 νƒ€μž„μŠ€νƒ¬ν”„ (κΈ°λ³Έκ°’: false)
  • beam_size: λΉ” 크기 (κΈ°λ³Έκ°’: 5)
  • vad_filter: VAD ν•„ν„° (κΈ°λ³Έκ°’: true)

POST /change_model

μ‚¬μš©ν•  λͺ¨λΈ λ³€κ²½

curl -X POST "http://localhost:3401/change_model" \
 -H "Content-Type: application/json" \
 -d '{"model_size": "base"}'

🚨 νŠΈλŸ¬λΈ”μŠˆνŒ…

μ„œλΉ„μŠ€ μ‹œμž‘ μ‹€νŒ¨

  1. 포트 좩돌 확인: lsof -i :3401
  2. ν”„λ‘œμ„ΈμŠ€ μ’…λ£Œ: kill -15 <PID>
  3. μ„œλΉ„μŠ€ μž¬μ‹œμž‘: sudo systemctl restart whisper-backend.service

CUDA/GPU 문제

  1. GPU μƒνƒœ 확인: nvidia-smi
  2. CUDA μ„€μΉ˜ 확인: nvcc --version
  3. λ©”λͺ¨λ¦¬ λΆ€μ‘±: 더 μž‘μ€ λͺ¨λΈ μ‚¬μš© (base, small)

λ©”λͺ¨λ¦¬ λΆ€μ‘± 였λ₯˜

  1. ν˜„μž¬ λ©”λͺ¨λ¦¬: free -h
  2. λͺ¨λΈ λ³€κ²½: large β†’ medium β†’ small β†’ base
  3. μ„œλΉ„μŠ€ μž¬μ‹œμž‘: λ©”λͺ¨λ¦¬ 정리

인식 ν’ˆμ§ˆ 문제

  1. μ˜€λ””μ˜€ ν’ˆμ§ˆ 확인: 16kHz 이상 ꢌμž₯
  2. λ…Έμ΄μ¦ˆ 제거: VAD ν•„ν„° ν™œμ„±ν™”
  3. λͺ¨λΈ μ—…κ·Έλ ˆμ΄λ“œ: large-v3 μ‚¬μš©
  4. μ–Έμ–΄ λͺ…μ‹œ: μžλ™ 감지 λŒ€μ‹  μ–Έμ–΄ μ½”λ“œ μ§€μ •

API 응닡 μ—†μŒ

  1. μ„œλΉ„μŠ€ μƒνƒœ: systemctl status whisper-backend.service
  2. 둜그 확인: sudo journalctl -u whisper-backend.service -n 50
  3. ν—¬μŠ€ 체크: curl http://localhost:3401/status

βš™οΈ μ‹œμŠ€ν…œ μš”κ΅¬μ‚¬ν•­

μ΅œμ†Œ μš”κ΅¬μ‚¬ν•­

  • CPU: Intel i5 λ˜λŠ” AMD Ryzen 5 이상
  • RAM: 8GB (tiny/base λͺ¨λΈ)
  • μ €μž₯곡간: 10GB μ—¬μœ  곡간
  • Python: 3.8 이상
  • Node.js: 16 이상

ꢌμž₯ μš”κ΅¬μ‚¬ν•­

  • CPU: Intel i7 λ˜λŠ” AMD Ryzen 7 이상
  • RAM: 32GB (large λͺ¨λΈμš©)
  • GPU: NVIDIA RTX 3060 이상 (8GB VRAM)
  • μ €μž₯곡간: 50GB SSD
  • CUDA: 11.8 이상

⚠️ μ€‘μš” μ£Όμ˜μ‚¬ν•­

ν•˜μ§€ 말아야 ν•  것듀

  1. λͺ¨λΈ 파일 직접 μ‚­μ œ κΈˆμ§€ - μž¬λ‹€μš΄λ‘œλ“œμ— μ‹œκ°„ μ†Œμš”
  2. κ°€μƒν™˜κ²½ μ‚­μ œ κΈˆμ§€ - .venv 폴더 보쑴
  3. 포트 3401 λ³€κ²½ κΈˆμ§€ - μ‹œμŠ€ν…œ μ„€μ •κ³Ό μ—°κ΄€
  4. CUDA λ“œλΌμ΄λ²„ μž„μ˜ μ—…λ°μ΄νŠΈ κΈˆμ§€
  5. λŒ€μš©λŸ‰ 파일 λ™μ‹œ 처리 κΈˆμ§€ - λ©”λͺ¨λ¦¬ λΆ€μ‘± μœ„ν—˜

ꢌμž₯ μž‘μ—… μˆœμ„œ

  1. μ½”λ“œ μˆ˜μ •
  2. ν•΄λ‹Ή μ„œλΉ„μŠ€λ§Œ μž¬μ‹œμž‘ (ν”„λ‘ νŠΈμ—”λ“œ: λΉŒλ“œ, λ°±μ—”λ“œ: systemctl restart)
  3. λ™μž‘ 확인 (curl ν…ŒμŠ€νŠΈ λ˜λŠ” μ›Ή 접속)
  4. 둜그 확인 (문제 μ‹œ)
  5. GPU λ©”λͺ¨λ¦¬ λͺ¨λ‹ˆν„°λ§ (nvidia-smi)

πŸ“ˆ μ„±λŠ₯ λͺ¨λ‹ˆν„°λ§

처리 톡계

  • μ‹€μ‹œκ°„ μ§„ν–‰λ₯ : μ˜€λ””μ˜€ 청크별 처리 μƒνƒœ
  • μ„±λŠ₯ μ§€ν‘œ: 처리 속도 (μ‹€μ‹œκ°„ 배수), 정확도
  • μ–Έμ–΄ 감지: μžλ™ μ–Έμ–΄ 감지 ν™•λ₯ 
  • ν’ˆμ§ˆ μΈ‘μ •: 신뒰도 점수

μ‹œμŠ€ν…œ λ¦¬μ†ŒμŠ€

# GPU μ‚¬μš©λ₯  및 λ©”λͺ¨λ¦¬
nvidia-smi
# CPU 및 λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰
htop
# λ””μŠ€ν¬ μ‚¬μš©λŸ‰
df -h /home/purestory/whisper/
# λ„€νŠΈμ›Œν¬ μ—°κ²° μƒνƒœ
netstat -tulpn | grep 3401

λͺ¨λΈ μ„±λŠ₯ 비ꡐ

λͺ¨λΈ 속도 정확도 λ©”λͺ¨λ¦¬ μš©λ„
tiny 10x 80% 1GB μ‹€μ‹œκ°„ 처리
base 7x 85% 1GB 일반 μš©λ„
small 4x 90% 2GB ν’ˆμ§ˆ μ€‘μ‹œ
medium 2x 95% 5GB 높은 ν’ˆμ§ˆ
large-v3 1x 98% 10GB 졜고 ν’ˆμ§ˆ
large-v3-turbo 8x 98% 10GB πŸš€ 졜고 ν’ˆμ§ˆ + μ΄ˆκ³ μ†

πŸ”§ κ°€μƒν™˜κ²½ 관리

Python μ˜μ‘΄μ„±

# κ°€μƒν™˜κ²½ ν™œμ„±ν™”
cd /home/purestory/whisper
source .venv/bin/activate
# μ˜μ‘΄μ„± 확인
pip list
# μ˜μ‘΄μ„± μ—…λ°μ΄νŠΈ (주의!)
pip install --upgrade faster-whisper

Node.js μ˜μ‘΄μ„±

# ν”„λ‘ νŠΈμ—”λ“œ μ˜μ‘΄μ„± 확인
cd /home/purestory/whisper/vite-frontend
npm list
# μ˜μ‘΄μ„± μ—…λ°μ΄νŠΈ
npm update

πŸ“ž 개발자 λ…ΈνŠΈ

이 μ„œλΉ„μŠ€λŠ” GPU λ¦¬μ†ŒμŠ€λ₯Ό μ§‘μ•½μ μœΌλ‘œ μ‚¬μš©ν•˜λ―€λ‘œ λ©”λͺ¨λ¦¬ 관리가 μ€‘μš”ν•©λ‹ˆλ‹€. λŒ€μš©λŸ‰ μ˜€λ””μ˜€ 파일 처리 μ‹œ μ‹œμŠ€ν…œ λͺ¨λ‹ˆν„°λ§μ„ 톡해 λ¦¬μ†ŒμŠ€ μ‚¬μš©λŸ‰μ„ ν™•μΈν•˜μ„Έμš”.

λͺ¨λΈ λ³€κ²½ μ‹œ GPU λ©”λͺ¨λ¦¬ 정리λ₯Ό μœ„ν•΄ μ„œλΉ„μŠ€ μž¬μ‹œμž‘μ΄ ν•„μš”ν•  수 μžˆμŠ΅λ‹ˆλ‹€. ν’ˆμ§ˆκ³Ό μ„±λŠ₯의 κ· ν˜•μ„ μœ„ν•΄ μš©λ„μ— λ§žλŠ” λͺ¨λΈμ„ μ„ νƒν•˜μ„Έμš”.

μ΅œμ’… μ—…λ°μ΄νŠΈ: 2025εΉ΄06月05ζ—₯ μ„œλΉ„μŠ€ 버전: 2.0.0
운영 ν™˜κ²½: Ubuntu 20.04, Python 3.10, CUDA 11.8, faster-whisper 1.0.0

About

🎀 Faster-Whisper speech recognition service with React frontend

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

Contributors

AltStyle γ«γ‚ˆγ£γ¦ε€‰ζ›γ•γ‚ŒγŸγƒšγƒΌγ‚Έ (->γ‚ͺγƒͺγ‚ΈγƒŠγƒ«) /