mirror of
https://github.com/PhotonVision/photonvision
synced 2026-07-05 03:21:40 +00:00
Move CameraConfiguration to VisionSource (#244)
This commit is contained in:
@@ -28,14 +28,13 @@ import org.photonvision.vision.frame.provider.FileFrameProvider;
|
|||||||
import org.photonvision.vision.processes.VisionSource;
|
import org.photonvision.vision.processes.VisionSource;
|
||||||
import org.photonvision.vision.processes.VisionSourceSettables;
|
import org.photonvision.vision.processes.VisionSourceSettables;
|
||||||
|
|
||||||
public class FileVisionSource implements VisionSource {
|
public class FileVisionSource extends VisionSource {
|
||||||
|
|
||||||
private final CameraConfiguration cameraConfiguration;
|
|
||||||
private final FileFrameProvider frameProvider;
|
private final FileFrameProvider frameProvider;
|
||||||
private final FileSourceSettables settables;
|
private final FileSourceSettables settables;
|
||||||
|
|
||||||
public FileVisionSource(CameraConfiguration cameraConfiguration) {
|
public FileVisionSource(CameraConfiguration cameraConfiguration) {
|
||||||
this.cameraConfiguration = cameraConfiguration;
|
super(cameraConfiguration);
|
||||||
frameProvider =
|
frameProvider =
|
||||||
new FileFrameProvider(
|
new FileFrameProvider(
|
||||||
Path.of(cameraConfiguration.path),
|
Path.of(cameraConfiguration.path),
|
||||||
@@ -48,7 +47,7 @@ public class FileVisionSource implements VisionSource {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public FileVisionSource(String name, String imagePath, double fov) {
|
public FileVisionSource(String name, String imagePath, double fov) {
|
||||||
cameraConfiguration = new CameraConfiguration(name, imagePath);
|
super(new CameraConfiguration(name, imagePath));
|
||||||
frameProvider = new FileFrameProvider(imagePath, fov);
|
frameProvider = new FileFrameProvider(imagePath, fov);
|
||||||
settables =
|
settables =
|
||||||
new FileSourceSettables(cameraConfiguration, frameProvider.get().frameStaticProperties);
|
new FileSourceSettables(cameraConfiguration, frameProvider.get().frameStaticProperties);
|
||||||
|
|||||||
@@ -33,19 +33,18 @@ import org.photonvision.vision.frame.provider.USBFrameProvider;
|
|||||||
import org.photonvision.vision.processes.VisionSource;
|
import org.photonvision.vision.processes.VisionSource;
|
||||||
import org.photonvision.vision.processes.VisionSourceSettables;
|
import org.photonvision.vision.processes.VisionSourceSettables;
|
||||||
|
|
||||||
public class USBCameraSource implements VisionSource {
|
public class USBCameraSource extends VisionSource {
|
||||||
private final Logger logger;
|
private final Logger logger;
|
||||||
private final UsbCamera camera;
|
private final UsbCamera camera;
|
||||||
private final USBCameraSettables usbCameraSettables;
|
private final USBCameraSettables usbCameraSettables;
|
||||||
private final USBFrameProvider usbFrameProvider;
|
private final USBFrameProvider usbFrameProvider;
|
||||||
public final CameraConfiguration configuration;
|
|
||||||
private final CvSink cvSink;
|
private final CvSink cvSink;
|
||||||
|
|
||||||
public final QuirkyCamera cameraQuirks;
|
public final QuirkyCamera cameraQuirks;
|
||||||
|
|
||||||
public USBCameraSource(CameraConfiguration config) {
|
public USBCameraSource(CameraConfiguration config) {
|
||||||
|
super(config);
|
||||||
logger = new Logger(USBCameraSource.class, config.nickname, LogGroup.Camera);
|
logger = new Logger(USBCameraSource.class, config.nickname, LogGroup.Camera);
|
||||||
configuration = config;
|
|
||||||
camera = new UsbCamera(config.nickname, config.path);
|
camera = new UsbCamera(config.nickname, config.path);
|
||||||
cvSink = CameraServer.getInstance().getVideo(this.camera);
|
cvSink = CameraServer.getInstance().getVideo(this.camera);
|
||||||
|
|
||||||
@@ -88,7 +87,6 @@ public class USBCameraSource implements VisionSource {
|
|||||||
super(configuration);
|
super(configuration);
|
||||||
getAllVideoModes();
|
getAllVideoModes();
|
||||||
setVideoMode(videoModes.get(0));
|
setVideoMode(videoModes.get(0));
|
||||||
calculateFrameStaticProps();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private int timeToPiCamV2RawExposure(double time_us) {
|
private int timeToPiCamV2RawExposure(double time_us) {
|
||||||
@@ -281,6 +279,6 @@ public class USBCameraSource implements VisionSource {
|
|||||||
@Override
|
@Override
|
||||||
public int hashCode() {
|
public int hashCode() {
|
||||||
return Objects.hash(
|
return Objects.hash(
|
||||||
camera, usbCameraSettables, usbFrameProvider, configuration, cvSink, cameraQuirks);
|
camera, usbCameraSettables, usbFrameProvider, cameraConfiguration, cvSink, cameraQuirks);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,13 +29,14 @@ import org.photonvision.vision.frame.provider.AcceleratedPicamFrameProvider;
|
|||||||
import org.photonvision.vision.processes.VisionSource;
|
import org.photonvision.vision.processes.VisionSource;
|
||||||
import org.photonvision.vision.processes.VisionSourceSettables;
|
import org.photonvision.vision.processes.VisionSourceSettables;
|
||||||
|
|
||||||
public class ZeroCopyPicamSource implements VisionSource {
|
public class ZeroCopyPicamSource extends VisionSource {
|
||||||
private static final Logger logger = new Logger(ZeroCopyPicamSource.class, LogGroup.Camera);
|
private static final Logger logger = new Logger(ZeroCopyPicamSource.class, LogGroup.Camera);
|
||||||
|
|
||||||
private final VisionSourceSettables settables;
|
private final VisionSourceSettables settables;
|
||||||
private final AcceleratedPicamFrameProvider frameProvider;
|
private final AcceleratedPicamFrameProvider frameProvider;
|
||||||
|
|
||||||
public ZeroCopyPicamSource(CameraConfiguration configuration) {
|
public ZeroCopyPicamSource(CameraConfiguration configuration) {
|
||||||
|
super(configuration);
|
||||||
if (configuration.cameraType != CameraType.ZeroCopyPicam) {
|
if (configuration.cameraType != CameraType.ZeroCopyPicam) {
|
||||||
throw new IllegalArgumentException(
|
throw new IllegalArgumentException(
|
||||||
"GPUAcceleratedPicamSource only accepts CameraConfigurations with type Picam");
|
"GPUAcceleratedPicamSource only accepts CameraConfigurations with type Picam");
|
||||||
|
|||||||
@@ -347,7 +347,6 @@ public class VisionModule {
|
|||||||
if (ret != null) {
|
if (ret != null) {
|
||||||
logger.debug("Saving calibration...");
|
logger.debug("Saving calibration...");
|
||||||
visionSource.getSettables().getConfiguration().addCalibration(ret);
|
visionSource.getSettables().getConfiguration().addCalibration(ret);
|
||||||
visionSource.getSettables().calculateFrameStaticProps();
|
|
||||||
} else {
|
} else {
|
||||||
logger.error("Calibration failed...");
|
logger.error("Calibration failed...");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,12 +17,24 @@
|
|||||||
|
|
||||||
package org.photonvision.vision.processes;
|
package org.photonvision.vision.processes;
|
||||||
|
|
||||||
|
import org.photonvision.common.configuration.CameraConfiguration;
|
||||||
import org.photonvision.vision.frame.FrameProvider;
|
import org.photonvision.vision.frame.FrameProvider;
|
||||||
|
|
||||||
public interface VisionSource {
|
public abstract class VisionSource {
|
||||||
FrameProvider getFrameProvider();
|
|
||||||
|
|
||||||
VisionSourceSettables getSettables();
|
protected final CameraConfiguration cameraConfiguration;
|
||||||
|
|
||||||
boolean isVendorCamera();
|
protected VisionSource(CameraConfiguration cameraConfiguration) {
|
||||||
|
this.cameraConfiguration = cameraConfiguration;
|
||||||
|
}
|
||||||
|
|
||||||
|
public CameraConfiguration getCameraConfiguration() {
|
||||||
|
return cameraConfiguration;
|
||||||
|
}
|
||||||
|
|
||||||
|
public abstract FrameProvider getFrameProvider();
|
||||||
|
|
||||||
|
public abstract VisionSourceSettables getSettables();
|
||||||
|
|
||||||
|
public abstract boolean isVendorCamera();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ import java.util.HashMap;
|
|||||||
import org.photonvision.common.configuration.CameraConfiguration;
|
import org.photonvision.common.configuration.CameraConfiguration;
|
||||||
import org.photonvision.common.logging.LogGroup;
|
import org.photonvision.common.logging.LogGroup;
|
||||||
import org.photonvision.common.logging.Logger;
|
import org.photonvision.common.logging.Logger;
|
||||||
|
import org.photonvision.vision.calibration.CameraCalibrationCoefficients;
|
||||||
import org.photonvision.vision.frame.FrameStaticProperties;
|
import org.photonvision.vision.frame.FrameStaticProperties;
|
||||||
|
|
||||||
public abstract class VisionSourceSettables {
|
public abstract class VisionSourceSettables {
|
||||||
@@ -86,7 +87,12 @@ public abstract class VisionSourceSettables {
|
|||||||
calculateFrameStaticProps();
|
calculateFrameStaticProps();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void calculateFrameStaticProps() {
|
public void addCalibration(CameraCalibrationCoefficients calibrationCoefficients) {
|
||||||
|
configuration.addCalibration(calibrationCoefficients);
|
||||||
|
calculateFrameStaticProps();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void calculateFrameStaticProps() {
|
||||||
var videoMode = getCurrentVideoMode();
|
var videoMode = getCurrentVideoMode();
|
||||||
this.frameStaticProperties =
|
this.frameStaticProperties =
|
||||||
new FrameStaticProperties(
|
new FrameStaticProperties(
|
||||||
|
|||||||
@@ -37,12 +37,12 @@ public class VisionModuleManagerTest {
|
|||||||
TestUtils.loadLibraries();
|
TestUtils.loadLibraries();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class TestSource implements VisionSource {
|
private static class TestSource extends VisionSource {
|
||||||
|
|
||||||
private final FrameProvider provider;
|
private final FrameProvider provider;
|
||||||
|
|
||||||
public TestSource(FrameProvider provider) {
|
public TestSource(FrameProvider provider) {
|
||||||
|
super(new CameraConfiguration("", "", "", ""));
|
||||||
this.provider = provider;
|
this.provider = provider;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -53,7 +53,7 @@ public class VisionModuleManagerTest {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public VisionSourceSettables getSettables() {
|
public VisionSourceSettables getSettables() {
|
||||||
return new TestSettables(new CameraConfiguration("", "", "", ""));
|
return new TestSettables(getCameraConfiguration());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user