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())), )
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
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
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
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
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)