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)
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)
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)
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)
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)
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)
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)
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)
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])
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)
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)
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])
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)
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)
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)
def setUpClass(cls): CatalogManager().reset() create_sample_video(NUM_FRAMES) load_query = """LOAD DATA INFILE 'dummy.avi' INTO MyVideo;""" perform_query(load_query)