| | |
| | | feats_len = speech_lengths |
| | | |
| | | if feats.shape[1] != 0: |
| | | if cache_en["is_final"]: |
| | | if feats.shape[1] + cache_en["chunk_size"][2] < cache_en["chunk_size"][1]: |
| | | cache_en["last_chunk"] = True |
| | | else: |
| | | # first chunk |
| | | feats_chunk1 = feats[:, :cache_en["chunk_size"][1], :] |
| | | feats_len = torch.tensor([feats_chunk1.shape[1]]) |
| | | results_chunk1 = self.infer(feats_chunk1, feats_len, cache) |
| | | |
| | | # last chunk |
| | | cache_en["last_chunk"] = True |
| | | feats_chunk2 = feats[:, -(feats.shape[1] + cache_en["chunk_size"][2] - cache_en["chunk_size"][1]):, :] |
| | | feats_len = torch.tensor([feats_chunk2.shape[1]]) |
| | | results_chunk2 = self.infer(feats_chunk2, feats_len, cache) |
| | | |
| | | return [" ".join(results_chunk1 + results_chunk2)] |
| | | |
| | | results = self.infer(feats, feats_len, cache) |
| | | |
| | | return results |
| | |
| | | d = ModelDownloader() |
| | | kwargs.update(**d.download_and_unpack(model_tag)) |
| | | |
| | | return Speech2Text(**kwargs) |
| | | return Speech2TextTransducer(**kwargs) |
| | | |
| | | |
| | | class Speech2TextSAASR: |
| | |
| | | assert check_argument_types() |
| | | |
| | | # 1. Build ASR model |
| | | from funasr.modules.beam_search.beam_search_sa_asr import BeamSearch |
| | | from funasr.tasks.sa_asr import ASRTask |
| | | scorers = {} |
| | | asr_model, asr_train_args = ASRTask.build_model_from_file( |
| | | asr_train_config, asr_model_file, cmvn_file, device |
| | |
| | | # 4. Build BeamSearch object |
| | | # transducer is not supported now |
| | | beam_search_transducer = None |
| | | from funasr.modules.beam_search.beam_search_sa_asr import BeamSearch |
| | | |
| | | weights = dict( |
| | | decoder=1.0 - ctc_weight, |