Whisper Kurulumu: Self-Hosted Ses Tanıma ve Transkripsiyon
OpenAI Whisper kurulumu, faster-whisper ile hızlı transkripsiyon, çoklu dil desteği, API sunucusu, Docker deployment ve ses tanıma optimizasyonu rehberi.
İçindekiler
Whisper Kurulumu: Self-Hosted Ses Tanıma ve Transkripsiyon
OpenAI Whisper, 99 dilde ses tanıma ve transkripsiyon yapabilen güçlü bir yapay zeka modelidir. Kendi sunucunuzda çalıştırarak sınırsız transkripsiyon yapabilir, gizliliğinizi koruyabilir ve API maliyetlerinden kurtulabilirsiniz. Bu rehberde Whisper ve faster-whisper kurulumunu, API sunucusu oluşturmayı ve Docker ile deployment'ı ele alacağız.
Whisper Nedir?
Whisper, OpenAI tarafından geliştirilen otomatik konuşma tanıma (ASR) modelidir. 680.000 saat çoklu dil verisinde eğitilmiştir. Temel özellikleri:
- 99 Dil Desteği: Türkçe dahil 99 dilde transkripsiyon
- Çeviri: Herhangi bir dilden İngilizce'ye otomatik çeviri
- Zaman Damgası: Kelime ve cümle bazında zaman damgası
- Gürültü Dayanıklılığı: Arka plan gürültüsüne karşı yüksek doğruluk
- Çoklu Format: MP3, WAV, M4A, FLAC, OGG ve daha fazlası
- Açık Kaynak: MIT lisansı ile ücretsiz kullanım
Model Boyutları
| Model | Parametre | VRAM | Hız | Doğruluk |
|---|---|---|---|---|
| tiny | 39 M | ~1 GB | Çok hızlı | Düşük |
| base | 74 M | ~1 GB | Hızlı | Orta |
| small | 244 M | ~2 GB | Orta | İyi |
| medium | 769 M | ~5 GB | Yavaş | Çok iyi |
| large-v3 | 1.55 B | ~10 GB | En yavaş | En iyi |
Whisper Kurulumu (Python)
Temel Kurulum
# Python sanal ortam
python3 -m venv whisper-env
source whisper-env/bin/activate
# Whisper kurulumu
pip install openai-whisper
# FFmpeg kurulumu (ses işleme için)
sudo apt-get install -y ffmpeg
Komut Satırı Kullanımı
# Temel transkripsiyon
whisper audio.mp3 --model medium --language Turkish
# İngilizce'ye çeviri
whisper audio.mp3 --model medium --task translate
# SRT altyazı formatında çıktı
whisper audio.mp3 --model medium --language Turkish --output_format srt
# Kelime bazında zaman damgası
whisper audio.mp3 --model medium --language Turkish --word_timestamps True
Python ile Kullanım
import whisper
# Model yükleme
model = whisper.load_model("medium")
# Transkripsiyon
result = model.transcribe(
"audio.mp3",
language="tr",
task="transcribe",
word_timestamps=True
)
print(result["text"])
# Segment bazında çıktı
for segment in result["segments"]:
start = segment["start"]
end = segment["end"]
text = segment["text"]
print(f"[{start:.2f} - {end:.2f}] {text}")
Faster-Whisper Kurulumu
Faster-whisper, CTranslate2 tabanlı bir Whisper implementasyonudur. Orijinal Whisper'dan 4 kata kadar hızlı çalışır ve daha az bellek kullanır.
# Faster-whisper kurulumu
pip install faster-whisper
Python ile Faster-Whisper
from faster_whisper import WhisperModel
# Model yükleme (GPU)
model = WhisperModel(
"large-v3",
device="cuda",
compute_type="float16"
)
# CPU modu için
# model = WhisperModel("large-v3", device="cpu", compute_type="int8")
# Transkripsiyon
segments, info = model.transcribe(
"audio.mp3",
language="tr",
beam_size=5,
word_timestamps=True,
vad_filter=True # Sessiz bölümleri atla
)
print(f"Algılanan dil: {info.language} (olasılık: {info.language_probability:.2f})")
for segment in segments:
print(f"[{segment.start:.2f}s -> {segment.end:.2f}s] {segment.text}")
API Sunucusu Oluşturma
FastAPI ile Whisper API
from fastapi import FastAPI, UploadFile, File
from faster_whisper import WhisperModel
import tempfile
import os
app = FastAPI(title="Whisper API")
model = WhisperModel("large-v3", device="cuda", compute_type="float16")
@app.post("/v1/audio/transcriptions")
async def transcribe(
file: UploadFile = File(...),
language: str = None,
response_format: str = "json"
):
# Geçici dosyaya kaydet
with tempfile.NamedTemporaryFile(delete=False, suffix=os.path.splitext(file.filename)[1]) as tmp:
content = await file.read()
tmp.write(content)
tmp_path = tmp.name
try:
segments, info = model.transcribe(
tmp_path,
language=language,
beam_size=5,
vad_filter=True
)
segments_list = list(segments)
full_text = " ".join([s.text.strip() for s in segments_list])
if response_format == "text":
return full_text
return {
"text": full_text,
"language": info.language,
"duration": info.duration,
"segments": [
{
"start": s.start,
"end": s.end,
"text": s.text.strip()
} for s in segments_list
]
}
finally:
os.unlink(tmp_path)
@app.get("/health")
async def health():
return {"status": "ok", "model": "large-v3"}
Başlatma
pip install fastapi uvicorn python-multipart
uvicorn whisper_api:app --host 0.0.0.0 --port 9000
Docker ile Deployment
Dockerfile
FROM nvidia/cuda:12.4.0-runtime-ubuntu22.04
RUN apt-get update && apt-get install -y \
python3 python3-pip ffmpeg \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /app
COPY requirements.txt .
RUN pip3 install --no-cache-dir -r requirements.txt
COPY whisper_api.py .
EXPOSE 9000
CMD ["uvicorn", "whisper_api:app", "--host", "0.0.0.0", "--port", "9000"]
requirements.txt
faster-whisper>=1.0.0
fastapi>=0.104.0
uvicorn>=0.24.0
python-multipart>=0.0.6
Docker Compose
version: '3.8'
services:
whisper:
build: .
container_name: whisper-api
ports:
- "9000:9000"
volumes:
- whisper_cache:/root/.cache
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu]
restart: unless-stopped
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/health"]
interval: 30s
timeout: 10s
retries: 3
volumes:
whisper_cache:
API Kullanım Örnekleri
cURL ile Transkripsiyon
# Dosya yükleme ile transkripsiyon
curl -X POST http://localhost:9000/v1/audio/transcriptions \
-F "file=@meeting.mp3" \
-F "language=tr"
# Otomatik dil algılama
curl -X POST http://localhost:9000/v1/audio/transcriptions \
-F "file=@audio.wav"
Python ile API Kullanımı
import requests
def transcribe_audio(file_path, language=None):
url = "http://localhost:9000/v1/audio/transcriptions"
with open(file_path, "rb") as f:
files = {"file": f}
data = {}
if language:
data["language"] = language
response = requests.post(url, files=files, data=data)
return response.json()
# Kullanım
result = transcribe_audio("meeting.mp3", language="tr")
print(f"Metin: {result['text']}")
print(f"Süre: {result['duration']:.1f} saniye")
for seg in result["segments"]:
print(f" [{seg['start']:.1f}s] {seg['text']}")
Batch Transkripsiyon
import os
import glob
from faster_whisper import WhisperModel
model = WhisperModel("large-v3", device="cuda", compute_type="float16")
# Dizindeki tüm ses dosyalarını transkribe et
audio_files = glob.glob("audio_files/*.mp3") + glob.glob("audio_files/*.wav")
for audio_file in audio_files:
print(f"İşleniyor: {audio_file}")
segments, info = model.transcribe(audio_file, language="tr", vad_filter=True)
output_file = os.path.splitext(audio_file)[0] + ".txt"
with open(output_file, "w", encoding="utf-8") as f:
for segment in segments:
f.write(f"[{segment.start:.2f} - {segment.end:.2f}] {segment.text}\n")
print(f" Kaydedildi: {output_file}")
SRT Altyazı Oluşturma
def generate_srt(segments, output_path):
with open(output_path, "w", encoding="utf-8") as f:
for i, segment in enumerate(segments, 1):
start = format_timestamp(segment.start)
end = format_timestamp(segment.end)
f.write(f"{i}\n{start} --> {end}\n{segment.text.strip()}\n\n")
def format_timestamp(seconds):
hours = int(seconds // 3600)
minutes = int((seconds % 3600) // 60)
secs = int(seconds % 60)
millis = int((seconds % 1) * 1000)
return f"{hours:02d}:{minutes:02d}:{secs:02d},{millis:03d}"
# Kullanım
segments, info = model.transcribe("video.mp4", language="tr")
generate_srt(list(segments), "subtitles.srt")
Performans Optimizasyonu
# VAD filtresi ile sessiz bölümleri atlama
segments, _ = model.transcribe("audio.mp3", vad_filter=True, vad_parameters=dict(min_silence_duration_ms=500))
# INT8 quantization (CPU modunda hız artışı)
model = WhisperModel("large-v3", device="cpu", compute_type="int8")
# Float16 (GPU modunda optimal)
model = WhisperModel("large-v3", device="cuda", compute_type="float16")
REXE GPU sunucularında Whisper ile yüksek hızda ses tanıma ve transkripsiyon yapabilirsiniz. Large-v3 modeli ile Türkçe dahil 99 dilde yüksek doğrulukta sonuçlar elde edin.
İlgili Makaleler
Ollama Kurulumu: Yerel LLM Çalıştırma Rehberi
Ollama kurulumu, yerel LLM modelleri çalıştırma (Llama 3, Mistral, Gemma), API kullanımı, model yönetimi, GPU hızlandırma ve Docker ile deployment.
Open WebUI Kurulumu: ChatGPT Benzeri Arayüz ile Yerel AI
Open WebUI kurulumu Docker ile, Ollama entegrasyonu, kullanıcı yönetimi, RAG (belge sorgulama), model yönetimi, özel promptlar ve çoklu kullanıcı desteği.
GPU Sunucuda AI Model Deployment: NVIDIA CUDA Rehberi
NVIDIA sürücü kurulumu, CUDA toolkit, nvidia-container-toolkit, vLLM ile model serving, GPU monitoring ve Docker ile AI model deployment rehberi.