alidw commited on
Commit
694dc03
·
verified ·
1 Parent(s): c6b5946

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +29 -30
app.py CHANGED
@@ -1,29 +1,30 @@
1
  import gradio as gr
2
  import numpy as np
3
  from fastapi import Request, HTTPException
 
4
  from tts_arabic import tts as arabic_tts
5
 
6
- # ==========================================
7
- # 🔐 API KEY PROTECTION
8
- # ==========================================
9
  API_KEY = "nGHjs7oK8jp7OvxZ5dVZdY6JEf3DVwRF"
10
 
11
- async def verify_api_key(request: Request):
12
- """
13
- This function runs BEFORE every prediction API call.
14
- It blocks API requests without the correct key.
15
- """
16
- # Check if this is an API call (not UI)
17
- if "api" in str(request.url):
18
- key = request.headers.get("x-api-key")
19
- if key != API_KEY:
20
- raise HTTPException(status_code=401, detail="Invalid or missing API Key.")
21
- return
22
-
23
-
24
- # ==========================================
25
- # 🎙️ TTS FUNCTION
26
- # ==========================================
 
 
 
27
  SAMPLE_RATE = 22050
28
 
29
  def generate_tts(
@@ -40,7 +41,6 @@ def generate_tts(
40
  if not text:
41
  return None, "❌ الرجاء إدخال نص عربي."
42
 
43
- # اختيار موديول التشكيل
44
  vowelizer_arg = None if vowelizer == "بدون تشكيل" else vowelizer
45
 
46
  try:
@@ -51,8 +51,6 @@ def generate_tts(
51
  denoise=float(denoise),
52
  volume=float(volume),
53
  play=False,
54
- pitch_mul=1.0,
55
- pitch_add=0.0,
56
  vowelizer=vowelizer_arg,
57
  model_id=model_id,
58
  vocoder_id=vocoder_id,
@@ -69,14 +67,15 @@ def generate_tts(
69
  return None, f"❌ حدث خطأ أثناء التوليد: {e}"
70
 
71
 
72
- # ==========================================
73
- # 🎛️ GRADIO INTERFACE
74
- # ==========================================
 
75
  demo = gr.Interface(
76
  fn=generate_tts,
77
  inputs=[
78
  gr.Textbox(label="النص العربي", lines=4),
79
- gr.Dropdown(choices=["0", "1", "2", "3"], value="1", label="المتحدث"),
80
  gr.Slider(0.6, 1.4, value=1.0, step=0.05, label="سرعة الكلام"),
81
  gr.Slider(0.0, 0.02, value=0.005, step=0.001, label="إزالة الضوضاء"),
82
  gr.Slider(0.4, 1.0, value=0.9, step=0.05, label="مستوى الصوت"),
@@ -85,15 +84,15 @@ demo = gr.Interface(
85
  gr.Radio(["hifigan", "vocos", "vocos44"], value="hifigan", label="Vocoder"),
86
  ],
87
  outputs=[
88
- gr.Audio(label="الصوت الناتج", type="numpy"),
89
- gr.Textbox(label="الحالة", interactive=False),
90
  ],
91
  title="Arabic TTS (ONNX / CPU)",
92
  description="واجهة تحويل النص العربي إلى كلام تعمل على CPU، مع حماية API Key.",
93
  )
94
 
95
- # Attach API key verifier
96
- demo = gr.routes.App.create_app(demo, dependencies=[verify_api_key])
97
 
98
  if __name__ == "__main__":
99
  demo.launch()
 
1
  import gradio as gr
2
  import numpy as np
3
  from fastapi import Request, HTTPException
4
+ from starlette.middleware.base import BaseHTTPMiddleware
5
  from tts_arabic import tts as arabic_tts
6
 
 
 
 
7
  API_KEY = "nGHjs7oK8jp7OvxZ5dVZdY6JEf3DVwRF"
8
 
9
+ # ==========================================================
10
+ # 🔐 MIDDLEWARE لحماية API
11
+ # ==========================================================
12
+
13
+ class APIKeyMiddleware(BaseHTTPMiddleware):
14
+ async def dispatch(self, request: Request, call_next):
15
+ # فقط API calls وليس الواجهة
16
+ url_path = str(request.url)
17
+ if "/api/predict" in url_path:
18
+ key = request.headers.get("x-api-key")
19
+ if key != API_KEY:
20
+ return HTTPException(status_code=401, detail="Invalid or missing API Key")
21
+ return await call_next(request)
22
+
23
+
24
+ # ==========================================================
25
+ # 🎙️ TTS
26
+ # ==========================================================
27
+
28
  SAMPLE_RATE = 22050
29
 
30
  def generate_tts(
 
41
  if not text:
42
  return None, "❌ الرجاء إدخال نص عربي."
43
 
 
44
  vowelizer_arg = None if vowelizer == "بدون تشكيل" else vowelizer
45
 
46
  try:
 
51
  denoise=float(denoise),
52
  volume=float(volume),
53
  play=False,
 
 
54
  vowelizer=vowelizer_arg,
55
  model_id=model_id,
56
  vocoder_id=vocoder_id,
 
67
  return None, f"❌ حدث خطأ أثناء التوليد: {e}"
68
 
69
 
70
+ # ==========================================================
71
+ # 🎛️ واجهة Gradio
72
+ # ==========================================================
73
+
74
  demo = gr.Interface(
75
  fn=generate_tts,
76
  inputs=[
77
  gr.Textbox(label="النص العربي", lines=4),
78
+ gr.Dropdown(["0", "1", "2", "3"], value="1", label="المتحدث"),
79
  gr.Slider(0.6, 1.4, value=1.0, step=0.05, label="سرعة الكلام"),
80
  gr.Slider(0.0, 0.02, value=0.005, step=0.001, label="إزالة الضوضاء"),
81
  gr.Slider(0.4, 1.0, value=0.9, step=0.05, label="مستوى الصوت"),
 
84
  gr.Radio(["hifigan", "vocos", "vocos44"], value="hifigan", label="Vocoder"),
85
  ],
86
  outputs=[
87
+ gr.Audio(type="numpy", label="الصوت الناتج"),
88
+ gr.Textbox(label="الحالة"),
89
  ],
90
  title="Arabic TTS (ONNX / CPU)",
91
  description="واجهة تحويل النص العربي إلى كلام تعمل على CPU، مع حماية API Key.",
92
  )
93
 
94
+ # 🎯 إضافة Middleware للـAPI
95
+ demo.app.add_middleware(APIKeyMiddleware)
96
 
97
  if __name__ == "__main__":
98
  demo.launch()