如何高效识别语音并提取情感?用SenseVoice Small镜像快速上手

如何高效识别语音并提取情感?用SenseVoice Small镜像快速上手

1. 引言:语音理解的新范式

在智能交互、客服质检、情绪分析等场景中,传统的语音识别(ASR)已无法满足对语义+情感+事件的多维理解需求。如何实现高精度、低延迟的富文本语音理解,成为当前AI应用的关键挑战。

SenseVoice Small 是由阿里开源的音频基础模型,具备语音识别(ASR)、语种识别(LID)、语音情感识别(SER)和声学事件检测(AED)能力。经过超过40万小时数据训练,支持50+语言,在中文场景下表现尤为突出,且推理速度远超Whisper系列模型。

本文将基于“SenseVoice Small根据语音识别文字和情感事件标签 二次开发构建by科哥”这一CSDN星图镜像,带你从零开始掌握其WebUI使用方法与Python API调用技巧,快速实现语音转文字 + 情感分析 + 事件标注一体化处理。


2. 镜像环境准备与启动

2.1 环境说明

该镜像已预装以下核心组件:

  • SenseVoice Small模型:轻量级非自回归端到端模型
  • FunASR框架:阿里巴巴达摩院推出的语音处理工具包
  • Gradio WebUI:可视化交互界面,支持上传/录音/实时识别
  • JupyterLab:可进行代码调试与二次开发

2.2 启动服务

若未自动启动WebUI,请进入JupyterLab后执行以下命令重启应用:

/bin/bash /root/run.sh

2.3 访问地址

浏览器打开:

http://localhost:7860

即可进入SenseVoice WebUI操作界面。


3. WebUI操作全流程详解

3.1 界面布局解析

┌─────────────────────────────────────────────────────────┐ │ [紫蓝渐变标题] SenseVoice WebUI │ │ webUI二次开发 by 科哥 | 微信:312088415 │ ├─────────────────────────────────────────────────────────┤ │ 📖 使用说明 │ ├──────────────────────┬──────────────────────────────────┤ │ 🎤 上传音频 │ 💡 示例音频 │ │ 🌐 语言选择 │ - zh.mp3 (中文) │ │ ⚙️ 配置选项 │ - en.mp3 (英文) │ │ 🚀 开始识别 │ - ja.mp3 (日语) │ │ 📝 识别结果 │ - ko.mp3 (韩语) │ └──────────────────────┴──────────────────────────────────┘

左侧为功能区,右侧提供示例音频快速体验。


3.2 使用步骤详解

3.2.1 上传或录制音频

方式一:上传本地文件

点击“🎤 上传音频或使用麦克风”,选择支持格式的音频文件: - 支持格式:MP3、WAV、M4A - 推荐采样率:16kHz 或更高 - 建议时长:30秒以内以获得更快响应

方式二:麦克风实时录音

点击右侧麦克风图标,授权浏览器访问麦克风权限: 1. 点击红色按钮开始录音 2. 再次点击停止录音 3. 系统自动保存并加载音频

提示:安静环境下录制效果更佳,避免回声干扰。


3.2.2 选择识别语言

通过“🌐 语言选择”下拉菜单指定目标语言:

选项说明
auto自动检测(推荐)
zh中文
en英文
yue粤语
ja日语
ko韩语
nospeech无语音

对于混合语言或不确定语种的情况,建议选择auto模式。


3.2.3 开始识别

点击“🚀 开始识别”按钮,系统将在数秒内完成处理:

音频时长平均识别耗时
10秒0.5~1秒
1分钟3~5秒

性能受CPU/GPU资源影响,建议在GPU环境中部署以提升并发能力。


3.2.4 查看识别结果

识别结果展示于“📝 识别结果”文本框中,包含三大信息层:

(1)文本内容

原始语音转写的文字内容。

(2)情感标签(结尾处)
表情标签含义
😊HAPPY开心
😡ANGRY生气/激动
😔SAD伤心
😰FEARFUL恐惧
🤢DISGUSTED厌恶
😮SURPRISED惊讶
无表情NEUTRAL中性
(3)事件标签(开头处)
图标事件类型对应标签
🎼背景音乐BGM
👏掌声Applause
😀笑声Laughter
😭哭声Cry
🤧咳嗽/喷嚏Cough/Sneeze
📞电话铃声Ringtone
🚗引擎声Engine
🚶脚步声Footsteps
🚪开门声Door Open
🚨警报声Alarm
⌨️键盘声Keyboard
🖱️鼠标声Mouse Click

3.3 识别结果示例

示例1:中文情感识别
开放时间早上9点至下午5点。😊
  • 文本:开放时间早上9点至下午5点。
  • 情感:😊 开心
示例2:英文朗读
The tribal chieftain called for the boy and presented him with 50 pieces of gold.
  • 文本:部落首领叫来了男孩,并给了他50块金币。
示例3:带事件标签
🎼😀欢迎收听本期节目,我是主持人小明。😊
  • 事件:🎼 背景音乐 + 😀 笑声
  • 文本:欢迎收听本期节目,我是主持人小明。
  • 情感:😊 开心

4. Python API调用实战

除了WebUI外,SenseVoice Small也支持程序化调用,适用于自动化流水线、嵌入式系统等场景。

4.1 安装依赖

确保安装最新版funasr

pip install funasr -U

4.2 基础调用代码

from funasr import AutoModel from funasr.utils.postprocess_utils import rich_transcription_postprocess # 加载模型 model = AutoModel( model=r"/path/to/SenseVoiceSmall", trust_remote_code=True, remote_code="./model.py", vad_model="fsmn-vad", vad_kwargs={"max_single_segment_time": 30000}, device="cpu", # 可改为 "cuda:0" use_itn=True, disable_update=True, disable_pbar=True, disable_log=True ) def sound2text(audio_file): res = model.generate( input=audio_file, cache={}, language="zh", # 支持: zh, en, yue, ja, ko use_itn=True, batch_size_s=60, merge_vad=True, merge_length_s=15, ) text = rich_transcription_postprocess(res[0]["text"]) return text # 调用示例 audio_path = "example.wav" result = sound2text(audio_path) print("识别结果:", result)

4.3 使用ModelScope Pipeline方式

from modelscope.pipelines import pipeline from modelscope.utils.constant import Tasks inference_pipeline = pipeline( task=Tasks.auto_speech_recognition, model='iic/SenseVoiceSmall', model_revision="master", device="cuda:0", use_itn=True, disable_update=True ) rec_result = inference_pipeline("output.wav") print(rec_result)

注意:需提前下载模型权重并配置路径。


4.4 提取纯中文文本(正则清洗)

若需去除表情符号和其他非中文字符,可用如下函数提取干净中文:

import re def extract_chinese(input_string): """ 提取字符串中的汉字 """ chinese_characters = re.findall(r'[\u4e00-\u9fa5]', input_string) chinese_text = ''.join(chinese_characters) return chinese_text # 示例 raw_text = "🎼😀欢迎收听本期节目,我是主持人小明。😊" clean_text = extract_chinese(raw_text) print(clean_text) # 输出:欢迎收听本期节目我是主持人小明

5. 高级实践:实时语音流处理修复方案

原始代码存在音频帧丢失、播放速度异常等问题。以下是优化后的完整解决方案。

5.1 关键问题修复点

问题修复措施
音频帧丢失使用collections.deque构建循环缓冲区
录音过快统一使用标准采样率常量AUDIO_RATE
VAD漏检改为“VAD OR 频谱分析”双通道判断机制
起始部分截断添加语音前300ms历史数据

5.2 完整修复代码

import pyaudio import numpy as np import wave import collections import os import datetime from funasr import AutoModel from funasr.utils.postprocess_utils import rich_transcription_postprocess import webrtcvad # 参数配置 AUDIO_RATE = 16000 # 统一采样率 CHUNK_SIZE = 480 # 30ms @ 16kHz VAD_MODE = 1 vad = webrtcvad.Vad(VAD_MODE) # 创建临时目录 os.makedirs("temp_wave", exist_ok=True) # 加载模型 sound_recongnition_model = AutoModel( model="/root/models/SenseVoiceSmall", trust_remote_code=False, device="cpu", use_itn=True, disable_update=True, disable_pbar=True, disable_log=True ) class SpeechDetector: def __init__(self): self.audio_buffer = collections.deque(maxlen=500) # 存储最近15秒 self.speech_buffer = bytearray() self.speech_state = False self.consecutive_speech = 0 self.consecutive_silence = 0 self.required_speech_frames = 2 self.required_silence_frames = 15 def analyze_spectrum(self, audio_chunk): audio_data = np.frombuffer(audio_chunk, dtype=np.int16) if len(audio_data) == 0: return False window = np.hanning(len(audio_data)) windowed_data = audio_data * window spectrum = np.abs(np.fft.rfft(windowed_data)) spectral_mean = np.mean(spectrum) peak_count = sum( spectrum[i] > spectrum[i-1] and spectrum[i] > spectrum[i+1] and spectrum[i] > spectral_mean * 1.5 for i in range(1, len(spectrum)-1) ) return peak_count >= 3 def is_speech(self, audio_chunk): amplitude = np.abs(np.frombuffer(audio_chunk, dtype=np.int16)).mean() if amplitude < 1000: return False vad_result = vad.is_speech(audio_chunk, AUDIO_RATE) spectral_result = self.analyze_spectrum(audio_chunk) return vad_result or spectral_result # 使用OR逻辑降低误判 def process_chunk(self, audio_chunk): recognized_text = None temp_audio = None self.audio_buffer.append(audio_chunk) is_speech_chunk = self.is_speech(audio_chunk) if is_speech_chunk: self.consecutive_speech += 1 self.consecutive_silence = 0 if not self.speech_state and self.consecutive_speech >= self.required_speech_frames: self.speech_state = True self.speech_buffer = bytearray() for chunk in list(self.audio_buffer)[-10:]: self.speech_buffer.extend(chunk) if self.speech_state: self.speech_buffer.extend(audio_chunk) else: self.consecutive_silence += 1 self.consecutive_speech = 0 if self.speech_state: self.speech_buffer.extend(audio_chunk) if self.speech_state and self.consecutive_silence >= self.required_silence_frames: if len(self.speech_buffer) > CHUNK_SIZE * 5: temp_audio = bytes(self.speech_buffer) timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S") wav_filename = f"temp_wave/rec_{timestamp}.wav" save_audio_to_wav(temp_audio, AUDIO_RATE, 1, wav_filename) try: res = sound_recongnition_model.generate(input=wav_filename, language="zh", use_itn=True) recognized_text = rich_transcription_postprocess(res[0]["text"]) os.remove(wav_filename) except Exception as e: print(f"处理失败: {e}") self.speech_state = False self.speech_buffer = bytearray() return recognized_text, temp_audio def save_audio_to_wav(audio_data, sample_rate, channels, filename): with wave.open(filename, 'wb') as wf: wf.setnchannels(channels) wf.setsampwidth(2) wf.setframerate(sample_rate) wf.writeframes(audio_data) print(f"已保存: {filename}") if __name__ == "__main__": p = pyaudio.PyAudio() stream = p.open( format=pyaudio.paInt16, channels=1, rate=AUDIO_RATE, input=True, frames_per_buffer=CHUNK_SIZE ) detector = SpeechDetector() print("开始监听... (Ctrl+C退出)") try: while True: chunk = stream.read(CHUNK_SIZE, exception_on_overflow=False) text, _ = detector.process_chunk(chunk) if text: print("【识别】", text) except KeyboardInterrupt: print("\n停止监听") finally: stream.stop_stream() stream.close() p.terminate()

6. 性能优化与最佳实践

6.1 提升识别准确率

方法说明
使用高质量音频WAV > MP3 > M4A,推荐16kHz以上
控制背景噪音在安静环境中采集
明确语言选择若知悉语种,避免使用auto
保持语速适中避免过快或吞音

6.2 推理加速建议

  • 启用GPU:设置device="cuda:0"可显著提升速度
  • 批处理优化:合理设置batch_size_s=60
  • 关闭日志输出:生产环境添加disable_log=True

6.3 微调定制支持

SenseVoice 提供便捷微调脚本,可用于: - 修复特定口音识别问题 - 增强行业术语识别能力 - 适配特殊场景下的情感分类

详见官方GitHub仓库文档。


7. 常见问题解答

Q1: 上传音频无反应?

检查文件是否损坏,尝试重新编码为WAV格式。

Q2: 识别结果不准确?

请确认语言选择正确,优先使用auto检测;同时检查音频清晰度。

Q3: 识别速度慢?

  • 检查服务器资源占用情况
  • 尽量使用短音频片段(<1分钟)
  • 推荐使用GPU运行

Q4: 如何复制识别结果?

点击结果框右侧的“复制”按钮即可。


8. 总结

本文系统介绍了基于“SenseVoice Small”镜像的语音识别与情感提取全流程:

  1. WebUI快速体验:无需编程即可完成语音上传、识别、查看结果;
  2. API深度集成:通过Python脚本实现自动化语音处理;
  3. 实时流修复方案:解决原始代码中存在的音频丢失与节奏异常问题;
  4. 工程化建议:涵盖性能优化、文本清洗、部署策略等实用技巧。

SenseVoice Small凭借其高精度、多语言、低延迟、富语义输出等优势,已成为语音理解领域的优选方案。结合CSDN星图镜像的一键部署能力,开发者可迅速构建具备情感感知能力的智能语音系统。


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1162872.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IndexTTS-2-LLM优化技巧:提升语音情感表达能力

IndexTTS-2-LLM优化技巧&#xff1a;提升语音情感表达能力 1. 引言 随着人工智能在语音合成领域的持续演进&#xff0c;用户对语音自然度和情感表现力的要求日益提高。传统的文本到语音&#xff08;Text-to-Speech, TTS&#xff09;系统虽然能够实现基本的语音生成&#xff0…

YOLOv8工业检测部署教程:高召回率小目标识别实战

YOLOv8工业检测部署教程&#xff1a;高召回率小目标识别实战 1. 引言 1.1 工业视觉检测的挑战与需求 在智能制造、安防监控、仓储物流等工业场景中&#xff0c;目标检测技术正逐步成为自动化系统的核心组件。传统方法依赖人工巡检或基于规则的图像处理&#xff0c;存在效率低…

终极指南:如何使用 pinyinjs 实现汉字与拼音完美互转

终极指南&#xff1a;如何使用 pinyinjs 实现汉字与拼音完美互转 【免费下载链接】pinyinjs 项目地址: https://gitcode.com/gh_mirrors/pin/pinyinjs pinyinjs 是一个小巧而强大的 web 工具库&#xff0c;专门用于实现汉字与拼音之间的互转功能。无论你是需要获取拼音…

DLSS Swapper终极指南:5分钟掌握游戏画质升级秘籍

DLSS Swapper终极指南&#xff1a;5分钟掌握游戏画质升级秘籍 【免费下载链接】dlss-swapper 项目地址: https://gitcode.com/GitHub_Trending/dl/dlss-swapper 还在忍受老旧DLSS版本带来的模糊画质和卡顿体验吗&#xff1f;DLSS Swapper这款革命性工具能够让你轻松升级…

Source Han Serif CN字体终极使用手册:从零到精通完全指南

Source Han Serif CN字体终极使用手册&#xff1a;从零到精通完全指南 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf Source Han Serif CN作为一款开源的专业级中文字体&#xff0c;凭…

手机秒变高清摄像头:DroidCam OBS Plugin终极配置方案

手机秒变高清摄像头&#xff1a;DroidCam OBS Plugin终极配置方案 【免费下载链接】droidcam-obs-plugin DroidCam OBS Source 项目地址: https://gitcode.com/gh_mirrors/dr/droidcam-obs-plugin 还在为专业摄像设备的高昂成本发愁吗&#xff1f;DroidCam OBS Plugin让…

R3nzSkin终极指南:英雄联盟免费换肤工具完整使用教程

R3nzSkin终极指南&#xff1a;英雄联盟免费换肤工具完整使用教程 【免费下载链接】R3nzSkin Skin changer for League of Legends (LOL).Everyone is welcome to help improve it. 项目地址: https://gitcode.com/gh_mirrors/r3n/R3nzSkin 想要在英雄联盟中免费体验各种…

AutoGLM-Phone-9B部署指南:从环境配置到推理优化

AutoGLM-Phone-9B部署指南&#xff1a;从环境配置到推理优化 随着边缘智能的快速发展&#xff0c;将大语言模型高效部署至终端设备已成为提升用户体验的关键路径。AutoGLM-Phone-9B作为一款专为移动端优化的多模态大语言模型&#xff0c;融合视觉、语音与文本处理能力&#xf…

如何轻松实现Windows系统HEIC照片预览:3步搞定缩略图显示

如何轻松实现Windows系统HEIC照片预览&#xff1a;3步搞定缩略图显示 【免费下载链接】windows-heic-thumbnails Enable Windows Explorer to display thumbnails for HEIC files 项目地址: https://gitcode.com/gh_mirrors/wi/windows-heic-thumbnails 还在为iPhone拍摄…

手机摄像头终极直播工具:DroidCam OBS Plugin快速上手完整指南

手机摄像头终极直播工具&#xff1a;DroidCam OBS Plugin快速上手完整指南 【免费下载链接】droidcam-obs-plugin DroidCam OBS Source 项目地址: https://gitcode.com/gh_mirrors/dr/droidcam-obs-plugin 还在为专业直播设备的高昂成本而烦恼吗&#xff1f;现在&#x…

FST ITN-ZH大模型镜像解析|赋能中文ITN批量处理与WebUI交互应用

FST ITN-ZH大模型镜像解析&#xff5c;赋能中文ITN批量处理与WebUI交互应用 1. 背景与核心价值 在语音识别&#xff08;ASR&#xff09;和自然语言处理&#xff08;NLP&#xff09;的实际应用中&#xff0c;一个常被忽视但至关重要的环节是逆文本标准化&#xff08;Inverse T…

思源宋体TTF完全指南:7种字重打造专业中文排版

思源宋体TTF完全指南&#xff1a;7种字重打造专业中文排版 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf &#x1f3af; 还在为中文排版烦恼吗&#xff1f;思源宋体TTF版本为你提供完…

Meta-Llama-3-8B-Instruct推理优化:vLLM加速技术解析

Meta-Llama-3-8B-Instruct推理优化&#xff1a;vLLM加速技术解析 1. 引言 随着大语言模型在对话系统、代码生成和指令遵循任务中的广泛应用&#xff0c;如何高效部署中等规模但性能强劲的模型成为工程实践的关键挑战。Meta-Llama-3-8B-Instruct 作为 Llama 3 系列中兼具性能与…

Topit Mac窗口置顶神器:告别窗口遮挡烦恼的终极解决方案

Topit Mac窗口置顶神器&#xff1a;告别窗口遮挡烦恼的终极解决方案 【免费下载链接】Topit Pin any window to the top of your screen / 在Mac上将你的任何窗口强制置顶 项目地址: https://gitcode.com/gh_mirrors/to/Topit 你是否曾经在忙碌的工作中&#xff0c;因为…

边缘计算新突破:AutoGLM-Phone-9B本地推理全流程

边缘计算新突破&#xff1a;AutoGLM-Phone-9B本地推理全流程 随着终端设备算力的持续提升&#xff0c;将大语言模型部署于移动端进行本地化推理已成为现实。AutoGLM-Phone-9B作为一款专为边缘场景设计的多模态大语言模型&#xff0c;凭借其轻量化架构与高效推理能力&#xff0…

DLSS Swapper完整教程:三步轻松升级游戏画质,新手也能快速上手

DLSS Swapper完整教程&#xff1a;三步轻松升级游戏画质&#xff0c;新手也能快速上手 【免费下载链接】dlss-swapper 项目地址: https://gitcode.com/GitHub_Trending/dl/dlss-swapper 还在为游戏画质不够清晰而烦恼吗&#xff1f;想要在不更换显卡的情况下获得更出色…

Universal Pokemon Randomizer终极使用指南:打造独一无二的宝可梦冒险

Universal Pokemon Randomizer终极使用指南&#xff1a;打造独一无二的宝可梦冒险 【免费下载链接】universal-pokemon-randomizer Public repository of source code for the Universal Pokemon Randomizer 项目地址: https://gitcode.com/gh_mirrors/un/universal-pokemon-…

HunyuanVideo-Foley音质实测:如何用云端GPU调出最佳效果

HunyuanVideo-Foley音质实测&#xff1a;如何用云端GPU调出最佳效果 你是不是也遇到过这样的情况&#xff1a;精心剪辑了一段播客视频&#xff0c;画面流畅、节奏到位&#xff0c;但一播放却发现——没有合适的背景音效&#xff0c;整个内容瞬间“干巴巴”的&#xff0c;缺乏沉…

AI读脸术WebUI使用指南:上传图片到结果解析

AI读脸术WebUI使用指南&#xff1a;上传图片到结果解析 1. 引言 1.1 学习目标 本文将详细介绍如何使用“AI读脸术”WebUI工具&#xff0c;完成从镜像部署、服务启动到图像上传与结果解析的完整流程。读者在阅读后将能够&#xff1a; 理解该系统的技术架构和核心功能独立部署…

通义千问2.5-0.5B-Instruct教程:模型剪枝技术

通义千问2.5-0.5B-Instruct教程&#xff1a;模型剪枝技术 1. 引言 1.1 轻量级大模型的现实需求 随着人工智能应用向移动端和边缘设备延伸&#xff0c;对模型体积、推理速度与资源消耗的要求日益严苛。传统大模型虽性能强大&#xff0c;但动辄数GB显存占用和高算力需求使其难…