当前位置: 首页 > article >正文

SenseVoice实战应用:将语音识别集成到你的Python项目中,快速调用API

SenseVoice实战应用将语音识别集成到你的Python项目中快速调用API1. 引言让Python项目听懂世界想象一下你的Python应用能够听懂用户说的话理解他们的意图甚至能感知他们的情绪。这在过去可能需要复杂的语音识别系统和昂贵的硬件支持但现在借助SenseVoice-small-语音识别-onnx模型这一切变得简单多了。SenseVoice是一个基于ONNX量化的多语言语音识别服务支持中文、粤语、英语、日语、韩语等多种语言。它最大的特点是小而强——模型经过量化处理后体积小仅230M但识别能力却非常出色。更棒的是它提供了简单易用的REST API接口让你可以轻松地将语音识别功能集成到现有的Python项目中。无论你是想开发智能客服系统、语音控制应用还是需要为项目添加语音转文字功能这篇文章都将带你一步步实现。我们将从环境准备开始到API调用实战再到实际应用案例让你快速掌握SenseVoice的集成方法。2. 环境准备与快速部署2.1 安装必要依赖在开始之前我们需要确保Python环境已经准备好。建议使用Python 3.8或更高版本并创建一个虚拟环境来隔离依赖# 创建并激活虚拟环境 python -m venv sensevoice-env source sensevoice-env/bin/activate # Linux/macOS # sensevoice-env\Scripts\activate # Windows # 安装核心依赖 pip install funasr-onnx gradio fastapi uvicorn soundfile jieba这些依赖包中funasr-onnx提供了ONNX模型的运行环境fastapi和uvicorn用于构建和运行API服务soundfile用于音频文件处理jieba中文分词工具用于中文语音识别2.2 启动语音识别服务安装完依赖后我们可以直接启动SenseVoice服务python3 app.py --host 0.0.0.0 --port 7860服务启动后你可以在浏览器中访问以下地址Web界面http://localhost:7860API文档http://localhost:7860/docs健康检查http://localhost:7860/health2.3 验证服务运行为了确保服务正常运行我们可以使用curl进行简单测试curl -X POST http://localhost:7860/api/transcribe \ -F fileaudio.wav \ -F languageauto \ -F use_itntrue如果一切正常你会收到类似这样的响应{ text: 你好这是一个测试语音, language: zh, emotion: neutral }3. Python调用API实战3.1 直接调用REST API最简单的方式是通过HTTP请求调用API。我们可以使用Python的requests库来实现import requests def transcribe_audio(file_path, languageauto, use_itnTrue): 调用SenseVoice API进行语音转写 :param file_path: 音频文件路径 :param language: 语言代码如zh、en等auto为自动检测 :param use_itn: 是否使用逆文本正则化 :return: 转写结果 url http://localhost:7860/api/transcribe with open(file_path, rb) as f: files {file: f} data {language: language, use_itn: use_itn} response requests.post(url, filesfiles, datadata) if response.status_code 200: return response.json() else: raise Exception(f识别失败: {response.text}) # 使用示例 result transcribe_audio(test.wav) print(f识别结果: {result[text]}) print(f检测语言: {result[language]}) if emotion in result: print(f情感分析: {result[emotion]})3.2 使用Python SDK直接调用除了REST APISenseVoice还提供了Python SDK可以直接在代码中调用模型from funasr_onnx import SenseVoiceSmall # 初始化模型 model SenseVoiceSmall( /root/ai-models/danieldong/sensevoice-small-onnx-quant, batch_size10, quantizeTrue ) # 识别单个音频文件 result model([audio.wav], languageauto, use_itnTrue) print(result[0]) # 批量识别多个音频文件 results model([audio1.wav, audio2.wav, audio3.wav], languagezh) for res in results: print(res)3.3 处理不同音频格式SenseVoice支持多种音频格式包括wav、mp3、m4a、flac等。如果你的音频不是wav格式可以使用以下代码进行转换from pydub import AudioSegment def convert_audio(input_path, output_pathoutput.wav): 将音频文件转换为wav格式 :param input_path: 输入文件路径 :param output_path: 输出文件路径 audio AudioSegment.from_file(input_path) audio.export(output_path, formatwav) return output_path # 使用示例 wav_file convert_audio(input.mp3) result transcribe_audio(wav_file)4. 高级功能与应用技巧4.1 情感识别与音频事件检测SenseVoice不仅能转写文字还能识别说话人的情感和音频中的事件def analyze_audio(file_path): 分析音频中的情感和事件 result transcribe_audio(file_path) output { text: result.get(text, ), language: result.get(language, unknown) } if emotion in result: output[emotion] result[emotion] print(f检测到情感: {result[emotion]}) if events in result and result[events]: output[events] result[events] print(f检测到音频事件: {, .join(result[events])}) return output # 使用示例 analysis analyze_audio(meeting.wav)4.2 语言自动检测与多语言支持SenseVoice支持50多种语言的自动检测我们可以利用这一特性处理多语言音频def detect_language(file_path): 检测音频中的语言 result transcribe_audio(file_path, languageauto) return result[language] # 支持的语言示例 supported_languages { auto: 自动检测, zh: 中文, en: 英语, yue: 粤语, ja: 日语, ko: 韩语 } # 使用示例 lang detect_language(multilingual.wav) print(f检测到语言: {supported_languages.get(lang, lang)})4.3 实时语音识别虽然SenseVoice主要设计用于处理预先录制的音频文件但我们也可以实现准实时的语音识别import sounddevice as sd import numpy as np import soundfile as sf from queue import Queue import threading class RealTimeASR: def __init__(self, chunk_duration5.0): 初始化实时语音识别 :param chunk_duration: 每次处理的音频时长(秒) self.chunk_duration chunk_duration self.audio_queue Queue() self.sample_rate 16000 self.channels 1 def callback(self, indata, frames, time, status): 音频回调函数 self.audio_queue.put(indata.copy()) def start_recording(self): 开始录音 print(开始录音...) self.stream sd.InputStream( samplerateself.sample_rate, channelsself.channels, callbackself.callback, dtypefloat32 ) self.stream.start() def stop_recording(self): 停止录音 self.stream.stop() self.stream.close() print(录音停止) def process_audio(self): 处理音频队列 while True: # 收集足够时长的音频 audio_chunks [] total_duration 0.0 while total_duration self.chunk_duration: chunk self.audio_queue.get() audio_chunks.append(chunk) total_duration len(chunk) / self.sample_rate # 合并音频块 audio_data np.concatenate(audio_chunks) # 保存临时文件并识别 temp_file temp.wav sf.write(temp_file, audio_data, self.sample_rate) result transcribe_audio(temp_file) print(f识别结果: {result[text]}) # 使用示例 rt_asr RealTimeASR(chunk_duration3.0) rt_asr.start_recording() # 在另一个线程中处理音频 processing_thread threading.Thread(targetrt_asr.process_audio) processing_thread.daemon True processing_thread.start() # 按Enter键停止 input(按Enter键停止录音...\n) rt_asr.stop_recording()5. 实际应用案例5.1 智能客服系统我们可以将SenseVoice集成到客服系统中实现语音交互class VoiceAssistant: def __init__(self): self.commands { 查询余额: self.check_balance, 转账: self.transfer_money, 投诉: self.handle_complaint, 人工服务: self.connect_agent } def process_voice_command(self, audio_file): 处理语音命令 result transcribe_audio(audio_file) text result[text] # 查找匹配的命令 for cmd, func in self.commands.items(): if cmd in text: return func() return 抱歉我没有听懂您的需求 def check_balance(self): return 您的当前余额为1000元 def transfer_money(self): return 请告诉我转账金额和收款人信息 def handle_complaint(self): return 已记录您的投诉我们会尽快处理 def connect_agent(self): return 正在为您转接人工客服... # 使用示例 assistant VoiceAssistant() response assistant.process_voice_command(command.wav) print(response)5.2 会议记录自动生成SenseVoice可以用于自动生成会议记录import datetime import os class MeetingRecorder: def __init__(self, output_dirmeetings): self.output_dir output_dir os.makedirs(output_dir, exist_okTrue) def record_meeting(self, audio_file): 记录会议内容 # 识别语音 result transcribe_audio(audio_file) # 生成文件名 now datetime.datetime.now() filename fmeeting_{now.strftime(%Y%m%d_%H%M%S)}.txt filepath os.path.join(self.output_dir, filename) # 保存结果 with open(filepath, w, encodingutf-8) as f: f.write(f会议时间: {now.strftime(%Y-%m-%d %H:%M:%S)}\n) f.write(f检测语言: {result.get(language, 未知)}\n) f.write(\n会议内容:\n) f.write(result[text]) if emotion in result: f.write(f\n\n情感分析: {result[emotion]}) if events in result and result[events]: f.write(f\n检测到的事件: {, .join(result[events])}) print(f会议记录已保存到: {filepath}) return filepath # 使用示例 recorder MeetingRecorder() recorder.record_meeting(meeting.wav)5.3 多语言翻译系统结合翻译API我们可以构建一个语音翻译系统from googletrans import Translator class VoiceTranslator: def __init__(self): self.translator Translator() def translate_audio(self, audio_file, target_langen): 翻译语音内容 :param audio_file: 音频文件路径 :param target_lang: 目标语言代码 :return: 翻译结果 # 先识别原始语音 result transcribe_audio(audio_file) source_text result[text] source_lang result[language] # 翻译文本 translation self.translator.translate( source_text, srcsource_lang, desttarget_lang ) return { original_text: source_text, original_language: source_lang, translated_text: translation.text, target_language: target_lang } # 使用示例 translator VoiceTranslator() result translator.translate_audio(chinese.wav, target_langen) print(f原文({result[original_language]}): {result[original_text]}) print(f翻译({result[target_language]}): {result[translated_text]})6. 性能优化与问题排查6.1 提高识别准确率如果遇到识别准确率不高的情况可以尝试以下方法音频预处理def preprocess_audio(input_path, output_pathprocessed.wav): 音频预处理 import librosa from pydub import AudioSegment # 加载音频并重采样到16kHz y, sr librosa.load(input_path, sr16000) # 降噪处理 y_denoised librosa.effects.preemphasis(y) # 保存处理后的音频 audio AudioSegment( y_denoised.tobytes(), frame_rate16000, sample_width2, channels1 ) audio.export(output_path, formatwav) return output_path调整语言参数如果知道音频的语言明确指定语言代码如languagezh而不是使用auto对于混合语言音频可以分段处理使用ITN逆文本正则化设置use_itnTrue可以将百分之十转为10%等更规范的文本6.2 处理长音频文件SenseVoice对长音频的支持有限可以分段处理def transcribe_long_audio(file_path, chunk_size30): 分段处理长音频文件 :param file_path: 音频文件路径 :param chunk_size: 每段时长(秒) from pydub import AudioSegment import math audio AudioSegment.from_file(file_path) duration len(audio) / 1000 # 总时长(秒) chunks math.ceil(duration / chunk_size) results [] for i in range(chunks): start i * chunk_size * 1000 end (i 1) * chunk_size * 1000 chunk audio[start:end] chunk_file fchunk_{i}.wav chunk.export(chunk_file, formatwav) result transcribe_audio(chunk_file) results.append(result[text]) # 删除临时文件 os.remove(chunk_file) return .join(results)6.3 常见错误处理模型加载失败确保模型路径正确/root/ai-models/danieldong/sensevoice-small-onnx-quant检查磁盘空间是否足够音频格式不支持确保音频是支持的格式wav、mp3、m4a、flac等使用pydub或ffmpeg转换格式内存不足减少batch_size参数关闭其他占用内存的程序增加交换空间swap7. 总结与扩展7.1 关键要点回顾通过本文我们学习了如何快速部署SenseVoice语音识别服务通过REST API和Python SDK两种方式调用服务实现实时语音识别、情感分析等高级功能构建智能客服、会议记录等实际应用优化识别准确率和处理常见问题7.2 扩展应用方向SenseVoice还可以用于更多场景教育领域语言学习、发音评估医疗领域医患对话记录、病历语音录入智能家居语音控制家电无障碍技术为视障人士提供语音交互7.3 后续学习建议如果想进一步探索尝试集成到Django/Flask等Web框架结合TTS文本转语音实现完整对话系统研究模型微调适应特定领域术语探索边缘设备部署如树莓派获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

相关文章:

SenseVoice实战应用:将语音识别集成到你的Python项目中,快速调用API

SenseVoice实战应用:将语音识别集成到你的Python项目中,快速调用API 1. 引言:让Python项目听懂世界 想象一下,你的Python应用能够听懂用户说的话,理解他们的意图,甚至能感知他们的情绪。这在过去可能需要…...

(一篇入门)汽车电子电器之整车控制器VCU功能解析与测试实践

1. 整车控制器VCU:新能源汽车的"大脑" 第一次拆解新能源汽车时,我盯着那个巴掌大的金属盒子看了半天——这就是传说中的VCU(整车控制器)。它就像乐高套装里的核心积木,所有其他模块都得听它指挥。记得有次测…...

GLM-OCR模型长短期记忆(LSTM)解码器技术剖析

GLM-OCR模型长短期记忆(LSTM)解码器技术剖析 你是不是觉得现在的OCR(光学字符识别)技术特别神奇?一张图片拍下去,里面的文字瞬间就被识别出来了,又快又准。这背后,除了强大的视觉模…...

Qwen3-14B私有镜像运维指南:监控、扩缩容与故障排查

Qwen3-14B私有镜像运维指南:监控、扩缩容与故障排查 1. 前言:为什么需要关注大模型运维 部署完Qwen3-14B只是第一步,真正的挑战在于如何让它稳定运行。不同于传统应用,大模型服务对资源需求高、故障模式特殊,需要一套…...

PDF-Extract-Kit-1.0在Linux系统下的高效部署指南

PDF-Extract-Kit-1.0在Linux系统下的高效部署指南 1. 开篇:为什么选择PDF-Extract-Kit? 如果你经常需要从PDF文档中提取内容,肯定遇到过各种头疼的问题:格式错乱、表格识别不准、公式无法提取、排版复杂难以处理。PDF-Extract-K…...

Step3-VL-10B与Keil5开发环境:嵌入式视觉系统实战

Step3-VL-10B与Keil5开发环境:嵌入式视觉系统实战 用最简单的方式,带你从零搭建一个能"看懂世界"的嵌入式视觉系统 1. 开篇:为什么需要嵌入式视觉? 你有没有想过,让一个小小的单片机也能像人一样"看见…...

Gazebo 11 插件开发避坑实录:从 ModelPlugin 报错到 WorldPlugin 的平滑迁移

Gazebo 11插件开发深度指南:从兼容性陷阱到高效迁移策略 当Gazebo从9版本迭代到11版本时,许多开发者突然发现原本运行良好的插件代码开始报出各种奇怪的错误。这就像你熟悉的咖啡店突然换了所有设备——虽然咖啡豆还是那些咖啡豆,但制作流程…...

ESP32+PHP+MySQL:构建云端物联网数据可视化看板

1. 从零搭建ESP32物联网数据采集系统 第一次接触ESP32时,我被它强大的WiFi和蓝牙功能惊艳到了。这块售价仅几十元的小开发板,居然能轻松实现传感器数据采集和无线传输。今天我要分享的,就是如何用ESP32构建一个完整的物联网数据可视化系统。 …...

ELF1开发板UART实战:RS485/RS232通信测试与常见问题排查

ELF1开发板UART实战:RS485/RS232通信测试与常见问题排查 在嵌入式系统开发中,UART通信是最基础也是最常用的外设接口之一。ELF1开发板作为一款面向工业应用的嵌入式平台,提供了多路UART接口,其中部分接口通过RS485和RS232电平转换…...

如何分析网站SEO数据,优化营销策略

如何分析网站SEO数据,优化营销策略 在当今数字化营销的时代,网站的SEO数据分析不仅是提升网站排名的关键,更是优化整体营销策略的重要手段。本文将详细探讨如何通过分析网站SEO数据来优化营销策略,助力企业在竞争激烈的市场中脱颖…...

AI Agent创业商业模式:订阅制、按需付费、定制化服务的选择

AI Agent创业商业模式:订阅制、按需付费、定制化服务的选择1. 标题 (Title) 从工具价值到商业闭环:AI Agent创业的三大核心盈利模式深度拆解与选择指南AI Agent创业避坑指南:订阅制、按需付费、定制化服务的优劣势、适配场景与ROI计算全解析不…...

STC8H8K32U工控板 电机正反转

本文摘要: 该代码实现了一个基于STC8H单片机的自动化控制系统,主要功能包括: 通过I2C接口驱动OLED显示屏,显示"气缸前进/后退"、"电机前进/停止"等状态信息 控制4路气缸(前/后气缸的进/退)和…...

从哈希表到链表:一次搞懂链地址法解决冲突的C++实现细节(含插入与删除操作避坑)

从哈希表到链表:链地址法的C实战精解与避坑指南 在数据结构的世界里,哈希表因其接近O(1)的理想查找效率而备受青睐。但当我们真正动手实现时,特别是采用链地址法解决冲突时,那些看似简单的链表操作却暗藏玄机。本文将带您深入链地…...

比迪丽SDXL模型GPU算力适配:A10/A100/V100/T4多卡实测报告

比迪丽SDXL模型GPU算力适配:A10/A100/V100/T4多卡实测报告 1. 引言 如果你玩过AI绘画,肯定遇到过这样的问题:同一个模型,为什么在别人的电脑上跑得飞快,在自己这儿却慢如蜗牛?生成一张图要等好几分钟&…...

GLM-4.1V-9B-Base企业实操:教育行业试卷图像内容解析落地案例

GLM-4.1V-9B-Base企业实操:教育行业试卷图像内容解析落地案例 1. 教育行业的痛点与解决方案 在教育行业,试卷批改和内容分析一直是耗时费力的工作。传统方式需要教师人工阅卷,不仅效率低下,还容易出现主观偏差。特别是在大规模考…...

Qwen3-0.6B-FP8在单片机开发中的启发:生成嵌入式C语言代码片段

Qwen3-0.6B-FP8在单片机开发中的启发:生成嵌入式C语言代码片段 1. 引言 如果你是一位单片机开发者,可能经常遇到这样的场景:面对一个新的外设模块,或者要实现一个不太熟悉的功能,第一反应就是去翻数据手册、找官方例…...

UNIT-00:Berserk Interface 在AI Agent开发中的应用:从规划、工具调用到记忆

UNIT-00:Berserk Interface 在AI Agent开发中的应用:从规划、工具调用到记忆 最近和几个做AI应用的朋友聊天,大家都有个共同的感受:现在的大模型能力确实强,但很多时候还是像个“一问一答”的聊天机器人。你想让它帮你…...

Windows高DPI缩放导致Qt界面崩了?手把手教你用‘高DIP缩放替代’快速修复

Windows高DPI缩放导致Qt界面崩溃?三步搞定“高DPI缩放替代”修复方案 最近几年4K显示器价格越来越亲民,很多用户都升级到了高分辨率屏幕。但随之而来的一个常见问题就是:一些老旧的Qt程序在高分屏上运行时,界面元素变得错乱不堪—…...

快速上手:CYBER-VISION零号协议Node.js后端服务集成指南

快速上手:CYBER-VISION零号协议Node.js后端服务集成指南 你是不是已经部署好了CYBER-VISION零号协议模型,看着那个命令行界面,心里琢磨着:“这玩意儿怎么才能接到我的Web应用里去?” 别急,这正是我们今天要…...

OpenClaw+Phi-3-vision-128k-instruct:自动化儿童教育素材生成

OpenClawPhi-3-vision-128k-instruct:自动化儿童教育素材生成 1. 为什么选择这个组合? 去年夏天,我女儿开始对恐龙产生浓厚兴趣,每天晚上都要我讲不同的恐龙故事。作为程序员父亲,我最初尝试手动编写故事&#xff0c…...

Pixel Aurora Engine应用场景:像素字体生成与游戏文本资源自动化生产

Pixel Aurora Engine应用场景:像素字体生成与游戏文本资源自动化生产 1. 像素艺术生成新纪元 在独立游戏开发领域,像素艺术始终保持着独特的魅力。传统像素画制作需要艺术家逐帧绘制,耗时耗力。Pixel Aurora Engine的出现,为游戏…...

丹青识画完整体验:铺卷、参详、点睛、获墨,四步感受AI艺术

丹青识画完整体验:铺卷、参详、点睛、获墨,四步感受AI艺术 1. 艺术与科技的完美邂逅 当人工智能遇上东方美学,会碰撞出怎样的火花?「丹青识画」智能影像雅鉴系统给出了令人惊艳的答案。这款融合深度学习技术与传统书画艺术的产品…...

【2026知网预警】不想论文被直接退稿?10款降AI工具实测红黑榜,带你避开90%的坑

说真的,现在写论文难,改论文更难。交稿前一查,心都凉半截。AI痕迹动不动就飘红,导师那边没法交代,系统检测也过不了关。为了找出靠谱的降AI法子,我也是折腾了好几天。 我把以下10个降AI工具一个个试过来了…...

Flux Sea Studio 海景摄影生成工具:LaTeX技术文档编写——生成高质量海景插图与科研论文配图实践

Flux Sea Studio 海景摄影生成工具:LaTeX技术文档编写——生成高质量海景插图与科研论文配图实践 写论文、编教材,最头疼的事情之一就是找配图。要么是找不到合适的,要么是找到了但版权不明晰,要么就是风格不统一,七拼…...

Zynq XADC测量电压从配置到换算:DRP接口实战与AXI4-Lite选择指南

Zynq XADC电压测量全解析:DRP与AXI4-Lite接口深度对比与实战指南 在嵌入式系统设计中,精确的模拟信号监测往往是实现智能控制的关键环节。Xilinx Zynq系列芯片内置的XADC(Xilinx Analog-to-Digital Converter)模块,为工…...

一键生成九宫格:用yz-bijini-cosplay快速制作社交媒体宣传素材

一键生成九宫格:用yz-bijini-cosplay快速制作社交媒体宣传素材 1. 项目简介:Cosplay内容创作新范式 在社交媒体运营中,视觉内容的重要性不言而喻。对于动漫展会、Cosplay摄影棚等内容创作者而言,如何快速产出高质量的九宫格宣传…...

Z-Image-Turbo_UI界面惊艳效果:多风格AI绘画作品真实分享

Z-Image-Turbo_UI界面惊艳效果:多风格AI绘画作品真实分享 1. 开篇:当AI绘画遇上专业级UI界面 想象一下,你只需要在浏览器中输入一个地址,就能拥有一个功能强大、操作简单的AI绘画工作室。这正是Z-Image-Turbo_UI界面带来的神奇体…...

清音刻墨Qwen3部署到使用:一条命令搭建,五分钟出成果

清音刻墨Qwen3部署到使用:一条命令搭建,五分钟出成果 1. 引言:重新定义字幕制作体验 在视频内容爆炸式增长的今天,字幕制作成为了许多创作者的心头之痛。传统的手动打字对时间轴不仅耗时耗力,而且很难达到专业级的精…...

Janus-Pro-7B惊艳效果:艺术风格迁移(梵高笔触/水墨晕染/像素风)精准控制

Janus-Pro-7B惊艳效果:艺术风格迁移(梵高笔触/水墨晕染/像素风)精准控制 1. 开篇:当AI遇见艺术,一场视觉革命正在发生 想象一下,你手头有一张普通的风景照片,但你想让它变成梵高笔下的星空&am…...

Qwen3-4B-Instruct-2507保姆级部署教程:3步免费玩转256K长文本AI

Qwen3-4B-Instruct-2507保姆级部署教程:3步免费玩转256K长文本AI 1. 引言:为什么选择Qwen3-4B-Instruct-2507 如果你正在寻找一个能处理超长文本的开源大模型,Qwen3-4B-Instruct-2507绝对值得关注。这个由阿里开源的40亿参数模型&#xff0…...