diff --git a/README.md b/README.md index 3d3147d..36e55fe 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,8 @@ pip install -r requirements.txt ### Dataset -Bu adresten [imdb](https://data.vision.ee.ethz.ch/cvl/rrothe/imdb-wiki/static/imdb_crop.tar)_(7 GB)_ ve bu adresten [wiki](https://data.vision.ee.ethz.ch/cvl/rrothe/imdb-wiki/static/wiki_crop.tar)_(1 GB)_ datasetlerini indirip her birini `input` dizini altında ki ilgili dizinlere atınız. +terminal komutuna `-d` ya da `--download` parametresi eklenerek çalıştırılırsa, dataset otomatik indirilir ve gerekli dizine atılır veya +bu adresten [imdb](https://data.vision.ee.ethz.ch/cvl/rrothe/imdb-wiki/static/imdb_crop.tar)_(7 GB)_ ve bu adresten [wiki](https://data.vision.ee.ethz.ch/cvl/rrothe/imdb-wiki/static/wiki_crop.tar)_(1 GB)_ datasetlerini indirip her birini `input` dizini altında ki ilgili dizinlere atınız. ### Terminal Komutları @@ -28,12 +29,13 @@ Depoyu klonladıktan, gerekli kütüphaneleri yükledikten ve dataseti indirdikt ```bash # imdb datasetini age ve gender' a göre 25' e kadar sınıflandırır. -python3 main.py --imdb --age --gender --number 25 +python3 main.py --imdb --age --gender --download --number 25 ``` - `--imdb --wiki` => hangi parametre verilirse o dataset sınıflandırılır. - `--age` => parametresi verilirse yaşa göre sınıflandırma yapılır. `output` dizini altında `age_female` ve `age_male` dizinlerini yoksa oluşturur. içerisine yaşa göre alt dizinler oluşturarak, datasette ki resim dosyalarını bu dizinlere atar. - `--gender` => parametresi verilirse cinsiyete göre sınıflandırma yapılır. `output` dizini altında `female` ve `male` dizinlerini yoksa oluşturur. içerisine cinsiyete göre datasette ki resim dosyalarını atar. +- `--download` => parametresi verilirse, sınıflandırılmak istenen dataset otomatik indirilir ve `input` dizinine atılır. - `--number` => parametresi bir sayı değeri alır ve baştan bu değer kadar resim dosyasını sınıflandırır. 1. `--age` ve `--gender` parametreleri aynı anda verilebilir. diff --git a/main.py b/main.py index 854d8d0..91d6a1c 100644 --- a/main.py +++ b/main.py @@ -10,22 +10,25 @@ from utils import tools from tqdm import tqdm - args = tools.argparsefunc() break_number = args.number +dataset_url = "https://data.vision.ee.ethz.ch/cvl/rrothe/imdb-wiki/static/wiki_crop.tar" keyword = "wiki" keyword_age = "" keyword_gender = "" if args.wiki: keyword = "wiki" + dataset_url = "https://data.vision.ee.ethz.ch/cvl/rrothe/imdb-wiki/static/wiki_crop.tar" elif args.imdb: keyword = "imdb" + dataset_url = "https://data.vision.ee.ethz.ch/cvl/rrothe/imdb-wiki/static/imdb_crop.tar" if args.age: keyword_age = "age" if args.gender: keyword_gender = "gender" - +if args.download: + tools.download_dataset(url= dataset_url, filename= keyword) print("[info]: {} dataset classification using {} {} started...".format(keyword, keyword_age, keyword_gender)) input_info_dict = tools.get_input_info(keyword) @@ -42,5 +45,4 @@ if args.gender: tools.save_img_gender(img_info_dict, i) -tools.cleaning() - +tools.cleaning() \ No newline at end of file diff --git a/utils/tools.py b/utils/tools.py index 7e2f6c6..ecf0936 100644 --- a/utils/tools.py +++ b/utils/tools.py @@ -11,6 +11,8 @@ import cv2 import scipy.io import argparse +import urllib.request +import tarfile def argparsefunc(): @@ -24,6 +26,7 @@ def check_positive(value): parser.add_argument("-w", "--wiki", help= "add arg if you want classify wiki dataset", action= "store_true", default= False) parser.add_argument("-a", "--age", help= "add arg if you want classify dataset using age", action= "store_true", default= False) parser.add_argument("-g", "--gender", help= "add arg if you want classify dataset using gender", action= "store_true", default= False) + parser.add_argument("-d", "--download", help= "add arg if you want auto download dataset", action= "store_true", default= False) parser.add_argument("-n", "--number", help="enter number to end classification", type=check_positive, default=0) args = parser.parse_args() return args @@ -36,6 +39,44 @@ def get_main_path(): return main_path +def is_down_dataset(): + is_down = False + main_path = get_main_path() + input_path = os.path.join(main_path, "input") + + for root, subfolders, files in os.walk(input_path): + for file in files: + file_extension = os.path.splitext(file)[1] + file_extension = file_extension.lower() + if file_extension == ".jpeg" or file_extension == ".jpg" or file_extension == ".png": + is_down = True + return is_down + + +def move_dataset(filename): + print("\n[info]: moving {} dataset...".format(filename)) + main_path = get_main_path() + input_path = os.path.join(main_path, "input") + filenamext = "{}_crop.tar".format(filename) + file_path = os.path.join(main_path, filenamext) + tar_file = tarfile.open(file_path) + tar_file.extractall(input_path) + tar_file.close() + print("\n[info]: cleaning {} dataset...".format(filename)) + os.remove(file_path) + + +def download_dataset(url, filename): + if not is_down_dataset(): + print("\n[info]: downloading {} dataset...".format(filename)) + filenamext = "{}_crop.tar".format(filename) + urllib.request.urlretrieve(url, filenamext) + urllib.request.urlcleanup() + move_dataset(filename) + else: + print("\n[info]: {} dataset downloaded!".format(filename)) + + def get_input_info(keyword): """ ==> return: input information dictionary