def test_get_number_of_tiles_tuple_no_overlap(self): # no overlap test with various image_stats sizes opts = CHMConfig('/foo', 'model', 'outdir', '100x200', '0x0') gen = CHMArgGenerator(opts) # 100x200 image im_stats = ImageStats('f', 100, 200, 'PNG') w, h = gen._get_number_of_tiles_tuple(im_stats) self.assertEqual(w, 1) self.assertEqual(h, 1) # 101x201 image im_stats = ImageStats('f', 101, 201, 'PNG') w, h = gen._get_number_of_tiles_tuple(im_stats) self.assertEqual(w, 2) self.assertEqual(h, 2) # 199x299 image im_stats = ImageStats('f', 199, 299, 'PNG') w, h = gen._get_number_of_tiles_tuple(im_stats) self.assertEqual(w, 2) self.assertEqual(h, 2) # 505x650 image im_stats = ImageStats('f', 505, 650, 'PNG') w, h = gen._get_number_of_tiles_tuple(im_stats) self.assertEqual(w, 6) self.assertEqual(h, 4) # 32000x24000 image im_stats = ImageStats('f', 32000, 24000, 'PNG') w, h = gen._get_number_of_tiles_tuple(im_stats) self.assertEqual(w, 320) self.assertEqual(h, 120)
def test_add_image_stats_two_images_same_dims(self): iss = ImageStatsSummary() istat = ImageStats('/foo', 100, 200, 'L', size_in_bytes=50) iss.add_image_stats(istat) istat = ImageStats('/foo2', 100, 200, 'L', size_in_bytes=60) iss.add_image_stats(istat) self.assertEqual(iss.get_image_count(), 2) self.assertEqual(iss.get_total_size_of_images_in_bytes(), 110) self.assertEqual(iss.get_total_pixels(), 40000) self.assertEqual(iss.get_image_dimensions_as_dict(), {(100, 200): 2})
def test_get_input_image_summary_with_three_images(self): iss = ImageStatsSummary() istat = ImageStats('/foo', 100, 200, 'L', size_in_bytes=50) iss.add_image_stats(istat) istat = ImageStats('/foo2', 100, 200, 'L', size_in_bytes=60) iss.add_image_stats(istat) istat = ImageStats('/foo2', 300, 400, 'L', size_in_bytes=100) iss.add_image_stats(istat) tsum = TaskSummary(None) res = tsum._get_input_image_summary(iss) self.assertEqual( res, 'Number input images: 3 (210 bytes)\n' 'Dimensions of images: 100 x 200 *Only ' '2 images have this dimension\n\n')
def test_add_job_for_image_to_config(self): temp_dir = tempfile.mkdtemp() try: opts = CHMConfig(os.path.join(temp_dir, 'images'), 'model', temp_dir, '200x100', '20x20') creator = CHMJobCreator(opts) config = creator._create_config() run_dir = creator._create_run_dir() self.assertTrue(os.path.isdir(run_dir)) iis = ImageStats(os.path.join(temp_dir, 'images', 'foo123.png'), 500, 400, 'PNG') i_name = creator._create_output_image_dir(iis, run_dir) self.assertEqual(i_name, 'foo123.png') creator._add_task_for_image_to_config(config, '12', i_name, 2, ['-t 1,1']) self.assertEqual( config.get('12', CHMJobCreator.CONFIG_INPUT_IMAGE), 'foo123.png') self.assertEqual(config.get('12', CHMJobCreator.CONFIG_ARGS), '-t 1,1') self.assertEqual( config.get('12', CHMJobCreator.CONFIG_OUTPUT_IMAGE), os.path.join(CHMJobCreator.TILES_DIR, i_name, '002.' + i_name)) finally: shutil.rmtree(temp_dir)
def test_get_number_of_tiles_tuple_with_overlap(self): try: opts = CHMConfig('/foo', 'model', 'outdir', '100x200', '50x20') CHMArgGenerator(opts) except OverlapTooLargeForTileSizeError as e: self.assertEqual(str(e), 'Overlap width too large for tile') try: opts = CHMConfig('/foo', 'model', 'outdir', '100x200', '40x110') CHMArgGenerator(opts) except OverlapTooLargeForTileSizeError as e: self.assertEqual(str(e), 'Overlap height too large for tile') # overlap test with various image_stats sizes opts = CHMConfig('/foo', 'model', 'outdir', '100x200', '20x20') gen = CHMArgGenerator(opts) # 100x200 image im_stats = ImageStats('f', 100, 200, 'PNG') w, h = gen._get_number_of_tiles_tuple(im_stats) self.assertEqual(w, 2) self.assertEqual(h, 2) # 101x201 image im_stats = ImageStats('f', 101, 201, 'PNG') w, h = gen._get_number_of_tiles_tuple(im_stats) self.assertEqual(w, 2) self.assertEqual(h, 2) # 199x299 image im_stats = ImageStats('f', 199, 299, 'PNG') w, h = gen._get_number_of_tiles_tuple(im_stats) self.assertEqual(w, 4) self.assertEqual(h, 2) # 505x650 image im_stats = ImageStats('f', 505, 650, 'PNG') w, h = gen._get_number_of_tiles_tuple(im_stats) self.assertEqual(w, 9) self.assertEqual(h, 5) # 32000x24000 image im_stats = ImageStats('f', 32000, 24000, 'PNG') w, h = gen._get_number_of_tiles_tuple(im_stats) self.assertEqual(w, 534) self.assertEqual(h, 150)
def test_add_image_stats_one_image(self): iss = ImageStatsSummary() istat = ImageStats('/foo', 100, 200, 'L', size_in_bytes=50) iss.add_image_stats(istat) self.assertEqual(iss.get_image_count(), 1) self.assertEqual(iss.get_total_size_of_images_in_bytes(), 50) self.assertEqual(iss.get_total_pixels(), 20000) self.assertEqual(iss.get_image_dimensions_as_dict(), {(100, 200): 1})
def test_get_args_one_tile(self): opts = CHMConfig('/foo', 'model', 'outdir', '100x200', '0x0') gen = CHMArgGenerator(opts) # 100x200 image im_stats = ImageStats('f', 100, 200, 'PNG') tlist = gen.get_args(im_stats) self.assertEqual(len(tlist), 1) self.assertEqual(tlist, [['-t 1,1']])
def test_create_output_image_dir(self): temp_dir = tempfile.mkdtemp() try: opts = CHMConfig(os.path.join(temp_dir, 'images'), 'model', temp_dir, '200x100', '20x20') creator = CHMJobCreator(opts) run_dir = creator._create_run_dir() self.assertTrue(os.path.isdir(run_dir)) iis = ImageStats(os.path.join(temp_dir, 'images', 'foo123.png'), 500, 400, 'PNG') i_name = creator._create_output_image_dir(iis, run_dir) self.assertTrue( os.path.isdir( os.path.join(run_dir, CHMJobCreator.TILES_DIR, 'foo123.png'))) self.assertEqual(i_name, 'foo123.png') finally: shutil.rmtree(temp_dir)
def test_get_summary(self): tsum = TaskSummary(None) self.assertEqual(tsum.get_summary(), 'CHM tasks: NA\nMerge tasks: NA\n') ts = TaskStats() ts.set_completed_task_count(1) ts.set_total_task_count(2) tsum = TaskSummary(None, chm_task_stats=ts) rts = tsum.get_chm_task_stats() self.assertEqual(rts.get_completed_task_count(), 1) self.assertEqual( tsum.get_summary(), 'CHM tasks: 50% complete (1 of 2 completed)\n' 'Merge tasks: NA\n') ts = TaskStats() ts.set_completed_task_count(1) ts.set_total_task_count(2) tsum = TaskSummary(None, merge_task_stats=ts) rts = tsum.get_merge_task_stats() self.assertEqual(rts.get_total_task_count(), 2) self.assertEqual( tsum.get_summary(), 'CHM tasks: NA\n' 'Merge tasks: 50% complete (1 of 2 completed)\n') mts = TaskStats() mts.set_completed_task_count(3) mts.set_total_task_count(4) tsum = TaskSummary(None, chm_task_stats=ts, merge_task_stats=mts) self.assertEqual( tsum.get_summary(), 'CHM tasks: 50% complete (1 of 2 completed)\n' 'Merge tasks: 75% complete (3 of 4 completed)\n') # test with chmconfig con = CHMConfig('./images', './model', './outdir', '500x500', '20x20') tsum = TaskSummary(con) self.assertEqual( tsum.get_summary(), 'chmutil version: unknown\n' 'Tiles: 500x500 with 20x20 ' 'overlap\nDisable histogram ' 'equalization in CHM: True\n' 'Tasks: 1 tiles per task, 1 ' 'tasks(s) per node\nTrained ' 'CHM model: ./model\nCHM binary: ' './chm-0.1.0.img\n\nCHM tasks: ' 'NA\nMerge tasks: NA\n') iss = ImageStatsSummary() istat = ImageStats('/foo', 100, 200, 'L', size_in_bytes=50) iss.add_image_stats(istat) istat = ImageStats('/foo2', 100, 200, 'L', size_in_bytes=60) iss.add_image_stats(istat) istat = ImageStats('/foo2', 300, 400, 'L', size_in_bytes=100) tsum = TaskSummary(con, chm_task_stats=ts, merge_task_stats=mts, image_stats_summary=iss) self.assertEqual( tsum.get_summary(), 'chmutil version: unknown\n' 'Tiles: 500x500 with 20x20 ' 'overlap\nDisable histogram ' 'equalization in CHM: True\n' 'Tasks: 1 tiles per task, 1 ' 'tasks(s) per node\nTrained ' 'CHM model: ./model\nCHM binary: ' './chm-0.1.0.img\n\nNumber input ' 'images: 2 (110 bytes)\n' 'Dimensions of images: 100 x 200' '\n\nCHM tasks: ' '50% complete (1 of 2 completed)' '\nMerge tasks: 75% complete ' '(3 of 4 completed)\n')
def test_constructor(self): im_stats = ImageStats(None, None, None, None) self.assertEqual(im_stats.get_width(), None) self.assertEqual(im_stats.get_height(), None) self.assertEqual(im_stats.get_file_path(), None) self.assertEqual(im_stats.get_format(), None) self.assertEqual(im_stats.get_size_in_bytes(), 0) im_stats = ImageStats('fee', 'fi', 'foo', 'fum', size_in_bytes=123) self.assertEqual(im_stats.get_width(), 'fi') self.assertEqual(im_stats.get_height(), 'foo') self.assertEqual(im_stats.get_file_path(), 'fee') self.assertEqual(im_stats.get_format(), 'fum') self.assertEqual(im_stats.get_size_in_bytes(), 123)