code: def _load_images(
      frame_manifest_file_path: Optional[str],
      video_info_file_path: str,
      multithreaded_io: bool,
  ) -> Dict[str, ImageFrameInfo]:
      video_infos: Dict[str, VideoInfo] = load_dataclass_dict_from_csv(
          video_info_file_path, VideoInfo, "video_id"
      )
      video_frames: Dict[
          str, VideoFrameInfo
      ] = load_dataclass_dict_from_csv(
          frame_manifest_file_path, VideoFrameInfo, "video_id"
      )
      VideoDataset._remove_video_info_missing_or_incomplete_videos(
          video_frames, video_infos
      )
  
      image_infos = {}
      for video_id in video_infos:
          frame_filepaths = VideoDataset._frame_number_to_filepaths(
              video_id, video_frames, video_infos
          )
          video_info = video_infos[video_id]
          video_frame_info = video_frames[video_info.video_id]
          for frame_filepath, frame_number in zip(
              frame_filepaths,
              range(
                  video_frame_info.min_frame_number,
                  video_frame_info.max_frame_number,
              ),
          ):
              frame_id = os.path.splitext(
                  os.path.basename(frame_filepath)
              )[0]
              image_infos[frame_id] = ImageFrameInfo(
                  video_id, frame_id, frame_number, frame_filepath
              )
      return image_infos
  
imports: import datetime
  import os
  from dataclasses import dataclass
  from enum import Enum
  from typing import Dict, Optional, Union
  from pytorchvideo.data.encoded_video import EncodedVideo
  from pytorchvideo.data.frame_video import FrameVideo
  from pytorchvideo.data.utils import DataclassFieldCaster, load_dataclass_dict_from_csv, save_dataclass_objs_to_headered_csv
  from pytorchvideo.data.video import Video
label_desc: Use image node_id 1 for calling the ImageDataset obj's underlying member method code with example usage: obj._load_images(frame_manifest_file_path, video_info_file_path, multithreaded_io) and returns: image_infos