class_docstr: Align text to audio using CTC segmentation.
  
  Usage:
      Initialize with given ASR model and parameters.
      If needed, parameters for CTC segmentation can be set with ``set_config(·)``.
      Then call the instance as function to align text within an audio file.
  
  Example:
      >>> # example file included in the ESPnet repository
      >>> import soundfile
      >>> speech, fs = soundfile.read("test_utils/ctc_align_test.wav")
      >>> # load an ASR model
      >>> from espnet_model_zoo.downloader import ModelDownloader
      >>> d = ModelDownloader()
      >>> wsjmodel = d.download_and_unpack( "kamo-naoyuki/wsj" )
      >>> # Apply CTC segmentation
      >>> aligner = CTCSegmentation( **wsjmodel )
      >>> text=["utt1 THE SALE OF THE HOTELS", "utt2 ON PROPERTY MANAGEMENT"]
      >>> aligner.set_config( gratis_blank=True )
      >>> segments = aligner( speech, text, fs=fs )
      >>> print( segments )
      utt1 utt 0.27 1.72 -0.1663 THE SALE OF THE HOTELS
      utt2 utt 4.54 6.10 -4.9646 ON PROPERTY MANAGEMENT
  
  On multiprocessing:
      To parallelize the computation with multiprocessing, these three steps
      can be separated:
      (1) ``get_lpz``: obtain the lpz,
      (2) ``prepare_segmentation_task``: prepare the task, and
      (3) ``get_segments``: perform CTC segmentation.
      Note that the function `get_segments` is a staticmethod and therefore
      independent of an already initialized CTCSegmentation object.
  
  References:
      CTC-Segmentation of Large Corpora for German End-to-end Speech Recognition
      2020, Kürzinger, Winkelbauer, Li, Watzel, Rigoll
      https://arxiv.org/abs/2007.09127
  
  More parameters are described in https://github.com/lumaku/ctc-segmentation
docstr: Obtain segments for given utterance texts and CTC log posteriors.
  
  Args:
      task: CTCSegmentationTask object that contains ground truth and
          CTC posterior probabilities.
  
  Returns:
      result: Dictionary with alignments. Combine this with the task
          object to obtain a human-readable segments representation.
docstr_tok: ["Obtain","segments","for","given","utterance","texts","and","CTC","log","posteriors",".","Args",":","task",":","CTCSegmentationTask","object","that","contains","ground","truth","and","CTC","posterior","probabilities",".","Returns",":","result",":","Dictionary","with","alignments",".","Combine","this","with","the","task","object","to","obtain","a","human-readable","segments","representation","."]
code: def get_segments(task: CTCSegmentationTask):
      """Obtain segments for given utterance texts and CTC log posteriors.
  
      Args:
          task: CTCSegmentationTask object that contains ground truth and
              CTC posterior probabilities.
  
      Returns:
          result: Dictionary with alignments. Combine this with the task
              object to obtain a human-readable segments representation.
      """
      assert check_argument_types()
      assert task.config is not None
      config = task.config
      lpz = task.lpz
      ground_truth_mat = task.ground_truth_mat
      utt_begin_indices = task.utt_begin_indices
      text = task.text
      # Align using CTC segmentation
      timings, char_probs, state_list = ctc_segmentation(
          config, lpz, ground_truth_mat
      )
      # Obtain list of utterances with time intervals and confidence score
      segments = determine_utterance_segments(
          config, utt_begin_indices, char_probs, timings, text
      )
      # Store results
      result = {
          "name": task.name,
          "timings": timings,
          "char_probs": char_probs,
          "state_list": state_list,
          "segments": segments,
          "done": True,
      }
      return result
  
imports: import argparse
  import logging
  import sys
  from pathlib import Path
  from typing import List, Optional, TextIO, Union
  import numpy
  import soundfile
  import torch
  from ctc_segmentation import CtcSegmentationParameters, ctc_segmentation, determine_utterance_segments, prepare_text, prepare_token_list
  from typeguard import check_argument_types, check_return_type
  from espnet2.tasks.asr import ASRTask
  from espnet2.torch_utils.device_funcs import to_device
  from espnet2.utils import config_argparse
  from espnet2.utils.types import str2bool, str_or_none
  from espnet.utils.cli_utils import get_commandline_args
label_desc: Use image node_id 8 for calling the CTCSegmentation obj's underlying member method code with example usage: obj.get_segments(task) and returns: result