Сеанс жестов в Android

Я делаю образец работы по распознаванию рукописного письма с помощью жестов Android. Он работает хорошо, когда я вводил 1 символ за раз . Это означает, что, когда я пишу A по экрану жестом, программа хорошо его распознает (как я положил его на библиотеку жестов ранее). На данный момент я код вроде этого.

public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture) { ArrayList<Prediction> predictions = gLib.recognize(gesture); if (predictions.size() > 0 && predictions.get(0).score > 1.0) { String letter = predictions.get(0).name; Toast.makeText(this, letter, Toast.LENGTH_SHORT).show(); if(letter.contains("A")) //when matches i print it to edittext edittext.setText("A"); . . //rest of stuff here like previous way . } } 

Но мои критерии не так. Я хочу признать слово. Я хочу написать слово одновременно, точно так же. пример

И во время написания слова для каждого успешного матча соответствующее письмо должно быть напечатано на edittext точно так же, как.

 A,N,D,R,O,I,D 

Итак, мой вопрос: как я могу его получить? Можно ли сегментировать жесты (сегментировать слово во время записи)? Будет оценен любой пример рабочего кода или ссылки.

    Если вы пишете слово в виде отдельных букв (т.е. не курсивное письмо), как показано на изображении, указанном в вопросе. Тогда просто сделайте это –

     public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture) { ArrayList<Prediction> predictions = gLib.recognize(gesture); if (predictions.size() > 0) { Prediction prediction = predictions.get(0); String letter = prediction.name; if (prediction.score > 1.0) { edittext.setText(edittext.getText().toString() + letter); } } } 

    Это по существу добавляет новое письмо к существующей строке edittext.

    Но если вы говорите о скорописном письме, то это очень сложно. Вот некоторый код, который может отслеживать скоропись.

     public class MainActivity extends Activity { private Handler mHandler; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } @Override protected void onResume() { super.onResume(); Tracker t = new Tracker(); t.start(); } @Override protected void onPause() { if (mHandler != null) mHandler.getLooper().quit(); super.onPause(); } @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_MOVE: if (mHandler != null) { Message msg = Message.obtain(); msg.obj = event.getX() + "," + event.getY(); mHandler.sendMessage(msg); } break; } return true; } private class Tracker extends Thread { private static final int LETTER_SIZE = 30; private GestureLibrary gLib; private ArrayList<GesturePoint> points; public Tracker() { points = new ArrayList<GesturePoint>(); gLib = GestureLibraries.fromRawResource(MainActivity.this, R.raw.gestures); gLib.load(); } @Override public void run() { Looper.prepare(); mHandler = new Handler() { public void handleMessage(Message msg) { String[] pos = String.valueOf(msg.obj).split(","); points.add(new GesturePoint(Float.parseFloat(pos[0]), Float.parseFloat(pos[1]), System.currentTimeMillis())); if (points.size() < LETTER_SIZE) return; GestureStroke stroke = new GestureStroke(points); Gesture gesture = new Gesture(); gesture.addStroke(stroke); ArrayList<Prediction> predictions = gLib.recognize(gesture); if (predictions.size() > 0) { Prediction prediction = predictions.get(0); String letter = prediction.name; if (prediction.score > 1.0) { Log.e("Found", letter); points.clear(); } } } }; Looper.loop(); } } } 

    Таким образом, в основном мы фиксируем позиции касания и создаем Жест из него, которые передают метод распознавания () GestureLibrary. Если распознан жест, мы печатаем его и очищаем позиции касания, чтобы можно было распознать новое письмо.

    Пример проекта : Cursive_eclipse_project.zip

    Intereting Posts