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/edu/wpi/first/wpijavacv/DaisyExtensions.java b/971cv/src/edu/wpi/first/wpijavacv/DaisyExtensions.java
new file mode 100644
index 0000000..41dccb7
--- /dev/null
+++ b/971cv/src/edu/wpi/first/wpijavacv/DaisyExtensions.java
@@ -0,0 +1,97 @@
+package edu.wpi.first.wpijavacv;

+

+import java.util.ArrayList;

+

+import com.googlecode.javacv.cpp.opencv_core;

+import com.googlecode.javacv.cpp.opencv_core.CvMemStorage;

+import com.googlecode.javacv.cpp.opencv_core.CvSeq;

+import com.googlecode.javacv.cpp.opencv_core.IplImage;

+import com.googlecode.javacv.cpp.opencv_imgproc;

+

+/**

+ * Team Miss Daisy extensions to wpijavacv, mostly to expose more methods.

+ *<p>

+ * TODO(jerry): Wean off of wpijavacv.

+ *

+ * @author jrussell

+ * @author jerry -- Moved storage to an instance variable

+ */

+public class DaisyExtensions {

+    private final CvMemStorage storage = CvMemStorage.create();

+    private IplImage contourImage;

+

+    public DaisyExtensions() {

+    }

+

+    public static CvSeq getCvSeq(WPIContour contour) {

+        return contour.getCVSeq();

+    }

+

+    public static WPIContour makeWPIContour(CvSeq seq) {

+        return new WPIContour(seq);

+    }

+

+    public static WPIGrayscaleImage makeWPIGrayscaleImage(IplImage arr) {

+        IplImage tempImage = IplImage.create(arr.cvSize(), arr.depth(), 1);

+        opencv_core.cvCopy(arr, tempImage);

+        return new WPIGrayscaleImage(tempImage);

+    }

+

+    public static WPIColorImage makeWPIColorImage(IplImage arr) {

+        IplImage tempImage = IplImage.create(arr.cvSize(), arr.depth(), 3);

+        opencv_core.cvCopy(arr, tempImage);

+        return new WPIColorImage(tempImage);

+    }

+

+    public static WPIBinaryImage makeWPIBinaryImage(IplImage arr) {

+        IplImage tempImage = IplImage.create(arr.cvSize(), arr.depth(), 1);

+        opencv_core.cvCopy(arr, tempImage);

+        return new WPIBinaryImage(tempImage);

+    }

+

+    public static IplImage getIplImage(WPIImage image) {

+        return image.image;

+    }

+

+    /**

+     * Finds a flat (non-hierarchical) list of contours in the given image, then

+     * computes the convex hull of each contour.

+     */

+    public WPIContour[] findConvexContours(WPIBinaryImage image) {

+        image.validateDisposed();

+

+        if (contourImage == null

+                || contourImage.cvSize().width() != image.getWidth()

+                || contourImage.cvSize().height() != image.getHeight()) {

+            if (contourImage != null) {

+                contourImage.release();

+            }

+            contourImage = IplImage.create(image.image.cvSize(),

+                    image.image.depth(), 1);

+        }

+

+        opencv_core.cvCopy(image.image, contourImage);

+

+        CvSeq contours = new CvSeq();

+        opencv_imgproc.cvFindContours(contourImage, storage, contours, 256,

+        	opencv_imgproc.CV_RETR_LIST,

+        	opencv_imgproc.CV_CHAIN_APPROX_TC89_KCOS);

+        ArrayList<WPIContour> results = new ArrayList<WPIContour>();

+        while (!WPIDisposable.isNull(contours)) {

+            CvSeq convexContour = opencv_imgproc.cvConvexHull2(contours,

+        	    storage, opencv_imgproc.CV_CLOCKWISE, 1);

+            WPIContour contour = new WPIContour(

+        	    opencv_core.cvCloneSeq(convexContour, storage));

+            results.add(contour);

+            contours = contours.h_next();

+        }

+

+        WPIContour[] array = new WPIContour[results.size()];

+        return results.toArray(array);

+    }

+

+    public void releaseMemory() {

+        opencv_core.cvClearMemStorage(storage);

+    }

+

+}

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>
+
+