arnaucube
arnaucube/objectImageIdentifierAIPublic Self-hosted repository
objectImageIdentifierAI/serverPredictor/classifierChooser.py
serverPredictor/classifierChooser.pyRaw
 1from PIL import Image, ImageOps
 2import numpy, os
 3
 4from sklearn.feature_extraction import image
 5from sklearn.model_selection import KFold, cross_val_score
 6
 7import numpy as np
 8import pandas as pd
 9from time import time
10import pickle
11
12from sklearn.pipeline import Pipeline
13from sklearn.model_selection import GridSearchCV
14from sklearn.model_selection import RandomizedSearchCV
15
16
17path="dataset/"
18Xlist=[]
19Ylist=[]
20size = 100, 100
21
22#load images from dataset
23for directory in os.listdir(path):
24    for file in os.listdir(path+directory):
25        print(path+directory+"/"+file)
26        img=Image.open(path+directory+"/"+file)
27        #resize
28        thumb = ImageOps.fit(img, size, Image.ANTIALIAS)
29        image_data = np.array(thumb).flatten()[:100]
30        Xlist.append(image_data)
31        Ylist.append(directory)
32
33from sklearn.ensemble import RandomForestClassifier
34
35pipe = Pipeline([
36        ('clf', RandomForestClassifier()),
37    ])
38
39param_grid = dict(clf__n_estimators=[100])
40
41grid_search = GridSearchCV(pipe, param_grid=param_grid, n_jobs=-1, verbose=1, cv=3)
42
43# Utility function to report best scores
44def report(results, n_top=10):
45    for i in range(1, n_top + 1):
46        candidates = np.flatnonzero(results['rank_test_score'] == i)
47        for candidate in candidates:
48            print("Model with rank: {0}".format(i))
49            print("Mean validation score: {0:.3f} (std: {1:.3f})".format(
50                  results['mean_test_score'][candidate],
51                  results['std_test_score'][candidate]))
52            print("Parameters: {0}".format(results['params'][candidate]))
53            print("")
54
55start = time()
56grid_search = GridSearchCV(pipe, param_grid, n_jobs=-1, verbose=1, cv=3)
57grid_search.fit(Xlist, Ylist)
58print("GridSearchCV took %.2f seconds for %d candidate parameter settings."
59      % (time() - start, len(grid_search.cv_results_['params'])))
60print("finished GridSearch")
61report(grid_search.cv_results_)
62
63pickle.dump(grid_search, open('model.pkl', 'wb'))
64print("pipeline model saved to model.pkl")