Fixed up code, made it prettier, it now follows the stylguide better and is more readable.
git-svn-id: https://robotics.mvla.net/svn/frc971/2013/trunk/src@4182 f308d9b7-e957-4cde-b6ac-9a88185e7312
diff --git a/971cv/src/org/spartanrobotics/AccepterThread.java b/971cv/src/org/spartanrobotics/AccepterThread.java
new file mode 100644
index 0000000..ad599de
--- /dev/null
+++ b/971cv/src/org/spartanrobotics/AccepterThread.java
@@ -0,0 +1,140 @@
+/**
+ *
+ */
+package org.spartanrobotics;
+
+/**
+ * @author daniel
+ * Accepts clients for data server
+ */
+
+import java.io.IOException;
+
+import java.nio.ByteBuffer;
+import java.nio.channels.ServerSocketChannel;
+import java.nio.channels.SocketChannel;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.logging.Logger;
+
+/** Thread accepts new connections for the server and sends data to them
+ * without blocking.
+ */
+public class AccepterThread implements Runnable {
+
+ private final static Logger LOG = Logger.getLogger(
+ AccepterThread.class.getName());
+
+ private ServerSocketChannel sock;
+
+ private List<Client> connected = new ArrayList<Client>();
+
+ private Thread t;
+
+ /** Constructor
+ *
+ * @param sock is the ServerSocketChannel that you want to monitor
+ */
+ public AccepterThread(ServerSocketChannel sock) {
+ t = new Thread(this, "Accepter Thread");
+ t.setPriority(Thread.NORM_PRIORITY - 1);
+ //lowish priority so Image Processor overrides it
+ this.sock = sock;
+ t.start();
+ }
+
+ /** Runs in separate thread. Continually accepts new connections. */
+ public void run() {
+ SocketChannel clientSock;
+ while (true) {
+ try {
+ clientSock = sock.accept();
+ //our writes must not block
+ clientSock.configureBlocking(false);
+ Client client = new Client();
+ client.channel = clientSock;
+ connected.add(client);
+ }
+ catch (IOException e) {
+ LOG.warning("Cannot serve image processing results to client:"
+ + e.getMessage());
+ Messages.warning("Cannot serve image processing results to client:"
+ + e.getMessage());
+ }
+ }
+ }
+
+ /** Sends a message to all currently connected clients.
+ *
+ * @param message is the message that you want to send.
+ */
+ public void sendtoAll(ByteBuffer message) {
+ /* Copy our connected list, so we don't have
+ * to hold our lock forever if the writes block.
+ */
+ List<Client> connectedTemp = new ArrayList<Client>();
+ for (Client client : connected) {
+ connectedTemp.add(client);
+ }
+
+ int result;
+ for (Client client : connectedTemp) {
+ try {
+
+ /** If this socket has data from the
+ * last send operation still waiting to be
+ * sent, send this instead of our original
+ * message. Since we generally want only
+ * current data, our original message will
+ * not be missed. However, it is imperative
+ * that we finish our pending transmission,
+ * because an incomplete transmission could
+ * leave a client thread somewhere blocking
+ * indefinitely.
+ */
+ if (client.toSend != null) {
+ message = client.toSend;
+ }
+
+ result = client.channel.write(message);
+
+ /*if our send buffer is full, store our message away
+ * so we can try again later without halting the thread.
+ */
+ if (message.remaining() > 0) {
+ client.toSend = message;
+ //check and update our count of failed send attempts
+ ++client.failedAttempts;
+ if (client.failedAttempts >= 100) {
+ //Socket has become dysfunctional
+ LOG.info("Write would have blocked 100 times. Assuming peer disconect.");
+ connected.remove(client);
+ }
+ }
+
+ if (result == -1) {
+ //The write failed. This is probably because the client disconnected.
+ LOG.info("Write returned -1. Client has probably disconnected.");
+ connected.remove(client);
+ }
+ }
+ catch (IOException e) {
+ //The write failed. This is probably because the client disconnected.
+ LOG.info("Write threw IOException. Client has probably disconnected.");
+ connected.remove(client);
+ }
+ }
+ }
+
+ /** Overloaded sendtoAll method for byte arrays. */
+ public void sendtoAll(byte[] message) {
+ sendtoAll(ByteBuffer.wrap(message));
+ }
+
+ /** Overloaded sendtoAll method for Strings. */
+ public void sendtoAll(String message) {
+ sendtoAll(message.getBytes());
+ }
+}
diff --git a/971cv/src/org/spartanrobotics/Client.java b/971cv/src/org/spartanrobotics/Client.java
new file mode 100644
index 0000000..77bac74
--- /dev/null
+++ b/971cv/src/org/spartanrobotics/Client.java
@@ -0,0 +1,25 @@
+/**
+ *
+ */
+package org.spartanrobotics;
+
+import java.nio.ByteBuffer;
+import java.nio.channels.SocketChannel;
+
+/**
+ * @author daniel
+ *
+ */
+
+/** Helper class to store data for AccepterThread. */
+public class Client {
+ public SocketChannel channel; //the client's socket
+ /* Holds overflow data when socket's send buffer gets full, so that
+ * thread can continue running.
+ */
+ public ByteBuffer toSend;
+ /* Keeps track of how many times a non-blocking write operation on a socket
+ * has not written anything because it's buffer was full.
+ */
+ public int failedAttempts;
+}
diff --git a/971cv/src/org/spartanrobotics/DebugCanvas.java b/971cv/src/org/spartanrobotics/DebugCanvas.java
new file mode 100644
index 0000000..578d79e
--- /dev/null
+++ b/971cv/src/org/spartanrobotics/DebugCanvas.java
@@ -0,0 +1,29 @@
+package org.spartanrobotics;
+
+import com.googlecode.javacv.CanvasFrame;
+import com.googlecode.javacv.cpp.opencv_core.IplImage;
+
+public class DebugCanvas {
+ public boolean show;
+ private CanvasFrame canvasFrame;
+ private String name;
+
+ public DebugCanvas(String name) {
+ this.name = name;
+ }
+
+ public void showImage(IplImage image) {
+ if (show) {
+ if (canvasFrame == null) {
+ canvasFrame = new CanvasFrame(name);
+ }
+ canvasFrame.setName(name);
+ canvasFrame.showImage(image.getBufferedImage());
+ } else {
+ if (canvasFrame != null) {
+ canvasFrame.dispose();
+ canvasFrame = null;
+ }
+ }
+ }
+}
diff --git a/971cv/src/org/spartanrobotics/DebugServerRun.java b/971cv/src/org/spartanrobotics/DebugServerRun.java
new file mode 100644
index 0000000..b8c788f
--- /dev/null
+++ b/971cv/src/org/spartanrobotics/DebugServerRun.java
@@ -0,0 +1,146 @@
+package org.spartanrobotics;
+
+import java.io.BufferedInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+
+import java.net.InetSocketAddress;
+import java.nio.ByteBuffer;
+import java.nio.channels.ServerSocketChannel;
+import java.nio.channels.SocketChannel;
+
+import java.util.Arrays;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import com.googlecode.javacv.OpenCVFrameGrabber;
+import com.googlecode.javacv.cpp.opencv_core.*;
+import static com.googlecode.javacv.cpp.opencv_highgui.*;
+
+public class DebugServerRun {
+
+ private final static Logger LOG = Logger.getLogger(
+ DebugServerRun.class.getName());
+
+ final OpenCVFrameGrabber grabber = new OpenCVFrameGrabber(-1);
+
+ private ServerSocketChannel sock;
+ private SocketChannel client;
+
+ /** Constructs a formatted boundary header from a timestamp and content length. */
+ private ByteBuffer CreateTransmission(long content_length, double timestamp) {
+ StringBuilder ret = new StringBuilder();
+ ret.append("\r\n--boundarydonotcross\r\n");
+ ret.append("Content-Type: image/jpeg\r\n");
+ ret.append("Content-Length: ");
+ ret.append(content_length);
+ ret.append("\r\n");
+ ret.append("X-Timestamp: ");
+ ret.append(timestamp);
+ ret.append("\r\n\r\n");
+ return ByteBuffer.wrap(ret.toString().getBytes());
+ }
+
+ /** Loop that pushes a data stream to the client. */
+ private void push() {
+ try {
+ grabber.start();
+ }
+ catch (Exception e) {
+ LOG.severe("Could not start frame grabber.");
+ return;
+ }
+ IplImage img;
+ long content_size;
+ File buff_file;
+ InputStream input;
+ double timestamp;
+ while (true) {
+ //get some image data
+ try {
+ img = grabber.grab();
+ timestamp = System.currentTimeMillis();
+ /*We buffer through /dev/shm, just to make the conversion process easier.
+ * I know this is really ugly, but it works a lot better than what
+ * I was doing before, which segfaulted.
+ */
+ cvSaveImage("/dev/shm/DebugServerBuffer.jpg", img);
+ buff_file = new File("/dev/shm/DebugServerBuffer.jpg");
+ content_size = buff_file.length();
+ int totalBytesRead = 0;
+ input = new BufferedInputStream(new FileInputStream(buff_file));
+ byte[] result = new byte[(int)content_size];
+ while(totalBytesRead < result.length){
+ int bytesRemaining = result.length - totalBytesRead;
+ //input.read() returns -1, 0, or more :
+ int bytesRead = input.read(result, totalBytesRead, bytesRemaining);
+ if (bytesRead > 0){
+ totalBytesRead = totalBytesRead + bytesRead;
+ }
+ }
+ ByteBuffer header = CreateTransmission(content_size, timestamp);
+ ByteBuffer bbuf = ByteBuffer.wrap(result);
+ ByteBuffer to_send = ByteBuffer.allocate(header.capacity() + bbuf.capacity());
+ to_send.put(header);
+ to_send.put(bbuf);
+ to_send.rewind();
+ SocketCommon.sendAll(client, to_send);
+ }
+ catch (Exception e) {
+ LOG.warning("Could not grab frame.");
+ continue;
+ }
+ }
+ }
+
+ /** Constructor to start the server and bind it to a port. */
+ public DebugServerRun(final int port) throws IOException {
+ sock = ServerSocketChannel.open();
+ sock.socket().bind(new InetSocketAddress(9714));
+ client = sock.accept();
+ client.configureBlocking(false);
+ //we are now connected to our client. Wait for them to send us a header.
+ LOG.info("Reading headers...");
+ SocketCommon.readtoBoundary(client, "\r\n\r\n");
+ //send one back
+ LOG.info("Writing headers...");
+ SocketCommon.sendAll(client, "donotcross\r\n");
+ }
+
+ /** Runs the server, and concurrently starts the vision processor with -vision flag. */
+ public static void main(final String args[]) throws IOException {
+ //main function for server
+
+ String atomIP = null;
+ try {
+ atomIP = args[0];
+ }
+ catch (ArrayIndexOutOfBoundsException e) {
+ System.out.println("Usage: DebugServerRun [atom IP address]");
+ System.exit(0);
+ }
+
+ //set logger to log everything
+ LOG.setLevel(Level.ALL);
+ try {
+ LogHandler handler = new LogHandler("ds_vision.log");
+ TimeFormatter formatter = new TimeFormatter();
+ handler.setFormatter(formatter);
+ LOG.addHandler(handler);
+ }
+ catch (FileNotFoundException e) {
+ System.err.println("Warning: Logging initialization failed.");
+ }
+
+ if (Arrays.asList(args).contains("-vision")) {
+ LOG.info("Starting vision processor.");
+ new TestClient(atomIP);
+ }
+
+ DebugServerRun server = new DebugServerRun(9714);
+ server.push();
+ }
+}
diff --git a/971cv/src/org/spartanrobotics/HttpClient.java b/971cv/src/org/spartanrobotics/HttpClient.java
new file mode 100644
index 0000000..460b9b4
--- /dev/null
+++ b/971cv/src/org/spartanrobotics/HttpClient.java
@@ -0,0 +1,96 @@
+package org.spartanrobotics;
+
+//@author: daniel
+
+import java.io.*;
+import java.net.*;
+
+import java.awt.image.BufferedImage;
+
+import javax.imageio.ImageIO;
+
+import java.nio.channels.SocketChannel;
+import java.nio.ByteBuffer;
+
+import java.util.logging.Logger;
+
+import aos.ChannelImageGetter;
+
+import edu.wpi.first.wpijavacv.WPIColorImage;
+
+public class HTTPClient implements ImageGetter {
+ //Connects to HTTP Server on robot and receives images
+
+ /** whether or not to print debug messages to stdout. */
+ private final static boolean LOCAL_DEBUG = false;
+
+ private String atomIP;
+
+ private SocketChannel sock;
+
+ private ChannelImageGetter cgetter;
+
+ private final static Logger LOG = Logger.getLogger(
+ HTTPClient.class.getName());
+
+ /** Small helper method for printing debug messages to stdout. */
+ private void WriteDebug(String message) {
+ //small helper function to write debug messages
+ if (LOCAL_DEBUG)
+ LOG.info("LOCAL_DEBUG: " + message);
+ }
+
+ /** the constructor, initializes connection, and sets up aos getter.
+ * @throws IOException */
+ public HTTPClient(String atomIP) throws IOException {
+ //Initialize socket connection to robot
+ this.atomIP = atomIP;
+ sock = SocketChannel.open();
+ WriteDebug("Connecting to server at " + atomIP);
+ sock.connect(new InetSocketAddress(atomIP, 9714));
+ sock.configureBlocking(false);
+ //Write headers
+ //HTTPStreamer does not actually use the headers, so we can just write terminating chars.
+ WriteDebug("Writing headers...");
+ SocketCommon.sendAll(sock, "\r\n\r\n");
+ //Receive headers
+ WriteDebug("Reading headers...");
+ SocketCommon.readtoBoundary(sock, "donotcross\r\n");
+ WriteDebug("Now receiving data.");
+ cgetter = new ChannelImageGetter(sock);
+ }
+
+ /** Grabs the most current frame from the HTTPStreamer stream.
+ * Returns a class instance with image and timestamp attributes. */
+ public WPIColorImage getFrame() {
+ //Use Brian's code to extract an image and timestamp from raw server data.
+ ByteBuffer binaryImage = cgetter.getJPEG();
+ if (binaryImage == null) {
+ Messages.severe("Could not parse data from robot. See the log for details.");
+ return null;
+ }
+ //Decode ByteBuffer into an IplImage
+ byte[] b = new byte[binaryImage.remaining()];
+ binaryImage.get(b);
+ try {
+ InputStream iis = new ByteArrayInputStream(b);
+ BufferedImage bImageFromConvert = ImageIO.read(iis);
+ WriteDebug("Image processing successful.");
+ return new WPIColorImage(bImageFromConvert);
+ }
+ catch (IOException e) {
+ LOG.warning("Image processing failed: " + e.getMessage());
+ return null;
+ }
+ }
+
+ /** Gets the name to display at the top of the image window. */
+ public String getName() {
+ return atomIP;
+ }
+
+ /** Gets the current image's timestamp. */
+ public double getTimestamp() {
+ return cgetter.getTimestamp();
+ }
+}
diff --git a/971cv/src/org/spartanrobotics/ImageGetter.java b/971cv/src/org/spartanrobotics/ImageGetter.java
new file mode 100644
index 0000000..06a1534
--- /dev/null
+++ b/971cv/src/org/spartanrobotics/ImageGetter.java
@@ -0,0 +1,22 @@
+/**
+ *
+ */
+package org.spartanrobotics;
+
+import edu.wpi.first.wpijavacv.WPIColorImage;
+
+/**
+ * @author daniel
+ *
+ */
+
+/** Interface for program image contributors. */
+public interface ImageGetter {
+
+ /** Gets the next image from the source/ */
+ WPIColorImage getFrame();
+
+ /** Gets the name of the image source. */
+ String getName();
+
+}
diff --git a/971cv/src/org/spartanrobotics/LogHandler.java b/971cv/src/org/spartanrobotics/LogHandler.java
new file mode 100644
index 0000000..5f9539b
--- /dev/null
+++ b/971cv/src/org/spartanrobotics/LogHandler.java
@@ -0,0 +1,65 @@
+/**
+ *
+ */
+package org.spartanrobotics;
+
+import java.io.FileOutputStream;
+import java.io.FileNotFoundException;
+import java.io.PrintWriter;
+
+import java.util.logging.Handler;
+import java.util.logging.LogRecord;
+
+/**
+ * @author daniel
+ *
+ */
+
+/** Logs data to custom files, using specific formatting. */
+public class LogHandler extends Handler {
+
+ private FileOutputStream ofstream;
+ PrintWriter writer;
+
+ /** Constructor for log handler.
+ *
+ * @param filename is the name of the file you want to log to.
+ * @throws FileNotFoundException if file cannot be opened or created.
+ */
+ public LogHandler (String filename) throws FileNotFoundException {
+ super();
+
+ if (filename == null || filename == "") {
+ filename = "logfile.log";
+ }
+
+ //check if file exists, and if not, create it
+ ofstream = new FileOutputStream(filename);
+ writer = new PrintWriter(ofstream);
+ setFormatter(new TimeFormatter());
+ }
+
+ /*Required methods*/
+
+ /** Is required by API. Writes a new message to the log.
+ * @param message is the message you want to log.
+ */
+ public void publish(LogRecord message) {
+ //record a message
+ if (!isLoggable(message)) {
+ //ensure that this message should be logged by this handler
+ return;
+ }
+ writer.print(getFormatter().format(message)); //Formatter adds trailing \n
+ }
+
+ /** Is required by API. Flushes the writer. */
+ public void flush() {
+ writer.flush();
+ }
+
+ /** Is required by API. Closes logfile. */
+ public void close() throws SecurityException {
+ writer.close();
+ }
+}
diff --git a/971cv/src/org/spartanrobotics/Messages.java b/971cv/src/org/spartanrobotics/Messages.java
new file mode 100644
index 0000000..37d80bd
--- /dev/null
+++ b/971cv/src/org/spartanrobotics/Messages.java
@@ -0,0 +1,41 @@
+/**
+ *
+ */
+package org.spartanrobotics;
+
+import javax.swing.JOptionPane;
+
+/**
+ * @author daniel
+ *
+ */
+
+import com.googlecode.javacv.CanvasFrame;
+
+/** Allows other classes to display message boxes bound to main window. */
+public class Messages {
+
+ private static CanvasFrame main;
+
+ /** Constructor
+ *
+ * @param main is the window your messages will be associated with.
+ */
+ public static void SetWindow(CanvasFrame main) {
+ Messages.main = main;
+ }
+ /** Shows a warning message. */
+ public static void warning(String message) {
+ JOptionPane.showMessageDialog(main, message, "Warning:", JOptionPane.WARNING_MESSAGE);
+ }
+
+ /** Shows a severe error message. */
+ public static void severe(String message) {
+ JOptionPane.showMessageDialog(main, message, "Severe:", JOptionPane.ERROR_MESSAGE);
+ }
+
+ /** Shows an info message. */
+ public static void info(String message) {
+ JOptionPane.showMessageDialog(main, message);
+ }
+}
diff --git a/971cv/src/org/spartanrobotics/Recognizer.java b/971cv/src/org/spartanrobotics/Recognizer.java
new file mode 100644
index 0000000..f1f3234
--- /dev/null
+++ b/971cv/src/org/spartanrobotics/Recognizer.java
@@ -0,0 +1,33 @@
+package org.spartanrobotics;
+
+import edu.wpi.first.wpijavacv.WPIColorImage;
+
+/**
+ * Vision target recognizer.
+ *
+ * @author jerry
+ */
+public interface Recognizer {
+
+ /**
+ * Sets the HSV filter to allow H in [minHue .. maxHue], S >= minSat,
+ * V >= minVal.
+ */
+ void setHSVRange(int minHue, int maxHue, int minSat, int minVal);
+
+ int getHueMin();
+ int getHueMax();
+ int getSatMin();
+ int getValMin();
+
+ /** Enables/disables windows to view intermediate stages, for tuning. */
+ void showIntermediateStages(boolean enable);
+
+ /**
+ * Processes a camera image, returning an image to display for targeting
+ * and debugging, e.g. with cross-hairs and marked targets.
+ *<p>
+ * SIDE EFFECTS: May modify cameraImage.
+ */
+ Target processImage(WPIColorImage cameraImage);
+}
diff --git a/971cv/src/org/spartanrobotics/Recognizer2013.java b/971cv/src/org/spartanrobotics/Recognizer2013.java
new file mode 100644
index 0000000..aafa6ab
--- /dev/null
+++ b/971cv/src/org/spartanrobotics/Recognizer2013.java
@@ -0,0 +1,298 @@
+package org.spartanrobotics;
+
+import java.util.ArrayList;
+import java.util.logging.Logger;
+
+import com.googlecode.javacv.cpp.opencv_core;
+import com.googlecode.javacv.cpp.opencv_core.CvSize;
+import com.googlecode.javacv.cpp.opencv_core.IplImage;
+import com.googlecode.javacv.cpp.opencv_imgproc;
+import com.googlecode.javacv.cpp.opencv_imgproc.IplConvKernel;
+
+import edu.wpi.first.wpijavacv.DaisyExtensions;
+import edu.wpi.first.wpijavacv.WPIBinaryImage;
+import edu.wpi.first.wpijavacv.WPIColor;
+import edu.wpi.first.wpijavacv.WPIColorImage;
+import edu.wpi.first.wpijavacv.WPIContour;
+import edu.wpi.first.wpijavacv.WPIPoint;
+import edu.wpi.first.wpijavacv.WPIPolygon;
+
+/**
+ * Vision target recognizer for FRC 2013.
+ *
+ * @author jrussell
+ * @author jerry
+ */
+public class Recognizer2013 implements Recognizer {
+
+ private final static Logger LOG = Logger.getLogger(
+ Recognizer2013.class.getName());
+
+ // --- Tunable recognizer constants.
+ static final double kRoughlyHorizontalSlope = Math.tan(Math.toRadians(30));
+ static final double kRoughlyVerticalSlope = Math.tan(Math.toRadians(90 - 30));
+ static final int kHoleClosingIterations = 2;
+ static final double kPolygonPercentFit = 12;
+ static final int kMinWidthAt320 = 35; // for high goal and middle goals
+
+ // --- Field dimensions.
+ // The target aspect ratios are for the midlines of the vision target tape.
+ static final double kGoalWidthIn = 54; // of the high and middle targets
+ static final double kTargetWidthIn = kGoalWidthIn + 4;
+ static final double kHighGoalAspect = (21 + 4) / kTargetWidthIn;
+ static final double kMiddleGoalAspect = (24 + 4) / kTargetWidthIn;
+ static final double kMinAspect = kHighGoalAspect * 0.6;
+ static final double kMaxAspect = kMiddleGoalAspect * 1.4;
+ static final double kTopTargetHeightIn = 104.125 + 21.0/2; // center of target
+
+ // --- Robot and camera dimensions.
+ static final double kShooterOffsetDeg = 0; // azimuth offset from camera to shooter
+ static final double kHorizontalFOVDeg = 44.0; // Logitech C210 camera
+ static final double kVerticalFOVDeg = 480.0 / 640.0 * kHorizontalFOVDeg;
+ static final double kCameraHeightIn = 24.0; // TODO
+ static final double kCameraPitchDeg = 21.0; // TODO
+ static final double kTanHFOV2 = Math.tan(Math.toRadians(kHorizontalFOVDeg / 2));
+ static final double kTanVFOV2 = Math.tan(Math.toRadians(kVerticalFOVDeg / 2));
+
+ // --- Colors for drawing indicators on the image.
+ private static final WPIColor reject1Color = WPIColor.GRAY;
+ private static final WPIColor reject2Color = WPIColor.YELLOW;
+ private static final WPIColor candidateColor = WPIColor.BLUE;
+ private static final WPIColor targetColor = WPIColor.RED;
+
+ // --- Color thresholds, initialized in the constructor.
+ private int min1Hue, max1Hue, min1Sat, min1Val;
+
+ // Show intermediate images for parameter tuning.
+ private final DebugCanvas thresholdedCanvas = new DebugCanvas("thresholded");
+ private final DebugCanvas morphedCanvas = new DebugCanvas("morphed");
+
+ // Data to reuse for each frame.
+ private final DaisyExtensions daisyExtensions = new DaisyExtensions();
+ private final IplConvKernel morphKernel = IplConvKernel.create(3, 3, 1, 1,
+ opencv_imgproc.CV_SHAPE_RECT, null);
+ private final ArrayList<WPIPolygon> polygons = new ArrayList<WPIPolygon>();
+
+ // Frame-size-dependent data to reuse for each frame.
+ private CvSize size = null;
+ private WPIColorImage rawImage;
+ private IplImage bin;
+ private IplImage hsv;
+ private IplImage hue;
+ private IplImage sat;
+ private IplImage val;
+ private int minWidth;
+ private WPIPoint linePt1, linePt2; // crosshair endpoints
+
+ public Recognizer2013() {
+ setHSVRange(70, 106, 137, 27);
+ }
+
+ @Override
+ public void setHSVRange(int minHue, int maxHue, int minSat, int minVal) {
+ min1Hue = minHue - 1; // - 1 because cvThreshold() does > instead of >=
+ max1Hue = maxHue + 1;
+ min1Sat = minSat - 1;
+ min1Val = minVal - 1;
+ }
+ @Override
+ public int getHueMin() { return min1Hue + 1; }
+ @Override
+ public int getHueMax() { return max1Hue - 1; }
+ @Override
+ public int getSatMin() { return min1Sat + 1; }
+ @Override
+ public int getValMin() { return min1Val + 1; }
+
+ @Override
+ public void showIntermediateStages(boolean enable) {
+ thresholdedCanvas.show = enable;
+ morphedCanvas.show = enable;
+ }
+
+ @Override
+ public Target processImage(WPIColorImage cameraImage) {
+ // (Re)allocate the intermediate images if the input is a different
+ // size than the previous image.
+ if (size == null || size.width() != cameraImage.getWidth()
+ || size.height() != cameraImage.getHeight()) {
+ size = opencv_core.cvSize(cameraImage.getWidth(),
+ cameraImage.getHeight());
+ rawImage = DaisyExtensions.makeWPIColorImage(
+ DaisyExtensions.getIplImage(cameraImage));
+ bin = IplImage.create(size, 8, 1);
+ hsv = IplImage.create(size, 8, 3);
+ hue = IplImage.create(size, 8, 1);
+ sat = IplImage.create(size, 8, 1);
+ val = IplImage.create(size, 8, 1);
+ minWidth = (kMinWidthAt320 * cameraImage.getWidth() + 319) / 320;
+
+ int horizontalOffsetPixels = (int)Math.round(
+ kShooterOffsetDeg * size.width() / kHorizontalFOVDeg);
+ int x = size.width() / 2 + horizontalOffsetPixels;
+ linePt1 = new WPIPoint(x, size.height() - 1);
+ linePt2 = new WPIPoint(x, 0);
+ } else {
+ // Copy the camera image so it's safe to draw on.
+ opencv_core.cvCopy(DaisyExtensions.getIplImage(cameraImage),
+ DaisyExtensions.getIplImage(rawImage));
+ }
+
+ IplImage input = DaisyExtensions.getIplImage(rawImage);
+
+ // Threshold the pixels in HSV color space.
+ // TODO(jerry): Do this in one pass of a pixel-processing loop.
+ opencv_imgproc.cvCvtColor(input, hsv, opencv_imgproc.CV_BGR2HSV_FULL);
+ opencv_core.cvSplit(hsv, hue, sat, val, null);
+
+ // NOTE: Since red is at the end of the cyclic color space, you can OR
+ // a threshold and an inverted threshold to match red pixels.
+ opencv_imgproc.cvThreshold(hue, bin, min1Hue, 255, opencv_imgproc.CV_THRESH_BINARY);
+ opencv_imgproc.cvThreshold(hue, hue, max1Hue, 255, opencv_imgproc.CV_THRESH_BINARY_INV);
+ opencv_imgproc.cvThreshold(sat, sat, min1Sat, 255, opencv_imgproc.CV_THRESH_BINARY);
+ opencv_imgproc.cvThreshold(val, val, min1Val, 255, opencv_imgproc.CV_THRESH_BINARY);
+
+ // Combine the results to obtain a binary image which is mostly the
+ // interesting pixels.
+ opencv_core.cvAnd(hue, bin, bin, null);
+ opencv_core.cvAnd(bin, sat, bin, null);
+ opencv_core.cvAnd(bin, val, bin, null);
+
+ thresholdedCanvas.showImage(bin);
+
+ // Fill in gaps using binary morphology.
+ opencv_imgproc.cvMorphologyEx(bin, bin, null, morphKernel,
+ opencv_imgproc.CV_MOP_CLOSE, kHoleClosingIterations);
+
+ morphedCanvas.showImage(bin);
+
+ // Find contours.
+ //
+ // NOTE: If we distinguished between the inner and outer boundaries of
+ // the vision target rectangles, we could apply a more accurate width
+ // filter and more accurately compute the target range.
+ WPIBinaryImage binWpi = DaisyExtensions.makeWPIBinaryImage(bin);
+ WPIContour[] contours = daisyExtensions.findConvexContours(binWpi);
+
+ // Simplify the contours to polygons and filter by size and aspect ratio.
+ //
+ // TODO(jerry): Also look for the two vertical stripe vision targets.
+ // They'll greatly increase the precision of measuring the distance. If
+ // both stripes are visible, they'll increase the accuracy for
+ // identifying the high goal.
+ polygons.clear();
+ for (WPIContour c : contours) {
+ if (c.getWidth() >= minWidth) {
+ double ratio = ((double) c.getHeight()) / c.getWidth();
+ if (ratio >= kMinAspect && ratio <= kMaxAspect) {
+ polygons.add(c.approxPolygon(kPolygonPercentFit));
+ }
+ }
+ }
+
+ // Pick the target with the highest center-point that matches yet more
+ // filter criteria.
+ WPIPolygon bestTarget = null;
+ int highestY = Integer.MAX_VALUE;
+
+ for (WPIPolygon p : polygons) {
+ // TODO(jerry): Replace boolean filters with a scoring function?
+ if (p.isConvex() && p.getNumVertices() == 4) { // quadrilateral
+ WPIPoint[] points = p.getPoints();
+ // Filter for polygons with 2 ~horizontal and 2 ~vertical sides.
+ int numRoughlyHorizontal = 0;
+ int numRoughlyVertical = 0;
+ for (int i = 0; i < 4; ++i) {
+ double dy = points[i].getY() - points[(i + 1) % 4].getY();
+ double dx = points[i].getX() - points[(i + 1) % 4].getX();
+ double slope = Double.MAX_VALUE;
+ if (dx != 0) {
+ slope = Math.abs(dy / dx);
+ }
+
+ if (slope < kRoughlyHorizontalSlope) {
+ ++numRoughlyHorizontal;
+ } else if (slope > kRoughlyVerticalSlope) {
+ ++numRoughlyVertical;
+ }
+ }
+
+ if (numRoughlyHorizontal >= 2 && numRoughlyVertical == 2) {
+ int pCenterX = p.getX() + p.getWidth() / 2;
+ int pCenterY = p.getY() + p.getHeight() / 2;
+
+ rawImage.drawPolygon(p, candidateColor, 2);
+ rawImage.drawPoint(new WPIPoint(pCenterX, pCenterY),
+ targetColor, 2);
+ if (pCenterY < highestY) {
+ bestTarget = p;
+ highestY = pCenterY;
+ }
+ } else {
+ rawImage.drawPolygon(p, reject2Color, 1);
+ }
+ } else {
+ rawImage.drawPolygon(p, reject1Color, 1);
+ }
+ }
+
+ Target found = null;
+ if (bestTarget != null) {
+ rawImage.drawPolygon(bestTarget, targetColor, 2);
+ found = measureTarget(bestTarget);
+ } else {
+ LOG.fine("No target found");
+ }
+
+ // Draw a crosshair
+ rawImage.drawLine(linePt1, linePt2, targetColor, 1);
+
+ if (found == null) {
+ found = new Target();
+ }
+ found.editedPicture = rawImage;
+
+ daisyExtensions.releaseMemory();
+ //System.gc();
+
+ return found;
+ }
+
+ /**
+ * Uses the camera, field, and robot dimensions to compute targeting info.
+ */
+ private Target measureTarget(WPIPolygon target) {
+ double w = target.getWidth();
+ double h = target.getHeight();
+ double x = target.getX() + w / 2; // target center in view coords
+ double y = target.getY() + h / 2;
+
+ double vw = size.width();
+ double vh = size.height();
+ double xc = x - vw / 2; // target center pos'n ±from view center
+ double yc = vh / 2 - y; // ... in world coords on the viewing plane
+
+ // Target angles relative to the camera.
+ double azimuthCam = Math.atan2(xc * 2 * kTanHFOV2, vw);
+ double elevationCam = Math.atan2(yc * 2 * kTanVFOV2, vh);
+ double rangeIn = kTargetWidthIn * vw / (w * 2 * kTanHFOV2);
+
+ //Put results in target
+ Target data = new Target();
+ data.azimuth = (Math.toDegrees(azimuthCam) - kShooterOffsetDeg);
+ data.elevation = (Math.toDegrees(elevationCam));
+ data.range = (rangeIn / 12);
+
+ LOG.info(String.format("Best target at (%.2f, %.2f) %.2fx%.2f," +
+ " shot azimuth=%.2f," +
+ " elevation=%.2f," +
+ " range=%.2f",
+ x, y, w, h,
+ (Math.toDegrees(azimuthCam) - kShooterOffsetDeg),
+ (Math.toDegrees(elevationCam) + kCameraPitchDeg),
+ (rangeIn / 12)));
+
+ return data;
+ }
+
+}
diff --git a/971cv/src/org/spartanrobotics/ResultSender.java b/971cv/src/org/spartanrobotics/ResultSender.java
new file mode 100644
index 0000000..14d69a1
--- /dev/null
+++ b/971cv/src/org/spartanrobotics/ResultSender.java
@@ -0,0 +1,55 @@
+/**
+ *
+ */
+package org.spartanrobotics;
+
+import java.io.IOException;
+
+import java.net.InetSocketAddress;
+
+import java.nio.channels.ServerSocketChannel;
+
+/**
+ * @author daniel
+ *
+ */
+
+/** Serves processing results back to the atom. */
+public class ResultSender {
+ private static final int PORT = 9716;
+
+ private ServerSocketChannel sock;
+
+ AccepterThread acceptor;
+
+ /** Constructor. Connects to a socket and starts the accepter thread. */
+ public ResultSender() throws IOException {
+ sock = ServerSocketChannel.open();
+ sock.socket().bind(new InetSocketAddress(PORT));
+
+ //start accepter thread
+ acceptor = new AccepterThread(sock);
+ }
+
+ /** Sends a new message of calculated attributes to the clients.
+ *
+ * @param azimuth is the calculated optimum azimuth for the shot.
+ * @param elevation is the calculated optimum elevation for the shot.
+ * @param range is the calculated optimum range for the shot.
+ */
+ public void send(double azimuth, double elevation, double range) {
+ //Formulate a message as a String similar to an HTTP header.
+ if (azimuth != 0.0d && elevation != 0.0d && range != 0.0d) {
+ StringBuilder message = new StringBuilder();
+ message.append("\r\n--boundarydonotcross\r\n");
+ message.append("Azimuth: ");
+ message.append(azimuth);
+ message.append("\r\nElevation: ");
+ message.append(elevation);
+ message.append("\r\nRange: ");
+ message.append(range);
+
+ acceptor.sendtoAll(message.toString());
+ }
+ }
+}
diff --git a/971cv/src/org/spartanrobotics/SocketCommon.java b/971cv/src/org/spartanrobotics/SocketCommon.java
new file mode 100644
index 0000000..ebd3872
--- /dev/null
+++ b/971cv/src/org/spartanrobotics/SocketCommon.java
@@ -0,0 +1,92 @@
+/**
+ *
+ */
+package org.spartanrobotics;
+
+import java.io.IOException;
+
+import java.nio.ByteBuffer;
+import java.nio.channels.SocketChannel;
+import java.util.logging.Logger;
+
+/**
+ * @author daniel
+ * Socket operations used by other classes
+ */
+public class SocketCommon {
+
+ private final static Logger LOG = Logger.getLogger(
+ SocketCommon.class.getName());
+
+ /** Reads on a SocketStream until it finds a given character sequence. */
+ public static String readtoBoundary(SocketChannel sock, String boundary) {
+ //reads from socket until it encounters a specific character combination
+ //if boundary is null, it reads until it runs out of data
+ ByteBuffer recvd = ByteBuffer.allocate(1024);
+ StringBuilder sb = new StringBuilder();
+ String message = "";
+ try {
+ int ret = 0;
+ while (ret != -1) {
+ ret = sock.read(recvd);
+ //System.out.println(ret);
+ if (ret == 0) {
+ //finished receiving
+ message = sb.toString();
+ if (boundary == null)
+ break;
+ }
+ else {
+ for (int i = 0; i < recvd.capacity() - recvd.remaining(); i++) {
+ sb.append((char)recvd.get(i));
+ }
+ recvd.clear();
+ if (boundary != null) {
+ if (sb.toString().contains(boundary)) {
+ message = sb.toString();
+ break;
+ }
+ else {
+ continue;
+ }
+ }
+ }
+ }
+ }
+ catch (IOException e) {
+ LOG.severe("Socket read failed. Check your network configuration.");
+ Messages.severe("Socket read failed. Check your network configuration.");
+ return null;
+ }
+ return message;
+ }
+
+ /** Guarantees that large messages will be completely sent through a socket.
+ * @return Returns 0 for success, -1 for failure.
+ */
+ public static int sendAll(SocketChannel sock, ByteBuffer message) {
+ message.rewind();
+ while (message.remaining() > 0) {
+ try {
+ sock.write(message);
+ }
+ catch (IOException e) {
+ LOG.warning("Socket write failed. Check your network configuration.");
+ Messages.severe("Socket write failed. Check your network configuration.");
+ return -1;
+ }
+ }
+ return 0;
+ }
+
+ /** Overloaded method for sending a byte array. */
+ public static void sendAll(SocketChannel sock, byte[] message) {
+ ByteBuffer buff = ByteBuffer.wrap(message);
+ sendAll(sock, buff);
+ }
+
+ /** Overloaded method for sending a String. */
+ public static void sendAll(SocketChannel sock, String message) {
+ sendAll(sock, message.getBytes());
+ }
+}
diff --git a/971cv/src/org/spartanrobotics/Target.java b/971cv/src/org/spartanrobotics/Target.java
new file mode 100644
index 0000000..91a7c8a
--- /dev/null
+++ b/971cv/src/org/spartanrobotics/Target.java
@@ -0,0 +1,20 @@
+/**
+ *
+ */
+package org.spartanrobotics;
+
+import edu.wpi.first.wpijavacv.WPIImage;
+
+/**
+ * @author daniel
+ *
+ */
+
+/** Helper class to store information about targets. */
+public class Target {
+ public double azimuth;
+ public double elevation;
+ public double range;
+
+ WPIImage editedPicture;
+}
diff --git a/971cv/src/org/spartanrobotics/TestClient.java b/971cv/src/org/spartanrobotics/TestClient.java
new file mode 100644
index 0000000..5bf5ced
--- /dev/null
+++ b/971cv/src/org/spartanrobotics/TestClient.java
@@ -0,0 +1,30 @@
+/**
+ *
+ */
+package org.spartanrobotics;
+
+/**
+ * @author daniel
+ *
+ */
+
+/** Small thread for running vision code concurrently with debug server. */
+public class TestClient implements Runnable {
+
+ private String atomIP;
+
+ private Thread t;
+
+ /** Constructor to set up new thread. */
+ public TestClient(String atomIP) {
+ t = new Thread(this, "Test Client");
+ this.atomIP = atomIP;
+ t.start();
+ }
+
+ /** Simple thread, runs the vision code. */
+ public void run() {
+ String[] args = {atomIP};
+ VisionTuner.main(args);
+ }
+}
diff --git a/971cv/src/org/spartanrobotics/TestImageGetter.java b/971cv/src/org/spartanrobotics/TestImageGetter.java
new file mode 100644
index 0000000..25fcb9a
--- /dev/null
+++ b/971cv/src/org/spartanrobotics/TestImageGetter.java
@@ -0,0 +1,96 @@
+/**
+ *
+ */
+package org.spartanrobotics;
+
+/**
+ * @author daniel
+ *
+ */
+
+import java.awt.image.BufferedImage;
+import java.io.File;
+import java.io.IOException;
+
+import java.util.logging.Logger;
+
+import javax.imageio.ImageIO;
+
+import edu.wpi.first.wpijavacv.WPIColorImage;
+
+/** Get debug images for Java camera processor. */
+public class TestImageGetter implements ImageGetter{
+
+ private final static Logger LOG = Logger.getLogger(
+ TestImageGetter.class.getName());
+
+ private WPIColorImage[] loadedImages;
+
+ private int imageIndex = -1;
+ private String currentName;
+
+ /** Gets the name to display at the top of the image window. */
+ public String getName() {
+ return currentName;
+ }
+
+ /** Constructor
+ *
+ * @param path_to_images is the path to the directory where our images are.
+ * @throws IOException
+ */
+ public TestImageGetter(String path_to_images) {
+ File directory = new File(path_to_images);
+ loadedImages = new WPIColorImage[directory.listFiles().length];
+
+ //pre-load all the images
+ int i = 0;
+ for (final File fileEntry : directory.listFiles()) {
+ try {
+ BufferedImage image = ImageIO.read(fileEntry);
+ if (image != null) {
+ loadedImages[i] = new WPIColorImage(image);
+ } else {
+ //we attempted to load what was not an image. Skip it
+ LOG.info("Preloading debug images; skipping incompatible: " + fileEntry.getName());
+ continue;
+ }
+ } catch (IOException e) {
+ //we couldn't open a file. Skip it
+ LOG.info("Preloading debug images; skipping unopenable: " + fileEntry.getName());
+ continue;
+ }
+
+ currentName = fileEntry.getName();
+ ++i;
+ }
+ }
+
+ /** Gets the next debugging image.
+ *
+ * @return Returns the next test image.
+ */
+ public WPIColorImage getFrame() {
+ ++imageIndex;
+ if (imageIndex < loadedImages.length) {
+ return loadedImages[imageIndex];
+ } else {
+ imageIndex = loadedImages.length - 1;
+ return loadedImages[imageIndex];
+ }
+ }
+
+ /** Gets the previous debugging image.
+ *
+ * @return Returns the previous test image.
+ */
+ public WPIColorImage getPrev() {
+ --imageIndex;
+ if (imageIndex > 0) {
+ return loadedImages[imageIndex];
+ } else {
+ imageIndex = 0;
+ return loadedImages[imageIndex];
+ }
+ }
+}
diff --git a/971cv/src/org/spartanrobotics/TimeFormatter.java b/971cv/src/org/spartanrobotics/TimeFormatter.java
new file mode 100644
index 0000000..bc06fa5
--- /dev/null
+++ b/971cv/src/org/spartanrobotics/TimeFormatter.java
@@ -0,0 +1,45 @@
+/**
+ *
+ */
+package org.spartanrobotics;
+
+import java.util.logging.Formatter;
+import java.util.logging.LogRecord;
+import java.util.Date;
+
+/**
+ * @author daniel
+ *
+ */
+
+/** Formats log messages with adequate timestamp. */
+public class TimeFormatter extends Formatter{
+
+ /** Constructor, see Formatter. */
+ public TimeFormatter() {
+ super();
+ }
+
+ /** Format a message in the propper way.
+ * @return Includes time, name of logger, level and message.
+ */
+ public String format(LogRecord message) {
+ //we need to include the date and time in our message
+ StringBuffer out = new StringBuffer();
+ out.append("@");
+ Date date = new Date(message.getMillis());
+ out.append(date.toString());
+ out.append(" in [");
+ //add our logger's name
+ out.append(message.getLoggerName());
+ out.append("]: (");
+ //add message level
+ out.append(message.getLevel().getName());
+ out.append(") ");
+ //add actual message
+ out.append(formatMessage(message));
+ out.append("\n");
+ return out.toString();
+ }
+
+}
diff --git a/971cv/src/org/spartanrobotics/VisionTuner.java b/971cv/src/org/spartanrobotics/VisionTuner.java
new file mode 100644
index 0000000..95c3b8d
--- /dev/null
+++ b/971cv/src/org/spartanrobotics/VisionTuner.java
@@ -0,0 +1,296 @@
+package org.spartanrobotics;
+
+import java.awt.BorderLayout;
+import java.awt.GridLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.KeyEvent;
+
+import java.util.Arrays;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import java.io.FileNotFoundException;
+import java.io.IOException;
+
+import javax.swing.JButton;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JSlider;
+import javax.swing.WindowConstants;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+
+import com.googlecode.javacv.CanvasFrame;
+import edu.wpi.first.wpijavacv.WPIColorImage;
+import edu.wpi.first.wpijavacv.WPIImage;
+
+/* REQUIRED JAVA LIBRARIES:
+ * external_jars/
+ * javacpp.jar
+ * javacv-YOUR_OS.jar
+ * javacv.jar
+ * WPIJavaCV.jar
+ *
+ * REQUIRED NATIVE CODE LIBRARIES ON $PATH:
+ * Program Files/WPIJavaCV/ [for example]
+ * JavaCV_2.2.0/javacv-bin/javacv-YOUR_OS.jar
+ * OpenCV_2.2.0/bin/*
+ *
+ * The native libraries and javacv-YOUR_OS.jar must match the 32 vs. 64-bit JVM.
+ */
+/**
+ * FRC 2013 vision-target recognizer tuner app.
+ *
+ * <p>
+ * See {@link #processEvents()} for the keystroke commands.
+ *
+ * @author jerry
+ * @author daniel
+ */
+public class VisionTuner {
+ private Recognizer recognizer = new Recognizer2013();
+
+ private final static Logger LOG = Logger.getLogger(
+ VisionTuner.class.getName());
+
+ private final CanvasFrame cameraFrame = new CanvasFrame("Camera");
+ private final JPanel panel = new JPanel();
+ private final JSlider hueMinSlider = new JSlider();
+ private final JSlider hueMaxSlider = new JSlider();
+ private final JSlider satMinSlider = new JSlider();
+ private final JSlider valMinSlider = new JSlider();
+ private final JButton showCalibration = new JButton("Calibrate");
+ private final JLabel frameRate = new JLabel("0");
+
+ private ResultSender sender = null;
+
+ private int totalFrames = -1; // don't count the first (warm-up) frame
+ private double totalMsec;
+ private double minMsec = Double.MAX_VALUE;
+ private double maxMsec;
+
+ private TestImageGetter getter;
+
+ private WPIColorImage current;
+
+ private boolean debug = false;
+
+ long startTime;
+ long endTime;
+
+ public VisionTuner() {
+ //set logger to log everything
+ LOG.setLevel(Level.ALL);
+ try {
+ LogHandler handler = new LogHandler("ds_vision.log");
+ TimeFormatter formatter = new TimeFormatter();
+ handler.setFormatter(formatter);
+ LOG.addHandler(handler);
+ } catch (FileNotFoundException e) {
+ Messages.warning("Logging initialization failed.");
+ }
+
+ //initialize result sender
+ try {
+ sender = new ResultSender();
+ } catch (IOException e) {
+ LOG.severe("Server initialization failed: " + e.getMessage() + ". Result reporting disabled.");
+ }
+ cameraFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
+
+ cameraFrame.getContentPane().add(panel, BorderLayout.SOUTH);
+ panel.setLayout(new GridLayout(0, 2, 0, 0));
+
+ showCalibration.setToolTipText("Click here if the system is not finding targets well enough.");
+ panel.add(showCalibration);
+ showCalibration.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ showCalibrationWindow();
+ }
+ });
+
+ panel.add(frameRate);
+
+ }
+
+ /** Shows a calibration window when the user clicks the Calibrate button. */
+ private void showCalibrationWindow() {
+ final CanvasFrame calibrationWindow = new CanvasFrame("Calibration");
+ calibrationWindow.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
+
+ final JPanel panel = new JPanel();
+ calibrationWindow.getContentPane().add(panel, BorderLayout.SOUTH);
+ panel.setLayout(new GridLayout(3, 3, 0, 0));
+
+ hueMinSlider.setToolTipText("minimum HSV hue");
+ hueMinSlider.setMaximum(255);
+ hueMinSlider.setValue(recognizer.getHueMin());
+ panel.add(hueMinSlider);
+
+ panel.add(new JLabel("min hue max hue"));
+
+ hueMaxSlider.setToolTipText("maximum HSV hue");
+ hueMaxSlider.setMaximum(255);
+ hueMaxSlider.setValue(recognizer.getHueMax());
+ panel.add(hueMaxSlider);
+
+ satMinSlider.setToolTipText("minimum HSV color saturation");
+ satMinSlider.setMaximum(255);
+ satMinSlider.setValue(recognizer.getSatMin());
+ panel.add(satMinSlider);
+
+ panel.add(new JLabel("min saturation max saturation"));
+
+ valMinSlider.setToolTipText("minimum HSV brightness value");
+ valMinSlider.setMaximum(255);
+ valMinSlider.setValue(recognizer.getValMin());
+ panel.add(valMinSlider);
+
+ panel.add(new JLabel("")); //empty cells can cause problems
+
+ final JButton done = new JButton("Close");
+ panel.add(done);
+ done.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ calibrationWindow.dispose();
+ }
+ });
+
+ panel.add(new JLabel("")); //empty cells can cause problems
+
+ ChangeListener sliderListener = new ChangeListener() {
+ @Override
+ public void stateChanged(ChangeEvent e) {
+ LOG.fine("New HSV range ["
+ + hueMinSlider.getValue() + " .. "
+ + hueMaxSlider.getValue() + "] "
+ + satMinSlider.getValue() + "+ "
+ + valMinSlider.getValue() + "+");
+ recognizer.setHSVRange(
+ hueMinSlider.getValue(), hueMaxSlider.getValue(),
+ satMinSlider.getValue(),
+ valMinSlider.getValue());
+ if (debug) {
+ processImage(current, getter.getName());
+ }
+ }
+ };
+
+ hueMinSlider.addChangeListener(sliderListener);
+ hueMaxSlider.addChangeListener(sliderListener);
+ satMinSlider.addChangeListener(sliderListener);
+ valMinSlider.addChangeListener(sliderListener);
+
+ calibrationWindow.pack();
+
+ }
+
+ /**
+ * Loads the named test image files.
+ * Sets testImageFilenames and testImages.
+ */
+ private void processImage(WPIColorImage cameraImage, String title) {
+ current = cameraImage;
+
+ //set window title if it needs to be changed
+ cameraFrame.setTitle(title);
+
+ Target target = recognizer.processImage(cameraImage);
+ WPIImage processedImage = target.editedPicture;
+ endTime = System.nanoTime();
+
+ cameraFrame.showImage(processedImage.getBufferedImage());
+
+ double milliseconds = (endTime - startTime) / 1e6;
+ if (++totalFrames > 0) {
+ totalMsec += milliseconds;
+ minMsec = Math.min(minMsec, milliseconds);
+ maxMsec = Math.max(maxMsec, milliseconds);
+ LOG.fine("The recognizer took " + milliseconds + " ms, " +
+ (1000 * totalFrames / totalMsec) + " fps avg");
+ }
+
+ //send results to atom. (and any connected clients)
+ if (sender != null) {
+ sender.send(target.azimuth, target.elevation, target.range);
+ }
+
+ //show average fps
+ double fps = (1000 / milliseconds);
+ frameRate.setText("FPS: " + String.valueOf(fps));
+
+ }
+
+ private void previousImage() {
+ WPIColorImage toProcess = getter.getPrev();
+ if (toProcess != null)
+ processImage(toProcess, getter.getName());
+ }
+
+ private void nextImage() {
+ WPIColorImage toProcess = getter.getFrame();
+ if (toProcess != null)
+ processImage(toProcess, getter.getName());
+ }
+
+ private void processEvents() {
+ KeyEvent e = cameraFrame.waitKey();
+
+ switch (e.getKeyCode()) {
+ case KeyEvent.VK_LEFT: // left arrow key: go to previous image
+ previousImage();
+ break;
+ case KeyEvent.VK_RIGHT: // right arrow key: go to next image
+ nextImage();
+ break;
+ case KeyEvent.VK_Q: // Q: print time measurements then quit
+ LOG.fine("The recognizer took " + (totalMsec / totalFrames) + "ms avg, " + minMsec +" min,"
+ + maxMsec + " max, " + (1000 * totalFrames / totalMsec) + " fps avg");
+ System.exit(0);
+ }
+ }
+
+ public static void main(final String[] args) {
+ VisionTuner tuner = new VisionTuner();
+ Messages.SetWindow(tuner.cameraFrame);
+
+ String atomIP = null;
+ try {
+ atomIP = args[0];
+ } catch (ArrayIndexOutOfBoundsException e) {
+ System.out.println("Usage: VisionTuner [atom IP address]");
+ System.exit(0);
+ }
+
+ if (Arrays.asList(args).contains("-debug")) {
+ //debug mode has been requested
+ tuner.debug = true;
+
+ //show debugging windows
+ tuner.recognizer.showIntermediateStages(true);
+ tuner.getter = new TestImageGetter(".");
+ WPIColorImage to_process = tuner.getter.getFrame();
+ tuner.processImage(to_process, tuner.getter.getName());
+ for (;;) {
+ tuner.processEvents();
+ }
+ } else {
+ try {
+ HTTPClient client = new HTTPClient(atomIP);
+ for (;;) {
+ tuner.startTime = System.nanoTime();
+ WPIColorImage to_process = client.getFrame();
+ if (to_process != null) {
+ tuner.processImage(to_process, client.getName());
+ LOG.fine("Captured time: " + Double.toString(client.getTimestamp()));
+ }
+ }
+ } catch (IOException e) {
+ LOG.severe("Client initialization failed: " + e.getMessage() + ".");
+ Messages.severe("Client initialization failed: " + e.getMessage() + ".");
+ }
+ }
+ }
+
+}
diff --git a/971cv/src/org/spartanrobotics/ds_vision.log b/971cv/src/org/spartanrobotics/ds_vision.log
new file mode 100644
index 0000000..2fae3f3
--- /dev/null
+++ b/971cv/src/org/spartanrobotics/ds_vision.log
@@ -0,0 +1,994 @@
+@Sat Feb 23 12:11:35 PST 2013 in [global]: (FINE) Initial HSV range [70 .. 106] 137+ 27+
+@Sat Feb 23 12:11:35 PST 2013 in [global]: (INFO) Reading headers...
+@Sat Feb 23 12:11:35 PST 2013 in [global]: (INFO) Writing headers...
+@Sat Feb 23 12:11:36 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68137, Content-Type=image/jpeg, X-Timestamp=1.361650296043E12}
+@Sat Feb 23 12:11:36 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68137
+@Sat Feb 23 12:11:36 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:36 PST 2013 in [global]: (FINE) Captured time: 1.361650296043E12
+@Sat Feb 23 12:11:36 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68283, Content-Type=image/jpeg, X-Timestamp=1.361650296073E12}
+@Sat Feb 23 12:11:36 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68283
+@Sat Feb 23 12:11:36 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:36 PST 2013 in [global]: (FINE) The recognizer took 21.509065 ms, 46.492025571543905 fps, %.2f avg
+@Sat Feb 23 12:11:36 PST 2013 in [global]: (FINE) Captured time: 1.361650296073E12
+@Sat Feb 23 12:11:36 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68407, Content-Type=image/jpeg, X-Timestamp=1.361650296108E12}
+@Sat Feb 23 12:11:36 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68407
+@Sat Feb 23 12:11:36 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:36 PST 2013 in [global]: (FINE) The recognizer took 13.399685 ms, 57.29222616106277 fps, %.2f avg
+@Sat Feb 23 12:11:36 PST 2013 in [global]: (FINE) Captured time: 1.361650296108E12
+@Sat Feb 23 12:11:36 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68468, Content-Type=image/jpeg, X-Timestamp=1.361650296139E12}
+@Sat Feb 23 12:11:36 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68468
+@Sat Feb 23 12:11:36 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:36 PST 2013 in [global]: (FINE) The recognizer took 16.210285 ms, 58.6865538443752 fps, %.2f avg
+@Sat Feb 23 12:11:36 PST 2013 in [global]: (FINE) Captured time: 1.361650296139E12
+@Sat Feb 23 12:11:36 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68481, Content-Type=image/jpeg, X-Timestamp=1.361650296171E12}
+@Sat Feb 23 12:11:36 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68481
+@Sat Feb 23 12:11:36 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:36 PST 2013 in [global]: (FINE) The recognizer took 16.315636 ms, 59.31666812758678 fps, %.2f avg
+@Sat Feb 23 12:11:36 PST 2013 in [global]: (FINE) Captured time: 1.361650296171E12
+@Sat Feb 23 12:11:36 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68360, Content-Type=image/jpeg, X-Timestamp=1.361650296206E12}
+@Sat Feb 23 12:11:36 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68360
+@Sat Feb 23 12:11:36 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:36 PST 2013 in [global]: (FINE) The recognizer took 17.175151 ms, 59.094793982665514 fps, %.2f avg
+@Sat Feb 23 12:11:36 PST 2013 in [global]: (FINE) Captured time: 1.361650296206E12
+@Sat Feb 23 12:11:36 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68568, Content-Type=image/jpeg, X-Timestamp=1.361650296238E12}
+@Sat Feb 23 12:11:36 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68568
+@Sat Feb 23 12:11:36 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:36 PST 2013 in [global]: (FINE) The recognizer took 16.372544 ms, 59.41631432957315 fps, %.2f avg
+@Sat Feb 23 12:11:36 PST 2013 in [global]: (FINE) Captured time: 1.361650296238E12
+@Sat Feb 23 12:11:36 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68433, Content-Type=image/jpeg, X-Timestamp=1.36165029665E12}
+@Sat Feb 23 12:11:36 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68433
+@Sat Feb 23 12:11:36 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:36 PST 2013 in [global]: (FINE) The recognizer took 21.308172 ms, 57.2407327212838 fps, %.2f avg
+@Sat Feb 23 12:11:36 PST 2013 in [global]: (FINE) Captured time: 1.36165029665E12
+@Sat Feb 23 12:11:36 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68255, Content-Type=image/jpeg, X-Timestamp=1.361650296668E12}
+@Sat Feb 23 12:11:36 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68255
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) The recognizer took 19.901973 ms, 56.26175347589157 fps, %.2f avg
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) Captured time: 1.361650296668E12
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68236, Content-Type=image/jpeg, X-Timestamp=1.36165029669E12}
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68236
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) The recognizer took 14.058567 ms, 57.59960260882168 fps, %.2f avg
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) Captured time: 1.36165029669E12
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68282, Content-Type=image/jpeg, X-Timestamp=1.361650296708E12}
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68282
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) The recognizer took 13.691983 ms, 58.843238089020886 fps, %.2f avg
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) Captured time: 1.361650296708E12
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68137, Content-Type=image/jpeg, X-Timestamp=1.361650296748E12}
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68137
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) The recognizer took 15.658528 ms, 59.26673397176573 fps, %.2f avg
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) Captured time: 1.361650296748E12
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68107, Content-Type=image/jpeg, X-Timestamp=1.361650296792E12}
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68107
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) The recognizer took 13.575239 ms, 60.247972218937036 fps, %.2f avg
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) Captured time: 1.361650296792E12
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68279, Content-Type=image/jpeg, X-Timestamp=1.361650296832E12}
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68279
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) The recognizer took 15.427516 ms, 60.576592988257495 fps, %.2f avg
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) Captured time: 1.361650296832E12
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68123, Content-Type=image/jpeg, X-Timestamp=1.361650296878E12}
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68123
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) The recognizer took 14.644789 ms, 61.06893324652181 fps, %.2f avg
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) Captured time: 1.361650296878E12
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68161, Content-Type=image/jpeg, X-Timestamp=1.361650296921E12}
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68161
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) The recognizer took 13.607566 ms, 61.7648187666423 fps, %.2f avg
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) Captured time: 1.361650296921E12
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68088, Content-Type=image/jpeg, X-Timestamp=1.361650296961E12}
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68088
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) The recognizer took 15.72177 ms, 61.87676824708866 fps, %.2f avg
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) Captured time: 1.361650296961E12
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68280, Content-Type=image/jpeg, X-Timestamp=1.361650297013E12}
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68280
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) The recognizer took 19.274141 ms, 61.18351740514513 fps, %.2f avg
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) Captured time: 1.361650297013E12
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) parsed headers {Content-Length=67929, Content-Type=image/jpeg, X-Timestamp=1.361650297063E12}
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 67929
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) The recognizer took 14.98678 ms, 61.46714074223417 fps, %.2f avg
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) Captured time: 1.361650297063E12
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68138, Content-Type=image/jpeg, X-Timestamp=1.361650297145E12}
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68138
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) The recognizer took 16.333437 ms, 61.454301092249615 fps, %.2f avg
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) Captured time: 1.361650297145E12
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68025, Content-Type=image/jpeg, X-Timestamp=1.36165029719E12}
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68025
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) The recognizer took 14.441173 ms, 61.802023398246064 fps, %.2f avg
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) Captured time: 1.36165029719E12
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68118, Content-Type=image/jpeg, X-Timestamp=1.361650297201E12}
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68118
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) The recognizer took 16.093952 ms, 61.817805195210745 fps, %.2f avg
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) Captured time: 1.361650297201E12
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68172, Content-Type=image/jpeg, X-Timestamp=1.361650297229E12}
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68172
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) The recognizer took 14.226181 ms, 62.15845816713021 fps, %.2f avg
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) Captured time: 1.361650297229E12
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68191, Content-Type=image/jpeg, X-Timestamp=1.361650297275E12}
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68191
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) The recognizer took 14.272387 ms, 62.46494494448388 fps, %.2f avg
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) Captured time: 1.361650297275E12
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68233, Content-Type=image/jpeg, X-Timestamp=1.36165029735E12}
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68233
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) The recognizer took 13.738702 ms, 62.83623571549745 fps, %.2f avg
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) Captured time: 1.36165029735E12
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) parsed headers {Content-Length=67939, Content-Type=image/jpeg, X-Timestamp=1.361650297365E12}
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 67939
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) The recognizer took 15.826412 ms, 62.85013274727379 fps, %.2f avg
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) Captured time: 1.361650297365E12
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68042, Content-Type=image/jpeg, X-Timestamp=1.361650297414E12}
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68042
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) The recognizer took 14.334621 ms, 63.09052503947071 fps, %.2f avg
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) Captured time: 1.361650297414E12
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68034, Content-Type=image/jpeg, X-Timestamp=1.361650297453E12}
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68034
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) The recognizer took 15.279274 ms, 63.17481095622216 fps, %.2f avg
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) Captured time: 1.361650297453E12
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68068, Content-Type=image/jpeg, X-Timestamp=1.361650297493E12}
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68068
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) The recognizer took 14.74945 ms, 63.32907670713834 fps, %.2f avg
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) Captured time: 1.361650297493E12
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68112, Content-Type=image/jpeg, X-Timestamp=1.361650297535E12}
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68112
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) The recognizer took 13.374888 ms, 63.66492166458384 fps, %.2f avg
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) Captured time: 1.361650297535E12
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68149, Content-Type=image/jpeg, X-Timestamp=1.361650297579E12}
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68149
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) The recognizer took 15.922264 ms, 63.635883146878676 fps, %.2f avg
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) Captured time: 1.361650297579E12
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68096, Content-Type=image/jpeg, X-Timestamp=1.361650297651E12}
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68096
+@Sat Feb 23 12:11:37 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) The recognizer took 14.227896 ms, 63.83065987845856 fps, %.2f avg
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) Captured time: 1.361650297651E12
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68136, Content-Type=image/jpeg, X-Timestamp=1.361650297689E12}
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68136
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) The recognizer took 13.953313 ms, 64.04953078314523 fps, %.2f avg
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) Captured time: 1.361650297689E12
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68298, Content-Type=image/jpeg, X-Timestamp=1.361650297696E12}
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68298
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) The recognizer took 14.188844 ms, 64.2270527989815 fps, %.2f avg
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) Captured time: 1.361650297696E12
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68053, Content-Type=image/jpeg, X-Timestamp=1.361650297729E12}
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68053
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) The recognizer took 14.978126 ms, 64.29891460973653 fps, %.2f avg
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) Captured time: 1.361650297729E12
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68248, Content-Type=image/jpeg, X-Timestamp=1.361650297768E12}
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68248
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) The recognizer took 13.69292 ms, 64.51931277788586 fps, %.2f avg
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) Captured time: 1.361650297768E12
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) parsed headers {Content-Length=67999, Content-Type=image/jpeg, X-Timestamp=1.361650297891E12}
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 67999
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) The recognizer took 13.769403 ms, 64.71995827763172 fps, %.2f avg
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) Captured time: 1.361650297891E12
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68053, Content-Type=image/jpeg, X-Timestamp=1.361650297899E12}
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68053
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) The recognizer took 13.607504 ms, 64.92935176744551 fps, %.2f avg
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) Captured time: 1.361650297899E12
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68121, Content-Type=image/jpeg, X-Timestamp=1.361650297929E12}
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68121
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) The recognizer took 14.261341 ms, 65.05607479262719 fps, %.2f avg
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) Captured time: 1.361650297929E12
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68094, Content-Type=image/jpeg, X-Timestamp=1.361650297966E12}
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68094
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) The recognizer took 14.003201 ms, 65.20488690430554 fps, %.2f avg
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) Captured time: 1.361650297966E12
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68071, Content-Type=image/jpeg, X-Timestamp=1.361650298008E12}
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68071
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) The recognizer took 13.871678 ms, 65.36093418174029 fps, %.2f avg
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) Captured time: 1.361650298008E12
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68302, Content-Type=image/jpeg, X-Timestamp=1.361650298047E12}
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68302
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) The recognizer took 13.664885 ms, 65.5317167899109 fps, %.2f avg
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) Captured time: 1.361650298047E12
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68212, Content-Type=image/jpeg, X-Timestamp=1.361650298083E12}
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68212
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) The recognizer took 13.77267 ms, 65.68412474383663 fps, %.2f avg
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) Captured time: 1.361650298083E12
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68210, Content-Type=image/jpeg, X-Timestamp=1.361650298153E12}
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68210
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) The recognizer took 14.386876 ms, 65.76826321807344 fps, %.2f avg
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) Captured time: 1.361650298153E12
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) parsed headers {Content-Length=67971, Content-Type=image/jpeg, X-Timestamp=1.361650298188E12}
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 67971
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) The recognizer took 16.265488 ms, 65.66416626873686 fps, %.2f avg
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) Captured time: 1.361650298188E12
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68083, Content-Type=image/jpeg, X-Timestamp=1.361650298196E12}
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68083
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) The recognizer took 13.678746 ms, 65.81304495340147 fps, %.2f avg
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) Captured time: 1.361650298196E12
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68165, Content-Type=image/jpeg, X-Timestamp=1.361650298226E12}
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68165
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) The recognizer took 22.735684 ms, 65.11055221156725 fps, %.2f avg
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) Captured time: 1.361650298226E12
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) parsed headers {Content-Length=67917, Content-Type=image/jpeg, X-Timestamp=1.361650298267E12}
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 67917
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) The recognizer took 19.578643 ms, 64.73210866803855 fps, %.2f avg
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) Captured time: 1.361650298267E12
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) parsed headers {Content-Length=67945, Content-Type=image/jpeg, X-Timestamp=1.361650298342E12}
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 67945
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) The recognizer took 14.207886 ms, 64.84057286997351 fps, %.2f avg
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) Captured time: 1.361650298342E12
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68087, Content-Type=image/jpeg, X-Timestamp=1.361650298352E12}
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68087
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) The recognizer took 14.401086 ms, 64.92832593239419 fps, %.2f avg
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) Captured time: 1.361650298352E12
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68160, Content-Type=image/jpeg, X-Timestamp=1.361650298391E12}
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68160
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) The recognizer took 19.303107 ms, 64.601033295078 fps, %.2f avg
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) Captured time: 1.361650298391E12
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68155, Content-Type=image/jpeg, X-Timestamp=1.361650298426E12}
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68155
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) The recognizer took 13.791606 ms, 64.73945895436681 fps, %.2f avg
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) Captured time: 1.361650298426E12
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68331, Content-Type=image/jpeg, X-Timestamp=1.361650298463E12}
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68331
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) The recognizer took 17.82901 ms, 64.54799908625854 fps, %.2f avg
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) Captured time: 1.361650298463E12
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68191, Content-Type=image/jpeg, X-Timestamp=1.361650298504E12}
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68191
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) The recognizer took 15.927098 ms, 64.51384045972165 fps, %.2f avg
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) Captured time: 1.361650298504E12
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68221, Content-Type=image/jpeg, X-Timestamp=1.361650298542E12}
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68221
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) The recognizer took 13.943935 ms, 64.63403966756431 fps, %.2f avg
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) Captured time: 1.361650298542E12
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) parsed headers {Content-Length=67978, Content-Type=image/jpeg, X-Timestamp=1.361650298636E12}
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 67978
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) The recognizer took 16.650224 ms, 64.5446497419509 fps, %.2f avg
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) Captured time: 1.361650298636E12
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68173, Content-Type=image/jpeg, X-Timestamp=1.361650298682E12}
+@Sat Feb 23 12:11:38 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68173
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) The recognizer took 19.317185 ms, 64.26141647038419 fps, %.2f avg
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) Captured time: 1.361650298682E12
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68085, Content-Type=image/jpeg, X-Timestamp=1.361650298689E12}
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68085
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) The recognizer took 14.313745 ms, 64.35193646848073 fps, %.2f avg
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) Captured time: 1.361650298689E12
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68143, Content-Type=image/jpeg, X-Timestamp=1.361650298724E12}
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68143
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) The recognizer took 14.339 ms, 64.43776933591894 fps, %.2f avg
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) Captured time: 1.361650298724E12
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68182, Content-Type=image/jpeg, X-Timestamp=1.361650298777E12}
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68182
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) The recognizer took 13.939341 ms, 64.54912199780995 fps, %.2f avg
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) Captured time: 1.361650298777E12
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68039, Content-Type=image/jpeg, X-Timestamp=1.361650298854E12}
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68039
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) The recognizer took 15.432671 ms, 64.55324763553315 fps, %.2f avg
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) Captured time: 1.361650298854E12
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) parsed headers {Content-Length=67958, Content-Type=image/jpeg, X-Timestamp=1.361650298864E12}
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 67958
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) The recognizer took 13.741261 ms, 64.67300611404605 fps, %.2f avg
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) Captured time: 1.361650298864E12
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) parsed headers {Content-Length=67899, Content-Type=image/jpeg, X-Timestamp=1.361650298902E12}
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 67899
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) The recognizer took 16.295434 ms, 64.6168575013342 fps, %.2f avg
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) Captured time: 1.361650298902E12
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) parsed headers {Content-Length=67953, Content-Type=image/jpeg, X-Timestamp=1.361650298939E12}
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 67953
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) The recognizer took 18.072673 ms, 64.44520887828172 fps, %.2f avg
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) Captured time: 1.361650298939E12
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) parsed headers {Content-Length=67887, Content-Type=image/jpeg, X-Timestamp=1.361650298981E12}
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 67887
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) The recognizer took 18.21017 ms, 64.27091598621249 fps, %.2f avg
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) Captured time: 1.361650298981E12
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68154, Content-Type=image/jpeg, X-Timestamp=1.361650299025E12}
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68154
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) The recognizer took 14.143116 ms, 64.3610303201675 fps, %.2f avg
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) Captured time: 1.361650299025E12
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) parsed headers {Content-Length=67918, Content-Type=image/jpeg, X-Timestamp=1.361650299076E12}
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 67918
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) The recognizer took 16.837754 ms, 64.27951688461772 fps, %.2f avg
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) Captured time: 1.361650299076E12
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68069, Content-Type=image/jpeg, X-Timestamp=1.361650299116E12}
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68069
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) The recognizer took 17.185526 ms, 64.1792465740953 fps, %.2f avg
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) Captured time: 1.361650299116E12
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68071, Content-Type=image/jpeg, X-Timestamp=1.361650299214E12}
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68071
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) The recognizer took 15.127699 ms, 64.20673808246177 fps, %.2f avg
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) Captured time: 1.361650299214E12
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) parsed headers {Content-Length=67849, Content-Type=image/jpeg, X-Timestamp=1.361650299223E12}
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 67849
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) The recognizer took 15.581215 ms, 64.20634820056793 fps, %.2f avg
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) Captured time: 1.361650299223E12
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68191, Content-Type=image/jpeg, X-Timestamp=1.361650299253E12}
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68191
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) The recognizer took 13.799678 ms, 64.31105861111529 fps, %.2f avg
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) Captured time: 1.361650299253E12
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68148, Content-Type=image/jpeg, X-Timestamp=1.361650299294E12}
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68148
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) The recognizer took 13.373386 ms, 64.43806821187916 fps, %.2f avg
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) Captured time: 1.361650299294E12
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68267, Content-Type=image/jpeg, X-Timestamp=1.36165029938E12}
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68267
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) The recognizer took 13.78849 ms, 64.53800921010279 fps, %.2f avg
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) Captured time: 1.36165029938E12
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) parsed headers {Content-Length=67994, Content-Type=image/jpeg, X-Timestamp=1.361650299388E12}
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 67994
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) The recognizer took 13.724991 ms, 64.63914415024655 fps, %.2f avg
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) Captured time: 1.361650299388E12
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) parsed headers {Content-Length=67840, Content-Type=image/jpeg, X-Timestamp=1.36165029942E12}
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 67840
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) The recognizer took 13.91779 ms, 64.72693308485749 fps, %.2f avg
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) Captured time: 1.36165029942E12
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) parsed headers {Content-Length=67858, Content-Type=image/jpeg, X-Timestamp=1.36165029946E12}
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 67858
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) The recognizer took 13.913769 ms, 64.81283550283284 fps, %.2f avg
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) Captured time: 1.36165029946E12
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) parsed headers {Content-Length=67922, Content-Type=image/jpeg, X-Timestamp=1.361650299501E12}
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 67922
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) The recognizer took 22.243425 ms, 64.43836428909962 fps, %.2f avg
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) Captured time: 1.361650299501E12
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68241, Content-Type=image/jpeg, X-Timestamp=1.361650299538E12}
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68241
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) The recognizer took 17.994847 ms, 64.30511198239604 fps, %.2f avg
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) Captured time: 1.361650299538E12
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68077, Content-Type=image/jpeg, X-Timestamp=1.361650299578E12}
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68077
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) The recognizer took 14.180446 ms, 64.3778464298547 fps, %.2f avg
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) Captured time: 1.361650299578E12
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68299, Content-Type=image/jpeg, X-Timestamp=1.361650299615E12}
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68299
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) The recognizer took 15.450192 ms, 64.38220641904373 fps, %.2f avg
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) Captured time: 1.361650299615E12
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68145, Content-Type=image/jpeg, X-Timestamp=1.361650299685E12}
+@Sat Feb 23 12:11:39 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68145
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) The recognizer took 15.609772 ms, 64.37818957163347 fps, %.2f avg
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) Captured time: 1.361650299685E12
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68059, Content-Type=image/jpeg, X-Timestamp=1.361650299721E12}
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68059
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) The recognizer took 18.240182 ms, 64.23997853103091 fps, %.2f avg
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) Captured time: 1.361650299721E12
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) parsed headers {Content-Length=67975, Content-Type=image/jpeg, X-Timestamp=1.361650299729E12}
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 67975
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) The recognizer took 16.110112 ms, 64.21263863051558 fps, %.2f avg
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) Captured time: 1.361650299729E12
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68147, Content-Type=image/jpeg, X-Timestamp=1.361650299759E12}
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68147
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) The recognizer took 16.691253 ms, 64.15714702919048 fps, %.2f avg
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) Captured time: 1.361650299759E12
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68162, Content-Type=image/jpeg, X-Timestamp=1.361650299795E12}
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68162
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) The recognizer took 15.212966 ms, 64.17546721783819 fps, %.2f avg
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) Captured time: 1.361650299795E12
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68241, Content-Type=image/jpeg, X-Timestamp=1.361650299884E12}
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68241
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) The recognizer took 14.06972 ms, 64.24883874570213 fps, %.2f avg
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) Captured time: 1.361650299884E12
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68105, Content-Type=image/jpeg, X-Timestamp=1.361650299892E12}
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68105
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) The recognizer took 15.078559 ms, 64.27217110898513 fps, %.2f avg
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) Captured time: 1.361650299892E12
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) parsed headers {Content-Length=67977, Content-Type=image/jpeg, X-Timestamp=1.361650299928E12}
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 67977
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) The recognizer took 18.701205 ms, 64.12331138611535 fps, %.2f avg
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) Captured time: 1.361650299928E12
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) parsed headers {Content-Length=67987, Content-Type=image/jpeg, X-Timestamp=1.361650300044E12}
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 67987
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) The recognizer took 14.801449 ms, 64.16040928240051 fps, %.2f avg
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) Captured time: 1.361650300044E12
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68087, Content-Type=image/jpeg, X-Timestamp=1.361650300053E12}
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68087
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) The recognizer took 13.991298 ms, 64.23425167462358 fps, %.2f avg
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) Captured time: 1.361650300053E12
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68068, Content-Type=image/jpeg, X-Timestamp=1.361650300128E12}
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68068
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) The recognizer took 14.742065 ms, 64.27213973435038 fps, %.2f avg
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) Captured time: 1.361650300128E12
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68238, Content-Type=image/jpeg, X-Timestamp=1.361650300174E12}
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68238
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) The recognizer took 15.670592 ms, 64.26706724155476 fps, %.2f avg
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) Captured time: 1.361650300174E12
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68193, Content-Type=image/jpeg, X-Timestamp=1.361650300217E12}
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68193
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) The recognizer took 16.355486 ms, 64.23137755239753 fps, %.2f avg
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) Captured time: 1.361650300217E12
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68120, Content-Type=image/jpeg, X-Timestamp=1.361650300293E12}
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68120
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) The recognizer took 15.053624 ms, 64.25423616502731 fps, %.2f avg
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) Captured time: 1.361650300293E12
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68089, Content-Type=image/jpeg, X-Timestamp=1.3616503003E12}
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68089
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) The recognizer took 16.134075 ms, 64.2291713012313 fps, %.2f avg
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) Captured time: 1.3616503003E12
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68101, Content-Type=image/jpeg, X-Timestamp=1.36165030033E12}
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68101
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) The recognizer took 18.882135 ms, 64.08563036121582 fps, %.2f avg
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) Captured time: 1.36165030033E12
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68164, Content-Type=image/jpeg, X-Timestamp=1.361650300372E12}
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68164
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) The recognizer took 20.959789 ms, 63.85732625794959 fps, %.2f avg
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) Captured time: 1.361650300372E12
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68069, Content-Type=image/jpeg, X-Timestamp=1.361650300444E12}
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68069
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) The recognizer took 22.38341 ms, 63.57592432887276 fps, %.2f avg
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) Captured time: 1.361650300444E12
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68059, Content-Type=image/jpeg, X-Timestamp=1.361650300451E12}
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68059
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) The recognizer took 15.197574 ms, 63.59785922103913 fps, %.2f avg
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) Captured time: 1.361650300451E12
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68114, Content-Type=image/jpeg, X-Timestamp=1.361650300484E12}
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68114
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) The recognizer took 16.701653 ms, 63.55793368314355 fps, %.2f avg
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) Captured time: 1.361650300484E12
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68024, Content-Type=image/jpeg, X-Timestamp=1.361650300524E12}
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68024
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) The recognizer took 16.302819 ms, 63.534950874772825 fps, %.2f avg
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) Captured time: 1.361650300524E12
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) parsed headers {Content-Length=67947, Content-Type=image/jpeg, X-Timestamp=1.361650300565E12}
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 67947
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) The recognizer took 15.63446 ms, 63.539144050589364 fps, %.2f avg
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) Captured time: 1.361650300565E12
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68085, Content-Type=image/jpeg, X-Timestamp=1.361650300613E12}
+@Sat Feb 23 12:11:40 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68085
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) The recognizer took 17.427975 ms, 63.47233716678747 fps, %.2f avg
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) Captured time: 1.361650300613E12
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68220, Content-Type=image/jpeg, X-Timestamp=1.36165030065E12}
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68220
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) The recognizer took 19.315464 ms, 63.33337412494539 fps, %.2f avg
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) Captured time: 1.36165030065E12
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68140, Content-Type=image/jpeg, X-Timestamp=1.361650300694E12}
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68140
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) The recognizer took 14.907126 ms, 63.36742278893399 fps, %.2f avg
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) Captured time: 1.361650300694E12
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68291, Content-Type=image/jpeg, X-Timestamp=1.361650300795E12}
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68291
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) The recognizer took 21.189145 ms, 63.16127550822476 fps, %.2f avg
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) Captured time: 1.361650300795E12
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68135, Content-Type=image/jpeg, X-Timestamp=1.361650300813E12}
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68135
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) The recognizer took 12.909415 ms, 63.27147823687852 fps, %.2f avg
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) Captured time: 1.361650300813E12
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68205, Content-Type=image/jpeg, X-Timestamp=1.361650300861E12}
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68205
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) The recognizer took 25.17717 ms, 62.92275868301463 fps, %.2f avg
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) Captured time: 1.361650300861E12
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) parsed headers {Content-Length=67964, Content-Type=image/jpeg, X-Timestamp=1.361650300901E12}
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 67964
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) The recognizer took 14.214648 ms, 62.98432885863931 fps, %.2f avg
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) Captured time: 1.361650300901E12
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68230, Content-Type=image/jpeg, X-Timestamp=1.361650300946E12}
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68230
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) The recognizer took 14.319634 ms, 63.04105856047028 fps, %.2f avg
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) Captured time: 1.361650300946E12
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68141, Content-Type=image/jpeg, X-Timestamp=1.361650300985E12}
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68141
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) The recognizer took 19.518893 ms, 62.90923986798068 fps, %.2f avg
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) Captured time: 1.361650300985E12
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68225, Content-Type=image/jpeg, X-Timestamp=1.361650301033E12}
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68225
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) The recognizer took 16.465502 ms, 62.88893851701171 fps, %.2f avg
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) Captured time: 1.361650301033E12
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68079, Content-Type=image/jpeg, X-Timestamp=1.36165030108E12}
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68079
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) The recognizer took 13.68321 ms, 62.96735392600625 fps, %.2f avg
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) Captured time: 1.36165030108E12
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68114, Content-Type=image/jpeg, X-Timestamp=1.361650301117E12}
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68114
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) The recognizer took 14.456633 ms, 63.01737972822734 fps, %.2f avg
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) Captured time: 1.361650301117E12
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68093, Content-Type=image/jpeg, X-Timestamp=1.361650301157E12}
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68093
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) The recognizer took 17.864453 ms, 62.94793213588519 fps, %.2f avg
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) Captured time: 1.361650301157E12
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68154, Content-Type=image/jpeg, X-Timestamp=1.361650301203E12}
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68154
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) The recognizer took 21.198177 ms, 62.76543132501559 fps, %.2f avg
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) Captured time: 1.361650301203E12
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) parsed headers {Content-Length=67964, Content-Type=image/jpeg, X-Timestamp=1.361650301242E12}
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 67964
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) The recognizer took 14.041584 ms, 62.82970932617104 fps, %.2f avg
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) Captured time: 1.361650301242E12
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68102, Content-Type=image/jpeg, X-Timestamp=1.361650301342E12}
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68102
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) The recognizer took 14.026121 ms, 62.893539761749814 fps, %.2f avg
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) Captured time: 1.361650301342E12
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68176, Content-Type=image/jpeg, X-Timestamp=1.361650301381E12}
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68176
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) The recognizer took 19.221221 ms, 62.78239862084225 fps, %.2f avg
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) Captured time: 1.361650301381E12
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68260, Content-Type=image/jpeg, X-Timestamp=1.36165030141E12}
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68260
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) The recognizer took 13.950618 ms, 62.84796475464167 fps, %.2f avg
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) Captured time: 1.36165030141E12
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68090, Content-Type=image/jpeg, X-Timestamp=1.361650301463E12}
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68090
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) The recognizer took 14.396957 ms, 62.89785352578393 fps, %.2f avg
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) Captured time: 1.361650301463E12
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) parsed headers {Content-Length=67961, Content-Type=image/jpeg, X-Timestamp=1.361650301499E12}
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 67961
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) The recognizer took 25.962658 ms, 62.57052412329329 fps, %.2f avg
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) Captured time: 1.361650301499E12
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) parsed headers {Content-Length=67971, Content-Type=image/jpeg, X-Timestamp=1.361650301583E12}
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 67971
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) The recognizer took 19.662501 ms, 62.452635562854354 fps, %.2f avg
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) Captured time: 1.361650301583E12
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) parsed headers {Content-Length=67962, Content-Type=image/jpeg, X-Timestamp=1.361650301593E12}
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 67962
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) The recognizer took 16.310279 ms, 62.4431828273742 fps, %.2f avg
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) Captured time: 1.361650301593E12
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68022, Content-Type=image/jpeg, X-Timestamp=1.36165030164E12}
+@Sat Feb 23 12:11:41 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68022
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) The recognizer took 20.111986 ms, 62.31460547417438 fps, %.2f avg
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) Captured time: 1.36165030164E12
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68083, Content-Type=image/jpeg, X-Timestamp=1.361650301677E12}
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68083
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) The recognizer took 21.546259 ms, 62.14425731192266 fps, %.2f avg
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) Captured time: 1.361650301677E12
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68087, Content-Type=image/jpeg, X-Timestamp=1.361650301712E12}
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68087
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) The recognizer took 22.729163 ms, 61.941479121079624 fps, %.2f avg
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) Captured time: 1.361650301712E12
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68035, Content-Type=image/jpeg, X-Timestamp=1.361650301752E12}
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68035
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) The recognizer took 14.151238 ms, 62.00174842684832 fps, %.2f avg
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) Captured time: 1.361650301752E12
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68106, Content-Type=image/jpeg, X-Timestamp=1.361650301795E12}
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68106
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) The recognizer took 14.158751 ms, 62.06096461500818 fps, %.2f avg
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) Captured time: 1.361650301795E12
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68223, Content-Type=image/jpeg, X-Timestamp=1.361650301874E12}
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68223
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) The recognizer took 16.147102 ms, 62.059952063180376 fps, %.2f avg
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) Captured time: 1.361650301874E12
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68129, Content-Type=image/jpeg, X-Timestamp=1.361650301924E12}
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68129
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) The recognizer took 13.991527 ms, 62.12288087139601 fps, %.2f avg
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) Captured time: 1.361650301924E12
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68122, Content-Type=image/jpeg, X-Timestamp=1.361650301949E12}
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68122
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) The recognizer took 17.132243 ms, 62.09240142218409 fps, %.2f avg
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) Captured time: 1.361650301949E12
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68074, Content-Type=image/jpeg, X-Timestamp=1.361650301996E12}
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68074
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) The recognizer took 31.077322 ms, 61.65814796604452 fps, %.2f avg
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) Captured time: 1.361650301996E12
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68182, Content-Type=image/jpeg, X-Timestamp=1.361650302051E12}
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68182
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) The recognizer took 13.693634 ms, 61.73040311913758 fps, %.2f avg
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) Captured time: 1.361650302051E12
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68106, Content-Type=image/jpeg, X-Timestamp=1.361650302146E12}
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68106
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) The recognizer took 14.290942 ms, 61.78472498217688 fps, %.2f avg
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) Captured time: 1.361650302146E12
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68028, Content-Type=image/jpeg, X-Timestamp=1.361650302164E12}
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68028
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) The recognizer took 19.469446 ms, 61.691997629382165 fps, %.2f avg
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) Captured time: 1.361650302164E12
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68015, Content-Type=image/jpeg, X-Timestamp=1.361650302207E12}
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68015
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) The recognizer took 14.964618 ms, 61.72685642905711 fps, %.2f avg
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) Captured time: 1.361650302207E12
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68098, Content-Type=image/jpeg, X-Timestamp=1.361650302242E12}
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68098
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) The recognizer took 14.135386 ms, 61.78434159870846 fps, %.2f avg
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) Captured time: 1.361650302242E12
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68052, Content-Type=image/jpeg, X-Timestamp=1.36165030228E12}
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68052
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) The recognizer took 13.939299 ms, 61.84653303324636 fps, %.2f avg
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) Captured time: 1.36165030228E12
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) parsed headers {Content-Length=67937, Content-Type=image/jpeg, X-Timestamp=1.361650302316E12}
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 67937
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) The recognizer took 14.187118 ms, 61.901119996157895 fps, %.2f avg
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) Captured time: 1.361650302316E12
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68078, Content-Type=image/jpeg, X-Timestamp=1.361650302357E12}
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68078
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) The recognizer took 13.215405 ms, 61.98167475836398 fps, %.2f avg
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) Captured time: 1.361650302357E12
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68046, Content-Type=image/jpeg, X-Timestamp=1.361650302418E12}
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68046
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) The recognizer took 13.759267 ms, 62.046439618792434 fps, %.2f avg
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) Captured time: 1.361650302418E12
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68066, Content-Type=image/jpeg, X-Timestamp=1.361650302534E12}
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68066
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) The recognizer took 13.963076 ms, 62.10488856229221 fps, %.2f avg
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) Captured time: 1.361650302534E12
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) parsed headers {Content-Length=67819, Content-Type=image/jpeg, X-Timestamp=1.361650302542E12}
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 67819
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) The recognizer took 17.116238 ms, 62.07753882503248 fps, %.2f avg
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) Captured time: 1.361650302542E12
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68048, Content-Type=image/jpeg, X-Timestamp=1.361650302577E12}
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68048
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) The recognizer took 14.666667 ms, 62.11615842925325 fps, %.2f avg
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) Captured time: 1.361650302577E12
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (FINE) parsed headers {Content-Length=67889, Content-Type=image/jpeg, X-Timestamp=1.361650302617E12}
+@Sat Feb 23 12:11:42 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 67889
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) The recognizer took 16.041432 ms, 62.11768689639553 fps, %.2f avg
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) Captured time: 1.361650302617E12
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68011, Content-Type=image/jpeg, X-Timestamp=1.361650302689E12}
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68011
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) The recognizer took 17.466496 ms, 62.081552741207524 fps, %.2f avg
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) Captured time: 1.361650302689E12
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68068, Content-Type=image/jpeg, X-Timestamp=1.361650302696E12}
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68068
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) The recognizer took 17.306979 ms, 62.05012915035792 fps, %.2f avg
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) Captured time: 1.361650302696E12
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68007, Content-Type=image/jpeg, X-Timestamp=1.361650302724E12}
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68007
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) The recognizer took 14.216341 ms, 62.09958820160224 fps, %.2f avg
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) Captured time: 1.361650302724E12
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68127, Content-Type=image/jpeg, X-Timestamp=1.361650302834E12}
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68127
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) The recognizer took 14.161177 ms, 62.14989071302522 fps, %.2f avg
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) Captured time: 1.361650302834E12
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68005, Content-Type=image/jpeg, X-Timestamp=1.361650302843E12}
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68005
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) The recognizer took 14.268807 ms, 62.196826596333004 fps, %.2f avg
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) Captured time: 1.361650302843E12
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) parsed headers {Content-Length=67893, Content-Type=image/jpeg, X-Timestamp=1.361650302907E12}
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 67893
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) The recognizer took 13.832411 ms, 62.25440901051155 fps, %.2f avg
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) Captured time: 1.361650302907E12
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68027, Content-Type=image/jpeg, X-Timestamp=1.361650302947E12}
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68027
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) The recognizer took 14.536152 ms, 62.29336713804211 fps, %.2f avg
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) Captured time: 1.361650302947E12
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) parsed headers {Content-Length=67969, Content-Type=image/jpeg, X-Timestamp=1.361650302988E12}
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 67969
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) The recognizer took 15.39789 ms, 62.30998866760906 fps, %.2f avg
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) Captured time: 1.361650302988E12
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68177, Content-Type=image/jpeg, X-Timestamp=1.36165030307E12}
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68177
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) The recognizer took 15.611252 ms, 62.32102153805157 fps, %.2f avg
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) Captured time: 1.36165030307E12
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) parsed headers {Content-Length=67984, Content-Type=image/jpeg, X-Timestamp=1.361650303111E12}
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 67984
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) The recognizer took 13.856087 ms, 62.375942349478755 fps, %.2f avg
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) Captured time: 1.361650303111E12
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) parsed headers {Content-Length=67751, Content-Type=image/jpeg, X-Timestamp=1.361650303119E12}
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 67751
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) The recognizer took 14.768521 ms, 62.40746595493011 fps, %.2f avg
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) Captured time: 1.361650303119E12
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) parsed headers {Content-Length=67765, Content-Type=image/jpeg, X-Timestamp=1.361650303151E12}
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 67765
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) The recognizer took 15.299922 ms, 62.425426441437914 fps, %.2f avg
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) Captured time: 1.361650303151E12
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) parsed headers {Content-Length=67743, Content-Type=image/jpeg, X-Timestamp=1.361650303187E12}
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 67743
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) The recognizer took 15.932056 ms, 62.42757371690206 fps, %.2f avg
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) Captured time: 1.361650303187E12
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) parsed headers {Content-Length=67907, Content-Type=image/jpeg, X-Timestamp=1.361650303257E12}
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 67907
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) The recognizer took 19.004319 ms, 62.35447641703818 fps, %.2f avg
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) Captured time: 1.361650303257E12
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) parsed headers {Content-Length=67909, Content-Type=image/jpeg, X-Timestamp=1.361650303264E12}
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 67909
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) The recognizer took 15.293989 ms, 62.37254547977479 fps, %.2f avg
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) Captured time: 1.361650303264E12
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68152, Content-Type=image/jpeg, X-Timestamp=1.361650303294E12}
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68152
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) The recognizer took 13.927785 ms, 62.42344912594939 fps, %.2f avg
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) Captured time: 1.361650303294E12
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) parsed headers {Content-Length=67882, Content-Type=image/jpeg, X-Timestamp=1.361650303333E12}
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 67882
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) The recognizer took 13.975755 ms, 62.47265025944497 fps, %.2f avg
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) Captured time: 1.361650303333E12
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) parsed headers {Content-Length=67918, Content-Type=image/jpeg, X-Timestamp=1.361650303373E12}
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 67918
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) The recognizer took 14.287583 ms, 62.51384681706999 fps, %.2f avg
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) Captured time: 1.361650303373E12
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) parsed headers {Content-Length=67741, Content-Type=image/jpeg, X-Timestamp=1.361650303413E12}
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 67741
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) The recognizer took 17.232436 ms, 62.48440833035976 fps, %.2f avg
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) Captured time: 1.361650303413E12
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) parsed headers {Content-Length=67984, Content-Type=image/jpeg, X-Timestamp=1.361650303453E12}
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 67984
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) The recognizer took 13.532996 ms, 62.542932880561935 fps, %.2f avg
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) Captured time: 1.361650303453E12
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) parsed headers {Content-Length=67890, Content-Type=image/jpeg, X-Timestamp=1.36165030349E12}
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 67890
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) The recognizer took 14.979544 ms, 62.566729112684726 fps, %.2f avg
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) Captured time: 1.36165030349E12
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) parsed headers {Content-Length=67808, Content-Type=image/jpeg, X-Timestamp=1.361650303528E12}
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 67808
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) The recognizer took 20.862565 ms, 62.45255594787078 fps, %.2f avg
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) Captured time: 1.361650303528E12
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) parsed headers {Content-Length=67941, Content-Type=image/jpeg, X-Timestamp=1.361650303607E12}
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 67941
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) The recognizer took 14.290472 ms, 62.49255248260611 fps, %.2f avg
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) Captured time: 1.361650303607E12
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) parsed headers {Content-Length=67905, Content-Type=image/jpeg, X-Timestamp=1.361650303614E12}
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 67905
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) The recognizer took 13.385942 ms, 62.553061768187796 fps, %.2f avg
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) Captured time: 1.361650303614E12
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) parsed headers {Content-Length=67838, Content-Type=image/jpeg, X-Timestamp=1.361650303642E12}
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 67838
+@Sat Feb 23 12:11:43 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) The recognizer took 18.469737 ms, 62.49595568451488 fps, %.2f avg
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) Captured time: 1.361650303642E12
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) parsed headers {Content-Length=67959, Content-Type=image/jpeg, X-Timestamp=1.361650303677E12}
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 67959
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) The recognizer took 25.829339 ms, 62.27227468422434 fps, %.2f avg
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) Captured time: 1.361650303677E12
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68082, Content-Type=image/jpeg, X-Timestamp=1.361650303754E12}
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68082
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) The recognizer took 13.969978 ms, 62.31939745771724 fps, %.2f avg
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) Captured time: 1.361650303754E12
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68058, Content-Type=image/jpeg, X-Timestamp=1.361650303762E12}
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68058
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) The recognizer took 14.328027 ms, 62.35799669383238 fps, %.2f avg
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) Captured time: 1.361650303762E12
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68001, Content-Type=image/jpeg, X-Timestamp=1.361650303796E12}
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68001
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) The recognizer took 14.854641 ms, 62.384418411605935 fps, %.2f avg
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) Captured time: 1.361650303796E12
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68028, Content-Type=image/jpeg, X-Timestamp=1.361650303833E12}
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68028
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) The recognizer took 18.980919 ms, 62.318854136576924 fps, %.2f avg
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) Captured time: 1.361650303833E12
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) parsed headers {Content-Length=67968, Content-Type=image/jpeg, X-Timestamp=1.361650303873E12}
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 67968
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) The recognizer took 14.299246 ms, 62.35743332510277 fps, %.2f avg
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) Captured time: 1.361650303873E12
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68107, Content-Type=image/jpeg, X-Timestamp=1.361650303929E12}
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68107
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) The recognizer took 14.203251 ms, 62.3977351136621 fps, %.2f avg
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) Captured time: 1.361650303929E12
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68039, Content-Type=image/jpeg, X-Timestamp=1.361650303968E12}
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68039
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) The recognizer took 14.264664 ms, 62.436290320661364 fps, %.2f avg
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) Captured time: 1.361650303968E12
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68137, Content-Type=image/jpeg, X-Timestamp=1.361650304007E12}
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68137
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) The recognizer took 22.614892 ms, 62.29291570611008 fps, %.2f avg
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) Captured time: 1.361650304007E12
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68106, Content-Type=image/jpeg, X-Timestamp=1.361650304102E12}
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68106
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) The recognizer took 17.498301 ms, 62.2617778337762 fps, %.2f avg
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) Captured time: 1.361650304102E12
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68121, Content-Type=image/jpeg, X-Timestamp=1.361650304139E12}
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68121
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) The recognizer took 13.749805 ms, 62.31132142630288 fps, %.2f avg
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) Captured time: 1.361650304139E12
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68168, Content-Type=image/jpeg, X-Timestamp=1.361650304147E12}
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68168
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) The recognizer took 14.720042 ms, 62.33967389756935 fps, %.2f avg
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) Captured time: 1.361650304147E12
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) parsed headers {Content-Length=67885, Content-Type=image/jpeg, X-Timestamp=1.361650304185E12}
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 67885
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) The recognizer took 15.335181 ms, 62.35466962225714 fps, %.2f avg
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) Captured time: 1.361650304185E12
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68025, Content-Type=image/jpeg, X-Timestamp=1.361650304231E12}
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68025
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) The recognizer took 14.419098 ms, 62.388882433523314 fps, %.2f avg
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) Captured time: 1.361650304231E12
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) parsed headers {Content-Length=67964, Content-Type=image/jpeg, X-Timestamp=1.361650304303E12}
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 67964
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) The recognizer took 16.588391 ms, 62.377104565365315 fps, %.2f avg
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) Captured time: 1.361650304303E12
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) parsed headers {Content-Length=67988, Content-Type=image/jpeg, X-Timestamp=1.361650304311E12}
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 67988
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) The recognizer took 14.510206 ms, 62.4089449927529 fps, %.2f avg
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) Captured time: 1.361650304311E12
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) parsed headers {Content-Length=67961, Content-Type=image/jpeg, X-Timestamp=1.361650304342E12}
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 67961
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) The recognizer took 13.656799 ms, 62.45827486637607 fps, %.2f avg
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) Captured time: 1.361650304342E12
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68031, Content-Type=image/jpeg, X-Timestamp=1.361650304407E12}
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68031
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) The recognizer took 16.168426 ms, 62.45500196008051 fps, %.2f avg
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) Captured time: 1.361650304407E12
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) parsed headers {Content-Length=67963, Content-Type=image/jpeg, X-Timestamp=1.36165030443E12}
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 67963
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) The recognizer took 14.21982 ms, 62.49200156109917 fps, %.2f avg
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) Captured time: 1.36165030443E12
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) parsed headers {Content-Length=67975, Content-Type=image/jpeg, X-Timestamp=1.361650304489E12}
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 67975
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) The recognizer took 14.175721 ms, 62.52956235213426 fps, %.2f avg
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) Captured time: 1.361650304489E12
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68017, Content-Type=image/jpeg, X-Timestamp=1.361650304527E12}
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68017
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) The recognizer took 21.643249 ms, 62.41409859381183 fps, %.2f avg
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) Captured time: 1.361650304527E12
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) parsed headers {Content-Length=67985, Content-Type=image/jpeg, X-Timestamp=1.361650304566E12}
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 67985
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) The recognizer took 13.703156 ms, 62.461181920699936 fps, %.2f avg
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) Captured time: 1.361650304566E12
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68066, Content-Type=image/jpeg, X-Timestamp=1.361650304648E12}
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68066
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) The recognizer took 13.958912 ms, 62.502670046056316 fps, %.2f avg
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) Captured time: 1.361650304648E12
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68025, Content-Type=image/jpeg, X-Timestamp=1.361650304684E12}
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68025
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) The recognizer took 15.449583 ms, 62.51374200680568 fps, %.2f avg
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) Captured time: 1.361650304684E12
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (FINE) parsed headers {Content-Length=67993, Content-Type=image/jpeg, X-Timestamp=1.361650304692E12}
+@Sat Feb 23 12:11:44 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 67993
+@Sat Feb 23 12:11:45 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:45 PST 2013 in [global]: (FINE) The recognizer took 14.331512 ms, 62.54712727573383 fps, %.2f avg
+@Sat Feb 23 12:11:45 PST 2013 in [global]: (FINE) Captured time: 1.361650304692E12
+@Sat Feb 23 12:11:45 PST 2013 in [global]: (FINE) parsed headers {Content-Length=67912, Content-Type=image/jpeg, X-Timestamp=1.361650304721E12}
+@Sat Feb 23 12:11:45 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 67912
+@Sat Feb 23 12:11:45 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:45 PST 2013 in [global]: (FINE) The recognizer took 15.186039 ms, 62.563137337662575 fps, %.2f avg
+@Sat Feb 23 12:11:45 PST 2013 in [global]: (FINE) Captured time: 1.361650304721E12
+@Sat Feb 23 12:11:45 PST 2013 in [global]: (FINE) parsed headers {Content-Length=67848, Content-Type=image/jpeg, X-Timestamp=1.36165030476E12}
+@Sat Feb 23 12:11:45 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 67848
+@Sat Feb 23 12:11:45 PST 2013 in [global]: (FINE) No target found
+@Sat Feb 23 12:11:45 PST 2013 in [global]: (FINE) The recognizer took 16.1276 ms, 62.560281396120345 fps, %.2f avg
+@Sat Feb 23 12:11:45 PST 2013 in [global]: (FINE) Captured time: 1.36165030476E12
+@Sat Feb 23 12:11:45 PST 2013 in [global]: (FINE) parsed headers {Content-Length=68137, Content-Type=image/jpeg, X-Timestamp=1.361650304832E12}
+@Sat Feb 23 12:11:45 PST 2013 in [global]: (INFO) allocating a new direct buffer of length 68137
diff --git a/971cv/src/org/spartanrobotics/private_aos_camera_jar.jar b/971cv/src/org/spartanrobotics/private_aos_camera_jar.jar
new file mode 100644
index 0000000..dc5da19
--- /dev/null
+++ b/971cv/src/org/spartanrobotics/private_aos_camera_jar.jar
Binary files differ
diff --git a/971cv/src/org/spartanrobotics/receiveFromDS.cpp b/971cv/src/org/spartanrobotics/receiveFromDS.cpp
new file mode 100644
index 0000000..915db2b
--- /dev/null
+++ b/971cv/src/org/spartanrobotics/receiveFromDS.cpp
@@ -0,0 +1,8 @@
+//receives messages from the server that the vision code runs on the driver's station
+
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+
+