예제 #1
0
    def test_get_filtered(self):
        shutil.copyfile("./untagged_cow.csv", "init_totag.csv")
        json_fn = "init_classes_map.json"
        json_config = None
        with open(json_fn, "r") as read_file:
            json_config = json.load(read_file)
        classmap = json_config["classmap"]
        ideal_balance_list = []
        new_tag_names = []
        init_tag_names = []
        class_map_dict = {}
        for m in classmap:
            ideal_balance_list.append(m['balance'])
            new_tag_names.append(m['map'])
            init_tag_names.append(m['initclass'])
            class_map_dict[m['initclass']] = m['map']
        ideal_balance = ','.join(ideal_balance_list)
        unmapclass_list = json_config["unmapclass"]
        default_class = json_config["default_class"]
        file_location_totag = Path('.')/"init_totag.csv"
        new_tag_names = add_bkg_class_name(new_tag_names)
        ideal_class_balance = parse_class_balance_setting(ideal_balance, len(new_tag_names))

        rows, _, _ = get_top_rows(file_location_totag, 10,  True,  False,
                             init_tag_names,  ideal_class_balance,
                            filter_top,
                            unmapclass_list, init_tag_names, class_map_dict, default_class)

        expected_rows = np.load("init_class_get_rows_min.npy")
        self.assertEqual((rows == expected_rows).all(), True)
        print("")
예제 #2
0
    def test_create_vott_json(self):
        # prepare file
        shutil.copyfile("./totag_source.csv", "./totag.csv")

        N_ROWS = 3
        N_FILES = 3
        FOLDER_NAME = "board_images_png"
        class_balance = "0.7,0.3,0"
        tag_names = add_bkg_class_name(self.tag_names)
        ideal_class_balance = parse_class_balance_setting(
            class_balance, len(tag_names))

        create_vott_json(self.totag_csv_file_loc,
                         N_ROWS,
                         self.user_folders,
                         self.pick_max,
                         "",
                         self.tagging_location,
                         blob_credentials=None,
                         tag_names=tag_names,
                         max_tags_per_pixel=self.max_tags_per_pixel,
                         config_class_balance=ideal_class_balance)

        res_folder = os.path.join(self.tagging_location, FOLDER_NAME)
        res_immages_cnt = sum(
            [len(files) for r, d, files in os.walk(res_folder)])
        self.assertEqual(N_FILES, res_immages_cnt)
예제 #3
0
    def test_create_vott_json_90(self):
        # prepare file
        shutil.copyfile("./untagged_cow.csv", "totag.csv")

        csv_file_loc = Path('.')
        FOLDER = "camera_images"
        N_IMAGES = sum([len(files) for r, d, files in os.walk(FOLDER)])
        user_folders = False
        pick_max = True
        tagging_location = "."
        tagging_location = "test_workdir90"
        classesIDs =  [str(i) for i in (range(1, 91))]
        tag_names = add_bkg_class_name(classesIDs)

        ideal_class_balance = parse_class_balance_setting(None, len(tag_names))
        create_vott_json(csv_file_loc, N_IMAGES, user_folders,
                         pick_max, FOLDER,
                         tagging_location, blob_credentials = None,
                         tag_names= tag_names,
                         max_tags_per_pixel= 2,
                         config_class_balance=ideal_class_balance
                         )



        self.assertEqual(filecmp.cmp(os.path.join(tagging_location, 'Images.json'), 'Images_source_workdir90.json'), True, "generated VOTT json is correct")
예제 #4
0
    def test_get_top_rows_no_folder(self):
        # prepare file
        shutil.copyfile("./totag_no_folder_source.csv",
                        str(self.totag_csv_file_loc))

        N_ROWS = 3
        N_FILES = 3
        EXPECTED = [[[
            'st1840.png', 'knot', '0.12036637', '0.18497443', '0.7618415',
            '0.8283344', '512', '488', '0.986', '0.986'
        ],
                     [
                         'st1840.png', 'knot', '0.7297609', '0.7755673',
                         '0.62443626', '0.6670296', '512', '488', '0.986',
                         '0.986'
                     ],
                     [
                         'st1840.png', 'defect', '0.76513', '0.9952971',
                         '0.6075407', '0.6546806', '512', '488', '0.986',
                         '0.986'
                     ]],
                    [[
                        'st1578.png', 'knot', '0.594302', '0.6663906',
                        '0.35276932', '0.43525606', '512', '488', '0.98448783',
                        '0.98448783'
                    ]],
                    [[
                        'st1026.png', 'knot', '0.2674017', '0.35383838',
                        '0.39859554', '0.50976944', '512', '488', '0.9884343',
                        '0.96366304'
                    ],
                     [
                         'st1026.png', 'knot', '0.69417506', '0.744075',
                         '0.34379873', '0.39051458', '512', '488',
                         '0.97863936', '0.96366304'
                     ],
                     [
                         'st1026.png', 'defect', '0.70078284', '0.9907891',
                         '0.5857268', '0.6470487', '512', '488', '0.96366304',
                         '0.96366304'
                     ]]]

        class_balance = "0.7,0.3,0"
        user_folders = False

        tag_names = add_bkg_class_name(self.tag_names)
        ideal_class_balance = parse_class_balance_setting(
            class_balance, len(tag_names))

        all_rows, _, _ = get_top_rows(self.totag_csv_file_loc, N_ROWS,
                                      user_folders, self.pick_max, tag_names,
                                      ideal_class_balance)
        self.assertEqual(len(all_rows), N_FILES, 'number of rows')
        self.assertEqual(all_rows, EXPECTED, 'raw values')
예제 #5
0
    def test_create_vott_json(self):
        # prepare file
        shutil.copyfile("./untagged_cow.csv", "init_totag.csv")

        csv_file_loc = Path('.')
        FOLDER = "camera_images"
        N_IMAGES =  10
        user_folders = True
        pick_max = False
        tagging_location = "test_workdir"

        json_fn = "init_classes_map.json"
        json_config = None
        with open(json_fn, "r") as read_file:
            json_config = json.load(read_file)
        classmap = json_config["classmap"]
        ideal_balance_list = []
        new_tag_names = []
        init_tag_names = []
        class_map_dict = {}
        for m in classmap:
            ideal_balance_list.append(m['balance'])
            new_tag_names.append(m['map'])
            init_tag_names.append(m['initclass'])
            class_map_dict[m['initclass']] = m['map']

        unmapclass_list = json_config["unmapclass"]
        default_class = json_config["default_class"]
        ideal_balance = ','.join(ideal_balance_list)
        new_tag_names.append(default_class)
        new_tag_names = remove_bkg_class_name(new_tag_names)
        ideal_class_balance = parse_class_balance_setting(ideal_balance, len(init_tag_names))

        create_init_vott_json(csv_file_loc , N_IMAGES, user_folders,
                         pick_max,
                         "", #image loc
                         tagging_location,
                         None, #blob creds
                         init_tag_names,
                         new_tag_names,
                         2, #max pix
                         ideal_class_balance,
                         ["#e9f1fe", "#33BBFF", "#FFFF19"], #colors
                         unmapclass_list, init_tag_names, class_map_dict, default_class )

        self.assertEqual(filecmp.cmp(os.path.join( tagging_location, FOLDER +'.json'),   FOLDER + '_source.json'), True, "generated VOTT json is correct")
예제 #6
0
    def test_get_top_rows_invalid_class_balance2(self):
        # prepare file
        shutil.copyfile("./totag_source.csv", str(self.totag_csv_file_loc))

        N_ROWS = 3
        N_FILES = 3
        EXPECTED = [[[
            'st1840.png', 'knot', '0.12036637', '0.18497443', '0.7618415',
            '0.8283344', '512', '488', 'board_images_png', '0.986', '0.986'
        ],
                     [
                         'st1840.png', 'knot', '0.7297609', '0.7755673',
                         '0.62443626', '0.6670296', '512', '488',
                         'board_images_png', '0.986', '0.986'
                     ],
                     [
                         'st1840.png', 'defect', '0.76513', '0.9952971',
                         '0.6075407', '0.6546806', '512', '488',
                         'board_images_png', '0.986', '0.986'
                     ]],
                    [[
                        'st1578.png', 'knot', '0.594302', '0.6663906',
                        '0.35276932', '0.43525606', '512', '488',
                        'board_images_png', '0.98448783', '0.98448783'
                    ]],
                    [[
                        'st1611.png', 'knot', '0.6326234', '0.7054164',
                        '0.86741334', '0.96444726', '512', '488',
                        'board_images_png', '0.99616516', '0.9843567'
                    ],
                     [
                         'st1611.png', 'knot', '0.07399843', '0.11282173',
                         '0.32572043', '0.36819047', '512', '488',
                         'board_images_png', '0.9843567', '0.9843567'
                     ]]]

        class_balance = '0.1, 0.2, 0.3'
        tag_names = add_bkg_class_name(self.tag_names)
        ideal_class_balance = parse_class_balance_setting(
            class_balance, len(tag_names))
        all_rows, _, _ = get_top_rows(self.totag_csv_file_loc, N_ROWS,
                                      self.user_folders, self.pick_max,
                                      tag_names, ideal_class_balance)
        self.assertEqual(len(all_rows), N_FILES, 'number of rows')
        self.assertEqual(all_rows, EXPECTED, 'raw values')
예제 #7
0
    def test_create_vott_json(self):
        # prepare file
        shutil.copyfile("./totag_source2.csv", "totag.csv")

        csv_file_loc = Path('.')
        N_IMAGES = 4
        user_folders = False
        pick_max = True
        tagging_location = "."
        tag_names = add_bkg_class_name(self.tag_names)
        ideal_class_balance = parse_class_balance_setting(None, len(tag_names))
        create_vott_json(csv_file_loc,
                         N_IMAGES,
                         user_folders,
                         pick_max,
                         "board_images_png",
                         tagging_location,
                         blob_credentials=None,
                         tag_names=tag_names,
                         max_tags_per_pixel=2,
                         config_class_balance=ideal_class_balance,
                         colors=["#e9f1fe", "#f3e9ff"])
        self.assertEqual(filecmp.cmp('Images.json', 'Images_source.json'),
                         True, "generated VOTT json is correct")
예제 #8
0
    def test_get_top_rows_with_bkg(self):
        # prepare file
        shutil.copyfile("./totag_source.csv", str(self.totag_csv_file_loc))

        N_ROWS = 5
        N_FILES = 5
        EXPECTED = [[[
            'st1840.png', 'knot', '0.12036637', '0.18497443', '0.7618415',
            '0.8283344', '512', '488', 'board_images_png', '0.986', '0.986'
        ],
                     [
                         'st1840.png', 'knot', '0.7297609', '0.7755673',
                         '0.62443626', '0.6670296', '512', '488',
                         'board_images_png', '0.986', '0.986'
                     ],
                     [
                         'st1840.png', 'defect', '0.76513', '0.9952971',
                         '0.6075407', '0.6546806', '512', '488',
                         'board_images_png', '0.986', '0.986'
                     ]],
                    [[
                        'st1578.png', 'knot', '0.594302', '0.6663906',
                        '0.35276932', '0.43525606', '512', '488',
                        'board_images_png', '0.98448783', '0.98448783'
                    ]],
                    [[
                        'st1611.png', 'knot', '0.6326234', '0.7054164',
                        '0.86741334', '0.96444726', '512', '488',
                        'board_images_png', '0.99616516', '0.9843567'
                    ],
                     [
                         'st1611.png', 'knot', '0.07399843', '0.11282173',
                         '0.32572043', '0.36819047', '512', '488',
                         'board_images_png', '0.9843567', '0.9843567'
                     ]],
                    [[
                        'st1026.png', 'knot', '0.2674017', '0.35383838',
                        '0.39859554', '0.50976944', '512', '488',
                        'board_images_png', '0.9884343', '0.96366304'
                    ],
                     [
                         'st1026.png', 'knot', '0.69417506', '0.744075',
                         '0.34379873', '0.39051458', '512', '488',
                         'board_images_png', '0.97863936', '0.96366304'
                     ],
                     [
                         'st1026.png', 'defect', '0.70078284', '0.9907891',
                         '0.5857268', '0.6470487', '512', '488',
                         'board_images_png', '0.96366304', '0.96366304'
                     ]],
                    [[
                        'st1524.png', 'NULL', '0', '0', '0', '0', '512', '488',
                        'board_images_png', '0', '0.05'
                    ]]]

        class_balance = "0.6, 0.29, 0.11"
        tag_names = add_bkg_class_name(self.tag_names)
        ideal_class_balance = parse_class_balance_setting(
            class_balance, len(tag_names))

        all_rows, _, _ = get_top_rows(self.totag_csv_file_loc, N_ROWS,
                                      self.user_folders, self.pick_max,
                                      tag_names, ideal_class_balance)
        self.assertEqual(len(all_rows), N_FILES, 'number of rows')
        self.assertEqual(all_rows, EXPECTED, 'raw values')
예제 #9
0
    def test_get_top_rows_class_balance_min(self):
        # prepare file
        shutil.copyfile("./totag_source.csv", str(self.totag_csv_file_loc))

        N_ROWS = 3
        EXPECTED = [[[
            'st1091.png', 'knot', '0.20989896', '0.251748', '0.34986168',
            '0.3921352', '512', '488', 'board_images_png', '0.99201256',
            '0.70161'
        ],
                     [
                         'st1091.png', 'knot', '0.696119', '0.7461088',
                         '0.27078417', '0.33086362', '512', '488',
                         'board_images_png', '0.9827361', '0.70161'
                     ],
                     [
                         'st1091.png', 'knot', '0.89531857', '0.93743694',
                         '0.4605299', '0.5066802', '512', '488',
                         'board_images_png', '0.9794672', '0.70161'
                     ],
                     [
                         'st1091.png', 'defect', '0.7629506', '1.0',
                         '0.6205898', '0.67307687', '512', '488',
                         'board_images_png', '0.74762243', '0.70161'
                     ],
                     [
                         'st1091.png', 'knot', '0.14214082', '0.247842',
                         '0.7355515', '0.8967391', '512', '488',
                         'board_images_png', '0.7072498', '0.70161'
                     ],
                     [
                         'st1091.png', 'defect', '0.0', '0.1281265',
                         '0.55038965', '0.59755194', '512', '488',
                         'board_images_png', '0.70161', '0.70161'
                     ]],
                    [[
                        'st1185.png', 'knot', '0.6978268', '0.7582275',
                        '0.66821593', '0.7535644', '512', '488',
                        'board_images_png', '0.97257924', '0.7035888'
                    ],
                     [
                         'st1185.png', 'defect', '0.35780182', '0.60781866',
                         '0.27580062', '0.32093963', '512', '488',
                         'board_images_png', '0.9720861', '0.7035888'
                     ],
                     [
                         'st1185.png', 'knot', '0.5183983', '0.57071316',
                         '0.84764653', '0.91617334', '512', '488',
                         'board_images_png', '0.9241496', '0.7035888'
                     ],
                     [
                         'st1185.png', 'knot', '0.55567926', '0.5904746',
                         '0.51832056', '0.5461106', '512', '488',
                         'board_images_png', '0.7035888', '0.7035888'
                     ]],
                    [[
                        'st1192.png', 'knot', '0.39846605', '0.45543727',
                        '0.36765742', '0.4488806', '512', '488',
                        'board_images_png', '0.99612194', '0.7127546'
                    ],
                     [
                         'st1192.png', 'defect', '0.07790943', '0.44866413',
                         '0.5975798', '0.640683', '512', '488',
                         'board_images_png', '0.80447847', '0.7127546'
                     ],
                     [
                         'st1192.png', 'defect', '0.47953823', '0.7499259',
                         '0.5517361', '0.59940904', '512', '488',
                         'board_images_png', '0.7127546', '0.7127546'
                     ]]]

        pick_max = False
        class_balance = "0.7,0.3,0"
        tag_names = add_bkg_class_name(self.tag_names)
        ideal_class_balance = parse_class_balance_setting(
            class_balance, len(tag_names))
        all_rows, _, _ = get_top_rows(self.totag_csv_file_loc, N_ROWS,
                                      self.user_folders, pick_max, tag_names,
                                      ideal_class_balance)
        #self.assertEqual(len(all_rows), N_FILES, 'number of rows')
        self.assertEqual(all_rows, EXPECTED, 'raw values')