code: def extract(self):
      os.makedirs(self.args.features_folder, exist_ok=True)
      env = lmdb.open(
          self.args.lmdb_path,
          max_readers=1,
          readonly=True,
          lock=False,
          readahead=False,
          meminit=False,
      )
      with env.begin(write=False) as txn:
          _image_ids = pickle.loads(txn.get(b"keys"))
          for img_id in tqdm.tqdm(_image_ids):
              item = pickle.loads(txn.get(img_id))
              img_id = img_id.decode("utf-8")
              tmp_dict = {}
              tmp_dict["image_id"] = img_id
              tmp_dict["bbox"] = item["bbox"]
              tmp_dict["num_boxes"] = item["num_boxes"]
              tmp_dict["image_height"] = item["image_height"]
              tmp_dict["image_width"] = item["image_width"]
              tmp_dict["objects"] = item["objects"]
              tmp_dict["cls_prob"] = item["cls_prob"]
  
              info_file_base_name = str(img_id) + "_info.npy"
              file_base_name = str(img_id) + ".npy"
  
              path = os.path.join(
                  self.args.features_folder, file_base_name
              )
              if PathManager.exists(path):
                  continue
              info_path = os.path.join(
                  self.args.features_folder, info_file_base_name
              )
              base_path = "/".join(path.split("/")[:-1])
              PathManager.mkdirs(base_path)
              np.save(PathManager.open(path, "wb"), item["features"])
              np.save(PathManager.open(info_path, "wb"), tmp_dict)
  
file_path: mmf/tools/scripts/features/lmdb_conversion.py
imports: import argparse
  import glob
  import os
  import pickle
  import lmdb
  import numpy
  import tqdm
  from mmf.utils.file_io import PathManager
label_desc: Use image node_id 4 for calling the LMDBConversion obj's underlying member method code with example usage: obj.extract() without return types