Esempio n. 1
0
    def test_should_load_and_select_in_table(self):
        query = """LOAD DATA INFILE 'dummy.avi' INTO MyVideo;"""
        perform_query(query)

        select_query = "SELECT id FROM MyVideo;"
        actual_batch = perform_query(select_query)
        expected_rows = [{"id": i} for i in range(NUM_FRAMES)]
        expected_batch = Batch(frames=pd.DataFrame(expected_rows))
        self.assertEqual(actual_batch, expected_batch)

        select_query = "SELECT data FROM MyVideo;"
        actual_batch = perform_query(select_query)
        expected_rows = [{
            "data":
            np.array(np.ones((2, 2, 3)) * 0.1 * float(i + 1) * 255,
                     dtype=np.uint8)
        } for i in range(NUM_FRAMES)]
        expected_batch = Batch(frames=pd.DataFrame(expected_rows))
        self.assertEqual(actual_batch, expected_batch)

        # select * is not supported
        select_query = "SELECT id,data FROM MyVideo;"
        actual_batch = [perform_query(select_query)]
        expected_batch = list(create_dummy_batches())
        self.assertEqual(actual_batch, expected_batch)
Esempio n. 2
0
    def test_should_load_video_in_table(self):
        query = """LOAD DATA INFILE 'dummy.avi' INTO MyVideo;"""

        perform_query(query)

        metadata = CatalogManager().get_dataset_metadata("", "MyVideo")
        actual_batch = list(StorageEngine.read(metadata))
        expected_batch = list(create_dummy_batches())
        self.assertEqual(actual_batch, expected_batch)
Esempio n. 3
0
    def test_should_load_and_select_real_video_in_table(self):
        query = """LOAD DATA INFILE 'data/ua_detrac/ua_detrac.mp4'
                   INTO MyVideo;"""
        perform_query(query)

        select_query = "SELECT id,data FROM MyVideo;"
        actual_batch = perform_query(select_query)
        video_reader = OpenCVReader('data/ua_detrac/ua_detrac/mp4')
        expected_batch = Batch(frames=pd.DataFrame())
        for batch in video_reader.read():
            expected_batch += batch
        self.assertTrue(actual_batch, expected_batch)
Esempio n. 4
0
    def test_should_load_video_in_table(self):
        query = """LOAD DATA INFILE 'dummy.avi' INTO MyVideo;"""

        perform_query(query)

        metadata = CatalogManager().get_dataset_metadata("", "MyVideo")
        actual_batch = Batch(pd.DataFrame())
        for batch in StorageEngine.read(metadata):
            actual_batch += batch
        actual_batch.sort()
        expected_batch = list(create_dummy_batches())
        self.assertEqual([actual_batch], expected_batch)
Esempio n. 5
0
    def test_should_load_and_select_in_table(self):
        select_query = "SELECT id FROM MyVideo;"
        actual_batch = perform_query(select_query)
        actual_batch.sort()
        expected_rows = [{"id": i} for i in range(NUM_FRAMES)]
        expected_batch = Batch(frames=pd.DataFrame(expected_rows))
        self.assertEqual(actual_batch, expected_batch)

        select_query = "SELECT id,data FROM MyVideo;"
        actual_batch = perform_query(select_query)
        actual_batch.sort()
        expected_batch = list(create_dummy_batches())
        self.assertEqual([actual_batch], expected_batch)
Esempio n. 6
0
    def test_sort_on_nonprojected_column(self):
        """ This tests doing an order by on a column
        that is not projected. The orderby_executor currently
        catches the KeyError, passes, and returns the untouched
        data
        """
        select_query = "SELECT data FROM MyVideo ORDER BY id;"
        actual_batch = perform_query(select_query)

        select_query = "SELECT data FROM MyVideo"
        expected_batch = perform_query(select_query)

        self.assertEqual(actual_batch, expected_batch)
Esempio n. 7
0
    def test_should_load_and_sort_in_table(self):
        select_query = "SELECT data, id FROM MyVideo ORDER BY id;"
        actual_batch = perform_query(select_query)
        expected_rows = [{
            'id':
            i,
            'data':
            np.array(np.ones((2, 2, 3)) * float(i + 1) * 25, dtype=np.uint8)
        } for i in range(NUM_FRAMES)]
        expected_batch = Batch(frames=pd.DataFrame(expected_rows))
        self.assertEqual(actual_batch, expected_batch)

        select_query = "SELECT data, id FROM MyVideo ORDER BY id DESC;"
        actual_batch = perform_query(select_query)
        expected_batch.reverse()
        self.assertEqual(actual_batch, expected_batch)
Esempio n. 8
0
    def test_should_run_pytorch_and_fastrcnn(self):
        query = """LOAD DATA INFILE 'data/ua_detrac/ua_detrac.mp4'
                   INTO MyVideo;"""
        perform_query(query)

        create_udf_query = """CREATE UDF FastRCNNObjectDetector
                  INPUT  (Frame_Array NDARRAY (3, 256, 256))
                  OUTPUT (label TEXT(10))
                  TYPE  Classification
                  IMPL  'src/udfs/fastrcnn_object_detector.py';
        """
        perform_query(create_udf_query)

        select_query = """SELECT FastRCNNObjectDetector(data) FROM MyVideo
                        WHERE id < 5;"""
        actual_batch = perform_query(select_query)
        print(actual_batch)
        self.assertEqual(actual_batch.batch_size, 5)
Esempio n. 9
0
    def test_select_and_limit(self):
        select_query = "SELECT id,data FROM MyVideo LIMIT 5;"
        actual_batch = perform_query(select_query)
        actual_batch.sort()
        expected_batch = list(create_dummy_batches(num_frames=10,
                                                   batch_size=5))

        self.assertEqual(actual_batch.batch_size, expected_batch[0].batch_size)
        self.assertEqual(actual_batch, expected_batch[0])
Esempio n. 10
0
    def test_select_and_union_video_in_table(self):
        select_query = """SELECT id, data FROM MyVideo WHERE id < 3
            UNION ALL SELECT id, data FROM MyVideo WHERE id > 7;"""
        actual_batch = perform_query(select_query)
        actual_batch.sort()
        expected_batch = list(
            create_dummy_batches(
                filters=[i for i in range(NUM_FRAMES) if i < 3 or i > 7]))[0]
        self.assertEqual(actual_batch, expected_batch)

        select_query = """SELECT id, data FROM MyVideo WHERE id < 2
            UNION ALL SELECT id, data FROM MyVideo WHERE id > 4 AND id < 6
            UNION ALL SELECT id, data FROM MyVideo WHERE id > 7;"""
        actual_batch = perform_query(select_query)
        actual_batch.sort()
        expected_batch = list(
            create_dummy_batches(filters=[
                i for i in range(NUM_FRAMES) if i < 2 or i == 5 or i > 7
            ]))[0]
        self.assertEqual(actual_batch, expected_batch)
Esempio n. 11
0
    def test_should_load_and_select_using_udf_video_in_table(self):
        load_query = """LOAD DATA INFILE 'dummy.avi' INTO MyVideo;"""
        perform_query(load_query)

        create_udf_query = """CREATE UDF DummyObjectDetector
                  INPUT  (Frame_Array NDARRAY (3, 256, 256))
                  OUTPUT (label TEXT(10))
                  TYPE  Classification
                  IMPL  'test/util.py';
        """
        perform_query(create_udf_query)

        select_query = "SELECT id,DummyObjectDetector(data) FROM MyVideo;"
        actual_batch = perform_query(select_query)
        labels = DummyObjectDetector().labels
        expected = [{
            'id': i,
            'label': labels[1 + i % 2]
        } for i in range(NUM_FRAMES)]
        expected_batch = Batch(frames=pd.DataFrame(expected))
        self.assertEqual(actual_batch, expected_batch)
Esempio n. 12
0
    def test_should_run_pytorch_and_ssd(self):
        query = """LOAD DATA INFILE 'data/ua_detrac/ua_detrac.mp4'
                   INTO MyVideo;"""
        perform_query(query)

        create_udf_query = """CREATE UDF SSDObjectDetector
                  INPUT  (Frame_Array NDARRAY (3, 256, 256))
                  OUTPUT (label TEXT(10))
                  TYPE  Classification
                  IMPL  'src/udfs/ssd_object_detector.py';
        """
        perform_query(create_udf_query)

        select_query = """SELECT SSDObjectDetector(data) FROM MyVideo
                        WHERE id < 5;"""
        actual_batch = perform_query(select_query)
        self.assertEqual(actual_batch.batch_size, 5)

        # non-trivial test case
        res = actual_batch.frames
        for idx in res.index:
            self.assertTrue('car' in res['label'][idx])
Esempio n. 13
0
    def test_should_load_and_select_in_table(self):
        select_query = "SELECT id FROM MyVideo;"
        actual_batch = perform_query(select_query)
        actual_batch.sort()
        expected_rows = [{"id": i} for i in range(NUM_FRAMES)]
        expected_batch = Batch(frames=pd.DataFrame(expected_rows))
        self.assertEqual(actual_batch, expected_batch)

        # Need Order by
        # select_query = "SELECT data FROM MyVideo;"
        # actual_batch = perform_query(select_query)
        # expected_rows = [{"data": np.array(np.ones((2, 2, 3))
        #                                   * 0.1 * float(i + 1) * 255,
        #                                   dtype=np.uint8)}
        #                 for i in range(NUM_FRAMES)]
        # expected_batch = Batch(frames=pd.DataFrame(expected_rows))
        # self.assertEqual(actual_batch, expected_batch)

        select_query = "SELECT id,data FROM MyVideo;"
        actual_batch = perform_query(select_query)
        actual_batch.sort()
        expected_batch = list(create_dummy_batches())
        self.assertEqual([actual_batch], expected_batch)
Esempio n. 14
0
    def test_select_and_where_video_in_table(self):
        select_query = "SELECT id,data FROM MyVideo WHERE id = 5;"
        actual_batch = perform_query(select_query)
        expected_batch = list(create_dummy_batches(filters=[5]))[0]
        self.assertEqual(actual_batch, expected_batch)

        select_query = "SELECT data FROM MyVideo WHERE id = 5;"
        actual_batch = perform_query(select_query)
        expected_rows = [{
            "data":
            np.array(np.ones((2, 2, 3)) * float(5 + 1) * 25, dtype=np.uint8)
        }]
        expected_batch = Batch(frames=pd.DataFrame(expected_rows))
        self.assertEqual(actual_batch, expected_batch)

        select_query = "SELECT id, data FROM MyVideo WHERE id >= 2;"
        actual_batch = perform_query(select_query)
        actual_batch.sort()
        expected_batch = list(
            create_dummy_batches(filters=range(2, NUM_FRAMES)))[0]
        self.assertEqual(actual_batch, expected_batch)

        select_query = "SELECT id, data FROM MyVideo WHERE id >= 2 AND id < 5;"
        actual_batch = perform_query(select_query)
        actual_batch.sort()
        expected_batch = list(create_dummy_batches(filters=range(2, 5)))[0]

        self.assertEqual(actual_batch, expected_batch)

        nested_select_query = """SELECT id, data FROM
            (SELECT id, data FROM MyVideo WHERE id >= 2 AND id < 5)
            WHERE id >= 3;"""
        actual_batch = perform_query(nested_select_query)
        actual_batch.sort()
        expected_batch = list(create_dummy_batches(filters=range(3, 5)))[0]
        self.assertEqual(actual_batch, expected_batch)
Esempio n. 15
0
    def test_should_load_and_select_using_udf_video(self):
        load_query = """LOAD DATA INFILE 'dummy.avi' INTO MyVideo;"""
        perform_query(load_query)

        create_udf_query = """CREATE UDF DummyObjectDetector
                  INPUT  (Frame_Array NDARRAY (3, 256, 256))
                  OUTPUT (label TEXT(10))
                  TYPE  Classification
                  IMPL  'test/util.py';
        """
        perform_query(create_udf_query)

        select_query = "SELECT id,DummyObjectDetector(data) FROM MyVideo \
            WHERE DummyObjectDetector(data).label = 'person';"

        actual_batch = perform_query(select_query)
        actual_batch.sort()
        expected = [{
            'id': i * 2,
            'label': 'person'
        } for i in range(NUM_FRAMES // 2)]
        expected_batch = Batch(frames=pd.DataFrame(expected))
        self.assertEqual(actual_batch, expected_batch)

        nested_select_query = """SELECT id, data FROM
            (SELECT id, data, DummyObjectDetector(data) FROM MyVideo
                WHERE id >= 2
            )
            WHERE label = 'person';
            """
        actual_batch = perform_query(nested_select_query)
        actual_batch.sort()
        expected_batch = list(
            create_dummy_batches(
                filters=[i for i in range(2, NUM_FRAMES) if i % 2 == 0]))[0]
        self.assertEqual(actual_batch, expected_batch)
Esempio n. 16
0
 def setUpClass(cls):
     CatalogManager().reset()
     create_sample_video(NUM_FRAMES)
     load_query = """LOAD DATA INFILE 'dummy.avi' INTO MyVideo;"""
     perform_query(load_query)