HandwritingRecognizer.java

00001 package edu.stanford.hci.r3.events.handlers;
00002 
00003 import java.util.ArrayList;
00004 import java.util.Collections;
00005 import java.util.List;
00006 
00007 import edu.stanford.hci.r3.events.EventHandler;
00008 import edu.stanford.hci.r3.events.PenEvent;
00009 import edu.stanford.hci.r3.pen.PenSample;
00010 import edu.stanford.hci.r3.pen.handwriting.HandwritingRecognitionService;
00011 import edu.stanford.hci.r3.pen.ink.Ink;
00012 import edu.stanford.hci.r3.pen.ink.InkStroke;
00013 import edu.stanford.hci.r3.units.PatternDots;
00014 import edu.stanford.hci.r3.units.Units;
00015 import edu.stanford.hci.r3.units.coordinates.PercentageCoordinates;
00016 
00028 public abstract class HandwritingRecognizer extends EventHandler {
00029 
00033         private static final PatternDots DOTS = new PatternDots();
00034 
00038         private List<PenSample> currentStrokeSamples = new ArrayList<PenSample>();
00039 
00043         private HandwritingRecognitionService recognizerService;
00044 
00048         private List<InkStroke> strokes = Collections.synchronizedList(new ArrayList<InkStroke>());
00049 
00054         public HandwritingRecognizer() {
00055                 recognizerService = HandwritingRecognitionService.getInstance();
00056         }
00057 
00061         public void clear() {
00062                 strokes.clear();
00063         }
00064 
00065         public abstract void contentArrived();
00066 
00070         public void handleEvent(PenEvent event) {
00071                 final PercentageCoordinates percentageLocation = event.getPercentageLocation();
00072                 final Units x = percentageLocation.getX();
00073                 final Units y = percentageLocation.getY();
00074                 final long timestamp = event.getTimestamp();
00075 
00076                 // collect the ink strokes
00077                 if (event.isTypePenDown()) {
00078                         // not a pen error!
00079                         currentStrokeSamples.clear();
00080                         currentStrokeSamples.add(new PenSample(x.getValueInPixels(), y.getValueInPixels(), 128,
00081                                         timestamp));
00082                 } else if (event.isTypePenUp()) {
00083                         strokes.add(new InkStroke(currentStrokeSamples, DOTS));
00084                         contentArrived();
00085                         // System.out.println("Collected " + strokes.size() + " strokes so far.");
00086                 } else { // regular sample
00087                         currentStrokeSamples.add(new PenSample(x.getValueInPixels(), y.getValueInPixels(), 128,
00088                                         timestamp));
00089                 }
00090         }
00091 
00095         public String recognizeHandwriting() {
00096                 if (strokes.size() == 0) {
00097                         // DebugUtils.println("Num Strokes to Recognize: " + strokes.size());
00098                         return "";
00099                 } else {
00100                         final Ink ink = new Ink(strokes);
00101                         final String xml = ink.getAsXML(false /* no separator lines */);
00102                         final String result = recognizerService.recognizeHandwriting(xml);
00103                         return result;
00104                 }
00105         }
00106 
00110         public List<String> recognizeHandwritingWithAlternatives() {
00111                 recognizeHandwriting();
00112                 return recognizerService.getAlternatives();
00113         }
00114 
00118         @Override
00119         public String toString() {
00120                 return "Handwriting Recognizer: " + strokes.size() + " strokes.";
00121         }
00122 
00123 }

Generated on Sat Apr 14 18:21:35 2007 for R3 Paper Toolkit by  doxygen 1.4.7