def test_class_label(): bel1 = ClassLabel(num_classes=4) bel2 = ClassLabel(names=["alpha", "beta", "gamma"]) ClassLabel(names_file=names_file) assert bel1.names == ["0", "1", "2", "3"] assert bel2.names == ["alpha", "beta", "gamma"] assert bel1.str2int("1") == 1 assert bel2.str2int("gamma") == 2 assert bel1.int2str( 2) is None # FIXME This is a bug, should raise an error assert bel2.int2str(0) == "alpha" assert bel1.num_classes == 4 assert bel2.num_classes == 3 bel1.get_attr_dict()
def test_class_label(): cl1 = ClassLabel(num_classes=5) cl2 = ClassLabel(names=["apple", "orange", "banana"]) with pytest.raises(ValueError): cl3 = ClassLabel(names=["apple", "orange", "banana", "apple"]) with pytest.raises(ValueError): cl4 = ClassLabel(names=["apple", "orange", "banana", "apple"], num_classes=2) cl5 = ClassLabel() cl6 = ClassLabel(names_file="./hub/schema/tests/class_label_names.txt") assert cl1.names == ["0", "1", "2", "3", "4"] assert cl2.names == ["apple", "orange", "banana"] assert cl6.names == [ "alpha", "beta", "gamma", ] assert cl1.num_classes == 5 assert cl2.num_classes == 3 assert cl1.str2int("3") == 3 assert cl2.str2int("orange") == 1 assert cl1.int2str(4) == "4" assert cl2.int2str(2) == "banana" with pytest.raises(KeyError): cl2.str2int("2") with pytest.raises(ValueError): cl1.str2int("8") with pytest.raises(ValueError): cl1.str2int("abc") with pytest.raises(ValueError): cl1.names = ["ab", "cd", "ef", "gh"] with pytest.raises(ValueError): cl2.names = ["ab", "cd", "ef", "gh"]
def test_dataset_from_directory(): def create_image(path_to_direcotry): from PIL import Image shape = (512, 512, 3) for i in range(10): img = np.ones(shape, dtype="uint8") img = Image.fromarray(img) img.save(os.path.join(path_to_direcotry, str(i) + ".png")) def data_in_dir(path_to_direcotry): if os.path.exists(path_to_direcotry): create_image(path_to_direcotry) else: os.mkdir(os.path.join(path_to_direcotry)) create_image(path_to_direcotry) def root_dir_image(root): if os.path.exists(root): import shutil shutil.rmtree(root) os.mkdir(root) for i in range(10): dir_name = "data_" + str(i) data_in_dir(os.path.join(root, dir_name)) def del_data(*path_to_dir): for i in path_to_dir: import shutil shutil.rmtree(i) root_url = "./data/categorical_label_data" store_url = "./data/categorical_label_data_store" root_dir_image(root_url) ds = Dataset.from_directory(root_url) ds.store(store_url) ds = load(store_url) labels = ClassLabel(names=os.listdir(root_url)) label = os.listdir(root_url) assert ds["image", 0].compute().shape == (512, 512, 3) assert ds["label", 0].compute() == labels.str2int(label[0]) del_data(root_url, store_url)
def test_class_label_2(): cl1 = ClassLabel(names=["apple", "banana", "cat"]) cl2 = ClassLabel((None, ), (10, ), names=["apple", "banana", "cat"]) cl3 = ClassLabel((3, ), names=["apple", "banana", "cat"]) my_schema = {"cl1": cl1, "cl2": cl2, "cl3": cl3} ds = Dataset("./data/cl_2d_3d", schema=my_schema, shape=(10), mode="w") ds["cl1", 0] = cl1.str2int("cat") ds["cl1", 1] = cl1.str2int("apple") ds["cl1", 2] = cl1.str2int("apple") ds["cl1", 3:5] = [cl1.str2int("banana"), cl1.str2int("banana")] assert ds["cl1", 1].compute(True) == "apple" assert ds["cl1", 0:3].compute(True) == ["cat", "apple", "apple"] assert ds["cl1", 3:5].compute(True) == ["banana", "banana"] ds["cl2", 0] = np.array( [cl2.str2int("cat"), cl2.str2int("cat"), cl2.str2int("apple")]) ds["cl2", 1] = np.array([cl2.str2int("apple"), cl2.str2int("banana")]) ds["cl2", 2] = np.array([ cl2.str2int("cat"), cl2.str2int("apple"), cl2.str2int("banana"), cl2.str2int("apple"), cl2.str2int("banana"), ]) ds["cl2", 3] = np.array([cl2.str2int("cat")]) assert ds["cl2", 0].compute(True) == ["cat", "cat", "apple"] assert ds["cl2", 1].compute(True) == ["apple", "banana"] assert ds["cl2", 2].compute(True) == [ "cat", "apple", "banana", "apple", "banana" ] assert ds["cl2", 3].compute(True) == ["cat"] ds["cl3", 0] = np.array( [cl3.str2int("apple"), cl3.str2int("apple"), cl3.str2int("apple")]) ds["cl3", 1] = np.array( [cl3.str2int("banana"), cl3.str2int("banana"), cl3.str2int("banana")]) ds["cl3", 2] = np.array( [cl3.str2int("cat"), cl3.str2int("cat"), cl3.str2int("cat")]) assert ds["cl3", 0].compute(True) == ["apple", "apple", "apple"] assert ds["cl3", 1].compute(True) == ["banana", "banana", "banana"] assert ds["cl3", 2].compute(True) == ["cat", "cat", "cat"] assert ds["cl3", 0:3].compute(True) == [ ["apple", "apple", "apple"], ["banana", "banana", "banana"], ["cat", "cat", "cat"], ]