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

SenseVoice 实测,阿里开源语音大模型,识别效果和效率优于 Whisper,居然还能检测掌声、笑声!5分钟带你部署体验

前段时间,带着大家捏了一个对话机器人:
手把手带你搭建一个语音对话机器人,5分钟定制个人AI小助手(新手入门篇)

其中语音识别(ASR)方案,采用的是阿里开源的 FunASR,这刚不久,阿里又开源了一个更强的音频基础模型,该模型具有如下能力:

  • 语音识别(ASR)
  • 语种识别(LID)
  • 语音情感识别(SER)
  • 声学事件分类(AEC)
  • 声学事件检测(AED)

传送门:https://github.com/FunAudioLLM/SenseVoice

今天就带着大家体验一番~

0. 项目简介

模型结构如下图所示:

模型亮点:

  • 多语言语音识别
    经过超过40万小时的数据训练,支持50多种语言,其识别性能超越了Whisper模型。

  • 丰富的转录能力
    具备出色的情感识别能力,在测试数据上超越了当前最佳模型。
    提供声音事件检测能力,支持检测各种常见的人机交互事件,如背景音乐、掌声、笑声、哭泣、咳嗽和打喷嚏。

  • 高效推理
    SenseVoice-Small模型采用非自回归的端到端框架,具有极低的推理延迟。处理10秒音频仅需70毫秒,比Whisper-Large快15倍。

  • 便捷的微调
    提供便捷的微调脚本和策略,使用户能够根据业务场景轻松解决长尾样本问题。

1. 在线体验

在线体验地址:https://www.modelscope.cn/studios/iic/SenseVoice

语音识别:支持中、粤、英、日、韩语等 50 多种语言。

情感识别:比如积极 or 消极,以 Emoji 表情输出。

音频事件检测:同样以 Emoji 表情输出。

2. 本地部署

2.1 安装 & 测试

首先 git 下载到本地,然后安装必要的包:

git clone https://github.com/FunAudioLLM/SenseVoice.git
pip install -r requirements.txt

注意:

  • 本项目依赖的 funasr 版本要 >=1.1.2,这个和 funasr 语音识别模型的版本是不匹配的,如果要同时使用这两个模型,会出现版本冲突,所以最好采用 conda 管理 python 环境。
  • 本项目依赖的 torchaudio 需要更新到最新版本,否则会出现报错。

接下来,我们采用官方脚本进行测试:

from funasr import AutoModel
from funasr.utils.postprocess_utils import rich_transcription_postprocessmodel_dir = "iic/SenseVoiceSmall"
model = AutoModel(model=model_dir,trust_remote_code=True,remote_code="./model.py",vad_model="fsmn-vad",vad_kwargs={"max_single_segment_time": 30000},device="cuda:0",
)res = model.generate(input=f"{model.model_path}/example/en.mp3",cache={},language="auto",  # "zn", "en", "yue", "ja", "ko", "nospeech"use_itn=True,batch_size_s=60,merge_vad=True,  #merge_length_s=15,
)
text = rich_transcription_postprocess(res[0]["text"])
print(text)

首次使用,会下载模型,默认保存在你的根目录下:~/.cache/modelscope/

2.2 FastAPI 部署

测试成功后,我们采用 FastAPI 把模型部署成一个服务,方便提供给其他应用调用。

2.2.1 服务端

首先准备好服务端代码 speech_server.py

import torch
import base64
import uvicorn
from fastapi import FastAPI
from funasr import AutoModel
from funasr.utils.postprocess_utils import rich_transcription_postprocess
from pydantic import BaseModel# asr model
model = AutoModel(model="iic/SenseVoiceSmall",trust_remote_code=True,remote_code="./model.py",vad_model="fsmn-vad",vad_kwargs={"max_single_segment_time": 30000},device="cuda:0",
)# 定义asr数据模型,用于接收POST请求中的数据
class ASRItem(BaseModel):wav : str # 输入音频app = FastAPI()
@app.post("/asr")
async def asr(item: ASRItem):try:data = base64.b64decode(item.wav)with open("test.wav", "wb") as f:f.write(data)res = model.generate("test.wav", language="auto",  # "zn", "en", "yue", "ja", "ko", "nospeech"use_itn=True,batch_size_s=60,merge_vad=True,  #merge_length_s=15,)text = rich_transcription_postprocess(res[0]["text"])result_dict = {"code": 0, "msg": "ok", "res": text}except Exception as e:result_dict = {"code": 1, "msg": str(e)}return result_dictif __name__ == '__main__':uvicorn.run(app, host='0.0.0.0', port=2002)

2.2.2 服务启动

CUDA_VISIBLE_DEVICES=0 python speech_server.py > log.txt 2>&1 &

服务成功启动,可以发现显存只占用 1202 M,比上一篇的 FunASR 更轻量~

+-----------------------------------------------------------------------------------------+
| Processes:                                                                              |
|  GPU   GI   CI        PID   Type   Process name                              GPU Memory |
|        ID   ID                                                               Usage      |
|=========================================================================================|
|    2   N/A  N/A   3178377      C   python                                       1202MiB |
+-----------------------------------------------------------------------------------------+

2.2.3 客户端

最后,我们来编写客户端代码:

import base64
import requestsurl = "http://10.18.32.170:2002/"def asr_damo_api(wav_path):headers = {'Content-Type': 'application/json'}with open(wav_path, "rb") as f:wav = base64.b64encode(f.read()).decode()data = {"wav": wav}response = requests.post(url+"asr", headers=headers, json=data)response = response.json()if response['code'] == 0:res = response['res']return reselse:return response['msg']if __name__ == '__main__':res = asr_damo_api("xxx/.cache/modelscope/hub/iic/SenseVoiceSmall/example/en.mp3")print(res)

写在最后

本文通过对 SenseVoice 模型的实操,带领大家快速上手语音识别模型。

希望能激发你的更多创作灵感,打造自己的 AI 助手。

如果你对本项目感兴趣,欢迎点赞收藏并分享给更多朋友!

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • JMeter请求导出Excel
  • 排序二叉树(c++)
  • Go基础编程 - 12 -流程控制
  • DPKG(Debian / Ubuntu包管理工具)的深入探索与使用
  • 【人工智能】机器学习 -- 决策树(乳腺肿瘤数)
  • java面试题,有synchronized锁,threadlocal、数据可以设置默认值、把redis中的json转为对象
  • 使用内网穿透工具 frp 发布内网 web 站点
  • WebGoC题解(13) 狐猬编程:GoC L4 结业测试 第4题 找木柴
  • 自动驾驶---视觉Transformer的应用
  • 工具(linux)
  • 判断用户输入IP的合法性判断输入IP与本机IP是否在同一网段C++QT
  • 【中项】系统集成项目管理工程师-第4章 信息系统架构-4.3应用架构
  • (7) cmake 编译C++程序(二)
  • PyTorch 深度学习实践-循环神经网络(高级篇)
  • React--Redux
  • [case10]使用RSQL实现端到端的动态查询
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • 0基础学习移动端适配
  • Android 控件背景颜色处理
  • ES10 特性的完整指南
  • Facebook AccountKit 接入的坑点
  • hadoop集群管理系统搭建规划说明
  • Java 网络编程(2):UDP 的使用
  • JavaScript设计模式系列一:工厂模式
  • MySQL-事务管理(基础)
  • Python学习之路16-使用API
  • Vue.js-Day01
  • 关于Java中分层中遇到的一些问题
  • 记一次和乔布斯合作最难忘的经历
  • 面试题:给你个id,去拿到name,多叉树遍历
  • 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶
  • 王永庆:技术创新改变教育未来
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • ​ssh-keyscan命令--Linux命令应用大词典729个命令解读
  • # centos7下FFmpeg环境部署记录
  • #define 用法
  • #if和#ifdef区别
  • ${ }的特别功能
  • (Ruby)Ubuntu12.04安装Rails环境
  • (附源码)springboot炼糖厂地磅全自动控制系统 毕业设计 341357
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (转) RFS+AutoItLibrary测试web对话框
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版
  • *1 计算机基础和操作系统基础及几大协议
  • .a文件和.so文件
  • .bat批处理出现中文乱码的情况
  • .bat文件调用java类的main方法
  • .Net8 Blazor 尝鲜
  • .net开发引用程序集提示没有强名称的解决办法
  • .NET应用UI框架DevExpress XAF v24.1 - 可用性进一步增强
  • .php结尾的域名,【php】php正则截取url中域名后的内容
  • .vue文件怎么使用_vue调试工具vue-devtools的安装
  • /etc/shadow字段详解
  • @JoinTable会自动删除关联表的数据