tudeplom commited on
Commit
b90ae45
·
verified ·
1 Parent(s): 587446d

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +9 -6
app.py CHANGED
@@ -3,6 +3,8 @@ import wave
3
  import json
4
  import tempfile
5
  import ffmpeg
 
 
6
  from flask import Flask
7
  from flask_socketio import SocketIO, emit
8
  from vosk import Model, KaldiRecognizer
@@ -19,22 +21,23 @@ model = Model(MODEL_PATH)
19
  # Xử lý âm thanh WebM từng đoạn
20
  @socketio.on("audio_chunk")
21
  def handle_audio_chunk(data):
 
22
  try:
23
  # Lưu WebM tạm thời
24
  with tempfile.NamedTemporaryFile(suffix=".webm", delete=False) as temp_webm:
25
  webm_path = temp_webm.name
26
  temp_webm.write(data)
27
-
28
  # Chuyển đổi sang WAV
29
  wav_path = tempfile.mktemp(suffix=".wav")
30
  ffmpeg.input(webm_path).output(
31
  wav_path, acodec="pcm_s16le", ac=1, ar=16000, format="wav"
32
  ).run(overwrite_output=True, quiet=True)
33
-
34
  # Nhận diện giọng nói
 
35
  with wave.open(wav_path, "rb") as wf:
36
  rec = KaldiRecognizer(model, wf.getframerate())
37
- result_text = ""
38
  while True:
39
  data = wf.readframes(4000)
40
  if len(data) == 0:
@@ -43,16 +46,16 @@ def handle_audio_chunk(data):
43
  result_text += json.loads(rec.Result()).get("text", "") + " "
44
  else:
45
  result_text += json.loads(rec.PartialResult()).get("partial", "") + " "
46
-
47
  # Gửi kết quả về client
48
  emit("stt_result", {"text": result_text.strip()})
49
  except Exception as e:
 
50
  emit("stt_error", {"error": str(e)})
51
  finally:
52
- # Xóa file tạm
53
  for path in [webm_path, wav_path]:
54
  if path and os.path.exists(path):
55
  os.remove(path)
56
 
57
  if __name__ == "__main__":
58
- socketio.run(app, host="0.0.0.0", port=7860, debug=True)
 
3
  import json
4
  import tempfile
5
  import ffmpeg
6
+ import eventlet
7
+ import eventlet.wsgi
8
  from flask import Flask
9
  from flask_socketio import SocketIO, emit
10
  from vosk import Model, KaldiRecognizer
 
21
  # Xử lý âm thanh WebM từng đoạn
22
  @socketio.on("audio_chunk")
23
  def handle_audio_chunk(data):
24
+ webm_path, wav_path = None, None
25
  try:
26
  # Lưu WebM tạm thời
27
  with tempfile.NamedTemporaryFile(suffix=".webm", delete=False) as temp_webm:
28
  webm_path = temp_webm.name
29
  temp_webm.write(data)
30
+
31
  # Chuyển đổi sang WAV
32
  wav_path = tempfile.mktemp(suffix=".wav")
33
  ffmpeg.input(webm_path).output(
34
  wav_path, acodec="pcm_s16le", ac=1, ar=16000, format="wav"
35
  ).run(overwrite_output=True, quiet=True)
36
+
37
  # Nhận diện giọng nói
38
+ result_text = ""
39
  with wave.open(wav_path, "rb") as wf:
40
  rec = KaldiRecognizer(model, wf.getframerate())
 
41
  while True:
42
  data = wf.readframes(4000)
43
  if len(data) == 0:
 
46
  result_text += json.loads(rec.Result()).get("text", "") + " "
47
  else:
48
  result_text += json.loads(rec.PartialResult()).get("partial", "") + " "
49
+
50
  # Gửi kết quả về client
51
  emit("stt_result", {"text": result_text.strip()})
52
  except Exception as e:
53
+ print(f"Lỗi xử lý audio_chunk: {e}")
54
  emit("stt_error", {"error": str(e)})
55
  finally:
 
56
  for path in [webm_path, wav_path]:
57
  if path and os.path.exists(path):
58
  os.remove(path)
59
 
60
  if __name__ == "__main__":
61
+ eventlet.wsgi.server(eventlet.listen(("0.0.0.0", 7860)), app)