FaizTech commited on
Commit
4305459
·
verified ·
1 Parent(s): ba59b74

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +61 -0
app.py ADDED
@@ -0,0 +1,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # app.py
2
+
3
+ import os
4
+ import shutil
5
+ import tempfile
6
+ import torch
7
+ import whisper
8
+ from fastapi import FastAPI, File, UploadFile, Query
9
+ from typing import Dict, Optional
10
+
11
+ # --- الإعدادات الأولية وتحميل النموذج ---
12
+
13
+ # تحديد الجهاز (GPU إذا كان متاحًا، وإلا CPU)
14
+ DEVICE = "cuda" if torch.cuda.is_available() else "cpu"
15
+ print(f"Using device: {DEVICE}")
16
+
17
+ # تحميل النموذج (سنستخدم 'base' للبساطة والسرعة في الخطة المجانية)
18
+ print("Loading 'base' model...")
19
+ model = whisper.load_model("base", device=DEVICE)
20
+ print("Model 'base' loaded successfully.")
21
+
22
+ # إنشاء تطبيق FastAPI
23
+ app = FastAPI()
24
+
25
+ # --- نقاط النهاية (Endpoints) ---
26
+
27
+ @app.get("/")
28
+ def read_root():
29
+ """ نقطة نهاية للتحقق من أن الـ API يعمل. """
30
+ return {"message": "Whisper API is running. Use the /transcribe endpoint to submit audio files."}
31
+
32
+ @app.post("/transcribe")
33
+ async def transcribe_audio(
34
+ file: UploadFile = File(...),
35
+ language: Optional[str] = Query(None, description="Language of the audio (e.g., 'ar' for Arabic)")
36
+ ):
37
+ """
38
+ نقطة نهاية لتحويل ملف صوتي إلى نص.
39
+ تقبل ملفًا صوتيًا وتُرجع النص المحوّل.
40
+ """
41
+ # Whisper يحتاج إلى قراءة الملف من مسار على القرص، لذلك نحفظه مؤقتًا
42
+ with tempfile.NamedTemporaryFile(delete=False, suffix=os.path.splitext(file.filename)[1]) as tmp_file:
43
+ shutil.copyfileobj(file.file, tmp_file)
44
+ tmp_file_path = tmp_file.name
45
+
46
+ try:
47
+ # تحديد خيارات التحويل (مثل اللغة إذا تم تحديدها)
48
+ transcribe_options = {"language": language} if language else {}
49
+
50
+ # استدعاء النموذج للقيام بالتحويل
51
+ result = model.transcribe(tmp_file_path, **transcribe_options)
52
+
53
+ transcript = result.get("text", "لم يتمكن من التعرف على نص.")
54
+ detected_language = result.get("language", "لم يتم تحديد اللغة.")
55
+
56
+ return {"transcript": transcript, "language": detected_language}
57
+
58
+ finally:
59
+ # التأكد من حذف الملف المؤقت بعد الانتهاء
60
+ os.remove(tmp_file_path)
61
+ await file.close()