【说在前面】

  • 该用例基于魔塔社区中发布的预训练模型和funasr构建。仅支持单声道、16KHz、16位采样wav语音文件的离线转写。
  • 过程中没有用到onnx模型
  • 不支持多线程的并发,但是可以基于多进程实现并发
  • asr工具构建过程中一定要加载vad,否则推理过程中内存会被撑爆

【预训练模型】

所有预训练模型均可在魔塔社区下载

  • asr:iic/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch
  • vad:iic/speech_fsmn_vad_zh-cn-16k-common-pytorch
  • punc:iic/punc_ct-transformer_zh-cn-common-vocab272727-pytorch
  • spk:iic/speech_campplus_sv_zh-cn_16k-common

工具构建

话不多说,直接上代码:

class ASRModel:
    def __init__(self):
        self.local_model_path = cfg["model"]["local_path"]
        self.input_batch_size = cfg["model"]["input_batch_size"] if "input_batch_size" \
                                                                    in cfg["model"] else 10
        # ASR
        self.model = self.local_model_path + "speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-pytorch"
        # voice activity detection
        self.vad_model = self.local_model_path + "speech_fsmn_vad_zh-cn-16k-common-pytorch"
        # punctuation detection
        self.punc_model = self.local_model_path + 'punc_ct-transformer_zh-cn-common-vocab272727-pytorch'
        # speaker separate
        self.spk_model = self.local_model_path + 'speech_campplus_sv_zh-cn_16k-common'
        self.asr_model = None

    def load_model(self):
        self.asr_model = AutoModel(model=self.model,
                                   vad_model=self.vad_model,
                                   punc_model=self.punc_model,
                                   spk_model=self.spk_model,
                                   device="cuda:0")

    def generate(self, wav_file):
        if len(wav_file) < 0:
            return ""
        else:
            if self.asr_model is not None:
                asr_output = self.asr_model.generate(input=wav_path, batchsize=self.input_batch_size)
                return asr_output

上述核心代码基于funasr构建。可以根据自身需求自由组合vad、punc和spk。

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐