docstr: Open image from server-side path.
  
  Returns:
      (pd.DataFrame): The opened image.
code: def forward(self, df: pd.DataFrame) -> pd.DataFrame:
      """
      Open image from server-side path.
  
      Returns:
          (pd.DataFrame): The opened image.
      """
  
      def _open(row: pd.Series) -> np.ndarray:
          path_str = row[0]
          if path_str in self._data_cache:
              data = self._data_cache[path_str]
          else:
              import cv2
  
              data = cv2.imread(path_str)
              assert data is not None, f"Failed to open file {path_str}"
          self._data_cache[path_str] = data
  
          return data
  
      ret = pd.DataFrame()
      ret["data"] = df.apply(_open, axis=1)
      return ret
  
file_path: evadb/evadb/functions/ndarray/open.py
imports: import numpy
  import pandas
  from evadb.functions.abstract.abstract_function import AbstractFunction
  from evadb.utils.generic_utils import try_to_import_cv2
label_desc: Use image node_id 3 for calling the Open obj's underlying member method code with example usage: obj.forward(df) and returns: ret, data