Пример #1
0
    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)
Пример #2
0
    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})
Пример #3
0
    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')
Пример #4
0
    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)
Пример #5
0
    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)
Пример #6
0
 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})
Пример #7
0
    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']])
Пример #8
0
    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)
Пример #9
0
    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')
Пример #10
0
    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)