class_docstr: Speech2Text class
  
  Examples:
      >>> import soundfile
      >>> speech2text = Speech2Text("asr_config.yml", "asr.pth")
      >>> audio, rate = soundfile.read("speech.wav")
      >>> speech2text(audio)
      [(text, token, token_int, hypothesis object), ...]
class_docstr_tok: ["Speech2Text","class","Examples",":",">",">",">","import","soundfile",">",">",">","speech2text","=","Speech2Text","(","``","asr_config.yml","''",",","``","asr.pth","''",")",">",">",">","audio",",","rate","=","soundfile.read","(","``","speech.wav","''",")",">",">",">","speech2text","(","audio",")","[","(","text",",","token",",","token_int",",","hypothesis","object",")",",","...","]"]
docstr: Inference
  
  Args:
      data: Input speech data
  Returns:
      text, token, token_int, hyp
docstr_tok: ["Inference","Args",":","data",":","Input","speech","data","Returns",":","text",",","token",",","token_int",",","hyp"]
code: def __call__(
      self, speech: Union[torch.Tensor, np.ndarray]
  ) -> List[Tuple[Optional[str], List[str], List[int], Hypothesis]]:
      """Inference
  
      Args:
          data: Input speech data
      Returns:
          text, token, token_int, hyp
  
      """
      assert check_argument_types()
  
      # Input as audio signal
      if isinstance(speech, np.ndarray):
          speech = torch.tensor(speech)
  
      # data: (Nsamples,) -> (1, Nsamples)
      speech = speech.unsqueeze(0).to(getattr(torch, self.dtype))
      # lenghts: (1,)
      lengths = speech.new_full(
          [1], dtype=torch.long, fill_value=speech.size(1)
      )
      batch = {"speech": speech, "speech_lengths": lengths}
  
      # a. To device
      batch = to_device(batch, device=self.device)
  
      # b. Forward Encoder
      enc, _ = self.asr_model.encode(**batch)
      if isinstance(enc, tuple):
          enc = enc[0]
      assert len(enc) == 1, len(enc)
  
      # c. Passed the encoder result and the inference algorithm
      hyp = self.s2t(enc[0])
      assert isinstance(hyp, Hypothesis), type(hyp)
  
      # remove sos/eos and get results
      token_int = hyp.yseq[1:-1].tolist()
  
      # remove blank symbol id, which is assumed to be 0
      token_int = list(filter(lambda x: x != 0, token_int))
  
      # Change integer-ids to tokens
      token = self.converter.ids2tokens(token_int)
  
      if self.tokenizer is not None:
          text = self.tokenizer.tokens2text(token)
      else:
          text = None
      results = [(text, token, token_int, hyp)]
  
      assert check_return_type(results)
      return results
  
imports: import argparse
  import logging
  import sys
  from pathlib import Path
  from typing import Any, List, Optional, Sequence, Tuple, Union
  import numpy
  import torch
  from typeguard import check_argument_types, check_return_type
  from espnet2.asr.maskctc_model import MaskCTCInference
  from espnet2.fileio.datadir_writer import DatadirWriter
  from espnet2.tasks.asr import ASRTask
  from espnet2.text.build_tokenizer import build_tokenizer
  from espnet2.text.token_id_converter import TokenIDConverter
  from espnet2.torch_utils.device_funcs import to_device
  from espnet2.torch_utils.set_all_random_seed import set_all_random_seed
  from espnet2.utils import config_argparse
  from espnet2.utils.types import str2bool, str2triple_str, str_or_none
  from espnet.nets.beam_search import Hypothesis
  from espnet.nets.pytorch_backend.transformer.subsampling import TooShortUttError
  from espnet.utils.cli_utils import get_commandline_args
label_desc: Use image node_id 2 for calling the Speech2Text obj's underlying member method code with example usage: obj.__call__(speech) and returns: results