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")