git-svn-id: https://robotics.mvla.net/svn/frc971/2013/trunk/src@4142 f308d9b7-e957-4cde-b6ac-9a88185e7312
diff --git a/971CV/src/org/frc971/HTTPClient.java b/971CV/src/org/frc971/HTTPClient.java
index 9813595..4e42553 100644
--- a/971CV/src/org/frc971/HTTPClient.java
+++ b/971CV/src/org/frc971/HTTPClient.java
@@ -1,6 +1,6 @@
 package org.frc971;
 
-//Author: Daniel Petti
+//@author: daniel
 
 import java.io.*;
 import java.net.*;
@@ -8,25 +8,27 @@
 import java.awt.image.BufferedImage;
 import javax.imageio.ImageIO;
 
-import com.googlecode.javacv.cpp.opencv_core.IplImage;
-
 import aos.ChannelImageGetter;
 
 import java.nio.channels.SocketChannel;
 import java.nio.ByteBuffer;
 
+import edu.wpi.first.wpijavacv.WPIColorImage;
+
 public class HTTPClient {
 	//Connects to HTTP Server on robot and receives images
 	
 	private final static boolean LOCAL_DEBUG = true;
 	
-	private SocketChannel sock = SocketChannel.open();
-	private Socket core_sock = sock.socket();
+	private SocketChannel sock;
+	private Socket core_sock;
 	
 	
 	private BufferedReader sock_in;
 	private PrintWriter sock_out;
 	
+	private final String ATOM_IP = "10.9.71.6";
+	
 	private void WriteDebug(String message) {
 		//small helper function to write debug messages
 		if (LOCAL_DEBUG)
@@ -77,8 +79,10 @@
 	public HTTPClient() {
 		//Initialize socket connection to robot
 		try {
+			sock = SocketChannel.open();
+			core_sock = sock.socket();
 			WriteDebug("Connecting to server...");
-			sock.connect(new InetSocketAddress("192.168.0.137", 9714));
+			sock.connect(new InetSocketAddress(ATOM_IP, 9714));
 			sock_in = new BufferedReader(new InputStreamReader(core_sock.getInputStream()));
 			sock_out = new PrintWriter(core_sock.getOutputStream(), true);
 			//Write headers
@@ -110,7 +114,7 @@
 			InputStream in = new ByteArrayInputStream(binary_image.array());
 			try {
 				BufferedImage bImageFromConvert = ImageIO.read(in);
-				final_image.image = IplImage.createFrom(bImageFromConvert);
+				final_image.image = new WPIColorImage(bImageFromConvert);
 				final_image.timestamp = cgetter.getTimestamp();
 				WriteDebug("Image processing successful.");
 				return final_image;
diff --git a/971CV/src/org/frc971/ImageWithTimestamp.java b/971CV/src/org/frc971/ImageWithTimestamp.java
index 633517d..38f6937 100644
--- a/971CV/src/org/frc971/ImageWithTimestamp.java
+++ b/971CV/src/org/frc971/ImageWithTimestamp.java
@@ -1,8 +1,8 @@
 package org.frc971;
 
-import com.googlecode.javacv.cpp.opencv_core.IplImage;
+import edu.wpi.first.wpijavacv.WPIColorImage;
 
 public class ImageWithTimestamp {
-	IplImage image;
+	WPIColorImage image;
 	double timestamp;
 }
diff --git a/971CV/src/org/frc971/TestImageGetter.java b/971CV/src/org/frc971/TestImageGetter.java
new file mode 100644
index 0000000..1f80520
--- /dev/null
+++ b/971CV/src/org/frc971/TestImageGetter.java
@@ -0,0 +1,92 @@
+/**
+ * 
+ */
+package org.frc971;
+
+/**
+ * @author daniel
+ *
+ */
+
+//get debug images for Java camera processor
+
+import javax.imageio.ImageIO;
+
+import edu.wpi.first.wpijavacv.WPIColorImage;
+
+import java.io.File;
+import java.io.IOException;
+
+public class TestImageGetter {
+	private String path_to_images;
+	final static String[] images = {"45in_DoubleGreen.jpg",
+									"57inLargeTarget_DoubleGreenBK.jpg",
+									"FullField_DoubleGreenBK3.jpg",
+									"FullField_SmallGreen.jpg",
+									"HybridLine_DoubleGreenBK2.jpg",
+									"HybridLine_DoubleGreenBK3.jpg",
+									"HybridLine_DoubleGreenBK4.jpg",
+									"HybridLine_SmallGreen2.jpg",
+									"HybridLine_SmallGreen3.jpg",
+									"HybridLine_SmallGreen4.jpg",
+									"Midfield_DoubleGreenBK2.jpg",
+									"Midfield_SmallGreen2.jpg",
+									"Midfield_SmallGreen3.jpg",
+									"Midfield_SmallGreen4.jpg",
+									"OppLine_DoubleGreenBK2.jpg",
+									"OppLine_SmallGreen2.jpg",
+									"PyramidRight_DoubleGreenBK2.jpg",
+									"PyramidRight_SmallGreen2.jpg"
+									};
+	
+	private int image_index = -1;
+	
+	private WPIColorImage current_image = null;
+	
+	private String cocatenate_paths(String path1, String path2) {
+		if (path1.charAt(path1.length() - 1) == '/')
+			return path1 + path2;
+		else
+			return path1 + "/" + path2;
+	}
+	public TestImageGetter(String path_to_images) {
+		this.path_to_images = path_to_images;
+	}
+	public WPIColorImage GetNext() {
+		image_index++;
+		if (image_index < images.length) {
+			String image_to_get = images[image_index];
+			try {
+				current_image = new WPIColorImage(ImageIO.read(new File(cocatenate_paths(path_to_images, image_to_get))));
+				return current_image;
+			}
+			catch (IOException e) {
+				System.err.println("Could not open file.");
+				return null;
+			}
+		}
+		else
+			image_index--;
+			return null;
+	}
+	public WPIColorImage GetPrev() {
+		image_index--;
+		if (image_index >= 0) {
+			String image_to_get = images[image_index];
+			try {
+				current_image = new WPIColorImage(ImageIO.read(new File(cocatenate_paths(path_to_images, image_to_get))));
+				return current_image;
+			}
+			catch (IOException e) {
+				System.err.println("Could not open file.");
+				return null;
+			}
+		}
+		else
+			image_index++;
+			return null;
+	}
+	public WPIColorImage GetCurrent() {
+		return current_image;
+	}
+}
diff --git a/971CV/src/org/frc971/VisionTuner.java b/971CV/src/org/frc971/VisionTuner.java
index ef29e36..c664391 100644
--- a/971CV/src/org/frc971/VisionTuner.java
+++ b/971CV/src/org/frc971/VisionTuner.java
@@ -3,10 +3,8 @@
 import java.awt.BorderLayout;

 import java.awt.GridLayout;

 import java.awt.event.KeyEvent;

-import java.io.File;

-import java.io.IOException;

+import java.util.Arrays;

 

-import javax.imageio.ImageIO;

 import javax.swing.JPanel;

 import javax.swing.JSlider;

 import javax.swing.WindowConstants;

@@ -14,7 +12,6 @@
 import javax.swing.event.ChangeListener;

 

 import com.googlecode.javacv.CanvasFrame;

-

 import edu.wpi.first.wpijavacv.WPIColorImage;

 import edu.wpi.first.wpijavacv.WPIImage;

 

@@ -39,11 +36,9 @@
  * See {@link #processEvents()} for the keystroke commands.

  *

  * @author jerry

+ * @author daniel

  */

 public class VisionTuner {

-    private String[] testImageFilenames;

-    private WPIColorImage[] testImages;

-    private int currentIndex = 0;

     private Recognizer recognizer = new Recognizer2013();

 

     private final CanvasFrame cameraFrame = new CanvasFrame("Camera");

@@ -57,11 +52,12 @@
     private double totalMsec;

     private double minMsec = Double.MAX_VALUE;

     private double maxMsec;

+    

+    private TestImageGetter getter;

 

-    public VisionTuner(String[] imageFilenames) {

+    public VisionTuner() {

         cameraFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

 

-        loadTestImages(imageFilenames);

         recognizer.showIntermediateStages(true);

 

         cameraFrame.getContentPane().add(panel, BorderLayout.SOUTH);

@@ -79,7 +75,7 @@
                         hueMinSlider.getValue(), hueMaxSlider.getValue(),

                         satMinSlider.getValue(),

                         valMinSlider.getValue());

-                processCurrentImage();

+                processImage(getter.GetCurrent());

             }

         };

 

@@ -119,32 +115,9 @@
      * Loads the named test image files.

      * Sets testImageFilenames and testImages.

      */

-    private void loadTestImages(String[] imageFilenames) {

-        testImageFilenames = imageFilenames;

-        testImages = new WPIColorImage[testImageFilenames.length];

-        currentIndex = 0;

 

-        for (int i = 0; i < testImageFilenames.length; i++) {

-            String imageFilename = testImageFilenames[i];

-

-            System.out.println("Loading image file: " + imageFilename);

-            WPIColorImage rawImage = null;

-            try {

-                rawImage = new WPIColorImage(ImageIO.read(

-                        new File(imageFilename)));

-            } catch (IOException e) {

-                System.err.println("Couldn't load image file: " + imageFilename

-                        + ": " + e.getMessage());

-                System.exit(1);

-                return;

-            }

-            testImages[i] = rawImage;

-        }

-    }

-

-    private void processCurrentImage() {

-        WPIColorImage cameraImage = testImages[currentIndex];

-        cameraFrame.setTitle(testImageFilenames[currentIndex]);

+    private void processImage(WPIColorImage cameraImage) {

+        cameraFrame.setTitle("Test Images:");

 

         long startTime = System.nanoTime();

         WPIImage processedImage = recognizer.processImage(cameraImage);

@@ -164,17 +137,15 @@
     }

 

     private void previousImage() {

-        if (currentIndex > 0) {

-            --currentIndex;

-        }

-        processCurrentImage();

+    	WPIColorImage to_process = getter.GetPrev();

+    	if (to_process != null)

+    		processImage(to_process);

     }

 

     private void nextImage() {

-        if (currentIndex + 1 < testImages.length) {

-            ++currentIndex;

-        }

-        processCurrentImage();

+    	WPIColorImage to_process = getter.GetNext();

+    	if (to_process != null)

+    		processImage(to_process);

     }

 

     private void processEvents() {

@@ -198,17 +169,28 @@
     }

 

     public static void main(final String[] args) {

-        if (args.length == 0) {

-            System.err.println("Usage: " + VisionTuner.class.getName()

-                    + " test image filenames...");

-            System.exit(1);

+    	VisionTuner tuner = new VisionTuner();

+        if (Arrays.asList(args).contains("-debug")) {

+        	//debug mode has been requested

+        	tuner.getter = new TestImageGetter(".");

+        	WPIColorImage to_process = tuner.getter.GetNext();

+        	if (to_process != null) 

+        		tuner.processImage(to_process);

+        	else

+        		System.err.println("Cannot find test images.");

+        	for (;;) {

+                tuner.processEvents();

+            }

         }

-

-        VisionTuner tuner = new VisionTuner(args);

-        tuner.processCurrentImage();

-

-        for (;;) {

-            tuner.processEvents();

+        else {

+        	HTTPClient client = new HTTPClient();

+        	for (;;) {

+        		ImageWithTimestamp to_process = client.GetFrame();

+        		if (to_process.image != null) {

+        			tuner.processImage(to_process.image);

+        			System.out.println("Captured time: " + Double.toString(to_process.timestamp));

+        		}

+        	}

         }

     }