diff --git a/predictor.py b/predictor.py new file mode 100644 index 00000000..2dc3c807 --- /dev/null +++ b/predictor.py @@ -0,0 +1,57 @@ +import os +import sys +import pandas as pd +import numpy as np +from skimage.io import imread, imshow, imsave +from skimage.transform import resize +from sklearn.preprocessing import StandardScaler +from sklearn.decomposition import PCA +from sklearn.model_selection import train_test_split +from sklearn import svm +from sklearn import metrics +import pickle +from skimage import img_as_ubyte + +tempdir = "predictor_temp" + +if len(sys.argv) < 3: + print("no input image") + exit(0) + +if len(sys.argv) < 2: + print("no input model") + exit(0) + +svm_model = pickle.load(open(sys.argv[1], 'rb')) + +os.system('mkdir -p ' + tempdir) +os.system("python3 face_cutter.py " + sys.argv[2] + " " + tempdir ) +img_files = [name for name in os.listdir(tempdir) if not os.path.isdir(os.path.join(tempdir, name)) ] +print(img_files) +cutf = tempdir +"/"+img_files[0] +os.system("python3 hogger.py " + cutf + " " + tempdir ) +os.system("rm " + cutf) +img_files = [name for name in os.listdir(tempdir) if not os.path.isdir(os.path.join(tempdir, name)) ] +hogf = tempdir + "/" + img_files[0] + +imgdat = imread(hogf, as_gray=True) +os.system("rm -rf " + tempdir) +imgdat = resize(imgdat, (64,64)) + +imgdat = img_as_ubyte(imgdat) + + +flat_imgdat = np.array( imgdat ).flatten() +print(flat_imgdat.shape) +X = np.array(flat_imgdat) +X = X.reshape(-1,1) +X = StandardScaler().fit_transform(X) +print(X.shape,X) +# pca = PCA(n_components=128) +# pcaofX = pca.fit_transform(X) + + +res = svm_model.predict(X.T) + +print("Prediction:",res) + diff --git a/subject01.happy.png b/subject01.happy.png new file mode 100644 index 00000000..f4d98009 Binary files /dev/null and b/subject01.happy.png differ diff --git a/subject07.surprised.png b/subject07.surprised.png new file mode 100644 index 00000000..13a507ab Binary files /dev/null and b/subject07.surprised.png differ diff --git a/subject09.glasses.png b/subject09.glasses.png new file mode 100644 index 00000000..e0a9b889 Binary files /dev/null and b/subject09.glasses.png differ diff --git a/subject11.surprised.png b/subject11.surprised.png new file mode 100644 index 00000000..ff51c8ae Binary files /dev/null and b/subject11.surprised.png differ diff --git a/subject14.leftlight.png b/subject14.leftlight.png new file mode 100644 index 00000000..2f196280 Binary files /dev/null and b/subject14.leftlight.png differ diff --git a/svm_model.sav b/svm_model.sav new file mode 100644 index 00000000..243620fc Binary files /dev/null and b/svm_model.sav differ diff --git a/trainer.py b/trainer.py index 8efcdd6b..08a2ae01 100644 --- a/trainer.py +++ b/trainer.py @@ -6,6 +6,7 @@ from sklearn.decomposition import PCA from sklearn.model_selection import train_test_split from sklearn import svm from sklearn import metrics +import pickle if len(sys.argv) < 2: print("no input csv file") @@ -27,19 +28,24 @@ print(Y.shape) X = StandardScaler().fit_transform(X) print(X) -pca = PCA(n_components=50) -pcaofX = pca.fit_transform(X) -print("shapeofX after pca",pcaofX.shape, ", cum Sum of variance ratio",pca.explained_variance_ratio_.cumsum()[-1]) +# pca = PCA(n_components=128) +# pcaofX = pca.fit_transform(X) +# print("shapeofX after pca",pcaofX.shape, ", cum Sum of variance ratio",pca.explained_variance_ratio_.cumsum()[-1]) -# pcaofX = X +pcaofX = X -X_train, X_test, Y_train, Y_test = train_test_split(pcaofX, Y, test_size=0.3,random_state=109) +X_train, X_test, Y_train, Y_test = train_test_split(pcaofX, Y, test_size=0.1,random_state=109) print(X_train.shape) -classifier = svm.SVC(kernel="linear") -classifier.fit(X_train,Y_train) +svm_model = svm.SVC(kernel="linear") +svm_model.fit(X_train,Y_train) -pred = classifier.predict(X_test) +pred = svm_model.predict(X_test) +print(pred) + +print("Accuracy:",metrics.accuracy_score(Y_test, pred)) + + +pickle.dump(svm_model, open("svm_model.sav", 'wb')) -print("Accuracy:",metrics.accuracy_score(Y_test, pred)) \ No newline at end of file