游雁 42b7bbb920 vad docs 2 жил өмнө
..
README.md 42b7bbb920 vad docs 2 жил өмнө
infer.py a85cfe4a31 vad docs 2 жил өмнө
infer.sh c197b3aa85 fix vad cpu infer.sh batch=1 2 жил өмнө
utils 7ca311f847 vad docs 2 жил өмнө

README.md

Voice Activity Detection

Note: The modelscope pipeline supports all the models in model zoo to inference and finetune. Here we take the model of FSMN-VAD as example to demonstrate the usage.

Inference

Quick start

FSMN-VAD model

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-online model

inference_pipeline = pipeline(
    task=Tasks.auto_speech_recognition,
    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, 480ms
speech_chunk = speech[chunk_stride:chunk_stride+chunk_stride]
rec_result = inference_pipeline(audio_in=speech_chunk, param_dict=param_dict)
print(rec_result)

Full code of demo, please ref to demo

API-reference

Define pipeline

  • task: Tasks.voice_activity_detection
  • model: model name in model zoo, or model path in local disk
  • ngpu: 1 (Default), decoding on GPU. If ngpu=0, decoding on CPU
  • ncpu: 1 (Default), sets the number of threads used for intraop parallelism on CPU
  • output_dir: None (Default), the output path of results if set
  • batch_size: 1 (Default), batch size when decoding

    Infer pipeline

  • audio_in: the input to decode, which could be:

    • wav_path, e.g.: asr_example.wav,
    • pcm_path, e.g.: asr_example.pcm,
    • audio bytes stream, e.g.: bytes data from a microphone
    • audio sample point,e.g.: audio, rate = soundfile.read("asr_example_zh.wav"), the dtype is numpy.ndarray or torch.Tensor
    • wav.scp, kaldi style wav list (wav_id \t wav_path), e.g.:

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

      In this case of wav.scp input, output_dir must be set to save the output results

  • audio_fs: audio sampling rate, only set when audio_in is pcm audio

  • output_dir: None (Default), the output path of results if set

Inference with multi-thread CPUs or multi GPUs

FunASR also offer recipes egs_modelscope/vad/TEMPLATE/infer.sh to decode with multi-thread CPUs, or multi GPUs.

Settings of infer.sh

  • model: model name in model zoo, or model path in local disk
  • data_dir: the dataset dir needs to include wav.scp
  • output_dir: output dir of the recognition results
  • batch_size: 64 (Default), batch size of inference on gpu
  • gpu_inference: true (Default), whether to perform gpu decoding, set false for CPU inference
  • gpuid_list: 0,1 (Default), which gpu_ids are used to infer
  • njob: only used for CPU inference (gpu_inference=false), 64 (Default), the number of jobs for CPU decoding
  • checkpoint_dir: only used for infer finetuned models, the path dir of finetuned models
  • checkpoint_name: only used for infer finetuned models, valid.cer_ctc.ave.pb (Default), which checkpoint is used to infer

Decode with multi GPUs:

    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"

Decode with multi-thread CPUs:

    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