forked from Czyzo66/MMCV-HandGestureRecognition
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathgui.py
More file actions
162 lines (132 loc) · 6.5 KB
/
gui.py
File metadata and controls
162 lines (132 loc) · 6.5 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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
import tkinter as tk
from tkinter import filedialog, Text, Label, RAISED
import os
import cv2
from PIL import Image,ImageTk
import featureBasedSift
import featureBasedOrb
import cnnClassifier
from matplotlib.backends.backend_tkagg import (
FigureCanvasTkAgg, NavigationToolbar2Tk)
from matplotlib.figure import Figure
featureBasedClassifier = featureBasedSift.FeatureBasedClassifier();
featureBasedClassifier.loadImageClasses()
featureBasedClassifierOrb = featureBasedOrb.FeatureBasedClassifierOrb();
featureBasedClassifierOrb.loadImageClasses()
cnnClassifier = cnnClassifier.CnnClassifier()
detailsClasses = []
detailsMatches = []
def loadImage(canvas, img_id):
global imgtk
global imageToClassifyPure
global imageToDisplay
filename = filedialog.askopenfilename(initialdir="C:/Users/mitux/Desktop/woda/data/train",title="Select Image",
filetypes=[('image files','*.png',)])
imageToClassifyPure = cv2.imread(filename)
imageToClassify = imageToClassifyPure
# cv2.imshow('test',imageToClassify)
b,g,r = cv2.split(imageToClassify)
imageToClassify = cv2.merge((r,g,b))
dim = (500,550)
imageToClassify = cv2.resize(imageToClassify, dim, interpolation = cv2.INTER_LINEAR)
imageToDisplay =imageToClassify
im = Image.fromarray(imageToClassify)
# im = im.resize((500,550), Image.ANTIALIAS)
imgtk = ImageTk.PhotoImage(image=im)
canvas.itemconfig(img_id, image=imgtk)
print(imgtk)
def classifySift(canvas, img_id, img_right_id, match_label):
result = featureBasedClassifier.classify(imageToClassifyPure)
global imgtk2
cv2.putText(imageToDisplay,result.resultString,(20,50),cv2.QT_FONT_NORMAL,.5,(255,0,10),1)
image = cv2.drawMatches(result.img1,result.kp1,imageToClassifyPure,result.kp2,result.matches,None)
dim = (1000,550)
cv2.putText(image,"original",(300,30),cv2.QT_FONT_NORMAL,.9,(255,0,10),1)
cv2.putText(image,"match",(30,30),cv2.QT_FONT_NORMAL,.9,(255,0,10),1)
image = cv2.resize(image, dim, interpolation=cv2.INTER_LINEAR)
im = Image.fromarray(image)
imgtk2 = ImageTk.PhotoImage(image=im)
canvas.itemconfig(img_id, image=imgtk2)
match_label.config(text="Best match: " + result.resultString +", Confidence: " + result.accuracy + " times the standard deviation")
# canvas.itemconfig(img_right_id, image=imgtk2)
global detailsClasses
detailsClasses= result.classNames
global detailsMatches
detailsMatches= result.goodMatchList
def classifyOrb(canvas, img_id, match_label):
result = featureBasedClassifierOrb.classify(imageToClassifyPure)
global imgtk2
image = cv2.drawMatches(result.img1,result.kp1,imageToClassifyPure,result.kp2,result.matches,None)
dim = (1000,550)
cv2.putText(image,"original",(300,30),cv2.QT_FONT_NORMAL,.9,(255,0,10),1)
cv2.putText(image,"match",(30,30),cv2.QT_FONT_NORMAL,.9,(255,0,10),1)
image = cv2.resize(image, dim, interpolation=cv2.INTER_LINEAR)
im = Image.fromarray(image)
imgtk2 = ImageTk.PhotoImage(image=im)
canvas.itemconfig(img_id, image=imgtk2)
match_label.config(text="Best match: "+ result.resultString +", Confidence: " + result.accuracy + " times the standard deviation")
global detailsClasses
detailsClasses= result.classNames
global detailsMatches
detailsMatches= result.goodMatchList
# canvas.itemconfig(img_right_id, image=imgtk2)
def classifyCnn(canvas, img_id, match_label):
result = cnnClassifier.classify(imageToClassifyPure)
global imgtk2
# image = cv2.drawMatches(result.img1,result.kp1,imageToClassifyPure,result.kp2,result.matches,None)
dim = (500,550)
# image = cv2.resize(result.img, dim, interpolation=cv2.INTER_LINEAR)
imggg = cv2.resize(imageToClassifyPure,dim,interpolation=cv2.INTER_LINEAR, dst=imageToClassifyPure)
cv2.putText(imggg,result.resultString,(50,50),cv2.QT_FONT_NORMAL,.9,(255,0,10),2)
# im = Image.fromarray(imageToClassifyPure)
im = Image.fromarray(imggg)
imgtk2 = ImageTk.PhotoImage(image=im)
canvas.itemconfig(img_id, image=imgtk2)
# match_label.config(text="Best match: "+ result.resultString +", Confidence: " + result.accuracy + " times the standard deviation")
# global detailsClasses
# detailsClasses= result.classNames
# global detailsMatches
# detailsMatches= result.goodMatchList
# canvas.itemconfig(img_right_id, image=imgtk2)
def openSecondWindow():
top = tk.Toplevel()
top.title('Detailed results')
details_plot_title_label = tk.Label(top,text="Number of matches per class").pack()
fig = Figure(figsize=(5, 4), dpi=100)
# ax = fig.add_axes([0,0,1,1])
ax = fig.add_subplot(111)
ax.bar(detailsClasses,detailsMatches[0],.5)
# fig.add_subplot(111).(detailsClasses,detailsMatches[0])
canvas = FigureCanvasTkAgg(fig, master=top)
canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=1)
# toolbar = NavigationToolbar2Tk(canvas, )
# toolbar.update()
canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=1)
details_classes_label = tk.Label(top,text=str(detailsClasses)).pack()
details_matches_label = tk.Label(top,text=str(detailsMatches)).pack()
btn = tk.Button(top,text="close window",command=top.destroy, padx=10,pady=5,fg="black").pack()
root = tk.Tk()
canvas = tk.Canvas(root, height=600, width=1000)
canvas.pack()
img_id = canvas.create_image((0,0), image=None, anchor='nw')
img_right_id= canvas.create_image((500,0), image=None, anchor='nw')
# frame = tk.Frame(root, bg="black")
# frame.place(relwidth=0.8, relheight=0.8, relx=0.1)
my_label = tk.Label(root, text = "Results:")
match_label = tk.Label(root, text = "Best match: ")
my_label.pack()
match_label.pack()
openFile = tk.Button(root,text="Load Image", padx=10,pady=5, fg="black",
command=lambda: loadImage(canvas,img_id))
openFile.pack();
classifyImage= tk.Button(root, text="Classify Image SIFT",padx=10,pady=5, fg="black",
command=lambda: classifySift(canvas,img_id, img_right_id,match_label))
classifyImage.pack()
classifyImageOrb = tk.Button(root, text="Classify Image ORB", padx=10,pady=5, fg="black",
command=lambda: classifyOrb(canvas,img_id,match_label))
classifyImageOrb.pack()
classifyImageCnn= tk.Button(root, text="Classify Image CNN",padx=10,pady=5, fg="black",
command=lambda: classifyCnn(canvas,img_id,match_label))
classifyImageCnn.pack()
seconWindowBtn = tk.Button(root,text="Show detailed results",padx=10,pady=5,fg="black", command=openSecondWindow).pack()
root.mainloop()