انتقل إلى المحتوى الرئيسي
العودة إلى الفئة

تثبيت Whisper: التعرف على الكلام والنسخ المستضاف ذاتياً

تثبيت OpenAI Whisper، النسخ السريع مع faster-whisper، دعم اللغات المتعددة، خادم API، نشر Docker وتحسين التعرف على الكلام.

وقت القراءة: 13 دقيقة الذكاء الاصطناعي على خادمك
whisperالتعرف على الكلامنسخذكاء اصطناعيself-hostingdocker

جدول المحتويات

تثبيت Whisper: التعرف على الكلام والنسخ المستضاف ذاتياً

OpenAI Whisper هو نموذج ذكاء اصطناعي قوي قادر على التعرف على الكلام والنسخ في 99 لغة. بتشغيله على خادمك الخاص، يمكنك إجراء نسخ غير محدود، وحماية خصوصيتك، والتخلص من تكاليف API. يغطي هذا الدليل تثبيت Whisper و faster-whisper، وإنشاء خادم API، ونشر Docker.

ما هو Whisper؟

Whisper هو نموذج التعرف التلقائي على الكلام (ASR) طورته OpenAI. تم تدريبه على 680,000 ساعة من البيانات متعددة اللغات. الميزات الرئيسية:

  • 99 لغة: النسخ في 99 لغة بما في ذلك العربية
  • الترجمة: ترجمة تلقائية من أي لغة إلى الإنجليزية
  • الطوابع الزمنية: طوابع زمنية على مستوى الكلمات والجمل
  • مقاومة الضوضاء: دقة عالية مع ضوضاء الخلفية
  • تنسيقات متعددة: MP3، WAV، M4A، FLAC، OGG والمزيد
  • مفتوح المصدر: استخدام مجاني تحت رخصة MIT

أحجام النماذج

النموذجالمعلماتVRAMالسرعةالدقة
tiny39 م~1 جيجابايتسريع جداًمنخفضة
base74 م~1 جيجابايتسريعمتوسطة
small244 م~2 جيجابايتمتوسطجيدة
medium769 م~5 جيجابايتبطيءجيدة جداً
large-v31.55 ب~10 جيجابايتالأبطأالأفضل

تثبيت Whisper (Python)

التثبيت الأساسي

hljs bash
# بيئة Python الافتراضية
python3 -m venv whisper-env
source whisper-env/bin/activate

# تثبيت Whisper
pip install openai-whisper

# تثبيت FFmpeg (لمعالجة الصوت)
sudo apt-get install -y ffmpeg

استخدام سطر الأوامر

hljs bash
# النسخ الأساسي
whisper audio.mp3 --model medium --language Arabic

# الترجمة إلى الإنجليزية
whisper audio.mp3 --model medium --task translate

# تنسيق ترجمة SRT
whisper audio.mp3 --model medium --language Arabic --output_format srt

# طوابع زمنية على مستوى الكلمات
whisper audio.mp3 --model medium --language Arabic --word_timestamps True

الاستخدام مع Python

hljs python
import whisper

# تحميل النموذج
model = whisper.load_model("medium")

# النسخ
result = model.transcribe(
    "audio.mp3",
    language="ar",
    task="transcribe",
    word_timestamps=True
)

print(result["text"])

for segment in result["segments"]:
    start = segment["start"]
    end = segment["end"]
    text = segment["text"]
    print(f"[{start:.2f} - {end:.2f}] {text}")

تثبيت Faster-Whisper

Faster-whisper هو تنفيذ Whisper قائم على CTranslate2. يعمل أسرع حتى 4 مرات من الأصلي ويستخدم ذاكرة أقل.

hljs bash
pip install faster-whisper

Python مع Faster-Whisper

hljs python
from faster_whisper import WhisperModel

# تحميل النموذج (GPU)
model = WhisperModel(
    "large-v3",
    device="cuda",
    compute_type="float16"
)

# لوضع CPU
# model = WhisperModel("large-v3", device="cpu", compute_type="int8")

segments, info = model.transcribe(
    "audio.mp3",
    language="ar",
    beam_size=5,
    word_timestamps=True,
    vad_filter=True
)

print(f"اللغة المكتشفة: {info.language} (الاحتمال: {info.language_probability:.2f})")

for segment in segments:
    print(f"[{segment.start:.2f}ث -> {segment.end:.2f}ث] {segment.text}")

إنشاء خادم API

Whisper API مع FastAPI

hljs python
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"
):
    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])
        
        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"}

نشر Docker

Dockerfile

hljs 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"]

Docker Compose

hljs yaml
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

hljs bash
# النسخ مع تحميل ملف
curl -X POST http://localhost:9000/v1/audio/transcriptions \
  -F "file=@meeting.mp3" \
  -F "language=ar"

# الكشف التلقائي عن اللغة
curl -X POST http://localhost:9000/v1/audio/transcriptions \
  -F "file=@audio.wav"

استخدام API مع Python

hljs python
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 = {"language": language} if language else {}
        response = requests.post(url, files=files, data=data)
    return response.json()

result = transcribe_audio("meeting.mp3", language="ar")
print(f"النص: {result['text']}")
print(f"المدة: {result['duration']:.1f} ثانية")

النسخ بالدفعات

hljs python
import os, glob
from faster_whisper import WhisperModel

model = WhisperModel("large-v3", device="cuda", compute_type="float16")
audio_files = glob.glob("audio_files/*.mp3") + glob.glob("audio_files/*.wav")

for audio_file in audio_files:
    print(f"المعالجة: {audio_file}")
    segments, info = model.transcribe(audio_file, language="ar", 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"  تم الحفظ: {output_file}")

قم بالتعرف على الكلام والنسخ بسرعة عالية مع Whisper على خوادم REXE GPU. احصل على نتائج عالية الدقة في 99 لغة مع نموذج large-v3.