mirror of
https://github.com/PhotonVision/photonvision
synced 2026-06-22 01:11:40 +00:00
Further abstract image capture, fix some UI bugs
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user