Charan5775 commited on
Commit
0c3824d
·
verified ·
1 Parent(s): cb1d9b8

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +31 -23
app.py CHANGED
@@ -1,41 +1,49 @@
1
- from fastapi import FastAPI, UploadFile, File
 
2
  from pywhispercpp.model import Model
3
- import uvicorn
4
  import tempfile
5
  import os
6
- from time import time
7
 
8
- app = FastAPI(title="pyWhisperCPP API")
9
 
10
- # Load model ONCE at startup
11
- #MODEL_PATH = "ggml-tiny.en.bin"
12
- #model = Model(MODEL_PATH)
13
  model = Model('base.en')
14
- #model = Model("large-v1")
15
-
16
  @app.get("/")
17
- def root():
18
- return {"status": "Whisper.cpp API is running!"}
19
 
 
20
  @app.post("/transcribe")
21
- async def transcribe(file: UploadFile = File(...)):
22
- # Save uploaded audio
23
  with tempfile.NamedTemporaryFile(delete=False, suffix=".wav") as temp:
24
  temp.write(await file.read())
25
  temp.flush()
26
  audio_path = temp.name
27
 
28
- start = time()
29
  segments = model.transcribe(audio_path)
30
- text = " ".join([seg.text for seg in segments])
31
- elapsed = round(time() - start, 3)
32
-
33
  os.remove(audio_path)
34
 
35
- return {
36
- "text": text,
37
- "processing_time_seconds": elapsed
38
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
39
 
40
- if __name__ == "__main__":
41
- uvicorn.run(app, host="0.0.0.0", port=7860)
 
 
 
1
+ from fastapi import FastAPI, UploadFile, File, WebSocket
2
+ from fastapi.responses import JSONResponse
3
  from pywhispercpp.model import Model
 
4
  import tempfile
5
  import os
 
6
 
7
+ app = FastAPI(title="Whisper STT Server")
8
 
9
+ # Load tiny model once at startup
10
+ #model = Model("tiny.en-q5_1")
 
11
  model = Model('base.en')
 
 
12
  @app.get("/")
13
+ async def home():
14
+ return {"status": "Whisper STT is running"}
15
 
16
+ # --------- File Upload Transcription ---------
17
  @app.post("/transcribe")
18
+ async def transcribe_audio(file: UploadFile = File(...)):
 
19
  with tempfile.NamedTemporaryFile(delete=False, suffix=".wav") as temp:
20
  temp.write(await file.read())
21
  temp.flush()
22
  audio_path = temp.name
23
 
 
24
  segments = model.transcribe(audio_path)
 
 
 
25
  os.remove(audio_path)
26
 
27
+ text = " ".join(s.text for s in segments)
28
+ return {"text": text}
29
+
30
+ # --------- LIVE Streaming WebSocket ---------
31
+ @app.websocket("/ws")
32
+ async def websocket_stt(ws: WebSocket):
33
+ await ws.accept()
34
+
35
+ while True:
36
+ try:
37
+ data = await ws.receive_bytes()
38
+
39
+ with tempfile.NamedTemporaryFile(delete=False, suffix=".wav") as temp:
40
+ temp.write(data)
41
+ temp.flush()
42
+ segments = model.transcribe(temp.name)
43
+
44
+ text = " ".join(s.text for s in segments)
45
 
46
+ await ws.send_json({"text": text})
47
+ except Exception:
48
+ await ws.close()
49
+ break