Further abstract image capture, fix some UI bugs

This commit is contained in:
Banks Troutman
2019-11-25 05:34:04 -05:00
parent 26e0bb733b
commit ddba967793
23 changed files with 165 additions and 130 deletions

View File

@@ -1,6 +1,6 @@
package com.chameleonvision.vision.pipeline;
import com.chameleonvision.vision.camera.CameraProcess;
import com.chameleonvision.vision.camera.CameraCapture;
import org.opencv.core.Mat;
/**
@@ -9,7 +9,7 @@ import org.opencv.core.Mat;
*/
public abstract class CVPipeline<R extends CVPipelineResult, S extends CVPipelineSettings> {
protected Mat outputMat = new Mat();
CameraProcess cameraProcess;
CameraCapture cameraCapture;
public final S settings;
protected CVPipeline(S settings) {
@@ -21,10 +21,10 @@ public abstract class CVPipeline<R extends CVPipelineResult, S extends CVPipelin
settings.nickname = pipelineName;
}
public void initPipeline(CameraProcess camera) {
cameraProcess = camera;
cameraProcess.setExposure((int) settings.exposure);
cameraProcess.setBrightness((int) settings.brightness);
public void initPipeline(CameraCapture camera) {
cameraCapture = camera;
cameraCapture.setExposure((int) settings.exposure);
cameraCapture.setBrightness((int) settings.brightness);
}
abstract public R runPipeline(Mat inputMat);
}

View File

@@ -1,7 +1,7 @@
package com.chameleonvision.vision.pipeline;
import com.chameleonvision.vision.camera.CameraProcess;
import com.chameleonvision.vision.camera.CameraStaticProperties;
import com.chameleonvision.vision.camera.CameraCapture;
import com.chameleonvision.vision.camera.CaptureStaticProperties;
import com.chameleonvision.vision.pipeline.pipes.*;
import com.chameleonvision.vision.enums.ImageRotation;
import org.apache.commons.lang3.tuple.Pair;
@@ -41,10 +41,10 @@ public class CVPipeline2d extends CVPipeline<CVPipeline2dResult, CVPipeline2dSet
}
@Override
public void initPipeline(CameraProcess process) {
public void initPipeline(CameraCapture process) {
super.initPipeline(process);
CameraStaticProperties camProps = cameraProcess.getProperties().staticProperties;
CaptureStaticProperties camProps = cameraCapture.getProperties().getStaticProperties();
Scalar hsvLower = new Scalar(settings.hue.get(0).intValue(), settings.saturation.get(0).intValue(), settings.value.get(0).intValue());
Scalar hsvUpper = new Scalar(settings.hue.get(1).intValue(), settings.saturation.get(1).intValue(), settings.value.get(1).intValue());
@@ -66,7 +66,7 @@ public class CVPipeline2d extends CVPipeline<CVPipeline2dResult, CVPipeline2dSet
long totalProcessTimeNanos = 0;
long processStartTimeNanos = System.nanoTime();
if (cameraProcess == null) {
if (cameraCapture == null) {
throw new RuntimeException("Pipeline was not initialized before being run!");
}
if(inputMat.cols() <= 1) {
@@ -75,7 +75,7 @@ public class CVPipeline2d extends CVPipeline<CVPipeline2dResult, CVPipeline2dSet
StringBuilder procTimeStringBuilder = new StringBuilder();
CameraStaticProperties camProps = cameraProcess.getProperties().staticProperties;
CaptureStaticProperties camProps = cameraCapture.getProperties().getStaticProperties();
inputMat.copyTo(rawCameraMat);
@@ -84,7 +84,7 @@ public class CVPipeline2d extends CVPipeline<CVPipeline2dResult, CVPipeline2dSet
Scalar hsvUpper = new Scalar(settings.hue.get(1).intValue(), settings.saturation.get(1).intValue(), settings.value.get(1).intValue());
rotateFlipPipe.setConfig(ImageRotation.DEG_0, settings.flipMode);
blurPipe.setConfig(5);
blurPipe.setConfig(0);
erodeDilatePipe.setConfig(settings.erode, settings.dilate, 7);
hsvPipe.setConfig(hsvLower, hsvUpper);
filterContoursPipe.setConfig(settings.area, settings.ratio, settings.extent, camProps);

View File

@@ -19,7 +19,7 @@ public class DriverVisionPipeline extends CVPipeline<DriverPipelineResult, CVPip
outputMat = inputMat;
var camProps = cameraProcess.getProperties().staticProperties;
var camProps = cameraCapture.getProperties().getStaticProperties();
Draw2dContoursPipe.Draw2dContoursSettings draw2dContoursSettings = new Draw2dContoursPipe.Draw2dContoursSettings();
draw2dContoursSettings.showCrosshair = true;

View File

@@ -25,21 +25,22 @@ public class BlurPipe implements Pipe<Mat, Mat> {
public Pair<Mat, Long> run(Mat input) {
long processStartNanos = System.nanoTime();
input.copyTo(processBuffer);
try {
if (blurSize > 0) {
if (blurSize > 0) {
input.copyTo(processBuffer);
try {
Imgproc.blur(processBuffer, processBuffer, new Size(blurSize, blurSize));
processBuffer.copyTo(outputMat);
} catch (CvException e) {
System.err.println("(BlurPipe) Exception thrown by OpenCV: \n" + e.getMessage());
}
} catch (CvException e) {
System.err.println("(BlurPipe) Exception thrown by OpenCV: \n" + e.getMessage());
} else {
input.copyTo(outputMat);
}
long processTime = System.nanoTime() - processStartNanos;
processBuffer.copyTo(outputMat);
Pair<Mat, Long> output = Pair.of(outputMat, processTime);
processBuffer.release();
return output;
}
}

View File

@@ -1,6 +1,6 @@
package com.chameleonvision.vision.pipeline.pipes;
import com.chameleonvision.vision.camera.CameraStaticProperties;
import com.chameleonvision.vision.camera.CaptureStaticProperties;
import com.chameleonvision.vision.pipeline.CVPipeline2d;
import com.chameleonvision.vision.enums.CalibrationMode;
import org.apache.commons.lang3.tuple.Pair;
@@ -13,14 +13,14 @@ import java.util.List;
public class Collect2dTargetsPipe implements Pipe<List<RotatedRect>, List<CVPipeline2d.Target2d>> {
private CalibrationMode calibrationMode;
private CameraStaticProperties camProps;
private CaptureStaticProperties camProps;
private List<Number> calibrationPoint;
private double calibrationM, calibrationB;
private List<CVPipeline2d.Target2d> targets = new ArrayList<>();
public Collect2dTargetsPipe(CalibrationMode calibrationMode, List<Number> calibrationPoint,
double calibrationM, double calibrationB, CameraStaticProperties camProps) {
double calibrationM, double calibrationB, CaptureStaticProperties camProps) {
this.calibrationMode = calibrationMode;
this.camProps = camProps;
this.calibrationPoint = calibrationPoint;
@@ -29,7 +29,7 @@ public class Collect2dTargetsPipe implements Pipe<List<RotatedRect>, List<CVPipe
}
public void setConfig(CalibrationMode calibrationMode, List<Number> calibrationPoint,
double calibrationM, double calibrationB, CameraStaticProperties camProps) {
double calibrationM, double calibrationB, CaptureStaticProperties camProps) {
this.calibrationMode = calibrationMode;
this.camProps = camProps;
this.calibrationPoint = calibrationPoint;

View File

@@ -1,6 +1,6 @@
package com.chameleonvision.vision.pipeline.pipes;
import com.chameleonvision.vision.camera.CameraStaticProperties;
import com.chameleonvision.vision.camera.CaptureStaticProperties;
import com.chameleonvision.util.Helpers;
import org.apache.commons.lang3.tuple.Pair;
import org.opencv.core.Point;
@@ -14,11 +14,11 @@ import java.util.List;
public class Draw2dContoursPipe implements Pipe<Pair<Mat, List<RotatedRect>>, Mat> {
private final Draw2dContoursSettings settings;
private final CameraStaticProperties camProps;
private final CaptureStaticProperties camProps;
private Mat outputMat = new Mat();
public Draw2dContoursPipe(Draw2dContoursSettings settings, CameraStaticProperties camProps) {
public Draw2dContoursPipe(Draw2dContoursSettings settings, CaptureStaticProperties camProps) {
this.settings = settings;
this.camProps = camProps;
}

View File

@@ -1,6 +1,6 @@
package com.chameleonvision.vision.pipeline.pipes;
import com.chameleonvision.vision.camera.CameraStaticProperties;
import com.chameleonvision.vision.camera.CaptureStaticProperties;
import com.chameleonvision.util.MathHandler;
import org.apache.commons.lang3.tuple.Pair;
import org.opencv.core.MatOfPoint;
@@ -16,18 +16,18 @@ public class FilterContoursPipe implements Pipe<List<MatOfPoint>, List<MatOfPoin
private List<Number> area;
private List<Number> ratio;
private List<Number> extent;
private CameraStaticProperties camProps;
private CaptureStaticProperties camProps;
private List<MatOfPoint> filteredContours = new ArrayList<>();
public FilterContoursPipe(List<Number> area, List<Number> ratio, List<Number> extent, CameraStaticProperties camProps) {
public FilterContoursPipe(List<Number> area, List<Number> ratio, List<Number> extent, CaptureStaticProperties camProps) {
this.area = area;
this.ratio = ratio;
this.extent = extent;
this.camProps = camProps;
}
public void setConfig(List<Number> area, List<Number> ratio, List<Number> extent, CameraStaticProperties camProps) {
public void setConfig(List<Number> area, List<Number> ratio, List<Number> extent, CaptureStaticProperties camProps) {
this.area = area;
this.ratio = ratio;
this.extent = extent;

View File

@@ -1,6 +1,6 @@
package com.chameleonvision.vision.pipeline.pipes;
import com.chameleonvision.vision.camera.CameraStaticProperties;
import com.chameleonvision.vision.camera.CaptureStaticProperties;
import com.chameleonvision.vision.enums.SortMode;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.commons.math3.util.FastMath;
@@ -25,16 +25,16 @@ public class SortContoursPipe implements Pipe<List<RotatedRect>, List<RotatedRec
private SortMode sort;
private CameraStaticProperties camProps;
private CaptureStaticProperties camProps;
private List<RotatedRect> sortedContours = new ArrayList<>();
public SortContoursPipe(SortMode sort, CameraStaticProperties camProps) {
public SortContoursPipe(SortMode sort, CaptureStaticProperties camProps) {
this.sort = sort;
this.camProps = camProps;
}
public void setConfig(SortMode sort, CameraStaticProperties camProps) {
public void setConfig(SortMode sort, CaptureStaticProperties camProps) {
this.sort = sort;
this.camProps = camProps;
}