语音识别(实时语音转录)——funasr的详细部署和使用教程(包括实时语音转录)

阿里达摩院开源大型端到端语音识别工具包FunASR:

FunASR提供了在大规模工业语料库上训练的模型,并能够将其部署到应用程序中。工具包的核心模型是Paraformer,这是一个非自回归的端到端语音识别模型,经过手动注释的普通话语音识别数据集进行了训练,该数据集包含60,000小时的语音数据。为了提高Paraformer的性能,本文在标准的Paraformer基础上增加了时间戳预测和热词定制能力。此外,为了便于模型部署,本文还开源了基于前馈时序记忆网络FSMN-VAD的语音活动检测模型和基于可控时延Transformer(CT-Transformer)的文本后处理标点模型,这两个模型都是在工业语料库上训练的。这些功能模块为构建高精度的长音频语音识别服务提供了坚实的基础,与在公开数据集上训练的其它模型相比,Paraformer展现出了更卓越的性能。 FunASR 的中文语音转写效果比 Whisper 更优秀。

一、环境配置

https://github.com/modelscope/FunASR

conda create -n funasr python=3.9

conda activate funasr

conda install pytorch==2.3.1 torchvision==0.18.1 torchaudio==2.3.1 pytorch-cuda=11.8 -c pytorch -c nvidia

pip install -U funasr

pip install -U modelscope huggingface_hub

二、简单示例

需要下载模型

1.非流式

from funasr import AutoModel
from funasr.utils.postprocess_utils import rich_transcription_postprocess

model_dir = "iic/SenseVoiceSmall"

model = AutoModel(
    model=model_dir,
    vad_model="fsmn-vad",
    vad_kwargs={"max_single_segment_time": 30000},
    device="cuda:0",
)

# en
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)

英文识别: 

中文识别: 

2.流式

from funasr import AutoModel

chunk_size = [0, 10, 5] #[0, 10, 5] 600ms, [0, 8, 4] 480ms
encoder_chunk_look_back = 4 #number of chunks to lookback for encoder self-attention
decoder_chunk_look_back = 1 #number of encoder chunks to lookback for decoder cross-attention

model = AutoModel(model="iic/paraformer-zh-streaming")

import soundfile
import os

wav_file = os.path.join(model.model_path, "example/asr_example.wav")
speech, sample_rate = soundfile.read(wav_file)
chunk_stride = chunk_size[1] * 960 # 600ms

cache = {}
total_chunk_num = int(len((speech)-1)/chunk_stride+1)
for i in range(total_chunk_num):
    speech_chunk = speech[i*chunk_stride:(i+1)*chunk_stride]
    is_final = i == total_chunk_num - 1
    res = model.generate(input=speech_chunk, cache=cache, is_final=is_final, chunk_size=chunk_size, encoder_chunk_look_back=encoder_chunk_look_back, decoder_chunk_look_back=decoder_chunk_look_back)
    print(res)

三、服务器部署 

ASR\FunASR-main\runtime\python\websocket

python funasr_wss_server.py

运行服务器端:

 运行客户端:即可使用麦克风,进行实时转录。

python funasr_wss_client.py

 运行html5页面:E:\shuziren\ASR\FunASR-main\runtime\html5\static

 

### 关于 Oracle 数据库错误代码 ORA-01458、ORA-01157 ORA-01110 的原因及解决方案 #### 错误描述与可能原因 1. **ORA-01458**: 此错误表示尝试插入或更新的数据违反了唯一约束条件。具体来说,数据中存在重复值或者 NULL 值不符合索引定义的要求[^1]。此问题通常发生在创建唯一索引时,表中的某些列已经包含了重复值。 2. **ORA-01157**: 这一错误表明无法获取控制文件所需的资源锁。常见原因是磁盘空间不足、操作系统级别的锁定冲突或其他进程正在占用相关资源[^4]。 3. **ORA-01110**: 该错误提供了受影响的数据文件名称及其编号的信息。它通常是其他更严重错误(如 ORA-01157 或 ORA-01119)的一部分,用于指示具体的文件路径位置。 --- #### 解决方案 ##### 对于 ORA-01458: 为了修复这一问题,可以采取以下措施: - 验证目标字段是否存在重复值: ```sql SELECT column_name, COUNT(*) FROM table_name GROUP BY column_name HAVING COUNT(*) > 1; ``` - 如果发现重复记录,则需要清理这些冗余数据后再重新执行操作。 - 确认是否允许 NULL 值参与唯一索引构建;如果不允许,在设计阶段应避免这种情况发生。 ##### 对于 ORA-01157: 针对此类情况可考虑如下处理方式: - 检查是否有足够的可用存储容量来满足数据库需求; - 查看系统日志以识别潜在的竞争者并终止不必要的会话; - 使用 `ALTER SYSTEM CHECKPOINT` 手动触发检查点从而释放部分已修改缓冲区到磁盘上。 ##### 对于 ORA-01110: 由于这是辅助性的诊断消息而非独立存在的异常状况,因此重点在于解决引发它的根本性事件 (比如前面提到过的那些)。一旦基础层面恢复正常运作之后,这类提示自然也会消失不见。 ```bash ls -lh $(grep 'datafile' mesdb2_ora_5920.trc | awk '{print $NF}') ``` 上述命令可以帮助快速定位实际物理文件大小与其逻辑结构之间的一致性状态[^3]。 --- #### 总结 通过以上分析可以看出每种类型的报错背后都隐藏着特定的技术背景以及相应的调试技巧。当面对复杂场景下的多重叠加型故障现象时,建议按照先易后难的原则逐一排查直至最终找到症结所在为止。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学术菜鸟小晨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值