def test_export_import_case_1(self): gdb1 = Recognizer(db=[self.Ninvar]) gdb2 = Recognizer() g = gdb1.export_gesture(name='N') gdb2.import_gesture(g) r = gdb2.recognize([Ncandidate], max_gpf=0) self.assertEqual(r.best['name'], 'N') self.assertTrue(r.best['score'] > 0.94 and r.best['score'] < 0.95)
def test_export_import_case_2(self): from tempfile import mkstemp import os gdb1 = Recognizer(db=[self.Ninvar, self.Tinvar]) gdb2 = Recognizer() fh, fn = mkstemp() os.close(fh) g = gdb1.export_gesture(name='N', filename=fn) gdb2.import_gesture(filename=fn) os.unlink(fn) self.assertEqual(len(gdb1.db), 2) self.assertEqual(len(gdb2.db), 1) r = gdb2.recognize([Ncandidate], max_gpf=0) self.assertEqual(r.best['name'], 'N') self.assertTrue(r.best['score'] > 0.94 and r.best['score'] < 0.95)
class CalculatorApp(App): def handle_gesture_cleanup(self, surface, g, *l): if hasattr(g, '_result_label'): surface.remove_widget(g._result_label) def handle_gesture_discard(self, surface, g, *l): if surface.draw_timeout == 0: return text = '[b]Discarded:[/b] Not enough input' g._result_label = Label(text=text, markup=True, size_hint=(None, None), center=(g.bbox['minx'], g.bbox['miny'])) self.surface.add_widget(g._result_label) def handle_gesture_complete(self, surface, g, *l): result = self.recognizer.recognize(g.get_vectors()) result._gesture_obj = g result.bind(on_complete=self.handle_recognize_complete) def handle_recognize_complete(self, result, *l): if self.surface.draw_timeout == 0: return best = result.best if best['name'] is None: text = '[b]No match[/b]' else: text = 'Name: [b]%s[/b]\nScore: [b]%f[/b]\nDistance: [b]%f[/b]' % ( best['name'], best['score'], best['dist']) self.calc_bar.update_display(best['name']) g = result._gesture_obj g._result_label = Label(text=text, markup=True, size_hint=(None, None), center=(g.bbox['minx'], g.bbox['miny'])) self.surface.add_widget(g._result_label) def build(self): self.manager = ScreenManager(transition=SlideTransition(duration=.15)) self.recognizer = Recognizer() self.recognizer.import_gesture(filename='../res/calc_symbols.kg') self.calc_bar = CalcBar() # Gesture screen surface = GestureSurface(line_width=2, draw_bbox=True, use_random_color=True) surface_screen = Screen(name='surface') surface_screen.add_widget(surface) self.manager.add_widget(surface_screen) surface.bind(on_gesture_discard=self.handle_gesture_discard) surface.bind(on_gesture_complete=self.handle_gesture_complete) surface.bind(on_gesture_cleanup=self.handle_gesture_cleanup) self.surface = surface # NumPad screen numpad = Numpad(self.calc_bar) numpad_screen = Screen(name='numpad') numpad_screen.add_widget(numpad) self.manager.add_widget(numpad_screen) # Settings screen app_settings = CalculatorAppSettings() ids = app_settings.ids ids.max_strokes.bind(value=surface.setter('max_strokes')) ids.temporal_win.bind(value=surface.setter('temporal_window')) ids.timeout.bind(value=surface.setter('draw_timeout')) ids.line_width.bind(value=surface.setter('line_width')) ids.draw_bbox.bind(value=surface.setter('draw_bbox')) ids.use_random_color.bind(value=surface.setter('use_random_color')) settings_screen = Screen(name='settings') settings_screen.add_widget(app_settings) self.manager.add_widget(settings_screen) # Wrap in a gridlayout so the main menu is always visible layout = GridLayout(cols=1) layout.add_widget(self.calc_bar) layout.add_widget(MainMenu()) layout.add_widget(self.manager) return layout