Skip to content

Commit

Permalink
add auto download dataset feature
Browse files Browse the repository at this point in the history
->added functions in tools.py
   --is_down_dataset()
   --move_dataset()
   --download_dataset()
->modified main.py
->update README.MD
  • Loading branch information
dogukanhazar committed Jul 2, 2020
1 parent e68f730 commit 0cb611c
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 6 deletions.
6 changes: 4 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,20 +20,22 @@ 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ı

Depoyu klonladıktan, gerekli kütüphaneleri yükledikten ve dataseti indirdikten sonra proje ana dizininde şu terminal komutlarını çalıştırarak sınıflandırmayı başlatabiliriz:

```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.
Expand Down
10 changes: 6 additions & 4 deletions main.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand All @@ -42,5 +45,4 @@
if args.gender:
tools.save_img_gender(img_info_dict, i)

tools.cleaning()

tools.cleaning()
41 changes: 41 additions & 0 deletions utils/tools.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@
import cv2
import scipy.io
import argparse
import urllib.request
import tarfile


def argparsefunc():
Expand All @@ -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
Expand All @@ -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
Expand Down

0 comments on commit 0cb611c

Please sign in to comment.