中国版 Whisper 来了,5分钟带你部署体验

大模型向量数据库机器学习

picture.image

猴哥的第 46 期分享,欢迎追看

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

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

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

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

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

  1. 项目简介 =======

模型结构如下图所示:picture.image

模型亮点:

  • 多语言语音识别 :经过超过40万小时的数据训练,支持50多种语言,其识别性能超越了Whisper模型。
  • 丰富的转录能力 :具备出色的情感识别能力,在测试数据上超越了当前最佳模型。提供声音事件检测能力,支持检测各种常见的人机交互事件,如背景音乐、掌声、笑声、哭泣、咳嗽和打喷嚏。
  • 高效推理 :SenseVoice-Small模型采用非自回归的端到端框架,具有极低的推理延迟。处理10秒音频仅需70毫秒,比Whisper-Large快15倍。
  • 便捷的微调 :提供便捷的微调脚本和策略,使用户能够根据业务场景轻松解决长尾样本问题。
  1. 在线体验 =======

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

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

picture.image

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

picture.image

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

picture.image

  1. 本地部署 =======

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_postprocess  
  
model_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_dict  
  
if __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 requests  
  
url = "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 res  
    else:  
        return response['msg']  
  
if __name__ == '\_\_main\_\_':  
    res = asr_damo_api("xxx/.cache/modelscope/hub/iic/SenseVoiceSmall/example/en.mp3")  
    print(res)  

写在最后

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

结合语音识别、大模型,可以轻松实现打造一个 AI 语音对话助手。感兴趣的小伙伴快去试试吧~

如果本文对你有帮助,欢迎 点赞在看转发 备用。你的支持是我创作的最大动力。

👇 关注猴哥,快速入门AI工具

picture.image

# 学用 GPT:

轻松搞定10w+:小白易上手的提示词模板,GPT很强,但请温柔以待!

【每天一个AI提示词】搞定公众号爆款标题,助你轻松10W+

# AI 工具:

视频下载神器!抖音B站YouTube全搞定,免费无广告,亲测好用

Windows上安装Linux子系统,搞台虚拟机玩玩,手把手教

盘点3款AI编程助手,开发效率翻倍,完全免费,小白也能轻松敲代码

# AI应用** :**

手把手搭建微信机器人,帮你雇一个24小时在线的个人 AI 助理(上)

手把手带你搭建一个语音对话机器人,轻松定制个人AI小助手(新手入门篇)

视频生成 EasyAnimate-v3 实测,阿里开源,5 分钟带你部署体验,支持高分辨率超长视频

# 效率工具:

电脑微信双开/多开?两种方法任你挑,1分钟搞定

简单3步,搞定 Windows11 系统安装/重装

0
0
0
0
关于作者

文章

0

获赞

0

收藏

0

相关资源
火山引擎大规模机器学习平台架构设计与应用实践
围绕数据加速、模型分布式训练框架建设、大规模异构集群调度、模型开发过程标准化等AI工程化实践,全面分享如何以开发者的极致体验为核心,进行机器学习平台的设计与实现。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论