tudeplom commited on
Commit
4943521
·
verified ·
1 Parent(s): cbab8dc

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +28 -23
app.py CHANGED
@@ -1,6 +1,7 @@
1
  import os
2
  import wave
3
  import json
 
4
  import numpy as np
5
  from flask import Flask, request, jsonify
6
  from flask_cors import CORS
@@ -12,16 +13,16 @@ MODEL_PATH = "model/vosk-model"
12
 
13
  # Kiểm tra model đã tải chưa
14
  if not os.path.exists(MODEL_PATH):
15
- raise Exception(f" Model Vosk không tìm thấy tại {MODEL_PATH}! Kiểm tra lại.")
16
 
17
  # Load model
18
- print(" Đang tải model Vosk...")
19
  model = Model(MODEL_PATH)
20
 
21
  # Khởi tạo Flask app
22
  app = Flask(__name__)
23
  CORS(app)
24
- swagger = Swagger(app)
25
 
26
  @app.route("/")
27
  def home():
@@ -31,7 +32,7 @@ def home():
31
  200:
32
  description: API đang chạy
33
  """
34
- return " Vosk STT API đang chạy!"
35
 
36
  @app.route("/stt", methods=["POST"])
37
  def stt():
@@ -61,31 +62,35 @@ def stt():
61
  return jsonify({"error": "Không tìm thấy file audio!"}), 400
62
 
63
  audio_file = request.files["audio"]
64
- file_path = "temp.wav"
65
  audio_file.save(file_path)
66
 
67
- # Mở file âm thanh
68
- wf = wave.open(file_path, "rb")
 
69
 
70
- # Kiểm tra file có đúng định dạng WAV mono không
71
- if wf.getnchannels() != 1 or wf.getsampwidth() != 2 or wf.getcomptype() != "NONE":
72
- os.remove(file_path)
73
- return jsonify({"error": "File audio phải là WAV mono PCM!"}), 400
74
 
75
- rec = KaldiRecognizer(model, wf.getframerate())
76
- result_text = ""
77
 
78
- while True:
79
- data = wf.readframes(4000)
80
- if len(data) == 0:
81
- break
82
- if rec.AcceptWaveform(data):
83
- result_text += json.loads(rec.Result())["text"] + " "
84
 
85
- wf.close()
86
- os.remove(file_path) # Xóa file tạm
87
-
88
- return jsonify({"text": result_text.strip()})
 
 
 
 
89
 
90
  if __name__ == "__main__":
91
  app.run(host="0.0.0.0", port=7860, debug=True)
 
1
  import os
2
  import wave
3
  import json
4
+ import uuid
5
  import numpy as np
6
  from flask import Flask, request, jsonify
7
  from flask_cors import CORS
 
13
 
14
  # Kiểm tra model đã tải chưa
15
  if not os.path.exists(MODEL_PATH):
16
+ raise Exception(f"\u274C Model Vosk không tìm thấy tại {MODEL_PATH}! Kiểm tra lại.")
17
 
18
  # Load model
19
+ print("\u2705 Đang tải model Vosk...")
20
  model = Model(MODEL_PATH)
21
 
22
  # Khởi tạo Flask app
23
  app = Flask(__name__)
24
  CORS(app)
25
+ Swagger(app)
26
 
27
  @app.route("/")
28
  def home():
 
32
  200:
33
  description: API đang chạy
34
  """
35
+ return "\u2705 Vosk STT API đang chạy!"
36
 
37
  @app.route("/stt", methods=["POST"])
38
  def stt():
 
62
  return jsonify({"error": "Không tìm thấy file audio!"}), 400
63
 
64
  audio_file = request.files["audio"]
65
+ file_path = f"/tmp/{uuid.uuid4()}.wav" # Lưu vào thư mục tạm để tránh lỗi quyền hạn
66
  audio_file.save(file_path)
67
 
68
+ try:
69
+ # Mở file âm thanh
70
+ wf = wave.open(file_path, "rb")
71
 
72
+ # Kiểm tra file có đúng định dạng WAV mono không
73
+ if wf.getnchannels() != 1 or wf.getsampwidth() != 2 or wf.getcomptype() != "NONE":
74
+ return jsonify({"error": "File audio phải là WAV mono PCM!"}), 400
 
75
 
76
+ rec = KaldiRecognizer(model, wf.getframerate())
77
+ result_text = ""
78
 
79
+ while True:
80
+ data = wf.readframes(4000)
81
+ if len(data) == 0:
82
+ break
83
+ if rec.AcceptWaveform(data):
84
+ result_text += json.loads(rec.Result())["text"] + " "
85
 
86
+ return jsonify({"text": result_text.strip()})
87
+
88
+ except Exception as e:
89
+ return jsonify({"error": str(e)}), 500
90
+
91
+ finally:
92
+ wf.close()
93
+ os.remove(file_path) # Xóa file tạm
94
 
95
  if __name__ == "__main__":
96
  app.run(host="0.0.0.0", port=7860, debug=True)