Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
|
@@ -118,10 +118,11 @@ def format_str_v3(s):
|
|
| 118 |
|
| 119 |
|
| 120 |
def model_inference(
|
| 121 |
-
audio_input, language,
|
| 122 |
):
|
| 123 |
if audio_input is None:
|
| 124 |
-
|
|
|
|
| 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()
|