Beispiel #1
0
    def test_float_1_converts_to_uint8_255(self):
        assert os.path.exists(self.asset_path) is False
        green_uint8 = np.array([[[0, 255, 0]]], dtype="uint8")
        green_float32 = np.array([[[0, 1, 0]]], dtype="float32")

        a = image(asset_path=self.run_path + "/asset1", data=green_uint8)
        b = image(asset_path=self.run_path + "/asset2", data=green_float32)
        self.assertEqual(
            Image.open(io.BytesIO(open(a.path, "br").read())),
            Image.open(io.BytesIO(open(b.path, "br").read())),
        )
Beispiel #2
0
 def test_float32_image(self):
     """Tests that float32 image (pixel values in [0, 1]) are scaled correctly to [0, 255]"""
     assert os.path.exists(self.asset_path) is False
     event = image(asset_path=self.asset_path,
                   data=tensor_np(shape=(3, 32, 32)))
     assert event.path == self.asset_path
     assert os.path.exists(self.asset_path) is True
Beispiel #3
0
 def test_image_with_one_channel(self):
     event = image(
         asset_path=self.asset_path,
         data=tensor_np(shape=(1, 8, 8)),
         dataformats="CHW",
     )
     assert event.path == self.asset_path
     assert os.path.exists(self.asset_path) is True
Beispiel #4
0
 def test_image_with_four_channel_batched(self):
     event = image(
         asset_path=self.asset_path,
         data=tensor_np(shape=(2, 4, 8, 8)),
         dataformats="NCHW",
     )
     assert event.path == self.asset_path
     assert os.path.exists(self.asset_path) is True
Beispiel #5
0
 def test_uint8_image(self):
     """Tests that uint8 image (pixel values in [0, 255]) is not changed"""
     assert os.path.exists(self.asset_path) is False
     event = image(
         asset_path=self.asset_path,
         data=tensor_np(shape=(3, 32, 32), dtype=np.uint8),
     )
     assert event.path == self.asset_path
     assert os.path.exists(self.asset_path) is True
Beispiel #6
0
    def log_image(self,
                  data,
                  name=None,
                  step=None,
                  timestamp=None,
                  rescale=1,
                  dataformats="CHW"):
        """Logs an image.

        ```python
        >>> log_image(data="path/to/image.png", step=10)
        >>> log_image(data=np_array, name="generated_image", step=10)
        ```

        Args:
            data: str or numpy.array, a file path or numpy array
            name: str, name of the image,
                  if a path is passed this can be optional and the name of the file will be used
            step: int, optional
            timestamp: datetime, optional
            rescale: int, optional
            dataformats: str, optional
        """
        self._log_has_events()

        is_file = isinstance(data, str) and os.path.exists(data)
        ext = "png"
        if is_file:
            name = name or os.path.basename(data)
            ext = get_path_extension(filepath=data) or ext
        else:
            name = name or "image"

        asset_path = get_asset_path(
            run_path=self._artifacts_path,
            kind=V1ArtifactKind.IMAGE,
            name=name,
            step=step,
            ext=ext,
        )
        asset_rel_path = os.path.relpath(asset_path, self._artifacts_path)
        if is_file:
            event_value = events_processors.image_path(from_path=data,
                                                       asset_path=asset_path)
        elif hasattr(data, "encoded_image_string"):
            event_value = events_processors.encoded_image(
                asset_path=asset_path,
                data=data,
                asset_rel_path=asset_rel_path,
            )
        else:
            event_value = events_processors.image(
                asset_path=asset_path,
                data=data,
                rescale=rescale,
                dataformats=dataformats,
                asset_rel_path=asset_rel_path,
            )

        if event_value == UNKNOWN:
            return

        logged_event = LoggedEventSpec(
            name=name,
            kind=V1ArtifactKind.IMAGE,
            event=V1Event.make(timestamp=timestamp,
                               step=step,
                               image=event_value),
        )
        self._event_logger.add_event(logged_event)