def test_challenge2018(self): dat = H.ImgReader(BallDatasetHandler.TRAIN.CHALLENGE_2018, batch_size=8) dat_filtered = H.ImgReader(BallDatasetHandler.TRAIN.CHALLENGE_2018, batch_size=8, label_content="ball", filter_labels=True) # 35327 number of ball annotations # 35952 number of images total self.assertEqual(dat.get_dataset_size(), 35952) self.assertEqual(dat_filtered.get_dataset_size(), 35327)
def test_heatmap_labels2D_rectangular_dummy_data(self): # set up dummy data heatmap = np.zeros(shape=(3, 10, 10, 1), dtype=np.float32) heatmap[0, 1:4, 1:4, :] = 1.0 # 0: top left heatmap[1, 5:10, 7:10, :] = 1.0 # 1: bottom right heatmap[2, 1:4, 1:4, :] = 1.0 # 2: both heatmap[2, 5:10, 7:10, :] = 1.0 # set up dummy labels bbx1 = H.LabelBoundingBox2D(x1=1, y1=1, x2=3, y2=3) bbx2 = H.LabelBoundingBox2D(x1=7, y1=5, x2=9, y2=9) labels = [[bbx1], [bbx2], [bbx1, bbx2]] ret = H.heatmap.labels2D_rectangular(heatmap, labels) self.assertTrue(np.array_equal(heatmap, ret))
def test_set01_multiple_goalpost(self): dat = H.LblReader( [os.path.join(os.environ["ROBO_AI_DATA"], "bitbots-set00-01")], img_dim=(800, 600), label_content="goalpost") imgs = ["jan16_seq__000.531.png"] paths = [ os.path.join(os.environ["ROBO_AI_DATA"], "bitbots-set00-01", imgs[0]) ] labels = dat.get_labels_for_batch(paths) # image 'jan16_seq__000.531.png' contains two goalposts - check for two labels self.assertEqual(len(labels[0]), 2) # extract label objects # left goal post: x1=26 and y1=0 if abs(labels[0][0].x1 - 26) <= 2 and abs(labels[0][0].y1 - 0) <= 2: # if x1 and y1 of labels[0][0] matched, then labels[0][0] is the left goalpost goalpost1 = labels[0][0] goalpost2 = labels[0][1] else: # if it did not match, then just assume right goalpost is labels[0][0] goalpost2 = labels[0][0] goalpost1 = labels[0][1] # check left goalpost information self.assertAlmostEqual(goalpost1.x1, 26, delta=2) self.assertAlmostEqual(goalpost1.y1, 0, delta=2) self.assertAlmostEqual(goalpost1.x2, 110, delta=2) self.assertAlmostEqual(goalpost1.y2, 150, delta=2) self.assertAlmostEqual(goalpost1.center_x, 68, delta=2) self.assertAlmostEqual(goalpost1.center_y, 75, delta=2) self.assertAlmostEqual(goalpost1.width, 84, delta=2) self.assertAlmostEqual(goalpost1.height, 150, delta=2) # check right goalpost information self.assertAlmostEqual(goalpost2.x1, 731, delta=2) self.assertAlmostEqual(goalpost2.y1, 0, delta=2) self.assertAlmostEqual(goalpost2.x2, 799, delta=2) self.assertAlmostEqual(goalpost2.y2, 123, delta=2) self.assertAlmostEqual(goalpost2.center_x, 765, delta=2) self.assertAlmostEqual(goalpost2.center_y, 61.5, delta=2) self.assertAlmostEqual(goalpost2.width, 68, delta=2) self.assertAlmostEqual(goalpost2.height, 123, delta=2)
def test_mock_multiple_goalpost(self): dat = H.LblReader(TestLabelReader.pathlist, img_dim=(640, 480), label_content="goalpost") imgs = ["fake.png"] paths = [str(TestLabelReader.mock_dataset_dir / img) for img in imgs] labels = dat.get_labels_for_batch(paths) goalposts = labels[0] self.assertEqual(len(goalposts), 2, "Should contain two goalpost labels") expected_goalposts = [{ 'x1': 398, 'y1': 0, 'x2': 458, 'y2': 225, 'center_x': 428, 'center_y': 112, 'width': 60, 'height': 225 }, { 'x1': 197, 'y1': 14, 'x2': 252, 'y2': 236, 'center_x': 224, 'center_y': 125, 'width': 55, 'height': 222 }] eps = 1e-2 for expected_goalpost in expected_goalposts: matching_goalposts = [ gp for gp in goalposts if abs(gp.x1 - expected_goalpost['x1']) < eps ] self.assertEqual(len(matching_goalposts), 1) goalposts.remove(matching_goalposts[0]) compare_goalpost = { attr: getattr(matching_goalposts[0], attr) for attr in expected_goalpost.keys() } self.assertDictEqual(expected_goalpost, compare_goalpost)
def test_mock_goalpost(self): dat = H.LblReader(TestLabelReader.pathlist, img_dim=(800, 600), label_content="goalpost") imgs = ["img_fr_nov15_000.000.png"] paths = [str(TestLabelReader.mock_dataset_dir / img) for img in imgs] labels = dat.get_labels_for_batch(paths) self.assertEqual(len(labels[0]), 1) goalpost = labels[0][0] self.assertAlmostEqual(goalpost.x1, 688) self.assertAlmostEqual(goalpost.y1, 0) self.assertAlmostEqual(goalpost.x2, 772) self.assertAlmostEqual(goalpost.y2, 203) # calculated in LabelBoundingBox2D - not from label file self.assertAlmostEqual(goalpost.center_x, 730) # calculated in LabelBoundingBox2D - not from label file self.assertAlmostEqual(goalpost.center_y, 101) self.assertAlmostEqual(goalpost.width, 84) self.assertAlmostEqual(goalpost.height, 203)
import os import MLHelper as H from MLHelper.datasets.bitbots import BallDatasetHandler from matplotlib import pyplot as plt from matplotlib import patches for img_dim in [(800, 600), (200, 150)]: dat = H.ImgLblReader(BallDatasetHandler.TRAIN.NAGOYA, batch_size=4, queue_size=4, img_dim=img_dim, label_content="ball", filter_labels=True) iterations = 5 for i in range(iterations): # retrieve data batch = dat.get_next_batch() imgs = batch.get_data() labels = batch.get_labels() plt.title(f"img_dim {img_dim} iteration {i+1}/{iterations}") for p, j in zip(range(1, 5), range(4)): # active subplot p ax = plt.subplot(2, 2, p) plt.imshow(imgs[j], interpolation="None") # labels for label in labels[j]: rect = patches.Rectangle((label.x1, label.y1),
import os import MLHelper as H from MLHelper.datasets.bitbots import BallDatasetHandler from matplotlib import pyplot as plt from matplotlib import patches for img_dim in [(800, 600), (200, 150)]: dat = H.ImgLblReader([os.path.join(os.environ["ROBO_AI_DATA"], "5")], batch_size=4, queue_size=4, img_dim=img_dim, label_content="goalpost", filter_labels=True) iterations = 5 for i in range(iterations): # retrieve data batch = dat.get_next_batch() imgs = batch.get_data() labels = batch.get_labels() plt.title(f"img_dim {img_dim} iteration {i+1}/{iterations}") for p, j in zip(range(1, 5), range(4)): # active subplot p ax = plt.subplot(2, 2, p) plt.imshow(imgs[j], interpolation="None") # labels for label in labels[j]: rect = patches.Rectangle((label.x1, label.y1),
def setUpClass(cls): TestLabelReader.data = H.LblReader(TestLabelReader.pathlist, img_dim=(800, 600), label_content="ball")
def test_montreal_and_size(self): dat = H.ImgReader(BallDatasetHandler.TRAIN.MONTREAL, batch_size=8) self.assertEqual(dat.get_dataset_size(), 16866)
def test_nagoya_and_size(self): dat = H.ImgReader(BallDatasetHandler.TRAIN.NAGOYA, batch_size=8) self.assertEqual(dat.get_dataset_size(), 8243)
def test_leipzig_ball_label(self): dat = H.ImgReader(BallDatasetHandler.TRAIN.LEIPZIG, batch_size=8, label_content="ball", filter_labels=True) self.assertEqual(dat.get_dataset_size(), 14684)
def test_mock_ball_label(self): dat = H.ImgReader(TestImageReader.pathlist, batch_size=5, label_content="ball", filter_labels=True) self.assertEqual(dat.get_dataset_size(), 11)
def setUpClass(cls): TestImageReader.data = H.ImgReader( TestImageReader.pathlist, batch_size=TestImageReader.batch_size, label_content="ball")