def test_select_and_where_video_in_table(self): select_query = "SELECT id,data FROM MyVideo WHERE id = 5;" actual_batch = execute_query_fetch_all(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 = execute_query_fetch_all(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 = execute_query_fetch_all(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 = execute_query_fetch_all(select_query) actual_batch.sort() expected_batch = list(create_dummy_batches(filters=range(2, 5)))[0] self.assertEqual(actual_batch, expected_batch)
def test_should_load_video_in_table(self): query = """LOAD DATA INFILE 'dummy.avi' INTO MyVideo;""" execute_query_fetch_all(query) metadata = CatalogManager().get_dataset_metadata("", "MyVideo") actual_batch = Batch(pd.DataFrame()) actual_batch = Batch.concat(StorageEngine.read(metadata), copy=False) actual_batch.sort() expected_batch = list(create_dummy_batches()) self.assertEqual([actual_batch], expected_batch)
def test_cnn_filtering(self): create_udf_query = """CREATE UDF CNNFilter INPUT (Frame_Array NDARRAY UINT8(3, 256, 256)) OUTPUT (hasCar BOOLEAN) TYPE Filter IMPL 'src/udfs/filters/cnn_filter.py'; """ execute_query_fetch_all(create_udf_query) select_query = """SELECT id FROM MyVideo WHERE CNNFilter(data);""" execute_query_fetch_all(select_query)
def setUp(self): CatalogManager().reset() create_sample_video(NUM_FRAMES) load_query = """LOAD DATA INFILE 'dummy.avi' INTO MyVideo;""" execute_query_fetch_all(load_query) create_udf_query = """CREATE UDF DummyObjectDetector INPUT (Frame_Array NDARRAY UINT8(3, 256, 256)) OUTPUT (label NDARRAY STR(10)) TYPE Classification IMPL 'test/util.py'; """ execute_query_fetch_all(create_udf_query)
def test_should_load_and_select_in_table(self): select_query = "SELECT id FROM MyVideo;" actual_batch = execute_query_fetch_all(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 = execute_query_fetch_all(select_query) actual_batch.sort() expected_batch = list(create_dummy_batches()) self.assertEqual([actual_batch], expected_batch)
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 = execute_query_fetch_all(select_query) select_query = "SELECT data FROM MyVideo" expected_batch = execute_query_fetch_all(select_query) self.assertEqual(actual_batch, expected_batch)
def test_should_load_and_select_real_video_in_table(self): query = """LOAD DATA INFILE 'data/ua_detrac/ua_detrac.mp4' INTO MyVideo;""" execute_query_fetch_all(query) select_query = "SELECT id,data FROM MyVideo;" actual_batch = execute_query_fetch_all(select_query) actual_batch.sort() 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)
def test_should_load_and_select_using_udf_video(self): # Equality test select_query = "SELECT id,DummyObjectDetector(data) FROM MyVideo \ WHERE DummyObjectDetector(data).label = ['person'] ORDER BY id;" actual_batch = execute_query_fetch_all(select_query) 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) # Contain test select_query = "SELECT id,DummyObjectDetector(data) FROM MyVideo \ WHERE DummyObjectDetector(data).label @> ['person'] ORDER BY id;" actual_batch = execute_query_fetch_all(select_query) self.assertEqual(actual_batch, expected_batch) # Mutli element contain test select_query = "SELECT id,DummyObjectDetector(data) FROM MyVideo \ WHERE DummyObjectDetector(data).label <@ ['person', 'bicycle'] \ ORDER BY id;" actual_batch = execute_query_fetch_all(select_query) expected = [{ 'id': i * 2, 'label': ['person'] } for i in range(NUM_FRAMES // 2)] expected += [{ 'id': i, 'label': ['bicycle'] } for i in range(NUM_FRAMES) if i % 2 + 1 == 2] expected_batch = Batch(frames=pd.DataFrame(expected)) expected_batch.sort() self.assertEqual(actual_batch, expected_batch) nested_select_query = """SELECT id, data FROM (SELECT id, data, DummyObjectDetector(data) FROM MyVideo WHERE id >= 2 ) WHERE ['person'] <@ label; """ actual_batch = execute_query_fetch_all(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)
def test_should_load_video_in_table(self): query = """LOAD DATA INFILE 'dummy.avi' INTO MyVideo;""" execute_query_fetch_all(query) insert_query = """ INSERT INTO MyVideo (id, data) VALUES (40, [[[40, 40, 40] , [40, 40, 40]], [[40, 40, 40], [40, 40, 40]]]);""" execute_query_fetch_all(insert_query) insert_query_2 = """ INSERT INTO MyVideo (id, data) VALUES (41, [[[41, 41, 41] , [41, 41, 41]], [[41, 41, 41], [41, 41, 41]]]);""" execute_query_fetch_all(insert_query_2) query = 'SELECT id, data FROM MyVideo WHERE id = 40' batch = execute_query_fetch_all(query) self.assertIsNone( np.testing.assert_array_equal( batch.frames['data'][0], np.array([[[40, 40, 40], [40, 40, 40]], [[40, 40, 40], [40, 40, 40]]]))) query = 'SELECT id, data FROM MyVideo WHERE id = 41;' batch = execute_query_fetch_all(query) self.assertIsNone( np.testing.assert_array_equal( batch.frames['data'][0], np.array([[[41, 41, 41], [41, 41, 41]], [[41, 41, 41], [41, 41, 41]]])))
def test_should_load_and_sort_in_table(self): select_query = "SELECT data, id FROM MyVideo ORDER BY id;" actual_batch = execute_query_fetch_all(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 = execute_query_fetch_all(select_query) expected_batch.reverse() self.assertEqual(actual_batch, expected_batch)
def test_should_run_pytorch_and_fastrcnn(self): query = """LOAD DATA INFILE 'data/ua_detrac/ua_detrac.mp4' INTO MyVideo;""" execute_query_fetch_all(query) create_udf_query = """CREATE UDF FastRCNNObjectDetector INPUT (Frame_Array NDARRAY UINT8(3, 256, 256)) OUTPUT (label NDARRAY STR(10)) TYPE Classification IMPL 'src/udfs/fastrcnn_object_detector.py'; """ execute_query_fetch_all(create_udf_query) select_query = """SELECT FastRCNNObjectDetector(data) FROM MyVideo WHERE id < 5;""" actual_batch = execute_query_fetch_all(select_query) self.assertEqual(actual_batch.batch_size, 5)
def test_nested_select_video_in_table(self): nested_select_query = """SELECT id, data FROM (SELECT id, data FROM MyVideo WHERE id >= 2 AND id < 5) WHERE id >= 3;""" actual_batch = execute_query_fetch_all(nested_select_query) actual_batch.sort() expected_batch = list(create_dummy_batches(filters=range(3, 5)))[0] self.assertEqual(actual_batch, expected_batch)
def test_select_and_limit(self): select_query = "SELECT id,data FROM MyVideo LIMIT 5;" actual_batch = execute_query_fetch_all(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])
def test_select_and_sample(self): select_query = "SELECT id,data FROM MyVideo SAMPLE 7;" actual_batch = execute_query_fetch_all(select_query) actual_batch.sort() expected_batch = list( create_dummy_batches(filters=range(0, NUM_FRAMES, 7))) self.assertEqual(actual_batch.batch_size, expected_batch[0].batch_size) self.assertEqual(actual_batch, expected_batch[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 = execute_query_fetch_all(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 = execute_query_fetch_all(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)
def test_should_load_and_select_using_udf_video_in_table(self): select_query = "SELECT id,DummyObjectDetector(data) FROM MyVideo \ ORDER BY id;" actual_batch = execute_query_fetch_all(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)
def test_should_run_pytorch_and_ssd(self): query = """LOAD DATA INFILE 'data/ua_detrac/ua_detrac.mp4' INTO MyVideo;""" execute_query_fetch_all(query) create_udf_query = """CREATE UDF SSDObjectDetector INPUT (Frame_Array NDARRAY UINT8(3, 256, 256)) OUTPUT (label NDARRAY STR(10)) TYPE Classification IMPL 'src/udfs/ssd_object_detector.py'; """ execute_query_fetch_all(create_udf_query) select_query = """SELECT SSDObjectDetector(data) FROM MyVideo WHERE id < 5;""" actual_batch = execute_query_fetch_all(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])
def test_logical_to_physical_udf(self): load_query = """LOAD DATA INFILE 'dummy.avi' INTO MyVideo;""" execute_query_fetch_all(load_query) create_udf_query = """CREATE UDF DummyObjectDetector INPUT (Frame_Array NDARRAY UINT8(3, 256, 256)) OUTPUT (label NDARRAY STR(10)) TYPE Classification IMPL 'test/util.py'; """ execute_query_fetch_all(create_udf_query) select_query = """SELECT id, DummyObjectDetector(data) FROM MyVideo WHERE DummyObjectDetector(data).label = ['person']; """ actual_batch = execute_query_fetch_all(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)
def setUp(self): CatalogManager().reset() load_query = """LOAD DATA INFILE 'data/m30.mp4' INTO MyVideo;""" execute_query_fetch_all(load_query)
def setUpClass(cls): CatalogManager().reset() create_sample_video(NUM_FRAMES) load_query = """LOAD DATA INFILE 'dummy.avi' INTO MyVideo;""" execute_query_fetch_all(load_query)