Skip to content

Commit 652ea32

Browse files
committed
first commit
0 parents  commit 652ea32

File tree

2,940 files changed

+262
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

2,940 files changed

+262
-0
lines changed

HandGestureRecognize.py

Lines changed: 259 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,259 @@
1+
from tkinter import messagebox
2+
from tkinter import *
3+
from tkinter import simpledialog
4+
import tkinter
5+
from tkinter import filedialog
6+
from tkinter.filedialog import askopenfilename
7+
import cv2
8+
import random
9+
import numpy as np
10+
from keras.utils.np_utils import to_categorical
11+
from keras.layers import MaxPooling2D
12+
from keras.layers import Dense, Dropout, Activation, Flatten
13+
from keras.layers import Convolution2D
14+
from keras.models import Sequential
15+
from keras.models import model_from_json
16+
import pickle
17+
import os
18+
import imutils
19+
from gtts import gTTS
20+
from playsound import playsound
21+
import os
22+
from threading import Thread
23+
24+
main = tkinter.Tk()
25+
main.title("Hand geture recognition and voice conversation using CNN")
26+
main.geometry("1200x600")
27+
28+
global filename
29+
global classifier
30+
31+
bg = None
32+
playcount = 0
33+
34+
#names = ['Palm','I','Fist','Fist Moved','Thumbs up','Index','OK','Palm Moved','C','Down']
35+
names = ['C','Thumbs Down','Fist','I','Ok','Palm','Thumbs up']
36+
37+
def getID(name):
38+
index = 0
39+
for i in range(len(names)):
40+
if names[i] == name:
41+
index = i
42+
break
43+
return index
44+
45+
46+
bgModel = cv2.createBackgroundSubtractorMOG2(0, 50)
47+
48+
def deleteDirectory():
49+
filelist = [ f for f in os.listdir('play') if f.endswith(".mp3") ]
50+
for f in filelist:
51+
os.remove(os.path.join('play', f))
52+
53+
def play(playcount,gesture):
54+
class PlayThread(Thread):
55+
def __init__(self,playcount,gesture):
56+
Thread.__init__(self)
57+
self.gesture = gesture
58+
self.playcount = playcount
59+
60+
def run(self):
61+
t1 = gTTS(text=self.gesture, lang='en', slow=False)
62+
t1.save("play/"+str(self.playcount)+".mp3")
63+
playsound("play/"+str(self.playcount)+".mp3")
64+
65+
66+
newthread = PlayThread(playcount,gesture)
67+
newthread.start()
68+
69+
def remove_background(frame):
70+
fgmask = bgModel.apply(frame, learningRate=0)
71+
kernel = np.ones((3, 3), np.uint8)
72+
fgmask = cv2.erode(fgmask, kernel, iterations=1)
73+
res = cv2.bitwise_and(frame, frame, mask=fgmask)
74+
return res
75+
76+
def uploadDataset():
77+
global filename
78+
global labels
79+
labels = []
80+
filename = filedialog.askdirectory(initialdir=".")
81+
pathlabel.config(text=filename)
82+
text.delete('1.0', END)
83+
text.insert(END,filename+" loaded\n\n");
84+
85+
86+
87+
def trainCNN():
88+
global classifier
89+
text.delete('1.0', END)
90+
X_train = np.load('model1/X.txt.npy')
91+
Y_train = np.load('model1/Y.txt.npy')
92+
text.insert(END,"CNN is training on total images : "+str(len(X_train))+"\n")
93+
94+
if os.path.exists('model1/model.json'):
95+
with open('model1/model.json', "r") as json_file:
96+
loaded_model_json = json_file.read()
97+
classifier = model_from_json(loaded_model_json)
98+
classifier.load_weights("model1/model_weights.h5")
99+
classifier._make_predict_function()
100+
print(classifier.summary())
101+
f = open('model1/history.pckl', 'rb')
102+
data = pickle.load(f)
103+
f.close()
104+
acc = data['accuracy']
105+
accuracy = acc[9] * 100
106+
text.insert(END,"CNN Hand Gesture Training Model Prediction Accuracy = "+str(accuracy))
107+
else:
108+
classifier = Sequential()
109+
classifier.add(Convolution2D(32, 3, 3, input_shape = (64, 64, 3), activation = 'relu'))
110+
classifier.add(MaxPooling2D(pool_size = (2, 2)))
111+
classifier.add(Convolution2D(32, 3, 3, activation = 'relu'))
112+
classifier.add(MaxPooling2D(pool_size = (2, 2)))
113+
classifier.add(Flatten())
114+
classifier.add(Dense(output_dim = 256, activation = 'relu'))
115+
classifier.add(Dense(output_dim = 5, activation = 'softmax'))
116+
print(classifier.summary())
117+
classifier.compile(optimizer = 'adam', loss = 'categorical_crossentropy', metrics = ['accuracy'])
118+
hist = classifier.fit(X_train, Y_train, batch_size=16, epochs=10, shuffle=True, verbose=2)
119+
classifier.save_weights('model1/model_weights.h5')
120+
model_json = classifier.to_json()
121+
with open("model1/model.json", "w") as json_file:
122+
json_file.write(model_json)
123+
f = open('model1/history.pckl', 'wb')
124+
pickle.dump(hist.history, f)
125+
f.close()
126+
f = open('model1/history.pckl', 'rb')
127+
data = pickle.load(f)
128+
f.close()
129+
acc = data['accuracy']
130+
accuracy = acc[9] * 100
131+
text.insert(END,"CNN Hand Gesture Training Model Prediction Accuracy = "+str(accuracy))
132+
133+
134+
135+
def run_avg(image, aWeight):
136+
global bg
137+
if bg is None:
138+
bg = image.copy().astype("float")
139+
return
140+
cv2.accumulateWeighted(image, bg, aWeight)
141+
142+
def segment(image, threshold=25):
143+
global bg
144+
diff = cv2.absdiff(bg.astype("uint8"), image)
145+
thresholded = cv2.threshold(diff, threshold, 255, cv2.THRESH_BINARY)[1]
146+
( cnts, _) = cv2.findContours(thresholded.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
147+
if len(cnts) == 0:
148+
return
149+
else:
150+
segmented = max(cnts, key=cv2.contourArea)
151+
return (thresholded, segmented)
152+
153+
154+
def webcamPredict():
155+
global playcount
156+
oldresult = 'none'
157+
count = 0
158+
fgbg2 = cv2.createBackgroundSubtractorKNN();
159+
aWeight = 0.5
160+
camera = cv2.VideoCapture(0)
161+
top, right, bottom, left = 10, 350, 325, 690
162+
num_frames = 0
163+
while(True):
164+
(grabbed, frame) = camera.read()
165+
frame = imutils.resize(frame, width=700)
166+
frame = cv2.flip(frame, 1)
167+
clone = frame.copy()
168+
(height, width) = frame.shape[:2]
169+
roi = frame[top:bottom, right:left]
170+
gray = cv2.cvtColor(roi, cv2.COLOR_BGR2GRAY)
171+
gray = cv2.GaussianBlur(gray, (41, 41), 0)
172+
if num_frames < 30:
173+
run_avg(gray, aWeight)
174+
else:
175+
temp = gray
176+
hand = segment(gray)
177+
if hand is not None:
178+
(thresholded, segmented) = hand
179+
cv2.drawContours(clone, [segmented + (right, top)], -1, (0, 0, 255))
180+
#cv2.imwrite("test.jpg",temp)
181+
#cv2.imshow("Thesholded", temp)
182+
#ret, thresh = cv2.threshold(temp, 150, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
183+
#thresh = cv2.resize(thresh, (64, 64))
184+
#thresh = np.array(thresh)
185+
#img = np.stack((thresh,)*3, axis=-1)
186+
roi = frame[top:bottom, right:left]
187+
roi = fgbg2.apply(roi);
188+
cv2.imwrite("test.jpg",roi)
189+
#cv2.imwrite("newDataset/Fist/"+str(count)+".png",roi)
190+
#count = count + 1
191+
#print(count)
192+
img = cv2.imread("test.jpg")
193+
img = cv2.resize(img, (64, 64))
194+
img = img.reshape(1, 64, 64, 3)
195+
img = np.array(img, dtype='float32')
196+
img /= 255
197+
predict = classifier.predict(img)
198+
value = np.amax(predict)
199+
cl = np.argmax(predict)
200+
result = names[np.argmax(predict)]
201+
if value >= 0.99:
202+
print(str(value)+" "+str(result))
203+
cv2.putText(clone, 'Gesture Recognize as : '+str(result), (10, 25), cv2.FONT_HERSHEY_SIMPLEX,0.5, (0, 255, 255), 2)
204+
if oldresult != result:
205+
play(playcount,result)
206+
oldresult = result
207+
playcount = playcount + 1
208+
else:
209+
cv2.putText(clone, '', (10, 25), cv2.FONT_HERSHEY_SIMPLEX,0.5, (0, 255, 255), 2)
210+
cv2.imshow("video frame", roi)
211+
cv2.rectangle(clone, (left, top), (right, bottom), (0,255,0), 2)
212+
num_frames += 1
213+
cv2.imshow("Video Feed", clone)
214+
keypress = cv2.waitKey(1) & 0xFF
215+
if keypress == ord("q"):
216+
break
217+
camera.release()
218+
cv2.destroyAllWindows()
219+
220+
221+
222+
223+
font = ('times', 16, 'bold')
224+
title = Label(main, text='Hand geture recognition and voice conversation using CNN',anchor=W, justify=CENTER)
225+
title.config(bg='yellow4', fg='white')
226+
title.config(font=font)
227+
title.config(height=3, width=120)
228+
title.place(x=0,y=5)
229+
230+
231+
font1 = ('times', 13, 'bold')
232+
upload = Button(main, text="Upload Hand Gesture Dataset", command=uploadDataset)
233+
upload.place(x=50,y=100)
234+
upload.config(font=font1)
235+
236+
pathlabel = Label(main)
237+
pathlabel.config(bg='yellow4', fg='white')
238+
pathlabel.config(font=font1)
239+
pathlabel.place(x=50,y=150)
240+
241+
markovButton = Button(main, text="Train CNN with Gesture Images", command=trainCNN)
242+
markovButton.place(x=50,y=200)
243+
markovButton.config(font=font1)
244+
245+
predictButton = Button(main, text="Sign Language Recognition from Webcam", command=webcamPredict)
246+
predictButton.place(x=50,y=250)
247+
predictButton.config(font=font1)
248+
249+
250+
font1 = ('times', 12, 'bold')
251+
text=Text(main,height=15,width=78)
252+
scroll=Scrollbar(text)
253+
text.configure(yscrollcommand=scroll.set)
254+
text.place(x=450,y=100)
255+
text.config(font=font1)
256+
257+
deleteDirectory()
258+
main.config(bg='magenta3')
259+
main.mainloop()

UMLs.docx

28 KB
Binary file not shown.

model1/history.pckl

575 Bytes
Binary file not shown.

model1/model.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"class_name": "Sequential", "config": {"name": "sequential_1", "layers": [{"class_name": "Conv2D", "config": {"name": "conv2d_1", "trainable": true, "batch_input_shape": [null, 64, 64, 3], "dtype": "float32", "filters": 32, "kernel_size": [3, 3], "strides": [1, 1], "padding": "valid", "data_format": "channels_last", "dilation_rate": [1, 1], "activation": "relu", "use_bias": true, "kernel_initializer": {"class_name": "VarianceScaling", "config": {"scale": 1.0, "mode": "fan_avg", "distribution": "uniform", "seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}}, {"class_name": "MaxPooling2D", "config": {"name": "max_pooling2d_1", "trainable": true, "dtype": "float32", "pool_size": [2, 2], "padding": "valid", "strides": [2, 2], "data_format": "channels_last"}}, {"class_name": "Conv2D", "config": {"name": "conv2d_2", "trainable": true, "dtype": "float32", "filters": 32, "kernel_size": [3, 3], "strides": [1, 1], "padding": "valid", "data_format": "channels_last", "dilation_rate": [1, 1], "activation": "relu", "use_bias": true, "kernel_initializer": {"class_name": "VarianceScaling", "config": {"scale": 1.0, "mode": "fan_avg", "distribution": "uniform", "seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}}, {"class_name": "MaxPooling2D", "config": {"name": "max_pooling2d_2", "trainable": true, "dtype": "float32", "pool_size": [2, 2], "padding": "valid", "strides": [2, 2], "data_format": "channels_last"}}, {"class_name": "Flatten", "config": {"name": "flatten_1", "trainable": true, "dtype": "float32", "data_format": "channels_last"}}, {"class_name": "Dense", "config": {"name": "dense_1", "trainable": true, "dtype": "float32", "units": 256, "activation": "relu", "use_bias": true, "kernel_initializer": {"class_name": "VarianceScaling", "config": {"scale": 1.0, "mode": "fan_avg", "distribution": "uniform", "seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}}, {"class_name": "Dense", "config": {"name": "dense_2", "trainable": true, "dtype": "float32", "units": 7, "activation": "softmax", "use_bias": true, "kernel_initializer": {"class_name": "VarianceScaling", "config": {"scale": 1.0, "mode": "fan_avg", "distribution": "uniform", "seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}}]}, "keras_version": "2.3.1", "backend": "tensorflow"}

model1/model_weights.h5

6.19 MB
Binary file not shown.

newDataset/C/100.png

3.67 KB

newDataset/C/101.png

3.49 KB

newDataset/C/102.png

3.49 KB

newDataset/C/103.png

3.51 KB

newDataset/C/104.png

3.53 KB

newDataset/C/105.png

3.61 KB

newDataset/C/106.png

3.61 KB

newDataset/C/107.png

3.58 KB

newDataset/C/108.png

3.53 KB

newDataset/C/109.png

3.5 KB

newDataset/C/110.png

3.5 KB

newDataset/C/111.png

3.54 KB

newDataset/C/112.png

3.62 KB

newDataset/C/113.png

3.67 KB

newDataset/C/114.png

3.8 KB

newDataset/C/115.png

4.02 KB

newDataset/C/116.png

4.08 KB

newDataset/C/117.png

4.21 KB

newDataset/C/118.png

4.31 KB

newDataset/C/119.png

4.47 KB

newDataset/C/120.png

4.47 KB

newDataset/C/121.png

4.44 KB

newDataset/C/122.png

4.41 KB

newDataset/C/123.png

4.33 KB

newDataset/C/124.png

4.39 KB

newDataset/C/125.png

4.23 KB

newDataset/C/126.png

4.1 KB

newDataset/C/127.png

3.99 KB

newDataset/C/128.png

3.92 KB

newDataset/C/129.png

3.96 KB

newDataset/C/130.png

3.97 KB

newDataset/C/131.png

3.86 KB

newDataset/C/132.png

3.83 KB

newDataset/C/133.png

3.82 KB

newDataset/C/134.png

3.78 KB

newDataset/C/135.png

3.7 KB

newDataset/C/136.png

3.63 KB

newDataset/C/137.png

3.45 KB

newDataset/C/138.png

3.35 KB

newDataset/C/139.png

3.25 KB

newDataset/C/290.png

2.72 KB

newDataset/C/291.png

2.71 KB

newDataset/C/292.png

2.52 KB

newDataset/C/293.png

2.52 KB

newDataset/C/294.png

2.51 KB

newDataset/C/295.png

2.48 KB

newDataset/C/296.png

2.33 KB

newDataset/C/297.png

2.32 KB

newDataset/C/298.png

2.3 KB

newDataset/C/299.png

2.24 KB

newDataset/C/300.png

2.23 KB

newDataset/C/301.png

2.22 KB

newDataset/C/302.png

2.2 KB

newDataset/C/303.png

2.29 KB

newDataset/C/304.png

2.28 KB

newDataset/C/305.png

2.49 KB

newDataset/C/306.png

2.47 KB

newDataset/C/307.png

2.46 KB

newDataset/C/308.png

2.59 KB

newDataset/C/309.png

2.62 KB

newDataset/C/310.png

2.61 KB

newDataset/C/311.png

2.58 KB

newDataset/C/312.png

2.63 KB

newDataset/C/313.png

2.63 KB

newDataset/C/314.png

2.62 KB

newDataset/C/315.png

2.71 KB

newDataset/C/316.png

2.62 KB

newDataset/C/317.png

2.61 KB

newDataset/C/318.png

2.57 KB

newDataset/C/319.png

2.67 KB

newDataset/C/320.png

2.67 KB

newDataset/C/321.png

2.62 KB

newDataset/C/322.png

2.59 KB

newDataset/C/323.png

2.59 KB

newDataset/C/324.png

2.49 KB

newDataset/C/325.png

2.39 KB

newDataset/C/326.png

2.47 KB

newDataset/C/327.png

2.45 KB

newDataset/C/328.png

2.42 KB

newDataset/C/329.png

2.46 KB

newDataset/C/330.png

2.46 KB

newDataset/C/331.png

2.55 KB

newDataset/C/332.png

2.55 KB

newDataset/C/333.png

2.54 KB

newDataset/C/334.png

2.48 KB

newDataset/C/335.png

2.4 KB

newDataset/C/336.png

2.4 KB

newDataset/C/337.png

2.34 KB

newDataset/C/338.png

2.2 KB

newDataset/C/339.png

2.21 KB

newDataset/C/340.png

2.14 KB

newDataset/C/341.png

2.19 KB

newDataset/C/342.png

2.15 KB

newDataset/C/343.png

2.22 KB

newDataset/C/344.png

2.2 KB

newDataset/C/345.png

2.17 KB

newDataset/C/346.png

2.05 KB

newDataset/C/347.png

2.08 KB

newDataset/C/348.png

2.08 KB

newDataset/C/349.png

2.15 KB

newDataset/C/350.png

2.11 KB

newDataset/C/351.png

2.01 KB

newDataset/C/352.png

1.97 KB

newDataset/C/353.png

1.89 KB

newDataset/C/354.png

1.89 KB

newDataset/C/355.png

1.8 KB

newDataset/C/356.png

1.8 KB

newDataset/C/357.png

1.49 KB

newDataset/C/358.png

1.51 KB

newDataset/C/359.png

2.09 KB

newDataset/C/360.png

2.41 KB

newDataset/C/361.png

2.41 KB

newDataset/C/362.png

2.73 KB

newDataset/C/363.png

2.64 KB

newDataset/C/364.png

2.64 KB

newDataset/C/365.png

2.4 KB

newDataset/C/366.png

2.26 KB

newDataset/C/367.png

2.25 KB

newDataset/C/368.png

2.2 KB

newDataset/C/369.png

2.15 KB

newDataset/C/370.png

2.14 KB

newDataset/C/371.png

2.13 KB

newDataset/C/372.png

2.09 KB

newDataset/C/373.png

2.09 KB

newDataset/C/374.png

2.08 KB

newDataset/C/375.png

2.01 KB

newDataset/C/376.png

2 KB

newDataset/C/377.png

1.99 KB

newDataset/C/378.png

2.01 KB

newDataset/C/379.png

2.04 KB

newDataset/C/380.png

2.03 KB

newDataset/C/381.png

2.01 KB

newDataset/C/382.png

2.04 KB

newDataset/C/383.png

2.13 KB

newDataset/C/384.png

2.13 KB

newDataset/C/385.png

2.26 KB

newDataset/C/386.png

2.7 KB

newDataset/C/387.png

2.7 KB

newDataset/C/388.png

3.07 KB

newDataset/C/389.png

3.29 KB

newDataset/C/390.png

3.29 KB

newDataset/C/391.png

3.67 KB

newDataset/C/392.png

3.89 KB

newDataset/C/393.png

4.04 KB

newDataset/C/394.png

4.16 KB

newDataset/C/395.png

4.16 KB

newDataset/C/396.png

4.32 KB

newDataset/C/397.png

4.2 KB

newDataset/C/398.png

4.18 KB

newDataset/C/399.png

4.14 KB

newDataset/C/400.png

4.05 KB

newDataset/C/401.png

4.04 KB

newDataset/C/402.png

3.89 KB

newDataset/C/403.png

3.79 KB

newDataset/C/404.png

3.78 KB

newDataset/C/405.png

3.74 KB

newDataset/C/406.png

3.77 KB

newDataset/C/407.png

3.88 KB

newDataset/C/408.png

3.88 KB

newDataset/C/409.png

4.15 KB

newDataset/C/410.png

4.71 KB

newDataset/C/411.png

4.71 KB

newDataset/C/412.png

4.96 KB

newDataset/C/413.png

5.39 KB

newDataset/C/414.png

5.58 KB

newDataset/C/415.png

5.56 KB

newDataset/C/416.png

5.51 KB

newDataset/C/417.png

5.53 KB

newDataset/C/418.png

5.56 KB

newDataset/C/419.png

5.48 KB

newDataset/C/420.png

5.32 KB

newDataset/C/421.png

5.3 KB

newDataset/C/422.png

5.13 KB

newDataset/C/423.png

5.22 KB

newDataset/C/424.png

5.08 KB

newDataset/C/425.png

5.09 KB

newDataset/C/426.png

4.93 KB

newDataset/C/427.png

4.83 KB

newDataset/C/428.png

4.77 KB

newDataset/C/429.png

4.76 KB

newDataset/C/430.png

4.79 KB

newDataset/C/431.png

4.73 KB

newDataset/C/432.png

4.73 KB

newDataset/C/433.png

4.63 KB

newDataset/C/434.png

4.76 KB

newDataset/C/435.png

4.83 KB

newDataset/C/436.png

4.8 KB

newDataset/C/437.png

4.85 KB

newDataset/C/438.png

4.8 KB

newDataset/C/439.png

4.77 KB

newDataset/C/440.png

4.75 KB

newDataset/C/441.png

4.76 KB

newDataset/C/442.png

4.78 KB

newDataset/C/443.png

4.83 KB

newDataset/C/444.png

4.8 KB

newDataset/C/445.png

4.89 KB

newDataset/C/446.png

5.08 KB

newDataset/C/447.png

5.14 KB

newDataset/C/448.png

5.11 KB

newDataset/C/449.png

5.33 KB

newDataset/C/450.png

5.38 KB

newDataset/C/451.png

5.6 KB

newDataset/C/452.png

5.57 KB

newDataset/C/453.png

5.66 KB

newDataset/C/454.png

5.66 KB

newDataset/C/455.png

5.62 KB

newDataset/C/456.png

5.5 KB

newDataset/C/457.png

5.58 KB

newDataset/C/458.png

5.58 KB

newDataset/C/459.png

5.51 KB

newDataset/C/460.png

5.35 KB

newDataset/C/461.png

5.45 KB

newDataset/C/462.png

5.41 KB

newDataset/C/463.png

5.45 KB

newDataset/C/464.png

5.45 KB

newDataset/C/465.png

5.35 KB

newDataset/C/466.png

5.41 KB

newDataset/C/467.png

5.38 KB

newDataset/C/468.png

5.39 KB

newDataset/C/469.png

5.27 KB

newDataset/C/470.png

4.86 KB

newDataset/C/471.png

4.84 KB

newDataset/C/472.png

4.8 KB

newDataset/C/473.png

4.78 KB

newDataset/C/474.png

4.77 KB

newDataset/C/475.png

4.75 KB

newDataset/C/476.png

4.69 KB

newDataset/C/477.png

4.63 KB

newDataset/C/478.png

4.55 KB

newDataset/C/479.png

4.54 KB

newDataset/C/480.png

4.5 KB

newDataset/C/481.png

4.5 KB

newDataset/C/482.png

4.46 KB

newDataset/C/483.png

4.19 KB

newDataset/C/484.png

4.2 KB

newDataset/C/485.png

4.45 KB

newDataset/C/486.png

4.72 KB

newDataset/C/487.png

5.02 KB

newDataset/C/488.png

5.23 KB

newDataset/C/489.png

5.24 KB

newDataset/C/490.png

5.59 KB

newDataset/C/491.png

5.73 KB

newDataset/C/492.png

5.62 KB

newDataset/C/493.png

5.65 KB

newDataset/C/494.png

5.61 KB

newDataset/C/495.png

5.53 KB

newDataset/C/496.png

5.53 KB

newDataset/C/497.png

5.5 KB

newDataset/C/498.png

5.41 KB

newDataset/C/499.png

5.39 KB

newDataset/C/500.png

5.38 KB

newDataset/C/501.png

5.39 KB

newDataset/C/502.png

5.33 KB

newDataset/C/503.png

5.31 KB

newDataset/C/504.png

5.39 KB

newDataset/C/505.png

5.36 KB

newDataset/C/506.png

5.24 KB

newDataset/C/507.png

5.19 KB

newDataset/C/508.png

5.22 KB

newDataset/C/509.png

5.17 KB

newDataset/C/510.png

5.17 KB

newDataset/C/511.png

5.19 KB

newDataset/C/512.png

5.32 KB

newDataset/C/513.png

5.17 KB

newDataset/C/514.png

5.16 KB

newDataset/C/515.png

5.13 KB

newDataset/C/516.png

5.09 KB

newDataset/C/517.png

5.08 KB

newDataset/C/518.png

4.97 KB

newDataset/C/519.png

4.96 KB

newDataset/C/520.png

4.92 KB

newDataset/C/521.png

4.88 KB

newDataset/C/522.png

4.97 KB

newDataset/C/523.png

4.94 KB

newDataset/C/524.png

4.91 KB

newDataset/C/525.png

4.89 KB

newDataset/C/526.png

4.92 KB

newDataset/C/527.png

4.83 KB

newDataset/C/528.png

4.79 KB

newDataset/C/529.png

4.81 KB

newDataset/C/530.png

4.64 KB

newDataset/C/531.png

4.64 KB

newDataset/C/532.png

4.61 KB

newDataset/C/533.png

4.58 KB

newDataset/C/534.png

4.46 KB

newDataset/C/535.png

4.4 KB

newDataset/C/536.png

4.34 KB

newDataset/C/537.png

4.34 KB

newDataset/C/538.png

4.3 KB

newDataset/C/539.png

4.29 KB

newDataset/C/540.png

4.31 KB

newDataset/C/541.png

4.3 KB

newDataset/C/542.png

4.3 KB

newDataset/C/543.png

4.25 KB

newDataset/C/544.png

4.19 KB

0 commit comments

Comments
 (0)