(简体中文|English)

语音端点检测

注意: Pipeline 支持在modelscope模型仓库中的所有模型进行推理和微调。在这里,我们以 FSMN-VAD 模型为例来演示使用方法。

推理

快速使用

FSMN-VAD 模型

from modelscope.pipelines import pipeline
from modelscope.utils.constant import Tasks

inference_pipeline = pipeline(
    task=Tasks.voice_activity_detection,
    model='damo/speech_fsmn_vad_zh-cn-16k-common-pytorch',
)

segments_result = inference_pipeline(audio_in='https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/vad_example.wav')
print(segments_result)

FSMN-VAD-实时模型

inference_pipeline = pipeline(
    task=Tasks.voice_activity_detection,
    model='damo/speech_fsmn_vad_zh-cn-16k-common-pytorch',
    )
import soundfile
speech, sample_rate = soundfile.read("example/asr_example.wav")

param_dict = {"in_cache": dict(), "is_final": False}
chunk_stride = 1600# 100ms
# first chunk, 100ms
speech_chunk = speech[0:chunk_stride] 
rec_result = inference_pipeline(audio_in=speech_chunk, param_dict=param_dict)
print(rec_result)
# next chunk, 100ms
speech_chunk = speech[chunk_stride:chunk_stride+chunk_stride]
rec_result = inference_pipeline(audio_in=speech_chunk, param_dict=param_dict)
print(rec_result)

演示示例,完整代码请参考 demo

API接口说明

pipeline定义

  • task: Tasks.voice_activity_detection

  • model: 模型仓库 中的模型名称,或本地磁盘中的模型路径

  • ngpu: 1(默认),使用 GPU 进行推理。如果 ngpu=0,则使用 CPU 进行推理

  • ncpu: 1 (默认),设置用于 CPU 内部操作并行性的线程数

  • output_dir: None (默认),如果设置,输出结果的输出路径

  • batch_size: 1 (默认),解码时的批处理大小

pipeline 推理

  • audio_in: 要解码的输入,可以是:

    • wav文件路径, 例如: asr_example.wav,

    • pcm文件路径, 例如: asr_example.pcm,

    • 音频字节数流,例如:麦克风的字节数数据

    • 音频采样点,例如:audio, rate = soundfile.read("asr_example_zh.wav"), 数据类型为 numpy.ndarray 或者 torch.Tensor

    • wav.scp,kaldi 样式的 wav 列表 (wav_id \t wav_path), 例如:

    asr_example1  ./audios/asr_example1.wav
    asr_example2  ./audios/asr_example2.wav
    

    在这种输入 wav.scp 的情况下,必须设置 output_dir 以保存输出结果

  • audio_fs: 音频采样率,仅在 audio_in 为 pcm 音频时设置

  • output_dir: None (默认),如果设置,输出结果的输出路径

使用多线程 CPU 或多个 GPU 进行推理

FunASR 还提供了 egs_modelscope/vad/TEMPLATE/infer.sh 脚本,以使用多线程 CPU 或多个 GPU 进行解码。

infer.sh 设置

  • model: modelscope模型仓库中的模型名称,或本地磁盘中的模型路径

  • data_dir: 数据集目录需要包括 wav.scp 文件。如果 ${data_dir}/text 也存在,则将计算 CER

  • output_dir: 识别结果的输出目录

  • batch_size: 1(默认),在 GPU 上进行推理的批处理大小

  • gpu_inference: true (默认),是否执行 GPU 解码,如果进行 CPU 推理,则设置为 false

  • gpuid_list: 0,1 (默认),用于推理的 GPU ID

  • njob: 仅用于 CPU 推理(gpu_inference=false),64(默认),CPU 解码的作业数

使用多个 GPU 进行解码:

    bash infer.sh \
    --model "damo/speech_fsmn_vad_zh-cn-16k-common-pytorch" \
    --data_dir "./data/test" \
    --output_dir "./results" \
    --batch_size 1 \
    --gpu_inference true \
    --gpuid_list "0,1"

使用多线程 CPU 进行解码:

    bash infer.sh \
    --model "damo/speech_fsmn_vad_zh-cn-16k-common-pytorch" \
    --data_dir "./data/test" \
    --output_dir "./results" \
    --gpu_inference false \
    --njob 64

Finetune with pipeline

Quick start

Finetune with your data

Inference with your finetuned model