docstr: Draw datasample and save to all backends.
  
  - If GT and prediction are plotted at the same time, they are
  displayed in a stitched image where the left image is the
  ground truth and the right image is the prediction.
  - If ``show`` is True, all storage backends are ignored, and
  the images will be displayed in a local window.
  - If ``out_file`` is specified, the drawn image will be
  saved to ``out_file``. This is usually used when the display
  is not available.
  
  Args:
      name (str): The image identifier.
      image (np.ndarray): The image to draw.
      data_sample (:obj:`TextSpottingDataSample`, optional):
          TextDetDataSample which contains gt and prediction. Defaults
              to None.
      draw_gt (bool): Whether to draw GT TextDetDataSample.
          Defaults to True.
      draw_pred (bool): Whether to draw Predicted TextDetDataSample.
          Defaults to True.
      show (bool): Whether to display the drawn image. Default to False.
      wait_time (float): The interval of show (s). Defaults to 0.
      out_file (str): Path to output file. Defaults to None.
      pred_score_thr (float): The threshold to visualize the bboxes
          and masks. Defaults to 0.3.
      step (int): Global step value to record. Defaults to 0.
code: def add_datasample(
      self,
      name: str,
      image: np.ndarray,
      data_sample: Optional["TextDetDataSample"] = None,
      draw_gt: bool = True,
      draw_pred: bool = True,
      show: bool = False,
      wait_time: int = 0,
      pred_score_thr: float = 0.5,
      out_file: Optional[str] = None,
      step: int = 0,
  ) -> None:
      """Draw datasample and save to all backends.
  
      - If GT and prediction are plotted at the same time, they are
      displayed in a stitched image where the left image is the
      ground truth and the right image is the prediction.
      - If ``show`` is True, all storage backends are ignored, and
      the images will be displayed in a local window.
      - If ``out_file`` is specified, the drawn image will be
      saved to ``out_file``. This is usually used when the display
      is not available.
  
      Args:
          name (str): The image identifier.
          image (np.ndarray): The image to draw.
          data_sample (:obj:`TextSpottingDataSample`, optional):
              TextDetDataSample which contains gt and prediction. Defaults
                  to None.
          draw_gt (bool): Whether to draw GT TextDetDataSample.
              Defaults to True.
          draw_pred (bool): Whether to draw Predicted TextDetDataSample.
              Defaults to True.
          show (bool): Whether to display the drawn image. Default to False.
          wait_time (float): The interval of show (s). Defaults to 0.
          out_file (str): Path to output file. Defaults to None.
          pred_score_thr (float): The threshold to visualize the bboxes
              and masks. Defaults to 0.3.
          step (int): Global step value to record. Defaults to 0.
      """
      cat_images = []
  
      if data_sample is not None:
          if draw_gt and "gt_instances" in data_sample:
              gt_bboxes = data_sample.gt_instances.get("bboxes", None)
              gt_texts = data_sample.gt_instances.texts
              gt_polygons = data_sample.gt_instances.get(
                  "polygons", None
              )
              gt_img_data = self._draw_instances(
                  image, gt_bboxes, gt_polygons, gt_texts
              )
              cat_images.append(gt_img_data)
  
          if draw_pred and "pred_instances" in data_sample:
              pred_instances = data_sample.pred_instances
              pred_instances = (
                  pred_instances[pred_instances.scores > pred_score_thr]
                  .cpu()
                  .numpy()
              )
              pred_bboxes = pred_instances.get("bboxes", None)
              pred_texts = pred_instances.texts
              pred_polygons = pred_instances.get("polygons", None)
              if pred_bboxes is None:
                  pred_bboxes = [
                      poly2bbox(poly) for poly in pred_polygons
                  ]
                  pred_bboxes = np.array(pred_bboxes)
              pred_img_data = self._draw_instances(
                  image, pred_bboxes, pred_polygons, pred_texts
              )
              cat_images.append(pred_img_data)
  
      cat_images = self._cat_image(cat_images, axis=0)
      if cat_images is None:
          cat_images = image
  
      if show:
          self.show(cat_images, win_name=name, wait_time=wait_time)
      else:
          self.add_image(name, cat_images, step)
  
      if out_file is not None:
          mmcv.imwrite(cat_images[..., ::-1], out_file)
  
      self.set_image(cat_images)
      return self.get_image()
  
file_path: mmocr/mmocr/visualization/textspotting_visualizer.py
imports: from typing import Optional, Sequence, Union
  import mmcv
  import numpy
  import torch
  from mmocr.registry import VISUALIZERS
  from mmocr.structures import TextDetDataSample
  from mmocr.utils.polygon_utils import poly2bbox
  from .base_visualizer import BaseLocalVisualizer
label_desc: Use image node_id 2 for calling the TextSpottingLocalVisualizer obj's underlying member method code with example usage: obj.add_datasample(name, image, data_sample, draw_gt, draw_pred, show, wait_time, pred_score_thr, out_file, step) and returns: self