tudeplom commited on
Commit
62ca4e5
·
verified ·
1 Parent(s): 29951cd

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +24 -29
app.py CHANGED
@@ -1,23 +1,22 @@
1
  import os
2
  import json
3
- import asyncio
4
- from fastapi import FastAPI, WebSocket, WebSocketDisconnect
5
  from fastapi.middleware.cors import CORSMiddleware
6
  from vosk import Model, KaldiRecognizer
7
- import uvicorn
8
 
9
  # Kiểm tra model
10
  MODEL_PATH = "model/vosk-model"
11
  if not os.path.exists(MODEL_PATH):
12
- raise Exception("\u274c Model Vosk không tìm thấy!")
13
 
14
- print("\u2705 Đang tải model Vosk...")
15
  model = Model(MODEL_PATH)
16
 
17
  # Tạo app FastAPI
18
  app = FastAPI()
19
 
20
- # Cấu hình CORS để hỗ trợ WebSocket
21
  app.add_middleware(
22
  CORSMiddleware,
23
  allow_origins=["*"], # Cho phép tất cả nguồn
@@ -26,30 +25,26 @@ app.add_middleware(
26
  allow_headers=["*"],
27
  )
28
 
29
- @app.websocket("/ws") # Đường dẫn WebSocket
30
- async def websocket_endpoint(websocket: WebSocket):
31
- await websocket.accept()
32
- rec = KaldiRecognizer(model, 16000)
33
- result_text = ""
34
-
35
- print("\U0001F535 Client đã kết nối WebSocket!")
36
-
37
  try:
38
- while True:
39
- message = await websocket.receive_bytes() # Nhận dữ liệu
40
- if rec.AcceptWaveform(message):
41
- result = json.loads(rec.Result())
42
- text = result.get("text", "")
43
- result_text += text + " "
44
- await websocket.send_json({"text": text}) # Gửi kết quả
45
- print(f"\U0001F4E4 Gửi kết quả: {text}")
46
- except WebSocketDisconnect:
47
- print("\U0001F534 Client đã ngắt kết nối!")
 
 
 
48
  except Exception as e:
49
- print(f"\u274c Lỗi WebSocket: {e}")
50
- await websocket.close(code=1011, reason="Lỗi xử lý dữ liệu")
51
- finally:
52
- print(f"\u2705 Văn bản cuối cùng: {result_text.strip()}")
53
 
54
  if __name__ == "__main__":
55
- uvicorn.run(app, host="0.0.0.0", port=7860)
 
 
1
  import os
2
  import json
3
+ from fastapi import FastAPI, UploadFile, File, HTTPException
 
4
  from fastapi.middleware.cors import CORSMiddleware
5
  from vosk import Model, KaldiRecognizer
6
+ import wave
7
 
8
  # Kiểm tra model
9
  MODEL_PATH = "model/vosk-model"
10
  if not os.path.exists(MODEL_PATH):
11
+ raise Exception(" Model Vosk không tìm thấy!")
12
 
13
+ print(" Đang tải model Vosk...")
14
  model = Model(MODEL_PATH)
15
 
16
  # Tạo app FastAPI
17
  app = FastAPI()
18
 
19
+ # Cấu hình CORS để hỗ trợ API
20
  app.add_middleware(
21
  CORSMiddleware,
22
  allow_origins=["*"], # Cho phép tất cả nguồn
 
25
  allow_headers=["*"],
26
  )
27
 
28
+ @app.post("/stt")
29
+ async def speech_to_text(audio: UploadFile = File(...)):
30
+ """Nhận file âm thanh và trả về văn bản."""
 
 
 
 
 
31
  try:
32
+ with wave.open(audio.file, "rb") as wf:
33
+ if wf.getnchannels() != 1 or wf.getsampwidth() != 2 or wf.getframerate() != 16000:
34
+ raise HTTPException(status_code=400, detail="❌ File âm thanh phải là WAV mono 16kHz 16-bit.")
35
+
36
+ rec = KaldiRecognizer(model, 16000)
37
+ while True:
38
+ data = wf.readframes(4000)
39
+ if len(data) == 0:
40
+ break
41
+ rec.AcceptWaveform(data)
42
+
43
+ result = json.loads(rec.Result())
44
+ return {"text": result.get("text", "")}
45
  except Exception as e:
46
+ raise HTTPException(status_code=500, detail=f" Lỗi xử lý âm thanh: {str(e)}")
 
 
 
47
 
48
  if __name__ == "__main__":
49
+ import uvicorn
50
+ uvicorn.run(app, host="0.0.0.0", port=7860)