Choultion-Rudas commited on
Commit
18f0f36
·
verified ·
1 Parent(s): 2c18b47

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +24 -10
app.py CHANGED
@@ -118,10 +118,11 @@ def format_str_v3(s):
118
 
119
 
120
  def model_inference(
121
- audio_input, language, output_format, use_itn, merge_vad, merge_length, ban_emo_unk
122
  ):
123
  if audio_input is None:
124
- return "错误:请上传或录制音频。"
 
125
  fs, input_wav = audio_input
126
  input_wav = input_wav.astype(np.float32) / np.iinfo(np.int16).max
127
  if len(input_wav.shape) > 1:
@@ -140,6 +141,11 @@ def model_inference(
140
  ban_emo_unk=ban_emo_unk,
141
  )
142
  raw_text = res[0].get("text", "未能识别出文本。")
 
 
 
 
 
143
  if output_format == "原始富文本":
144
  return raw_text
145
  elif output_format == "纯净文本":
@@ -148,7 +154,7 @@ def model_inference(
148
  return format_str_v3(raw_text)
149
 
150
 
151
- html_intro = """<div style="text-align: center; font-family: var(--font-sans);"><h1 style="font-size: 28px;">SenseVoice-Small 语音识别</h1><p>SenseVoice 是具有音频理解能力的音频基础模型,包括语音识别(ASR)、语种识别(LID)、语音情感识别(SER)和声学事件分类(AEC)或声学事件检测(AED)。</p><p style="font-size: small; color: #888;">支持 MP3, WAV, FLAC, M4A 等常见音频格式。</p></div>"""
152
  custom_css = "body, .gradio-container {font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;}"
153
  lang_options = [
154
  ("自动检测", "auto"),
@@ -162,17 +168,13 @@ lang_options = [
162
 
163
  with gr.Blocks(theme=gr.themes.Soft(), css=custom_css) as demo:
164
  gr.HTML(html_intro)
 
165
  with gr.Row():
166
  with gr.Column(scale=2):
167
  audio_inputs = gr.Audio(label="上传/录制音频")
168
  language_inputs = gr.Dropdown(
169
  choices=lang_options, value="auto", label="源语言"
170
  )
171
- output_format_dropdown = gr.Dropdown(
172
- choices=["纯净文本", "原始富文本", "Emoji 格式"],
173
- value="纯净文本",
174
- label="输出格式",
175
- )
176
  with gr.Accordion("高级设置", open=False):
177
  use_itn_checkbox = gr.Checkbox(value=True, label="自动添加标点与格式化")
178
  merge_vad_checkbox = gr.Checkbox(value=True, label="优化长音频断句")
@@ -182,20 +184,32 @@ with gr.Blocks(theme=gr.themes.Soft(), css=custom_css) as demo:
182
  ban_emo_unk_checkbox = gr.Checkbox(value=False, label="强制情感分类")
183
  fn_button = gr.Button("开始识别", variant="primary")
184
  with gr.Column(scale=3):
 
 
 
 
 
 
185
  text_outputs = gr.Textbox(label="识别结果", lines=25, show_copy_button=True)
 
186
  fn_button.click(
187
  fn=model_inference,
188
  inputs=[
189
  audio_inputs,
190
  language_inputs,
191
- output_format_dropdown,
192
  use_itn_checkbox,
193
  merge_vad_checkbox,
194
  merge_length_slider,
195
  ban_emo_unk_checkbox,
196
  ],
197
- outputs=text_outputs,
198
  api_name="model_inference",
199
  )
200
 
 
 
 
 
 
 
201
  demo.launch()
 
118
 
119
 
120
  def model_inference(
121
+ audio_input, language, use_itn, merge_vad, merge_length, ban_emo_unk
122
  ):
123
  if audio_input is None:
124
+ error_msg = "错误:请上传或录制音频。"
125
+ return error_msg, error_msg
126
  fs, input_wav = audio_input
127
  input_wav = input_wav.astype(np.float32) / np.iinfo(np.int16).max
128
  if len(input_wav.shape) > 1:
 
141
  ban_emo_unk=ban_emo_unk,
142
  )
143
  raw_text = res[0].get("text", "未能识别出文本。")
144
+ plain_text = " ".join(re.sub(r"<\|[^>]*>", "", raw_text).split())
145
+ return raw_text, plain_text
146
+
147
+
148
+ def format_output(raw_text, output_format):
149
  if output_format == "原始富文本":
150
  return raw_text
151
  elif output_format == "纯净文本":
 
154
  return format_str_v3(raw_text)
155
 
156
 
157
+ html_intro = """<div style="text-align: center; font-family: var(--font-sans);"><h1 style="font-size: 28px;">SenseVoice-Small 语音识别模型</h1><p>SenseVoice 是具有音频理解能力的音频基础模型,包括语音识别(ASR)、语种识别(LID)、语音情感识别(SER)和声学事件分类(AEC)或声学事件检测(AED)。</p><p style="font-size: small; color: #888;">支持 MP3, WAV, FLAC, M4A 等常见音频格式。</p></div>"""
158
  custom_css = "body, .gradio-container {font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;}"
159
  lang_options = [
160
  ("自动检测", "auto"),
 
168
 
169
  with gr.Blocks(theme=gr.themes.Soft(), css=custom_css) as demo:
170
  gr.HTML(html_intro)
171
+ raw_text_state = gr.State("")
172
  with gr.Row():
173
  with gr.Column(scale=2):
174
  audio_inputs = gr.Audio(label="上传/录制音频")
175
  language_inputs = gr.Dropdown(
176
  choices=lang_options, value="auto", label="源语言"
177
  )
 
 
 
 
 
178
  with gr.Accordion("高级设置", open=False):
179
  use_itn_checkbox = gr.Checkbox(value=True, label="自动添加标点与格式化")
180
  merge_vad_checkbox = gr.Checkbox(value=True, label="优化长音频断句")
 
184
  ban_emo_unk_checkbox = gr.Checkbox(value=False, label="强制情感分类")
185
  fn_button = gr.Button("开始识别", variant="primary")
186
  with gr.Column(scale=3):
187
+ output_format_dropdown = gr.Dropdown(
188
+ choices=["纯净文本", "原始富文本", "Emoji 格式"],
189
+ value="纯净文本",
190
+ label="输出格式",
191
+ interactive=True,
192
+ )
193
  text_outputs = gr.Textbox(label="识别结果", lines=25, show_copy_button=True)
194
+
195
  fn_button.click(
196
  fn=model_inference,
197
  inputs=[
198
  audio_inputs,
199
  language_inputs,
 
200
  use_itn_checkbox,
201
  merge_vad_checkbox,
202
  merge_length_slider,
203
  ban_emo_unk_checkbox,
204
  ],
205
+ outputs=[raw_text_state, text_outputs],
206
  api_name="model_inference",
207
  )
208
 
209
+ output_format_dropdown.change(
210
+ fn=format_output,
211
+ inputs=[raw_text_state, output_format_dropdown],
212
+ outputs=text_outputs,
213
+ )
214
+
215
  demo.launch()