GannaEslam38 commited on
Commit
301c4de
·
verified ·
1 Parent(s): e629d9f

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +18 -17
app.py CHANGED
@@ -7,28 +7,34 @@ import os
7
  MODEL_ID = "MohamedRashad/Arabic-Whisper-CodeSwitching-Edition"
8
 
9
  # تحديد الجهاز المستخدم (GPU أو CPU)
10
- # يفضل استخدام 0 للجهاز الأول (GPU) إذا كان متاحاً، وإلا نستخدم "cpu"
11
  device = 0 if torch.cuda.is_available() else "cpu"
12
  print(f"Device set to use: {device}")
13
 
14
- # 2. تحميل النموذج عبر الـ Pipeline
15
  try:
16
- print("Loading ASR pipeline (Whisper)...")
17
- # تحميل النموذج باستخدام pipeline
 
 
 
 
 
 
18
  asr_pipeline = pipeline(
19
  "automatic-speech-recognition",
20
  model=MODEL_ID,
21
  device=device,
 
22
  )
23
- print("Pipeline loaded successfully.")
24
 
25
  except Exception as e:
26
- # هذا الجزء يمكن حذفه إذا كنت واثقاً من تحميل الـ pipeline
27
- print(f"Error loading pipeline: {e}. Falling back to error message.")
28
  asr_pipeline = None
29
 
30
 
31
- # 3. دالة النسخ الصوتي (مع معالجة التقسيم للملفات الطويلة)
32
  def transcribe_audio(audio_path):
33
  """تحول ملف الصوت إلى نص باستخدام نموذج Whisper ASR، مع تقسيم للملفات الطويلة."""
34
  if asr_pipeline is None:
@@ -40,18 +46,14 @@ def transcribe_audio(audio_path):
40
  print(f"Processing audio file: {audio_path}")
41
 
42
  try:
43
- # استخدام التقسيم (Chunking) لمعالجة الملفات الطويلة (أفضل دقة واستقرار)
44
- # تقسيم الصوت إلى مقاطع 30 ثانية، مع تداخل 5 ثواني لضمان عدم فقدان السياق
45
  result = asr_pipeline(
46
  audio_path,
47
- chunk_length_s=30, # طول المقطع الأقصى (30 ثانية)
48
- stride=(5, 5), # تداخل 5 ثواني بين المقاطع
49
- return_timestamps=True # هذا ضروري لتشغيل وضع التقسيم
50
  )
51
 
52
- # النتيجة تحتوي على قاموس يضم key اسمه 'chunks' أو 'text'
53
- # نجمع النصوص من جميع المقاطع لإنتاج النص النهائي
54
-
55
  if 'chunks' in result and isinstance(result['chunks'], list):
56
  segments_text = [seg['text'] for seg in result['chunks']]
57
  final_text = " ".join(segments_text).strip()
@@ -63,7 +65,6 @@ def transcribe_audio(audio_path):
63
  return final_text
64
 
65
  except Exception as e:
66
- # قد يحدث هذا الخطأ إذا كان الملف غير صالح أو واجه النموذج مشكلة في الذاكرة
67
  return f"حدث خطأ أثناء معالجة الصوت: {e}"
68
 
69
 
 
7
  MODEL_ID = "MohamedRashad/Arabic-Whisper-CodeSwitching-Edition"
8
 
9
  # تحديد الجهاز المستخدم (GPU أو CPU)
 
10
  device = 0 if torch.cuda.is_available() else "cpu"
11
  print(f"Device set to use: {device}")
12
 
13
+ # 2. تحميل النموذج عبر الـ Pipeline (مع تحديد وسائط التقسيم عند التحميل)
14
  try:
15
+ print("Loading ASR pipeline (Whisper) with chunking parameters...")
16
+
17
+ # تحديد وسائط التقسيم هنا لتجنب تمريرها كـ model_kwargs غير مستخدمة
18
+ pipeline_kwargs = {
19
+ "chunk_length_s": 30, # طول المقطع الأقصى (30 ثانية)
20
+ "stride": (5, 5), # تداخل 5 ثواني بين المقاطع
21
+ }
22
+
23
  asr_pipeline = pipeline(
24
  "automatic-speech-recognition",
25
  model=MODEL_ID,
26
  device=device,
27
+ **pipeline_kwargs # تمرير وسائط التقسيم هنا
28
  )
29
+ print("Pipeline loaded successfully with chunking enabled.")
30
 
31
  except Exception as e:
32
+ print(f"Error loading pipeline: {e}.")
33
+ # إذا فشل التحميل، نستخدم pipeline فارغ لمنع تعطل التطبيق
34
  asr_pipeline = None
35
 
36
 
37
+ # 3. دالة النسخ الصوتي
38
  def transcribe_audio(audio_path):
39
  """تحول ملف الصوت إلى نص باستخدام نموذج Whisper ASR، مع تقسيم للملفات الطويلة."""
40
  if asr_pipeline is None:
 
46
  print(f"Processing audio file: {audio_path}")
47
 
48
  try:
49
+ # 💡 التعديل هنا: نزيل 'chunk_length_s' و 'stride' ونبقي فقط 'return_timestamps'
50
+ # وسائط التقسيم تم تحديدها بالفعل في خطوة التحميل (Initialisation)
51
  result = asr_pipeline(
52
  audio_path,
53
+ return_timestamps=True # ضروري لعملية التقسيم
 
 
54
  )
55
 
56
+ # استخراج النص من النتيجة (النتيجة تحتوي على 'chunks' عند استخدام return_timestamps=True)
 
 
57
  if 'chunks' in result and isinstance(result['chunks'], list):
58
  segments_text = [seg['text'] for seg in result['chunks']]
59
  final_text = " ".join(segments_text).strip()
 
65
  return final_text
66
 
67
  except Exception as e:
 
68
  return f"حدث خطأ أثناء معالجة الصوت: {e}"
69
 
70