|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| import io
|
| import itertools
|
| import numpy as np
|
| from PIL import Image
|
| import tensorflow as tf, tf_keras
|
|
|
| from official.vision.ops import preprocess_ops_3d
|
|
|
|
|
| class ParserUtilsTest(tf.test.TestCase):
|
|
|
| def setUp(self):
|
| super().setUp()
|
|
|
| self._frames = tf.stack([tf.range(i, i + 120) for i in range(90)])
|
| self._frames = tf.cast(self._frames, tf.uint8)
|
| self._frames = self._frames[tf.newaxis, :, :, tf.newaxis]
|
| self._frames = tf.broadcast_to(self._frames, (6, 90, 120, 3))
|
|
|
|
|
| self._np_frames = np.array([range(i, i + 120) for i in range(90)])
|
| self._np_frames = self._np_frames[np.newaxis, :, :, np.newaxis]
|
| self._np_frames = np.broadcast_to(self._np_frames, (6, 90, 120, 3))
|
|
|
| def test_sample_linspace_sequence(self):
|
| sequence = tf.range(100)
|
| sampled_seq_1 = preprocess_ops_3d.sample_linspace_sequence(
|
| sequence, 10, 10, 1)
|
| sampled_seq_2 = preprocess_ops_3d.sample_linspace_sequence(
|
| sequence, 7, 10, 1)
|
| sampled_seq_3 = preprocess_ops_3d.sample_linspace_sequence(
|
| sequence, 7, 5, 2)
|
| sampled_seq_4 = preprocess_ops_3d.sample_linspace_sequence(
|
| sequence, 101, 1, 1)
|
|
|
| self.assertAllEqual(sampled_seq_1, range(100))
|
|
|
| self.assertAllEqual(
|
| sampled_seq_2,
|
| [15 * i + j for i, j in itertools.product(range(7), range(10))])
|
|
|
| self.assertAllEqual(
|
| sampled_seq_3,
|
| [15 * i + 2 * j for i, j in itertools.product(range(7), range(5))])
|
| self.assertAllEqual(sampled_seq_4, [0] + list(range(100)))
|
|
|
| def test_sample_sequence(self):
|
| sequence = tf.range(100)
|
| sampled_seq_1 = preprocess_ops_3d.sample_sequence(sequence, 10, False, 1)
|
| sampled_seq_2 = preprocess_ops_3d.sample_sequence(sequence, 10, False, 2)
|
| sampled_seq_3 = preprocess_ops_3d.sample_sequence(sequence, 10, True, 1)
|
|
|
| self.assertAllEqual(sampled_seq_1, range(45, 55))
|
| self.assertAllEqual(sampled_seq_2, range(40, 60, 2))
|
|
|
| offset_3 = sampled_seq_3[0]
|
| self.assertBetween(offset_3, 0, 99)
|
| self.assertAllEqual(sampled_seq_3, range(offset_3, offset_3 + 10))
|
|
|
| def test_sample_segment_sequence(self):
|
| sequence = tf.range(100)
|
| sampled_seq_1 = preprocess_ops_3d.sample_segment_sequence(
|
| sequence, 10, False)
|
| sampled_seq_2 = preprocess_ops_3d.sample_segment_sequence(
|
| sequence, 10, True)
|
| self.assertAllEqual(sampled_seq_1, [5 + i * 10 for i in range(10)])
|
| for idx, v in enumerate(sampled_seq_2):
|
| self.assertBetween(v - idx * 10, 0, 10)
|
|
|
| def test_decode_jpeg(self):
|
|
|
| random_image = np.random.randint(0, 256, size=(263, 320, 3), dtype=np.uint8)
|
| random_image = Image.fromarray(random_image)
|
| with io.BytesIO() as buffer:
|
| random_image.save(buffer, format='JPEG')
|
| raw_image_bytes = buffer.getvalue()
|
|
|
| raw_image = tf.constant([raw_image_bytes, raw_image_bytes])
|
| decoded_image = preprocess_ops_3d.decode_jpeg(raw_image, 3)
|
|
|
| self.assertEqual(decoded_image.shape.as_list()[3], 3)
|
| self.assertAllEqual(decoded_image.shape, (2, 263, 320, 3))
|
|
|
| def test_decode_image(self):
|
|
|
| random_image = np.random.randint(0, 256, size=(263, 320, 3), dtype=np.uint8)
|
| random_image = Image.fromarray(random_image)
|
| with io.BytesIO() as buffer:
|
| random_image.save(buffer, format='JPEG')
|
| raw_image_bytes = buffer.getvalue()
|
|
|
| raw_image = tf.constant([raw_image_bytes, raw_image_bytes])
|
| decoded_image = preprocess_ops_3d.decode_image(raw_image, 3)
|
|
|
| self.assertEqual(decoded_image.shape.as_list()[3], 3)
|
| self.assertAllEqual(decoded_image.shape, (2, 263, 320, 3))
|
|
|
|
|
| random_image = np.random.randint(0, 256, size=(263, 320, 3), dtype=np.uint8)
|
| random_image = Image.fromarray(random_image)
|
| with io.BytesIO() as buffer:
|
| random_image.save(buffer, format='PNG')
|
| raw_image_bytes = buffer.getvalue()
|
|
|
| raw_image = tf.constant([raw_image_bytes, raw_image_bytes])
|
| decoded_image = preprocess_ops_3d.decode_image(raw_image, 3)
|
|
|
| self.assertEqual(decoded_image.shape.as_list()[3], 3)
|
| self.assertAllEqual(decoded_image.shape, (2, 263, 320, 3))
|
|
|
| def test_crop_image(self):
|
| cropped_image_1 = preprocess_ops_3d.crop_image(self._frames, 50, 70)
|
| cropped_image_2 = preprocess_ops_3d.crop_image(self._frames, 200, 200)
|
| cropped_image_3 = preprocess_ops_3d.crop_image(self._frames, 50, 70, True)
|
| cropped_image_4 = preprocess_ops_3d.crop_image(
|
| self._frames, 90, 90, False, 3)
|
|
|
| self.assertAllEqual(cropped_image_1.shape, (6, 50, 70, 3))
|
| self.assertAllEqual(cropped_image_1, self._np_frames[:, 20:70, 25:95, :])
|
|
|
| self.assertAllEqual(cropped_image_2.shape, (6, 200, 200, 3))
|
| expected = np.pad(
|
| self._np_frames, ((0, 0), (55, 55), (40, 40), (0, 0)), 'constant')
|
| self.assertAllEqual(cropped_image_2, expected)
|
|
|
| self.assertAllEqual(cropped_image_3.shape, (6, 50, 70, 3))
|
| offset = cropped_image_3[0, 0, 0, 0]
|
| expected = np.array([range(i, i + 70) for i in range(offset, offset + 50)])
|
| expected = expected[np.newaxis, :, :, np.newaxis]
|
| expected = np.broadcast_to(expected, (6, 50, 70, 3))
|
| self.assertAllEqual(cropped_image_3, expected)
|
| self.assertAllEqual(cropped_image_4.shape, (18, 90, 90, 3))
|
|
|
| def test_resize_smallest(self):
|
| resized_frames_1 = preprocess_ops_3d.resize_smallest(self._frames, 180)
|
| resized_frames_2 = preprocess_ops_3d.resize_smallest(self._frames, 45)
|
| resized_frames_3 = preprocess_ops_3d.resize_smallest(self._frames, 90)
|
| resized_frames_4 = preprocess_ops_3d.resize_smallest(
|
| tf.transpose(self._frames, (0, 2, 1, 3)), 45)
|
|
|
| self.assertAllEqual(resized_frames_1.shape, (6, 180, 240, 3))
|
| self.assertAllEqual(resized_frames_2.shape, (6, 45, 60, 3))
|
| self.assertAllEqual(resized_frames_3.shape, (6, 90, 120, 3))
|
| self.assertAllEqual(resized_frames_4.shape, (6, 60, 45, 3))
|
|
|
| def test_random_crop_resize(self):
|
| resized_frames_1 = preprocess_ops_3d.random_crop_resize(
|
| self._frames, 256, 256, 6, 3, (0.5, 2), (0.3, 1))
|
| resized_frames_2 = preprocess_ops_3d.random_crop_resize(
|
| self._frames, 224, 224, 6, 3, (0.5, 2), (0.3, 1))
|
| resized_frames_3 = preprocess_ops_3d.random_crop_resize(
|
| self._frames, 256, 256, 6, 3, (0.8, 1.2), (0.3, 1))
|
| resized_frames_4 = preprocess_ops_3d.random_crop_resize(
|
| self._frames, 256, 256, 6, 3, (0.5, 2), (0.1, 1))
|
| self.assertAllEqual(resized_frames_1.shape, (6, 256, 256, 3))
|
| self.assertAllEqual(resized_frames_2.shape, (6, 224, 224, 3))
|
| self.assertAllEqual(resized_frames_3.shape, (6, 256, 256, 3))
|
| self.assertAllEqual(resized_frames_4.shape, (6, 256, 256, 3))
|
|
|
| def test_random_flip_left_right(self):
|
| flipped_frames = preprocess_ops_3d.random_flip_left_right(self._frames)
|
|
|
| flipped = np.fliplr(self._np_frames[0, :, :, 0])
|
| flipped = flipped[np.newaxis, :, :, np.newaxis]
|
| flipped = np.broadcast_to(flipped, (6, 90, 120, 3))
|
| self.assertTrue((flipped_frames == self._np_frames).numpy().all() or (
|
| flipped_frames == flipped).numpy().all())
|
|
|
| def test_normalize_image(self):
|
| normalized_images_1 = preprocess_ops_3d.normalize_image(
|
| self._frames, False, tf.float32)
|
| normalized_images_2 = preprocess_ops_3d.normalize_image(
|
| self._frames, True, tf.float32)
|
|
|
| self.assertAllClose(normalized_images_1, self._np_frames / 255)
|
| self.assertAllClose(normalized_images_2, self._np_frames * 2 / 255 - 1.0)
|
|
|
|
|
| if __name__ == '__main__':
|
| tf.test.main()
|
|
|