2013-04-13 5 views
5

Ich mache eine Probearbeit von handgeschriebenen Brief Erkennung durch Gesten von Android.Es funktioniert gut, wenn ich 1 Zeichen zu einer Zeit eingeben. Das heißt, wenn ich A auf dem Bildschirm durch Gesten schreibe, erkennt das Programm es gut (wie ich es früher auf Gestenbibliothek gesetzt habe). Ab sofort Code ich so.Gesture Segmentierung in Android

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 
    . 

    } 
} 

Aber meine Kriterien ist nicht das. Ich möchte ein Wort erkennen. Ich möchte ein Wort nach dem anderen schreiben.

Und während des Schreibens eines Wortes für jede erfolgreiche Übereinstimmung sollte der entsprechende Buchstabe auf edittext genauso wie als gedruckt werden.

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

Also meine Frage ist, wie kann ich es gewinnen? Ist es möglich, Gesten zu segmentieren (das Wort während des Schreibens zu segmentieren)? Jedes funktionierende Codebeispiel oder Links wäre willkommen.

Antwort

4

Wenn Sie ein Wort als separate Buchstaben schreiben (d. H. Nicht kursiv schreiben), wie in der Abbildung in der Frage gezeigt. Dann einfach tun -

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); 
     } 
    } 
} 

Das ist im Wesentlichen das Hinzufügen des neuen Buchstaben an die bestehende Edittext-Zeichenfolge.

Aber wenn Sie über Schreibschrift schreiben, dann ist es sehr kompliziert. Hier ist ein Code, der kursives Schreiben verfolgen kann.

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(); 
     } 
    } 
} 

Also im Grunde wir die Berührungspositionen erfassen und eine Geste von ihm zu schaffen, die() -Methode von GestureLibrary erkennen passieren. Wenn eine Geste erkannt wird, drucken wir sie und löschen die Berührungspositionen, so dass ein neuer Buchstabe erkannt werden kann.

Beispielprojekt: Cursive_eclipse_project.zip

+0

Ja, es Kursiv ist .. – ridoy

+0

meine bearbeitete Antwort für einige Beispielcode anzeigen. – appsroxcom

+0

Ich werde es versuchen und Sie wissen lassen, danke für Ihre Mühe. – ridoy

Verwandte Themen