diff --git a/1 - ImageGatherer.py b/1 - ImageGatherer.py index 3caaeed..2fd9932 100644 --- a/1 - ImageGatherer.py +++ b/1 - ImageGatherer.py @@ -1,28 +1,84 @@ import pandas as pd import multiprocessing +import json +from pprint import pprint from google_images_download import google_images_download -def get_images_for_pokemon(pokemon): +def create_forms_dict(df): + poke_dict = {} + banned_words = ["-small", "-large", "-super", "-cap", "-cosplay", "-pop-star", "-totem"] + for index, row in df.iterrows(): + poke = row["identifier"] + if any(word in poke for word in banned_words): + continue + if row["id"] > 807: + name = poke.split("-")[0] + if name in poke_dict: + poke_dict[name].append(poke) + else: + if "-" in poke: + poke_dict[name] = [poke] + else: + poke_dict[name] = [] + else: + poke_dict[poke] = [] + + with open('pokemon-forms.json', 'w') as fp: + json.dump(poke_dict, fp) + return poke_dict + + +def search_term(poke): + return " ".join(poke.split("-")) + + +def process_pokemon_names(df): + poke_dict = create_forms_dict(df) + pprint(poke_dict) + pokes_to_limits = [] + for pokemon, form_list in poke_dict.items(): + if len(form_list) == 0: + print(pokemon) + pokes_to_limits.append((pokemon, 200)) + + elif len(form_list) == 1: + pokes_to_limits.append((pokemon, 150)) + pokes_to_limits.append((search_term(form_list[0]), 50)) + + elif len(form_list) == 2: + pokes_to_limits.append((pokemon, 100)) + for form in form_list: + pokes_to_limits.append((search_term(form), 50)) + + elif len(form_list) >= 3: + for form in form_list: + pokes_to_limits.append((search_term(form), int(200 / len(form_list)))) + + return pokes_to_limits + + +import os + + +def get_images_for_pokemon(poke_to_limit): + pokemon = poke_to_limit[0] + limit = poke_to_limit[1] response = google_images_download.googleimagesdownload() response.download( { "keywords": pokemon + " pokemon", - "limit": 250, - "chromedriver": "chromedriver", - "thumbnail": True - # Add chromedriver to your path or just point this var directly to your chromedriverv + "limit": 1,#limit, + "chromedriver": "chromedriver" + # Add chromedriver to your path or just point this var directly to your chromedriverv } ) - # freeze_support() +if __name__ == '__main__': df = pd.read_csv("pokemon.csv") - pool = multiprocessing.Pool(multiprocessing.cpu_count()*3) - fixes = [] - pool.map(get_images_for_pokemon, [fixes])#df["identifier"] - - # for pokemon in df["identifier"][:490]: - # get_images_for_pokemon(pokemon) \ No newline at end of file + pool = multiprocessing.Pool(multiprocessing.cpu_count() * 3) + pokes_to_limits = process_pokemon_names(df) + pool.map(get_images_for_pokemon, pokes_to_limits) diff --git a/2 - FixFileTypes.py b/2 - FixFileTypes.py index ec3c0d9..5c7131b 100644 --- a/2 - FixFileTypes.py +++ b/2 - FixFileTypes.py @@ -1,20 +1,21 @@ -import glob -import subprocess import os -import re import logging import traceback -from random import randint import imghdr -import PIL -from PIL import Image import sys import multiprocessing -from threading import Thread, Lock +import json +import shutil +from pathlib import Path +from PIL import Image +from pprint import pprint +from random import randint +from threading import Lock directory = "downloads" + def random_with_N_digits(n): range_start = 10 ** (n - 1) range_end = (10 ** n) - 1 @@ -28,12 +29,10 @@ def change_file_extension(file_obj, extension): elif not os.path.isfile(file_obj + extension): new_file = file_obj + extension else: - # print(f"Found {extension} hiding as JPEG but couldn't rename:", file_obj) return print(f"Found {extension} hiding as JPEG, renaming:", file_obj, '->', new_file) - # subprocess.run(['mv', file_obj, new_file]) os.rename(file_obj, new_file) @@ -54,7 +53,6 @@ def get_frames_from_gif(infile): background = Image.new("RGB", im2.size, (255, 255, 255)) background.paste(im2, mask=im2.split()[3]) background.save(filename, 'JPEG', quality=80) - # print(f"FOUND GIF, SAVING FRAME AS {filename}") iterator += 1 while (iterator % 10 != 0): im.seek(im.tell() + 1) @@ -119,36 +117,70 @@ def rename_images(file_root): mutex.release() if file_obj != new_file and "foo" not in old_name: - # subprocess.run(['mv', file_obj, new_file]) os.rename(file_obj, new_file) except Exception as e: logging.error(traceback.format_exc()) -mutex = Lock() +# recursively merge two folders including subfolders +def mergefolders(root_src_dir, root_dst_dir): + for src_dir, dirs, files in os.walk(root_src_dir): + dst_dir = src_dir.replace(root_src_dir, root_dst_dir, 1) + if not os.path.exists(dst_dir): + os.makedirs(dst_dir) + for file_ in files: + src_file = os.path.join(src_dir, file_) + dst_file = os.path.join(dst_dir, file_) + if os.path.exists(dst_file): + os.remove(dst_file) + shutil.copy(src_file, dst_dir) + + +def merge_pokemon(poke_dict): + file_dir = {} + for root, dirs, files in os.walk(directory): + for dir in dirs: + new = dir.replace(" pokemon", "") + try: + os.rename(os.path.join(root, dir), os.path.join(root, new)) + except Exception as e: + print(e) + os.remove(os.path.join(root, dir)) + file_dir[new] = os.path.join(root, dir) + for pokemon, plist in poke_dict.items(): + poke = pokemon.replace("-", " ") + print(poke) + default_dir = file_dir[poke] if poke in file_dir else "./downloads/" + poke + for item in plist: + i = item.replace("-", " ") + if i in file_dir and file_dir[i] != default_dir: + + print(f"merged {file_dir[i]} with {default_dir}") + mergefolders(file_dir[i], default_dir) + shutil.rmtree(file_dir[i]) + + +mutex = Lock() if __name__ == '__main__': - pool = multiprocessing.Pool(multiprocessing.cpu_count()) + with open("pokemon-forms.json") as f: + poke_dict = json.load(f) + file_root_list = [] - for root, dirs, files in os.walk(directory): for file in files: file_root_list.append((root, file)) - pool.map(clean_image, file_root_list) file_root_list = [] - for root, dirs, files in os.walk(directory): for file in files: file_root_list.append((root, file)) - pool.map(rename_images, file_root_list) - + merge_pokemon(poke_dict) print("Cleaning JPEGs done") - diff --git a/3 - TestTrainSplit.py b/3 - TestTrainSplit.py index 618ba02..a1bd120 100644 --- a/3 - TestTrainSplit.py +++ b/3 - TestTrainSplit.py @@ -6,8 +6,8 @@ import multiprocessing train_dir = "./data/train/" test_dir = "./data/test/" val_dir = "./data/val/" -train = .75 -test = .20 +train = .80 +test = .15 val = .05 @@ -24,7 +24,6 @@ def add_train_data(file, filename, label): print(e) print("INVALID FILE") os.remove(file) - # TODO: Remove the files def add_val_data(file, filename, label): diff --git a/4 - TrainingModelKeras.py b/4 - TrainingModelKeras.py index 558117e..09ea00a 100644 --- a/4 - TrainingModelKeras.py +++ b/4 - TrainingModelKeras.py @@ -22,9 +22,9 @@ from PIL import ImageFile ImageFile.LOAD_TRUNCATED_IMAGES = True input_shape = (224, 224, 3) -batch_size = 60 +batch_size = 96 -model_name = "mobilenet" +model_name = "mobilenet-fixed-data" # Next we set up the Image Data Generators to feed into the training cycles. # We need one for training, validation, and testing @@ -83,7 +83,7 @@ test_gen = test_idg.flow_from_directory( # ) base_model = mobilenet_v2.MobileNetV2( - weights='imagenet', + # weights='imagenet', include_top=False, input_shape=input_shape ) @@ -93,8 +93,8 @@ base_model = mobilenet_v2.MobileNetV2( add_model = Sequential() add_model.add(base_model) add_model.add(GlobalAveragePooling2D()) -add_model.add(Dense(4048, activation='relu')) -add_model.add(Dropout(0.5)) +# add_model.add(Dense(4048, activation='relu')) +# add_model.add(Dropout(0.5)) add_model.add(Dense(2024, activation='relu')) # Adding some dense layers in order to learn complex functions from the base model diff --git a/5 - TestModel.py b/5 - TestModel.py new file mode 100644 index 0000000..f3ea1cd --- /dev/null +++ b/5 - TestModel.py @@ -0,0 +1,76 @@ +import pandas as pd +import matplotlib.pyplot as plt +import seaborn as sn +import numpy as np + +from keras.applications.inception_v3 import preprocess_input +from keras.preprocessing.image import ImageDataGenerator +from keras.models import load_model +from sklearn.metrics import accuracy_score, confusion_matrix, classification_report + + +from PIL import ImageFile + +ImageFile.LOAD_TRUNCATED_IMAGES = True + +model = load_model("./Models/mobilenetv2-stock-all-fixed-v2/mobilenetv2.hdf5") + +input_shape = (224, 224, 3) +batch_size = 96 + +test_idg = ImageDataGenerator( + preprocessing_function=preprocess_input, +) + +test_gen = test_idg.flow_from_directory( + # './data/test', + './SingleImageTestSet', + target_size=(input_shape[0], input_shape[1]), + batch_size=batch_size, + shuffle=False + +) + +predicts = model.predict_generator(test_gen, verbose=True, workers=1, steps=len(test_gen)) + +print(predicts) +print(type(predicts)) +print(predicts.shape) +# Process the predictions +predicts = np.argmax(predicts, + axis=1) +# test_gen.reset() +label_index = {v: k for k, v in test_gen.class_indices.items()} +predicts = [label_index[p] for p in predicts] +reals = [label_index[p] for p in test_gen.classes] + +# Save the results +print(label_index) +print(test_gen.classes) +print(test_gen.classes.shape) +print(type(test_gen.classes)) +df = pd.DataFrame(columns=['fname', 'prediction', 'true_val']) +df['fname'] = [x for x in test_gen.filenames] +df['prediction'] = predicts +df["true_val"] = reals +df.to_csv("sub1_non_transfer.csv", index=False) + +# Processed the saved results + +acc = accuracy_score(reals, predicts) +conf_mat = confusion_matrix(reals, predicts) +print(classification_report(reals, predicts, [l for l in label_index.values()])) +print("Testing accuracy score is ", acc) +print("Confusion Matrix", conf_mat) + +df_cm = pd.DataFrame(conf_mat, index=[i for i in list(set(reals))], + columns=[i for i in list(set(reals))]) +print("made dataframe") +plt.figure(figsize=(10, 7)) +sn.heatmap(df_cm, annot=True) +plt.show() + +with open("labels.txt", "w") as f: + for label in label_index.values(): + f.write(label + "\n") + diff --git a/5 - KerasToTensorflow.py b/6 - KerasToTensorflow.py similarity index 79% rename from 5 - KerasToTensorflow.py rename to 6 - KerasToTensorflow.py index bd64c91..43b230c 100644 --- a/5 - KerasToTensorflow.py +++ b/6 - KerasToTensorflow.py @@ -1,12 +1,12 @@ from tensorflow.contrib.keras.api import keras from tensorflow.contrib import lite -keras_file = "mobilenet.hdf5" +keras_file = "mobilenetv2.hdf5" keras.models.load_model(keras_file) h5_model = keras.models.load_model(keras_file) converter = lite.TocoConverter.from_keras_model_file(keras_file) tflite_model = converter.convert() -with open('mobilenet.tflite', 'wb') as f: +with open('mobilenetv2.tflite', 'wb') as f: f.write(tflite_model) diff --git a/LabelsGenerator.py b/LabelsGenerator.py new file mode 100644 index 0000000..75f6c70 --- /dev/null +++ b/LabelsGenerator.py @@ -0,0 +1,4 @@ +import pandas as pd +import os + +pd.DataFrame(sorted([f.name for f in os.scandir("./data/train") if f.is_dir()])).to_csv("labels.txt", index=False, header=False) diff --git a/Models/mobilenetv2-imagenet-all-v1/mobilenet-v2-imagenet-core.tflite b/Models/mobilenetv2-imagenet-all-v1/mobilenet-v2-imagenet-core.tflite new file mode 100644 index 0000000..f75ac66 Binary files /dev/null and b/Models/mobilenetv2-imagenet-all-v1/mobilenet-v2-imagenet-core.tflite differ diff --git a/Models/mobilenetv2-stock-all-fixed-v2/mobilenetv2.hdf5 b/Models/mobilenetv2-stock-all-fixed-v2/mobilenetv2.hdf5 new file mode 100644 index 0000000..d30698a Binary files /dev/null and b/Models/mobilenetv2-stock-all-fixed-v2/mobilenetv2.hdf5 differ diff --git a/Models/mobilenetv2-stock-all-fixed-v2/mobilenetv2.tflite b/Models/mobilenetv2-stock-all-fixed-v2/mobilenetv2.tflite new file mode 100644 index 0000000..408253a Binary files /dev/null and b/Models/mobilenetv2-stock-all-fixed-v2/mobilenetv2.tflite differ diff --git a/Models/mobilenetv2-stock-all-v1/labels.txt b/Models/mobilenetv2-stock-all-v1/labels.txt new file mode 100644 index 0000000..c7aa984 --- /dev/null +++ b/Models/mobilenetv2-stock-all-v1/labels.txt @@ -0,0 +1,915 @@ +abomasnow +abra +absol +accelgor +aegislash +aerodactyl +aggron +aipom +alakazam +alomomola +altaria +amaura +ambipom +amoonguss +ampharos +anorith +araquanid +arbok +arcanine +arceus +archen +archeops +ariados +armaldo +aromatisse +aron +articuno +audino +aurorus +avalugg +axew +azelf +azumarill +azurill +bagon +baltoy +banette +barbaracle +barboach +basculin +bastiodon +bayleef +beartic +beautifly +beedrill +beheeyem +beldum +bellossom +bellsprout +bergmite +bewear +bibarel +bidoof +binacle +bisharp +blacephalon +blastoise +blaziken +blissey +blitzle +boldore +bonsly +bouffalant +bounsweet +braixen +braviary +breloom +brionne +bronzong +bronzor +bruxish +budew +buizel +bulbasaur +buneary +bunnelby +burmy +butterfree +buzzwole +cacnea +cacturne +camerupt +carbink +carnivine +carracosta +carvanha +cascoon +castform +castform-rainy +castform-snowy +castform-sunny +caterpie +celebi +celesteela +chandelure +chansey +charizard +charjabug +charmander +charmeleon +chatot +cherrim +cherubi +chesnaught +chespin +chikorita +chimchar +chimecho +chinchou +chingling +cinccino +clamperl +clauncher +clawitzer +claydol +clefable +clefairy +cleffa +cloyster +cobalion +cofagrigus +combee +combusken +comfey +conkeldurr +corphish +corsola +cosmoem +cosmog +cottonee +crabominable +crabrawler +cradily +cranidos +crawdaunt +cresselia +croagunk +crobat +croconaw +crustle +cryogonal +cubchoo +cubone +cutiefly +cyndaquil +darkrai +darmanitan-standard +darmanitan-zen +dartrix +darumaka +decidueye +dedenne +deerling +deino +delcatty +delibird +delphox +deoxys-attack +deoxys-defense +deoxys-normal +deoxys-speed +dewgong +dewott +dewpider +dhelmise +dialga +diancie +diggersby +diglett +diglett-alola +ditto +dodrio +doduo +donphan +doublade +dragalge +dragonair +dragonite +drampa +drapion +dratini +drifblim +drifloon +drilbur +drowzee +druddigon +ducklett +dugtrio +dugtrio-alola +dunsparce +duosion +durant +dusclops +dusknoir +duskull +dustox +dwebble +eelektrik +eelektross +eevee +ekans +electabuzz +electivire +electrike +electrode +elekid +elgyem +emboar +emolga +empoleon +entei +escavalier +espeon +espurr +excadrill +exeggcute +exeggutor +exeggutor-alola +exploud +farfetchd +fearow +feebas +fennekin +feraligatr +ferroseed +ferrothorn +finneon +flaaffy +flabebe +flareon +fletchinder +fletchling +floatzel +floette +floette-eternal +florges +flygon +fomantis +foongus +forretress +fraxure +frillish +froakie +frogadier +froslass +furfrou +furret +gabite +gallade +galvantula +garbodor +garchomp +gardevoir +gastly +gastrodon +genesect +gengar +geodude +geodude-alola +gible +gigalith +girafarig +giratina-altered +giratina-origin +glaceon +glalie +glameow +gligar +gliscor +gloom +gogoat +golbat +goldeen +golduck +golem +golem-alola +golett +golisopod +golurk +goodra +goomy +gorebyss +gothita +gothitelle +gothorita +gourgeist-average +gourgeist-large +gourgeist-small +gourgeist-super +granbull +graveler +graveler-alola +greninja +greninja-ash +greninja-battle-bond +grimer +grimer-alola +grotle +groudon +groudon-primal +grovyle +growlithe +grubbin +grumpig +gulpin +gumshoos +gumshoos-totem +gurdurr +guzzlord +gyarados +hakamo-o +happiny +hariyama +haunter +hawlucha +haxorus +heatmor +heatran +heliolisk +helioptile +heracross +herdier +hippopotas +hippowdon +hitmonchan +hitmonlee +hitmontop +ho-oh +honchkrow +honedge +hoopa +hoopa-unbound +hoothoot +hoppip +horsea +houndoom +houndour +huntail +hydreigon +hypno +igglybuff +illumise +incineroar +infernape +inkay +ivysaur +jangmo-o +jellicent +jigglypuff +jirachi +jolteon +joltik +jumpluff +jynx +kabuto +kabutops +kadabra +kakuna +kangaskhan +karrablast +kartana +kecleon +keldeo-ordinary +keldeo-resolute +kingdra +kingler +kirlia +klang +klefki +klink +klinklang +koffing +komala +kommo-o +kommo-o-totem +krabby +kricketot +kricketune +krokorok +krookodile +kyogre +kyogre-primal +kyurem +kyurem-black +kyurem-white +lairon +lampent +landorus-incarnate +landorus-therian +lanturn +lapras +larvesta +larvitar +latias +latios +leafeon +leavanny +ledian +ledyba +lickilicky +lickitung +liepard +lileep +lilligant +lillipup +linoone +litleo +litten +litwick +lombre +lopunny +lotad +loudred +lucario +ludicolo +lugia +lumineon +lunala +lunatone +lurantis +lurantis-totem +luvdisc +luxio +luxray +lycanroc-dusk +lycanroc-midday +lycanroc-midnight +machamp +machoke +machop +magby +magcargo +magearna +magearna-original +magikarp +magmar +magmortar +magnemite +magneton +magnezone +makuhita +malamar +mamoswine +manaphy +mandibuzz +manectric +mankey +mantine +mantyke +maractus +mareanie +mareep +marill +marowak +marowak-alola +marowak-totem +marshadow +marshtomp +masquerain +mawile +medicham +meditite +meganium +meloetta-aria +meloetta-pirouette +meowstic-female +meowstic-male +meowth +meowth-alola +mesprit +metagross +metang +metapod +mew +mewtwo +mewtwo-mega-x +mewtwo-mega-y +mienfoo +mienshao +mightyena +milotic +miltank +mime-jr +mimikyu-busted +mimikyu-disguised +mimikyu-totem-busted +mimikyu-totem-disguised +minccino +minior-blue +minior-blue-meteor +minior-green +minior-green-meteor +minior-indigo +minior-indigo-meteor +minior-orange +minior-orange-meteor +minior-red +minior-red-meteor +minior-violet +minior-violet-meteor +minior-yellow +minior-yellow-meteor +minun +misdreavus +mismagius +moltres +monferno +morelull +mothim +mr-mime +mudbray +mudkip +mudsdale +muk +muk-alola +munchlax +munna +murkrow +musharna +naganadel +natu +necrozma +necrozma-dawn +necrozma-dusk +necrozma-ultra +nidoking +nidoqueen +nidoran-f +nidoran-m +nidorina +nidorino +nihilego +nincada +ninetales +ninetales-alola +ninjask +noctowl +noibat +noivern +nosepass +numel +nuzleaf +octillery +oddish +omanyte +omastar +onix +oranguru +oricorio-baile +oricorio-pau +oricorio-pom-pom +oricorio-sensu +oshawott +pachirisu +palkia +palossand +palpitoad +pancham +pangoro +panpour +pansage +pansear +paras +parasect +passimian +patrat +pawniard +pelipper +persian +persian-alola +petilil +phanpy +phantump +pheromosa +phione +pichu +pidgeot +pidgeotto +pidgey +pidove +pignite +pikachu +pikachu-alola-cap +pikachu-belle +pikachu-cosplay +pikachu-hoenn-cap +pikachu-kalos-cap +pikachu-libre +pikachu-original-cap +pikachu-partner-cap +pikachu-phd +pikachu-pop-star +pikachu-rock-star +pikachu-sinnoh-cap +pikachu-unova-cap +pikipek +piloswine +pineco +pinsir +piplup +plusle +poipole +politoed +poliwag +poliwhirl +poliwrath +ponyta +poochyena +popplio +porygon +porygon-z +porygon2 +primarina +primeape +prinplup +probopass +psyduck +pumpkaboo-average +pumpkaboo-large +pumpkaboo-small +pumpkaboo-super +pupitar +purrloin +purugly +pyroar +pyukumuku +quagsire +quilava +quilladin +qwilfish +raichu +raichu-alola +raikou +ralts +rampardos +rapidash +raticate +raticate-alola +raticate-totem-alola +rattata +rattata-alola +rayquaza +regice +regigigas +regirock +registeel +relicanth +remoraid +reshiram +reuniclus +rhydon +rhyhorn +rhyperior +ribombee +ribombee-totem +riolu +rockruff +rockruff-own-tempo +roggenrola +roselia +roserade +rotom +rotom-fan +rotom-frost +rotom-heat +rotom-mow +rotom-wash +rowlet +rufflet +sableye +salamence +salandit +salazzle +salazzle-totem +samurott +sandile +sandshrew +sandshrew-alola +sandslash +sandslash-alola +sandygast +sawk +sawsbuck +scatterbug +sceptile +scizor +scolipede +scrafty +scraggy +scyther +seadra +seaking +sealeo +seedot +seel +seismitoad +sentret +serperior +servine +seviper +sewaddle +sharpedo +shaymin-land +shaymin-sky +shedinja +shelgon +shellder +shellos +shelmet +shieldon +shiftry +shiinotic +shinx +shroomish +shuckle +shuppet +sigilyph +silcoon +silvally +simipour +simisage +simisear +skarmory +skiddo +skiploom +skitty +skorupi +skrelp +skuntank +slaking +slakoth +sliggoo +slowbro +slowking +slowpoke +slugma +slurpuff +smeargle +smoochum +sneasel +snivy +snorlax +snorunt +snover +snubbull +solgaleo +solosis +solrock +spearow +spewpa +spheal +spinarak +spinda +spiritomb +spoink +spritzee +squirtle +stakataka +stantler +staraptor +staravia +starly +starmie +staryu +steelix +steenee +stoutland +stufful +stunfisk +stunky +sudowoodo +suicune +sunflora +sunkern +surskit +swablu +swadloon +swalot +swampert +swanna +swellow +swinub +swirlix +swoobat +sylveon +taillow +talonflame +tangela +tangrowth +tapu-bulu +tapu-fini +tapu-koko +tapu-lele +tauros +teddiursa +tentacool +tentacruel +tepig +terrakion +throh +thundurus-incarnate +thundurus-therian +timburr +tirtouga +togedemaru +togedemaru-totem +togekiss +togepi +togetic +torchic +torkoal +tornadus-incarnate +tornadus-therian +torracat +torterra +totodile +toucannon +toxapex +toxicroak +tranquill +trapinch +treecko +trevenant +tropius +trubbish +trumbeak +tsareena +turtonator +turtwig +tympole +tynamo +type-null +typhlosion +tyranitar +tyrantrum +tyrogue +tyrunt +umbreon +unfezant +unown +ursaring +uxie +vanillish +vanillite +vanilluxe +vaporeon +venipede +venomoth +venonat +venusaur +vespiquen +vibrava +victini +victreebel +vigoroth +vikavolt +vikavolt-totem +vileplume +virizion +vivillon +volbeat +volcanion +volcarona +voltorb +vullaby +vulpix +vulpix-alola +wailmer +wailord +walrein +wartortle +watchog +weavile +weedle +weepinbell +weezing +whimsicott +whirlipede +whiscash +whismur +wigglytuff +wimpod +wingull +wishiwashi-school +wishiwashi-solo +wobbuffet +woobat +wooper +wormadam-plant +wormadam-sandy +wormadam-trash +wurmple +wynaut +xatu +xerneas +xurkitree +yamask +yanma +yanmega +yungoos +yveltal +zangoose +zapdos +zebstrika +zekrom +zeraora +zigzagoon +zoroark +zorua +zubat +zweilous +zygarde +zygarde-10 +zygarde-50 +zygarde-complete diff --git a/Models/mobilenetv2-stock-all-v1/mobilenetv2.hdf5 b/Models/mobilenetv2-stock-all-v1/mobilenetv2.hdf5 new file mode 100644 index 0000000..a1ba3a6 Binary files /dev/null and b/Models/mobilenetv2-stock-all-v1/mobilenetv2.hdf5 differ diff --git a/ShowIncorrectImages.py b/ShowIncorrectImages.py new file mode 100644 index 0000000..79b75a1 --- /dev/null +++ b/ShowIncorrectImages.py @@ -0,0 +1,37 @@ +import pandas as pd +import numpy as np +import matplotlib.pyplot as plt +import matplotlib.image as mpimg +from pprint import pprint + +df = pd.read_csv("sub1_non_transfer.csv") +df2 = pd.read_csv("poke_evos.csv") + +evos = [] + +for index, row in df2.iterrows(): + print(row) + s = "" + s+=row["stage1"] if not pd.isnull(row["stage1"]) else "" + s+=row["stage2"] if not pd.isnull(row["stage2"]) else "" + s+=row["stage3"] if not pd.isnull(row["stage3"]) else "" + evos.append(s.lower().replace(" ", "-").rstrip()) + + +incorrect = df[df["prediction"]!= df["true_val"]] + +total_same_fam = 0 +# TODO: Add in support for figuring out if the pokemon are related/evolutions of one another +for index, row in incorrect.iterrows(): + img = mpimg.imread("./SingleImageTestSet/" + row['fname']) + imgplot = plt.imshow(img) + title = f"Predicted - {row['prediction']}, Actual - {row['true_val']}" + for evo in evos: + if row['prediction'] in evo and row['true_val'] in evo: + title+=f"\n same family name detected - {evo}" + total_same_fam+=1 + plt.title(title) + plt.show() + + +print(f"The total number of incorrect entries from same families is {total_same_fam} - {total_same_fam/len(incorrect)}") \ No newline at end of file diff --git a/mobilenetv2.hdf5 b/mobilenetv2.hdf5 new file mode 100644 index 0000000..a1ba3a6 Binary files /dev/null and b/mobilenetv2.hdf5 differ diff --git a/poke_evos.csv b/poke_evos.csv new file mode 100644 index 0000000..45a445d --- /dev/null +++ b/poke_evos.csv @@ -0,0 +1,442 @@ +stage1,stage2,stage3 +Bulbasaur,Ivysaur,Venusaur +Charmander,Charmeleon,Charizard +Squirtle,Wartortle,Blastoise +Caterpie,Metapod,Butterfree +Weedle,Kakuna,Beedrill +Pidgey,Pidgeotto,Pidgeot +Rattata,Raticate, +Spearow,Fearow, +Ekans,Arbok, +Pichu,Pikachu,Raichu +Sandshrew,Sandslash, +Nidoran♀,Nidorina,Nidoqueen +Nidoran♂,Nidorino,Nidoking +Cleffa,Clefairy,Clefable +Vulpix,Ninetales, +Igglybuff,Jigglypuff,Wigglytuff +Zubat,Golbat,Crobat +Oddish,Gloom,"Vileplume +Bellossom" +Paras,Parasect, +Venonat,Venomoth, +Diglett,Dugtrio, +Meowth,Persian, +Psyduck,Golduck, +Mankey,Primeape, +Growlithe,Arcanine, +Poliwag,Poliwhirl,"Poliwrath +Politoed" +Abra,Kadabra,Alakazam +Machop,Machoke,Machamp +Bellsprout,Weepinbell,Victreebel +Tentacool,Tentacruel, +Geodude,Graveler,Golem +Ponyta,Rapidash, +Slowpoke,"Slowbro +Slowking", +Magnemite,Magneton,Magnezone +Farfetch'd,, +Doduo,Dodrio, +Seel,Dewgong, +Grimer,Muk, +Shellder,Cloyster, +Gastly,Haunter,Gengar +Onix,Steelix, +Drowzee,Hypno, +Krabby,Kingler, +Voltorb,Electrode, +Exeggcute,Exeggutor, +Cubone,Marowak, +Tyrogue,"Hitmonlee +Hitmonchan +Hitmontop", +Lickitung,Lickilicky, +Koffing,Weezing, +Rhyhorn,Rhydon,Rhyperior +Happiny,Chansey,Blissey +Tangela,Tangrowth, +Kangaskhan,, +Horsea,Seadra,Kingdra +Goldeen,Seaking, +Staryu,Starmie, +Mime Jr.,Mr. Mime, +Scyther,Scizor, +Smoochum,Jynx, +Elekid,Electabuzz,Electivire +Magby,Magmar,Magmortar +Pinsir,, +Tauros,, +Magikarp,Gyarados, +Lapras,, +Ditto,, +Eevee,"Vaporeon +Jolteon +Flareon +Espeon +Umbreon +Leafeon +Glaceon +Sylveon", +Porygon,Porygon2,Porygon-Z +Omanyte,Omastar, +Kabuto,Kabutops, +Aerodactyl,, +Munchlax,Snorlax, +Articuno,, +Zapdos,, +Moltres,, +Dratini,Dragonair,Dragonite +Mewtwo,, +Mew,, +Chikorita,Bayleef,Meganium +Cyndaquil,Quilava,Typhlosion +Totodile,Croconaw,Feraligatr +Sentret,Furret, +Hoothoot,Noctowl, +Ledyba,Ledian, +Spinarak,Ariados, +Chinchou,Lanturn, +Togepi,Togetic,Togekiss +Natu,Xatu, +Mareep,Flaaffy,Ampharos +Azurill,Marill,Azumarill +Bonsly,Sudowoodo, +Hoppip,Skiploom,Jumpluff +Aipom,Ambipom, +Sunkern,Sunflora, +Yanma,Yanmega, +Wooper,Quagsire, +Murkrow,Honchkrow, +Misdreavus,Mismagius, +Unown,, +Wynaut,Wobbuffet, +Girafarig,, +Pineco,Forretress, +Dunsparce,, +Gligar,Gliscor, +Snubbull,Granbull, +Qwilfish,, +Shuckle,, +Heracross,, +Sneasel,Weavile, +Teddiursa,Ursaring, +Slugma,Magcargo, +Swinub,Piloswine,Mamoswine +Corsola,, +Remoraid,Octillery, +Delibird,, +Mantyke,Mantine, +Skarmory,, +Houndour,Houndoom, +Phanpy,Donphan, +Stantler,, +Smeargle,, +Miltank,, +Raikou,, +Entei,, +Suicune,, +Larvitar,Pupitar,Tyranitar +Lugia,, +Ho-Oh,, +Celebi,, +Treecko,Grovyle,Sceptile +Torchic,Combusken,Blaziken +Mudkip,Marshtomp,Swampert +Poochyena,Mightyena, +Zigzagoon,Linoone, +Wurmple,"Silcoon +Cascoon","Beautifly +Dustox" +Lotad,Lombre,Ludicolo +Seedot,Nuzleaf,Shiftry +Taillow,Swellow, +Wingull,Pelipper, +Ralts,Kirlia,"Gardevoir +Gallade" +Surskit,Masquerain, +Shroomish,Breloom, +Slakoth,Vigoroth,Slaking +Nincada,"Ninjask +Shedinja", +Whismur,Loudred,Exploud +Makuhita,Hariyama, +Nosepass,Probopass, +Skitty,Delcatty, +Sableye,, +Mawile,, +Aron,Lairon,Aggron +Meditite,Medicham, +Electrike,Manectric, +Plusle,, +Minun,, +Volbeat,, +Illumise,, +Budew,Roselia,Roserade +Gulpin,Swalot, +Carvanha,Sharpedo, +Wailmer,Wailord, +Numel,Camerupt, +Torkoal,, +Spoink,Grumpig, +Spinda,, +Trapinch,Vibrava,Flygon +Cacnea,Cacturne, +Swablu,Altaria, +Zangoose,, +Seviper,, +Lunatone,, +Solrock,, +Barboach,Whiscash, +Corphish,Crawdaunt, +Baltoy,Claydol, +Lileep,Cradily, +Anorith,Armaldo, +Feebas,Milotic, +Castform,, +Kecleon,, +Shuppet,Banette, +Duskull,Dusclops,Dusknoir +Tropius,, +Chingling,Chimecho, +Absol,, +Snorunt,"Glalie +Froslass", +Spheal,Sealeo,Walrein +Clamperl,"Huntail +Gorebyss", +Relicanth,, +Luvdisc,, +Bagon,Shelgon,Salamence +Beldum,Metang,Metagross +Regirock,, +Regice,, +Registeel,, +Latias,, +Latios,, +Kyogre,, +Groudon,, +Rayquaza,, +Jirachi,, +Deoxys,, +Turtwig,Grotle,Torterra +Chimchar,Monferno,Infernape +Piplup,Prinplup,Empoleon +Starly,Staravia,Staraptor +Bidoof,Bibarel, +Kricketot,Kricketune, +Shinx,Luxio,Luxray +Cranidos,Rampardos, +Shieldon,Bastiodon, +Burmy,"Wormadam +Mothim", +Combee,Vespiquen, +Pachirisu,, +Buizel,Floatzel, +Cherubi,Cherrim, +Shellos,Gastrodon, +Drifloon,Drifblim, +Buneary,Lopunny, +Glameow,Purugly, +Stunky,Skuntank, +Bronzor,Bronzong, +Chatot,, +Spiritomb,, +Gible,Gabite,Garchomp +Riolu,Lucario, +Hippopotas,Hippowdon, +Skorupi,Drapion, +Croagunk,Toxicroak, +Carnivine,, +Finneon,Lumineon, +Snover,Abomasnow, +Rotom,, +Uxie,, +Mesprit,, +Azelf,, +Dialga,, +Palkia,, +Heatran,, +Regigigas,, +Giratina,, +Cresselia,, +Phione,, +Manaphy,, +Darkrai,, +Shaymin,, +Arceus,, +Victini,, +Snivy,Servine,Serperior +Tepig,Pignite,Emboar +Oshawott,Dewott,Samurott +Patrat,Watchog, +Lillipup,Herdier,Stoutland +Purrloin,Liepard, +Pansage,Simisage, +Pansear,Simisear, +Panpour,Simipour, +Munna,Musharna, +Pidove,Tranquill,Unfezant +Blitzle,Zebstrika, +Roggenrola,Boldore,Gigalith +Woobat,Swoobat, +Drilbur,Excadrill, +Audino,, +Timburr,Gurdurr,Conkeldurr +Tympole,Palpitoad,Seismitoad +Throh,, +Sawk,, +Sewaddle,Swadloon,Leavanny +Venipede,Whirlipede,Scolipede +Cottonee,Whimsicott, +Petilil,Lilligant, +Basculin,, +Sandile,Krokorok,Krookodile +Darumaka,Darmanitan, +Maractus,, +Dwebble,Crustle, +Scraggy,Scrafty, +Sigilyph,, +Yamask,Cofagrigus, +Tirtouga,Carracosta, +Archen,Archeops, +Trubbish,Garbodor, +Zorua,Zoroark, +Minccino,Cinccino, +Gothita,Gothorita,Gothitelle +Solosis,Duosion,Reuniclus +Ducklett,Swanna, +Vanillite,Vanillish,Vanilluxe +Deerling,Sawsbuck, +Emolga,, +Karrablast,Escavalier, +Foongus,Amoonguss, +Frillish,Jellicent, +Alomomola,, +Joltik,Galvantula, +Ferroseed,Ferrothorn, +Klink,Klang,Klinklang +Tynamo,Eelektrik,Eelektross +Elgyem,Beheeyem, +Litwick,Lampent,Chandelure +Axew,Fraxure,Haxorus +Cubchoo,Beartic, +Cryogonal,, +Shelmet,Accelgor, +Stunfisk,, +Mienfoo,Mienshao, +Druddigon,, +Golett,Golurk, +Pawniard,Bisharp, +Bouffalant,, +Rufflet,Braviary, +Vullaby,Mandibuzz, +Heatmor,, +Durant,, +Deino,Zweilous,Hydreigon +Larvesta,Volcarona, +Cobalion,, +Terrakion,, +Virizion,, +Tornadus,, +Thundurus,, +Reshiram,, +Zekrom,, +Landorus,, +Kyurem,, +Keldeo,, +Meloetta,, +Genesect,, +Chespin,Quilladin,Chesnaught +Fennekin,Braixen,Delphox +Froakie,Frogadier,Greninja +Bunnelby,Diggersby, +Fletchling,Fletchinder,Talonflame +Scatterbug,Spewpa,Vivillon +Litleo,Pyroar, +Flabébé,Floette,Florges +Skiddo,Gogoat, +Pancham,Pangoro, +Furfrou,, +Espurr,Meowstic, +Honedge,Doublade,Aegislash +Spritzee,Aromatisse, +Swirlix,Slurpuff, +Inkay,Malamar, +Binacle,Barbaracle, +Skrelp,Dragalge, +Clauncher,Clawitzer, +Helioptile,Heliolisk, +Tyrunt,Tyrantrum, +Amaura,Aurorus, +Hawlucha,, +Dedenne,, +Carbink,, +Goomy,Sliggoo,Goodra +Klefki,, +Phantump,Trevenant, +Pumpkaboo,Gourgeist, +Bergmite,Avalugg, +Noibat,Noivern, +Xerneas,, +Yveltal,, +Zygarde,, +Diancie,, +Hoopa,, +Volcanion,, +Rowlet,Dartrix,Decidueye +Litten,Torracat,Incineroar +Popplio,Brionne,Primarina +Pikipek,Trumbeak,Toucannon +Yungoos,Gumshoos, +Grubbin,Charjabug,Vikavolt +Crabrawler,Crabominable, +Oricorio,, +Cutiefly,Ribombee, +Rockruff,Lycanroc, +Wishiwashi,, +Mareanie,Toxapex, +Mudbray,Mudsdale, +Dewpider,Araquanid, +Fomantis,Lurantis, +Morelull,Shiinotic, +Salandit,Salazzle, +Stufful,Bewear, +Bounsweet,Steenee,Tsareena +Comfey,, +Oranguru,, +Passimian,, +Wimpod,Golisopod, +Sandygast,Palossand, +Pyukumuku,, +Type-Null,Silvally, +Minior,, +Komala,, +Turtonator,, +Togedemaru,, +Mimikyu,, +Bruxish,, +Drampa,, +Dhelmise,, +Jangmo-o,Hakamo-o,Kommo-o +Tapu Koko,, +Tapu Lele,, +Tapu Bulu,, +Tapu Fini,, +Cosmog,Cosmoem,"Solgaleo +Lunala" +Nihilego,, +Buzzwole,, +Pheromosa,, +Xurkitree,, +Celesteela,, +Kartana,, +Guzzlord,, +Necrozma,, +Magearna,, +Marshadow,, +Poipole,Naganadel, +Stakataka,, +Blacephalon,, +Zeraora,, +Meltan,Melmetal, \ No newline at end of file diff --git a/pokemon-forms.json b/pokemon-forms.json new file mode 100644 index 0000000..e817930 --- /dev/null +++ b/pokemon-forms.json @@ -0,0 +1 @@ +{"bulbasaur": [], "ivysaur": [], "venusaur": ["venusaur-mega"], "charmander": [], "charmeleon": [], "charizard": ["charizard-mega-x", "charizard-mega-y"], "squirtle": [], "wartortle": [], "blastoise": ["blastoise-mega"], "caterpie": [], "metapod": [], "butterfree": [], "weedle": [], "kakuna": [], "beedrill": ["beedrill-mega"], "pidgey": [], "pidgeotto": [], "pidgeot": ["pidgeot-mega"], "rattata": ["rattata-alola"], "raticate": ["raticate-alola"], "spearow": [], "fearow": [], "ekans": [], "arbok": [], "pikachu": ["pikachu-libre"], "raichu": ["raichu-alola"], "sandshrew": ["sandshrew-alola"], "sandslash": ["sandslash-alola"], "nidoran-f": [], "nidorina": [], "nidoqueen": [], "nidoran-m": [], "nidorino": [], "nidoking": [], "clefairy": [], "clefable": [], "vulpix": ["vulpix-alola"], "ninetales": ["ninetales-alola"], "jigglypuff": [], "wigglytuff": [], "zubat": [], "golbat": [], "oddish": [], "gloom": [], "vileplume": [], "paras": [], "parasect": [], "venonat": [], "venomoth": [], "diglett": ["diglett-alola"], "dugtrio": ["dugtrio-alola"], "meowth": ["meowth-alola"], "persian": ["persian-alola"], "psyduck": [], "golduck": [], "mankey": [], "primeape": [], "growlithe": [], "arcanine": [], "poliwag": [], "poliwhirl": [], "poliwrath": [], "abra": [], "kadabra": [], "alakazam": ["alakazam-mega"], "machop": [], "machoke": [], "machamp": [], "bellsprout": [], "weepinbell": [], "victreebel": [], "tentacool": [], "tentacruel": [], "geodude": ["geodude-alola"], "graveler": ["graveler-alola"], "golem": ["golem-alola"], "ponyta": [], "rapidash": [], "slowpoke": [], "slowbro": ["slowbro-mega"], "magnemite": [], "magneton": [], "farfetchd": [], "doduo": [], "dodrio": [], "seel": [], "dewgong": [], "grimer": ["grimer-alola"], "muk": ["muk-alola"], "shellder": [], "cloyster": [], "gastly": [], "haunter": [], "gengar": ["gengar-mega"], "onix": [], "drowzee": [], "hypno": [], "krabby": [], "kingler": [], "voltorb": [], "electrode": [], "exeggcute": [], "exeggutor": ["exeggutor-alola"], "cubone": [], "marowak": ["marowak-alola"], "hitmonlee": [], "hitmonchan": [], "lickitung": [], "koffing": [], "weezing": [], "rhyhorn": [], "rhydon": [], "chansey": [], "tangela": [], "kangaskhan": ["kangaskhan-mega"], "horsea": [], "seadra": [], "goldeen": [], "seaking": [], "staryu": [], "starmie": [], "mr-mime": [], "scyther": [], "jynx": [], "electabuzz": [], "magmar": [], "pinsir": ["pinsir-mega"], "tauros": [], "magikarp": [], "gyarados": ["gyarados-mega"], "lapras": [], "ditto": [], "eevee": [], "vaporeon": [], "jolteon": [], "flareon": [], "porygon": [], "omanyte": [], "omastar": [], "kabuto": [], "kabutops": [], "aerodactyl": ["aerodactyl-mega"], "snorlax": [], "articuno": [], "zapdos": [], "moltres": [], "dratini": [], "dragonair": [], "dragonite": [], "mewtwo": ["mewtwo-mega-x", "mewtwo-mega-y"], "mew": [], "chikorita": [], "bayleef": [], "meganium": [], "cyndaquil": [], "quilava": [], "typhlosion": [], "totodile": [], "croconaw": [], "feraligatr": [], "sentret": [], "furret": [], "hoothoot": [], "noctowl": [], "ledyba": [], "ledian": [], "spinarak": [], "ariados": [], "crobat": [], "chinchou": [], "lanturn": [], "pichu": [], "cleffa": [], "igglybuff": [], "togepi": [], "togetic": [], "natu": [], "xatu": [], "mareep": [], "flaaffy": [], "ampharos": ["ampharos-mega"], "bellossom": [], "marill": [], "azumarill": [], "sudowoodo": [], "politoed": [], "hoppip": [], "skiploom": [], "jumpluff": [], "aipom": [], "sunkern": [], "sunflora": [], "yanma": [], "wooper": [], "quagsire": [], "espeon": [], "umbreon": [], "murkrow": [], "slowking": [], "misdreavus": [], "unown": [], "wobbuffet": [], "girafarig": [], "pineco": [], "forretress": [], "dunsparce": [], "gligar": [], "steelix": ["steelix-mega"], "snubbull": [], "granbull": [], "qwilfish": [], "scizor": ["scizor-mega"], "shuckle": [], "heracross": ["heracross-mega"], "sneasel": [], "teddiursa": [], "ursaring": [], "slugma": [], "magcargo": [], "swinub": [], "piloswine": [], "corsola": [], "remoraid": [], "octillery": [], "delibird": [], "mantine": [], "skarmory": [], "houndour": [], "houndoom": ["houndoom-mega"], "kingdra": [], "phanpy": [], "donphan": [], "porygon2": [], "stantler": [], "smeargle": [], "tyrogue": [], "hitmontop": [], "smoochum": [], "elekid": [], "magby": [], "miltank": [], "blissey": [], "raikou": [], "entei": [], "suicune": [], "larvitar": [], "pupitar": [], "tyranitar": ["tyranitar-mega"], "lugia": [], "ho-oh": [], "celebi": [], "treecko": [], "grovyle": [], "sceptile": ["sceptile-mega"], "torchic": [], "combusken": [], "blaziken": ["blaziken-mega"], "mudkip": [], "marshtomp": [], "swampert": ["swampert-mega"], "poochyena": [], "mightyena": [], "zigzagoon": [], "linoone": [], "wurmple": [], "silcoon": [], "beautifly": [], "cascoon": [], "dustox": [], "lotad": [], "lombre": [], "ludicolo": [], "seedot": [], "nuzleaf": [], "shiftry": [], "taillow": [], "swellow": [], "wingull": [], "pelipper": [], "ralts": [], "kirlia": [], "gardevoir": ["gardevoir-mega"], "surskit": [], "masquerain": [], "shroomish": [], "breloom": [], "slakoth": [], "vigoroth": [], "slaking": [], "nincada": [], "ninjask": [], "shedinja": [], "whismur": [], "loudred": [], "exploud": [], "makuhita": [], "hariyama": [], "azurill": [], "nosepass": [], "skitty": [], "delcatty": [], "sableye": ["sableye-mega"], "mawile": ["mawile-mega"], "aron": [], "lairon": [], "aggron": ["aggron-mega"], "meditite": [], "medicham": ["medicham-mega"], "electrike": [], "manectric": ["manectric-mega"], "plusle": [], "minun": [], "volbeat": [], "illumise": [], "roselia": [], "gulpin": [], "swalot": [], "carvanha": [], "sharpedo": ["sharpedo-mega"], "wailmer": [], "wailord": [], "numel": [], "camerupt": ["camerupt-mega"], "torkoal": [], "spoink": [], "grumpig": [], "spinda": [], "trapinch": [], "vibrava": [], "flygon": [], "cacnea": [], "cacturne": [], "swablu": [], "altaria": ["altaria-mega"], "zangoose": [], "seviper": [], "lunatone": [], "solrock": [], "barboach": [], "whiscash": [], "corphish": [], "crawdaunt": [], "baltoy": [], "claydol": [], "lileep": [], "cradily": [], "anorith": [], "armaldo": [], "feebas": [], "milotic": [], "castform": ["castform-sunny", "castform-rainy", "castform-snowy"], "kecleon": [], "shuppet": [], "banette": ["banette-mega"], "duskull": [], "dusclops": [], "tropius": [], "chimecho": [], "absol": ["absol-mega"], "wynaut": [], "snorunt": [], "glalie": ["glalie-mega"], "spheal": [], "sealeo": [], "walrein": [], "clamperl": [], "huntail": [], "gorebyss": [], "relicanth": [], "luvdisc": [], "bagon": [], "shelgon": [], "salamence": ["salamence-mega"], "beldum": [], "metang": [], "metagross": ["metagross-mega"], "regirock": [], "regice": [], "registeel": [], "latias": ["latias-mega"], "latios": ["latios-mega"], "kyogre": ["kyogre-primal"], "groudon": ["groudon-primal"], "rayquaza": ["rayquaza-mega"], "jirachi": [], "deoxys": ["deoxys-attack", "deoxys-defense", "deoxys-speed", "deoxys-normal"], "turtwig": [], "grotle": [], "torterra": [], "chimchar": [], "monferno": [], "infernape": [], "piplup": [], "prinplup": [], "empoleon": [], "starly": [], "staravia": [], "staraptor": [], "bidoof": [], "bibarel": [], "kricketot": [], "kricketune": [], "shinx": [], "luxio": [], "luxray": [], "budew": [], "roserade": [], "cranidos": [], "rampardos": [], "shieldon": [], "bastiodon": [], "burmy": [], "wormadam": ["wormadam-sandy", "wormadam-trash", "wormadam-plant"], "mothim": [], "combee": [], "vespiquen": [], "pachirisu": [], "buizel": [], "floatzel": [], "cherubi": [], "cherrim": [], "shellos": [], "gastrodon": [], "ambipom": [], "drifloon": [], "drifblim": [], "buneary": [], "lopunny": ["lopunny-mega"], "mismagius": [], "honchkrow": [], "glameow": [], "purugly": [], "chingling": [], "stunky": [], "skuntank": [], "bronzor": [], "bronzong": [], "bonsly": [], "mime-jr": [], "happiny": [], "chatot": [], "spiritomb": [], "gible": [], "gabite": [], "garchomp": ["garchomp-mega"], "munchlax": [], "riolu": [], "lucario": ["lucario-mega"], "hippopotas": [], "hippowdon": [], "skorupi": [], "drapion": [], "croagunk": [], "toxicroak": [], "carnivine": [], "finneon": [], "lumineon": [], "mantyke": [], "snover": [], "abomasnow": ["abomasnow-mega"], "weavile": [], "magnezone": [], "lickilicky": [], "rhyperior": [], "tangrowth": [], "electivire": [], "magmortar": [], "togekiss": [], "yanmega": [], "leafeon": [], "glaceon": [], "gliscor": [], "mamoswine": [], "porygon-z": [], "gallade": ["gallade-mega"], "probopass": [], "dusknoir": [], "froslass": [], "rotom": ["rotom-heat", "rotom-wash", "rotom-frost", "rotom-fan", "rotom-mow"], "uxie": [], "mesprit": [], "azelf": [], "dialga": [], "palkia": [], "heatran": [], "regigigas": [], "giratina": ["giratina-origin", "giratina-altered"], "cresselia": [], "phione": [], "manaphy": [], "darkrai": [], "shaymin": ["shaymin-sky", "shaymin-land"], "arceus": [], "victini": [], "snivy": [], "servine": [], "serperior": [], "tepig": [], "pignite": [], "emboar": [], "oshawott": [], "dewott": [], "samurott": [], "patrat": [], "watchog": [], "lillipup": [], "herdier": [], "stoutland": [], "purrloin": [], "liepard": [], "pansage": [], "simisage": [], "pansear": [], "simisear": [], "panpour": [], "simipour": [], "munna": [], "musharna": [], "pidove": [], "tranquill": [], "unfezant": [], "blitzle": [], "zebstrika": [], "roggenrola": [], "boldore": [], "gigalith": [], "woobat": [], "swoobat": [], "drilbur": [], "excadrill": [], "audino": ["audino-mega"], "timburr": [], "gurdurr": [], "conkeldurr": [], "tympole": [], "palpitoad": [], "seismitoad": [], "throh": [], "sawk": [], "sewaddle": [], "swadloon": [], "leavanny": [], "venipede": [], "whirlipede": [], "scolipede": [], "cottonee": [], "whimsicott": [], "petilil": [], "lilligant": [], "basculin": ["basculin-blue-striped", "basculin-red-striped"], "sandile": [], "krokorok": [], "krookodile": [], "darumaka": [], "darmanitan": ["darmanitan-zen", "darmanitan-standard"], "maractus": [], "dwebble": [], "crustle": [], "scraggy": [], "scrafty": [], "sigilyph": [], "yamask": [], "cofagrigus": [], "tirtouga": [], "carracosta": [], "archen": [], "archeops": [], "trubbish": [], "garbodor": [], "zorua": [], "zoroark": [], "minccino": [], "cinccino": [], "gothita": [], "gothorita": [], "gothitelle": [], "solosis": [], "duosion": [], "reuniclus": [], "ducklett": [], "swanna": [], "vanillite": [], "vanillish": [], "vanilluxe": [], "deerling": [], "sawsbuck": [], "emolga": [], "karrablast": [], "escavalier": [], "foongus": [], "amoonguss": [], "frillish": [], "jellicent": [], "alomomola": [], "joltik": [], "galvantula": [], "ferroseed": [], "ferrothorn": [], "klink": [], "klang": [], "klinklang": [], "tynamo": [], "eelektrik": [], "eelektross": [], "elgyem": [], "beheeyem": [], "litwick": [], "lampent": [], "chandelure": [], "axew": [], "fraxure": [], "haxorus": [], "cubchoo": [], "beartic": [], "cryogonal": [], "shelmet": [], "accelgor": [], "stunfisk": [], "mienfoo": [], "mienshao": [], "druddigon": [], "golett": [], "golurk": [], "pawniard": [], "bisharp": [], "bouffalant": [], "rufflet": [], "braviary": [], "vullaby": [], "mandibuzz": [], "heatmor": [], "durant": [], "deino": [], "zweilous": [], "hydreigon": [], "larvesta": [], "volcarona": [], "cobalion": [], "terrakion": [], "virizion": [], "tornadus": ["tornadus-therian", "tornadus-incarnate"], "thundurus": ["thundurus-therian", "thundurus-incarnate"], "reshiram": [], "zekrom": [], "landorus": ["landorus-therian", "landorus-incarnate"], "kyurem": ["kyurem-black", "kyurem-white"], "keldeo": ["keldeo-resolute", "keldeo-ordinary"], "meloetta": ["meloetta-pirouette", "meloetta-aria"], "genesect": [], "chespin": [], "quilladin": [], "chesnaught": [], "fennekin": [], "braixen": [], "delphox": [], "froakie": [], "frogadier": [], "greninja": ["greninja-battle-bond", "greninja-ash"], "bunnelby": [], "diggersby": [], "fletchling": [], "fletchinder": [], "talonflame": [], "scatterbug": [], "spewpa": [], "vivillon": [], "litleo": [], "pyroar": [], "flabebe": [], "floette": ["floette-eternal"], "florges": [], "skiddo": [], "gogoat": [], "pancham": [], "pangoro": [], "furfrou": [], "espurr": [], "meowstic": ["meowstic-female", "meowstic-male"], "honedge": [], "doublade": [], "aegislash": ["aegislash-blade", "aegislash-shield"], "spritzee": [], "aromatisse": [], "swirlix": [], "slurpuff": [], "inkay": [], "malamar": [], "binacle": [], "barbaracle": [], "skrelp": [], "dragalge": [], "clauncher": [], "clawitzer": [], "helioptile": [], "heliolisk": [], "tyrunt": [], "tyrantrum": [], "amaura": [], "aurorus": [], "sylveon": [], "hawlucha": [], "dedenne": [], "carbink": [], "goomy": [], "sliggoo": [], "goodra": [], "klefki": [], "phantump": [], "trevenant": [], "pumpkaboo": ["pumpkaboo"], "gourgeist": ["gourgeist"], "bergmite": [], "avalugg": [], "noibat": [], "noivern": [], "xerneas": [], "yveltal": [], "zygarde": ["zygarde-10", "zygarde-50", "zygarde-complete"], "diancie": ["diancie-mega"], "hoopa": ["hoopa-unbound"], "volcanion": [], "rowlet": [], "dartrix": [], "decidueye": [], "litten": [], "torracat": [], "incineroar": [], "popplio": [], "brionne": [], "primarina": [], "pikipek": [], "trumbeak": [], "toucannon": [], "yungoos": [], "gumshoos": [], "grubbin": [], "charjabug": [], "vikavolt": [], "crabrawler": [], "crabominable": [], "oricorio": ["oricorio-pom-pom", "oricorio-pau", "oricorio-sensu", "oricorio-baile"], "cutiefly": [], "ribombee": [], "rockruff": [], "lycanroc": ["lycanroc-midnight", "lycanroc-dusk", "lycanroc-midday"], "wishiwashi": ["wishiwashi-school", "wishiwashi-solo"], "mareanie": [], "toxapex": [], "mudbray": [], "mudsdale": [], "dewpider": [], "araquanid": [], "fomantis": [], "lurantis": [], "morelull": [], "shiinotic": [], "salandit": [], "salazzle": [], "stufful": [], "bewear": [], "bounsweet": [], "steenee": [], "tsareena": [], "comfey": [], "oranguru": [], "passimian": [], "wimpod": [], "golisopod": [], "sandygast": [], "palossand": [], "pyukumuku": [], "type-null": [], "silvally": [], "minior": ["minior-orange-meteor", "minior-yellow-meteor", "minior-green-meteor", "minior-blue-meteor", "minior-indigo-meteor", "minior-violet-meteor", "minior-red", "minior-orange", "minior-yellow", "minior-green", "minior-blue", "minior-indigo", "minior-violet", "minior-red-meteor"], "komala": [], "turtonator": [], "togedemaru": [], "mimikyu": ["mimikyu-busted", "mimikyu-disguised"], "bruxish": [], "drampa": [], "dhelmise": [], "jangmo-o": [], "hakamo-o": [], "kommo-o": [], "tapu-koko": [], "tapu-lele": [], "tapu-bulu": [], "tapu-fini": [], "cosmog": [], "cosmoem": [], "solgaleo": [], "lunala": [], "nihilego": [], "buzzwole": [], "pheromosa": [], "xurkitree": [], "celesteela": [], "kartana": [], "guzzlord": [], "necrozma": ["necrozma-dusk", "necrozma-dawn", "necrozma-ultra"], "magearna": ["magearna-original"], "marshadow": [], "poipole": [], "naganadel": [], "stakataka": [], "blacephalon": [], "zeraora": []} \ No newline at end of file diff --git a/pokemon.csv b/pokemon.csv index 14d1065..d0162e4 100644 --- a/pokemon.csv +++ b/pokemon.csv @@ -384,7 +384,7 @@ id,identifier,species_id,height,weight,base_experience,order,is_default 383,groudon,383,35,9500,302,485,1 384,rayquaza,384,70,2065,306,487,1 385,jirachi,385,3,11,270,489,1 -386,deoxys-normal,386,17,608,270,490,1 +386,deoxys,386,17,608,270,490,1 387,turtwig,387,4,102,64,494,1 388,grotle,388,11,970,142,495,1 389,torterra,389,22,3100,236,496,1 @@ -411,7 +411,7 @@ id,identifier,species_id,height,weight,base_experience,order,is_default 410,shieldon,410,5,570,70,515,1 411,bastiodon,411,13,1495,173,516,1 412,burmy,412,2,34,45,517,1 -413,wormadam-plant,413,5,65,148,518,1 +413,wormadam,413,5,65,148,518,1 414,mothim,414,9,233,148,521,1 415,combee,415,3,55,49,522,1 416,vespiquen,416,12,385,166,523,1 @@ -485,12 +485,12 @@ id,identifier,species_id,height,weight,base_experience,order,is_default 484,palkia,484,42,3360,306,573,1 485,heatran,485,17,4300,270,574,1 486,regigigas,486,37,4200,302,575,1 -487,giratina-altered,487,45,7500,306,576,1 +487,giratina,487,45,7500,306,576,1 488,cresselia,488,15,856,270,578,1 489,phione,489,4,31,216,579,1 490,manaphy,490,3,14,270,580,1 491,darkrai,491,15,505,270,581,1 -492,shaymin-land,492,2,21,270,582,1 +492,shaymin,492,2,21,270,582,1 493,arceus,493,32,3200,324,584,1 494,victini,494,4,40,270,585,1 495,snivy,495,6,81,62,586,1 @@ -548,12 +548,12 @@ id,identifier,species_id,height,weight,base_experience,order,is_default 547,whimsicott,547,7,66,168,639,1 548,petilil,548,5,66,56,640,1 549,lilligant,549,11,163,168,641,1 -550,basculin-red-striped,550,10,180,161,642,1 +550,basculin,550,10,180,161,642,1 551,sandile,551,7,152,58,644,1 552,krokorok,552,10,334,123,645,1 553,krookodile,553,15,963,234,646,1 554,darumaka,554,6,375,63,647,1 -555,darmanitan-standard,555,13,929,168,648,1 +555,darmanitan,555,13,929,168,648,1 556,maractus,556,10,280,161,650,1 557,dwebble,557,3,145,65,651,1 558,crustle,558,14,2000,170,652,1 @@ -639,14 +639,14 @@ id,identifier,species_id,height,weight,base_experience,order,is_default 638,cobalion,638,21,2500,261,732,1 639,terrakion,639,19,2600,261,733,1 640,virizion,640,20,2000,261,734,1 -641,tornadus-incarnate,641,15,630,261,735,1 -642,thundurus-incarnate,642,15,610,261,737,1 +641,tornadus,641,15,630,261,735,1 +642,thundurus,642,15,610,261,737,1 643,reshiram,643,32,3300,306,739,1 644,zekrom,644,29,3450,306,740,1 -645,landorus-incarnate,645,15,680,270,741,1 +645,landorus,645,15,680,270,741,1 646,kyurem,646,30,3250,297,743,1 -647,keldeo-ordinary,647,14,485,261,746,1 -648,meloetta-aria,648,6,65,270,748,1 +647,keldeo,647,14,485,261,746,1 +648,meloetta,648,6,65,270,748,1 649,genesect,649,15,825,270,750,1 650,chespin,650,4,90,63,751,1 651,quilladin,651,7,290,142,752,1 @@ -676,10 +676,10 @@ id,identifier,species_id,height,weight,base_experience,order,is_default 675,pangoro,675,21,1360,173,779,1 676,furfrou,676,12,280,165,780,1 677,espurr,677,3,35,71,781,1 -678,meowstic-male,678,6,85,163,782,1 +678,meowstic,678,6,85,163,782,1 679,honedge,679,8,20,65,784,1 680,doublade,680,8,45,157,785,1 -681,aegislash-shield,681,17,530,234,786,1 +681,aegislash,681,17,530,234,786,1 682,spritzee,682,2,5,68,788,1 683,aromatisse,683,8,155,162,789,1 684,swirlix,684,4,35,68,790,1 @@ -708,8 +708,8 @@ id,identifier,species_id,height,weight,base_experience,order,is_default 707,klefki,707,2,30,165,812,1 708,phantump,708,4,70,62,813,1 709,trevenant,709,15,710,166,814,1 -710,pumpkaboo-average,710,4,50,67,815,1 -711,gourgeist-average,711,9,125,173,819,1 +710,pumpkaboo,710,4,50,67,815,1 +711,gourgeist,711,9,125,173,819,1 712,bergmite,712,10,995,61,823,1 713,avalugg,713,20,5050,180,824,1 714,noibat,714,5,80,49,825,1 @@ -739,12 +739,12 @@ id,identifier,species_id,height,weight,base_experience,order,is_default 738,vikavolt,738,15,450,225,855,1 739,crabrawler,739,6,70,68,857,1 740,crabominable,740,17,1800,167,858,1 -741,oricorio-baile,741,6,34,167,859,1 +741,oricorio,741,6,34,167,859,1 742,cutiefly,742,1,2,61,863,1 743,ribombee,743,2,5,162,864,1 744,rockruff,744,5,92,56,866,1 -745,lycanroc-midday,745,8,250,170,868,1 -746,wishiwashi-solo,746,2,3,61,871,1 +745,lycanroc,745,8,250,170,868,1 +746,wishiwashi,746,2,3,61,871,1 747,mareanie,747,4,80,61,873,1 748,toxapex,748,7,145,173,874,1 749,mudbray,749,10,1100,77,875,1 @@ -772,11 +772,11 @@ id,identifier,species_id,height,weight,base_experience,order,is_default 771,pyukumuku,771,3,12,144,900,1 772,type-null,772,19,1205,107,901,1 773,silvally,773,23,1005,257,902,1 -774,minior-red-meteor,774,3,400,154,903,1 +774,minior,774,3,400,154,903,1 775,komala,775,4,199,168,917,1 776,turtonator,776,20,2120,170,918,1 777,togedemaru,777,3,33,152,919,1 -778,mimikyu-disguised,778,2,7,167,921,1 +778,mimikyu,778,2,7,167,921,1 779,bruxish,779,9,190,166,925,1 780,drampa,780,30,1850,170,926,1 781,dhelmise,781,39,2100,181,927,1 @@ -822,6 +822,7 @@ id,identifier,species_id,height,weight,base_experience,order,is_default 10014,castform-rainy,351,3,8,147,442,0 10015,castform-snowy,351,3,8,147,443,0 10016,basculin-blue-striped,550,10,180,161,643,0 +20550,basculin-red-striped,550,10,180,161,642,1 10017,darmanitan-zen,555,13,929,189,649,0 10018,meloetta-pirouette,648,6,65,270,749,0 10019,tornadus-therian,641,14,630,261,736,0 @@ -885,12 +886,7 @@ id,identifier,species_id,height,weight,base_experience,order,is_default 10077,kyogre-primal,382,98,4300,347,484,0 10078,groudon-primal,383,50,9997,347,486,0 10079,rayquaza-mega,384,108,3920,351,488,0 -10080,pikachu-rock-star,25,4,60,112,37,0 -10081,pikachu-belle,25,4,60,112,38,0 -10082,pikachu-pop-star,25,4,60,112,39,0 -10083,pikachu-phd,25,4,60,112,40,0 10084,pikachu-libre,25,4,60,112,41,0 -10085,pikachu-cosplay,25,4,60,112,36,0 10086,hoopa-unbound,720,65,4900,306,836,0 10087,camerupt-mega,323,25,3205,196,411,0 10088,lopunny-mega,428,13,283,203,535,0 @@ -899,12 +895,6 @@ id,identifier,species_id,height,weight,base_experience,order,is_default 10091,rattata-alola,19,3,38,51,26,0 10092,raticate-alola,20,7,255,145,28,0 10093,raticate-totem-alola,20,14,1050,145,29,0 -10094,pikachu-original-cap,25,4,60,112,36,0 -10095,pikachu-hoenn-cap,25,4,60,112,37,0 -10096,pikachu-sinnoh-cap,25,4,60,112,38,0 -10097,pikachu-unova-cap,25,4,60,112,39,0 -10098,pikachu-kalos-cap,25,4,60,112,40,0 -10099,pikachu-alola-cap,25,4,60,112,41,0 10100,raichu-alola,26,7,210,218,44,0 10101,sandshrew-alola,27,7,400,60,46,0 10102,sandslash-alola,28,12,550,158,48,0 @@ -956,10 +946,28 @@ id,identifier,species_id,height,weight,base_experience,order,is_default 10148,pikachu-partner-cap,25,4,60,112,42,0 10149,marowak-totem,105,17,980,149,151,0 10150,ribombee-totem,743,4,20,162,865,0 -10151,rockruff-own-tempo,744,5,92,56,867,0 10152,lycanroc-dusk,745,8,250,170,870,0 10153,araquanid-totem,752,31,2175,159,879,0 10154,togedemaru-totem,777,6,130,152,920,0 10155,necrozma-dusk,800,38,4600,306,948,0 10156,necrozma-dawn,800,42,3500,306,949,0 10157,necrozma-ultra,800,75,2300,339,950,0 +20555,darmanitan-standard,555,13,929,168,648,1 +20386,deoxys-normal,386,17,608,270,490,1 +20487,giratina-altered,487,45,7500,306,576,1 +20710,pumpkaboo,710,4,50,67,815,1 +20711,gourgeist,711,9,125,173,819,1 +20647,keldeo-ordinary,647,14,485,261,746,1 +20645,landorus-incarnate,645,15,680,270,741,1 +20745,lycanroc-midday,745,8,250,170,868,1 +20746,wishiwashi-solo,746,2,3,61,871,1 +20678,meowstic-male,678,6,85,163,782,1 +20681,aegislash-shield,681,17,530,234,786,1 +20648,meloetta-aria,648,6,65,270,748,1 +20641,tornadus-incarnate,641,15,630,261,735,1 +20642,thundurus-incarnate,642,15,610,261,737,1 +20778,mimikyu-disguised,778,2,7,167,921,1 +20774,minior-red-meteor,774,3,400,154,903,1 +20741,oricorio-baile,741,6,34,167,859,1 +20492,shaymin-land,492,2,21,270,582,1 +20413,wormadam-plant,413,5,65,148,518,1