-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathLab1_Soln.py
More file actions
84 lines (61 loc) · 2.7 KB
/
Lab1_Soln.py
File metadata and controls
84 lines (61 loc) · 2.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#!/usr/bin/env python
import numpy as np
import re
from sklearn import svm, metrics
from skimage import io, feature, filters, exposure, color
class ImageClassifier:
def __init__(self):
self.classifer = None
def imread_convert(self, f):
return io.imread(f).astype(np.uint8)
def load_data_from_folder(self, dir):
# read all images into an image collection
ic = io.ImageCollection(dir+"*.jpeg", load_func=self.imread_convert)
#create one large array of image data
data = io.concatenate_images(ic)
#extract labels from image names
labels = np.array(ic.files)
for i, f in enumerate(labels):
m = re.search("_", f)
labels[i] = f[len(dir):m.start()]
return(data,labels)
def extract_image_features(self, data):
l = []
for im in data:
im_gray = color.rgb2gray(im)
im_gray = filters.gaussian(im_gray, sigma=0.4)
f = feature.hog(im_gray, orientations=10, pixels_per_cell=(48, 48), cells_per_block=(4, 4), feature_vector=True, block_norm='L2-Hys')
l.append(f)
feature_data = np.array(l)
return(feature_data)
def train_classifier(self, train_data, train_labels):
self.classifer = svm.LinearSVC()
self.classifer.fit(train_data, train_labels)
def predict_labels(self, data):
predicted_labels = self.classifer.predict(data)
return predicted_labels
def main():
img_clf = ImageClassifier()
# load images
(train_raw, train_labels) = img_clf.load_data_from_folder('./train/')
(test_raw, test_labels) = img_clf.load_data_from_folder('./test/')
# convert images into features
train_data = img_clf.extract_image_features(train_raw)
test_data = img_clf.extract_image_features(test_raw)
# train model
img_clf.train_classifier(train_data, train_labels)
predicted_labels = img_clf.predict_labels(train_data)
print("\nTraining results")
print("=============================")
print("Confusion Matrix:\n",metrics.confusion_matrix(train_labels, predicted_labels))
print("Accuracy: ", metrics.accuracy_score(train_labels, predicted_labels))
print("F1 score: ", metrics.f1_score(train_labels, predicted_labels, average='micro'))
# test model
predicted_labels = img_clf.predict_labels(test_data)
print("\nTest results")
print("=============================")
print("Confusion Matrix:\n",metrics.confusion_matrix(test_labels, predicted_labels))
print("Accuracy: ", metrics.accuracy_score(test_labels, predicted_labels))
print("F1 score: ", metrics.f1_score(test_labels, predicted_labels, average='micro'))
if __name__ == "__main__":
main()