class MyPaintApp(App): def build(self): main_box = BoxLayout() painter_size = '500dp' draw_parent = BoxLayout(orientation='vertical', size_hint_x = None, width = painter_size ) labels_box = BoxLayout(orientation='vertical') main_box.add_widget(draw_parent) main_box.add_widget(labels_box) self.painter = MyPaintWidget(self.update_res, size_hint_y = None, height = painter_size ) clearbtn = Button(text='Clear') clearbtn.bind(on_release=self.clear_canvas) draw_parent.add_widget(self.painter) draw_parent.add_widget(clearbtn) # addbtn = Button(text='add') # addbtn.bind(on_release=self.add_ev) # labels_box.add_widget(addbtn) w_nums = [] for i in range(10): n_w = NumRes(i) w_nums.append(NumRes(i)) labels_box.add_widget(n_w) self.w_nums = w_nums self.labels_box = labels_box self.machine = ML((28*28, 16, 16, 10, )) self.machine.load_weight('weights_m.out') return main_box def clear_canvas(self, obj): self.painter.canvas.clear() def update_res(self): self.painter.export_to_png('test.png') image = Image.open('test.png') im = np.asarray(image)[..., 3] / 255 f = True while f: f = False if min(im.shape) > 28 and np.sum(im[:, 0]) == 0 and np.sum(im[0, :]) == 0: # remove first row im = im[1:, :] # remove first col im = im[:, 1:] f = True if min(im.shape) > 28 and np.sum(im[:, -1]) == 0 and np.sum(im[-1, :]) == 0: # remove last row im = im[:-1, :] # remove last col im = im[:, :-1] f = True if min(im.shape) > 28 and np.sum(im[:, -1]) == 0 and np.sum(im[0, :]) == 0: # remove first row im = im[1:, :] # remove last col im = im[:, :-1] f = True if min(im.shape) > 28 and np.sum(im[:, 0]) == 0 and np.sum(im[-1, :]) == 0: # remove last row im = im[:-1, :] # remove first col im = im[:, 1:] f = True image = Image.fromarray(np.uint8(im*255)).resize((20, 20, )) im = np.asarray(image) / 255 for i in range(4): im = np.insert(im, 0, np.zeros((20)), axis =1) for i in range(4): im = np.append(im, np.zeros((20, 1)), axis =1) for i in range(4): im = np.insert(im, 0, np.zeros((28)), axis =0) for i in range(4): im = np.append(im, np.zeros((1, 28,)), axis =0) image = Image.fromarray(np.uint8(im*255)) image.save('test.png') res = self.machine(im.squeeze().reshape(28*28))[-1] res_dict = { k: res[k] for k in range(len(res)) } res_dict = { k: int(round(v * 100)) for k, v in res_dict.items() } res_tup = tuple(sorted(res_dict.items(), key=lambda item: item[1])) # print(res_dict) # print(res) self.labels_box.clear_widgets() for n, v in reversed(res_tup): self.w_nums[n].set(v) self.labels_box.add_widget(self.w_nums[n])
for i in range(20): plt.imshow(test_data[i][0].reshape(( 28, 28, ))) #%% from ml import ML b_machine = ML(( 28 * 28, 16, 16, 10, )) b_machine.load_weight('weights.out') # b_machine.save_weight('weights.out') #%% train_len = 5000 test_len = 10000 if train_len > 10000 else train_len machine = b_machine.copy() machine.load_weight('weights_m.out') machine.train(train_data[:train_len], 80) # machine.save_weight('weights_m.out') print() avg_pos = 0 b_avg_pos = 0