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

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

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

وقت القراءة: 13 دقيقة الذكاء الاصطناعي على خادمك
whisperالتعرف على الكلامنسخذكاء اصطناعيself-hostingdocker
الكاتب
REXE Teknoloji Network & Security Team
المحرر
REXE Teknoloji Technical Editorial
أول نشر
آخر تحديث

تثبيت 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.

الأسئلة الشائعة

ما تنسيقات الصوت التي يدعمها Whisper؟

Whisper يدعم MP3 و WAV و M4A و FLAC و OGG و WMA والعديد من تنسيقات الصوت الأخرى. طالما أن FFmpeg مثبت، يمكنه استخراج الصوت من جميع تنسيقات الصوت والفيديو تقريباً ونسخها.

ما الفرق بين faster-whisper و Whisper الأصلي؟

faster-whisper هو تنفيذ قائم على CTranslate2 يعمل أسرع حتى 4 مرات من الأصلي. كما يستخدم ذاكرة أقل. مع دعم تكميم INT8 يعمل بكفاءة في وضع CPU أيضاً.

هل يعمل Whisper بدون GPU؟

نعم، Whisper يعمل في وضع CPU أيضاً. لكن GPU يوفر نتائج أسرع بكثير. في وضع CPU يمكنك تحسين الأداء باستخدام faster-whisper مع تكميم INT8. نماذج small أو base مناسبة لـ CPU.

ما مدى دقة النسخ بالعربية؟

نموذج Whisper large-v3 يوفر دقة عالية بالعربية. مع تسجيلات صوتية نظيفة يمكن تحقيق دقة تزيد عن 95%. قد تنخفض الدقة في البيئات الصاخبة أو مع اللهجات.

كيف تتم معالجة الملفات الصوتية الطويلة؟

Whisper يقسم الملفات الصوتية تلقائياً إلى مقاطع مدتها 30 ثانية. يمكن معالجة الملفات التي تستمر لساعات أيضاً. مرشح VAD في faster-whisper يقصر وقت المعالجة بتخطي الأقسام الصامتة.

هل يمكن نسخ البث الصوتي المباشر؟

Whisper يعمل أساساً على الملفات، لكن يمكن تحقيق نسخ شبه فوري بتقسيم البث الصوتي إلى أجزاء صغيرة. يمكن استخدام مشاريع مثل whisper-streaming لهذا الغرض.

مقالات ذات صلة

حركة الشبكةالداخل Gbpsالخارج Gbps