mirror of
https://github.com/PhotonVision/photonvision
synced 2026-06-20 00:51:41 +00:00
Rename USBCamera to USBCameraProcess & abstractify
- Most classes now take a CameraProcess instead of a USBCameraProcess
This commit is contained in:
@@ -4,6 +4,8 @@ import org.apache.commons.lang3.tuple.Pair;
|
||||
import org.opencv.core.Mat;
|
||||
|
||||
public interface CameraProcess {
|
||||
CameraProperties getProperties();
|
||||
|
||||
Pair<Mat, Long> getFrame(Mat frame);
|
||||
|
||||
void setExposure(int exposure);
|
||||
|
||||
@@ -8,19 +8,24 @@ import edu.wpi.first.cameraserver.CameraServer;
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
import org.opencv.core.Mat;
|
||||
|
||||
public class USBCamera implements CameraProcess {
|
||||
public class USBCameraProcess implements CameraProcess {
|
||||
private final UsbCamera baseCamera;
|
||||
public final CameraProperties properties;
|
||||
private final CvSink cvSink;
|
||||
private Mat imageBuffer = new Mat();
|
||||
public final CameraProperties properties;
|
||||
|
||||
public USBCamera(UsbCamera camera, double fov) {
|
||||
public USBCameraProcess(UsbCamera camera, double fov) {
|
||||
baseCamera = camera;
|
||||
cvSink = CameraServer.getInstance().getVideo(baseCamera);
|
||||
VideoMode vidMode = new VideoMode(VideoMode.PixelFormat.kYUYV, 640, 480, 60);
|
||||
properties = new CameraProperties(baseCamera, fov);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CameraProperties getProperties() {
|
||||
return properties;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Pair<Mat, Long> getFrame(Mat frame) {
|
||||
var timestamp = System.nanoTime();
|
||||
@@ -34,7 +39,7 @@ public class USBCamera implements CameraProcess {
|
||||
try {
|
||||
baseCamera.setExposureManual(exposure);
|
||||
} catch (VideoException e) {
|
||||
System.err.println("USBCamera Does not support exposure change");
|
||||
System.err.println("USBCameraProcess Does not support exposure change");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -43,7 +48,7 @@ public class USBCamera implements CameraProcess {
|
||||
try {
|
||||
baseCamera.setBrightness(brightness);
|
||||
} catch (VideoException e) {
|
||||
System.err.println("USBCamera Does not support brightness change");
|
||||
System.err.println("USBCameraProcess Does not support brightness change");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
package com.chameleonvision.classabstraction.pipeline;
|
||||
|
||||
import com.chameleonvision.classabstraction.camera.USBCamera;
|
||||
import com.chameleonvision.classabstraction.camera.CameraProcess;
|
||||
import org.opencv.core.Mat;
|
||||
|
||||
/**
|
||||
@@ -16,6 +16,6 @@ public abstract class CVPipeline<R extends CVPipelineResult, S extends CVPipelin
|
||||
this.settings = settings;
|
||||
}
|
||||
|
||||
abstract void initPipeline(USBCamera camera);
|
||||
abstract void initPipeline(CameraProcess camera);
|
||||
abstract R runPipeline(Mat inputMat);
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package com.chameleonvision.classabstraction.pipeline;
|
||||
|
||||
import com.chameleonvision.classabstraction.camera.CameraProcess;
|
||||
import com.chameleonvision.classabstraction.camera.CameraStaticProperties;
|
||||
import com.chameleonvision.classabstraction.camera.USBCamera;
|
||||
import com.chameleonvision.classabstraction.pipeline.pipes.*;
|
||||
import com.chameleonvision.vision.ImageRotation;
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
@@ -13,7 +13,7 @@ import java.util.List;
|
||||
@SuppressWarnings("WeakerAccess")
|
||||
public class CVPipeline2d extends CVPipeline<CVPipeline2d.CVPipeline2dResult, CVPipeline2d.CVPipeline2dSettings> {
|
||||
|
||||
private USBCamera camera;
|
||||
private CameraProcess cameraProcess;
|
||||
|
||||
private Mat rawCameraMat = new Mat();
|
||||
private Mat hsvOutputMat = new Mat();
|
||||
@@ -23,8 +23,8 @@ public class CVPipeline2d extends CVPipeline<CVPipeline2d.CVPipeline2dResult, CV
|
||||
}
|
||||
|
||||
@Override
|
||||
void initPipeline(USBCamera cam) {
|
||||
camera = cam;
|
||||
void initPipeline(CameraProcess cam) {
|
||||
cameraProcess = cam;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -32,7 +32,7 @@ public class CVPipeline2d extends CVPipeline<CVPipeline2d.CVPipeline2dResult, CV
|
||||
long totalProcessTimeNanos = 0;
|
||||
StringBuilder procTimeStringBuilder = new StringBuilder();
|
||||
|
||||
CameraStaticProperties camProps = camera.properties.staticProperties;
|
||||
CameraStaticProperties camProps = cameraProcess.getProperties().staticProperties;
|
||||
|
||||
inputMat.copyTo(rawCameraMat);
|
||||
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package com.chameleonvision.classabstraction.pipeline;
|
||||
|
||||
import com.chameleonvision.classabstraction.camera.USBCamera;
|
||||
import com.chameleonvision.vision.process.PipelineResult;
|
||||
import com.chameleonvision.classabstraction.camera.CameraProcess;
|
||||
import org.opencv.core.Mat;
|
||||
|
||||
public class DriverVisionPipeline extends CVPipeline<DriverVisionPipeline.DriverPipelineResult, CVPipelineSettings> {
|
||||
@@ -10,7 +9,7 @@ public class DriverVisionPipeline extends CVPipeline<DriverVisionPipeline.Driver
|
||||
}
|
||||
|
||||
@Override
|
||||
void initPipeline(USBCamera camera) {
|
||||
void initPipeline(CameraProcess camera) {
|
||||
// TODO: set camera to driver mode
|
||||
}
|
||||
|
||||
|
||||
@@ -99,13 +99,13 @@ public class USBCamera {
|
||||
}
|
||||
}
|
||||
var initTimeMs = (System.nanoTime() - initTimeout) / 1e6;
|
||||
System.out.printf("USBCamera initialized in %.2fms\n", initTimeMs);
|
||||
System.out.printf("USBCameraProcess initialized in %.2fms\n", initTimeMs);
|
||||
}
|
||||
var trueVideoModes = UsbCam.enumerateVideoModes();
|
||||
availableVideoModes = Arrays.stream(trueVideoModes).filter(v ->
|
||||
v.fps >= MINIMUM_FPS && v.width >= MINIMUM_WIDTH && v.height >= MINIMUM_HEIGHT && ALLOWED_PIXEL_FORMATS.contains(v.pixelFormat)).toArray(VideoMode[]::new);
|
||||
if (availableVideoModes.length == 0) {
|
||||
System.err.println("USBCamera not supported!");
|
||||
System.err.println("USBCameraProcess not supported!");
|
||||
throw new RuntimeException(new CameraException(CameraException.CameraExceptionType.BAD_CAMERA));
|
||||
}
|
||||
if (videoModeIndex <= availableVideoModes.length - 1) {
|
||||
@@ -283,7 +283,7 @@ public class USBCamera {
|
||||
try {
|
||||
UsbCam.setExposureManual(exposure);
|
||||
} catch (VideoException e) {
|
||||
System.err.println("USBCamera Does not support exposure change");
|
||||
System.err.println("USBCameraProcess Does not support exposure change");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -122,7 +122,7 @@ public class StandardCVProcess implements CVProcess {
|
||||
pipelineResult.IsValid = true;
|
||||
switch (currentPipeline.calibrationMode) {
|
||||
case None:
|
||||
///use the center of the USBCamera to find the pitch and yaw difference
|
||||
///use the center of the USBCameraProcess to find the pitch and yaw difference
|
||||
pipelineResult.CalibratedX = cameraValues.CenterX;
|
||||
pipelineResult.CalibratedY = cameraValues.CenterY;
|
||||
break;
|
||||
|
||||
@@ -80,7 +80,7 @@ public class USBCameraProcess implements CameraProcess {
|
||||
}
|
||||
}
|
||||
|
||||
// USBCamera stuff
|
||||
// USBCameraProcess stuff
|
||||
|
||||
@Override
|
||||
public String getCamName() {
|
||||
|
||||
@@ -41,7 +41,7 @@ public class VisionProcess implements Runnable {
|
||||
|
||||
public VisionProcess(CameraProcess cameraProcess) {
|
||||
|
||||
// USBCamera settings
|
||||
// USBCameraProcess settings
|
||||
cvProcess = new StandardCVProcess(cameraProcess.getCamVals());
|
||||
this.cameraProcess = cameraProcess; // new USBCameraProcess(cameraProcess);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user