Too many changes to list

running in to bug in CameraStreamer with native exceptions
This commit is contained in:
Banks Troutman
2019-11-21 05:32:19 -05:00
parent 35509c0162
commit 48da9f5dfd
21 changed files with 678 additions and 211 deletions

View File

@@ -1,11 +1,8 @@
package com.chameleonvision.classabstraction.camera;
import com.chameleonvision.Main;
import com.chameleonvision.classabstraction.config.CameraConfig;
import com.chameleonvision.settings.Platform;
import com.chameleonvision.vision.camera.USBCamera;
import edu.wpi.cscore.UsbCamera;
import edu.wpi.cscore.UsbCameraInfo;
import edu.wpi.cscore.VideoMode;
import org.apache.commons.math3.util.FastMath;
@@ -16,7 +13,7 @@ import java.util.stream.Collectors;
import java.util.stream.Stream;
public class CameraProperties {
private static final double DEFAULT_FOV = 70;
public static final double DEFAULT_FOV = 70;
private static final int DEFAULT_EXPOSURE = 50;
private static final int DEFAULT_BRIGHTNESS = 50;
private static final int MINIMUM_FPS = 30;
@@ -61,8 +58,16 @@ public class CameraProperties {
System.out.printf("USBCameraProcess initialized in %.2fms\n", initTimeMs);
}
// TODO: find way to determine if camera is a PS3Eye
hasGain = false;
var props = baseCamera.enumerateProperties();
// var props = baseCamera.enumerateProperties();
// for (var prop : props) {
// var name = prop.getName();
// var min = prop.getMin();
// var max = prop.getMax();
// var _default = prop.getDefault();
// var kind = prop.getKind();
// }
videoModes = filterVideoModes(baseCamera.enumerateVideoModes());
}
@@ -85,12 +90,12 @@ public class CameraProperties {
staticProperties = new CameraStaticProperties(videoMode.width, videoMode.height, FOV);
}
public double CalculatePitch(double PixelY, double centerY) {
public double calculatePitch(double PixelY, double centerY) {
double pitch = FastMath.toDegrees(FastMath.atan((PixelY - centerY) / staticProperties.verticalFocalLength));
return (pitch * -1);
}
public double CalculateYaw(double PixelX, double centerX) {
public double calculateYaw(double PixelX, double centerX) {
return FastMath.toDegrees(FastMath.atan((PixelX - centerX) / staticProperties.horizontalFocalLength));
}
}

View File

@@ -1,14 +1,11 @@
package com.chameleonvision.classabstraction.camera;
import com.chameleonvision.vision.camera.StreamDivisor;
import com.chameleonvision.web.ServerHandler;
import edu.wpi.cscore.CvSource;
import edu.wpi.cscore.VideoMode;
import edu.wpi.first.cameraserver.CameraServer;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.core.Size;
import org.opencv.imgproc.Imgproc;
public class CameraStreamer {
private final CameraProcess cameraProcess;
@@ -24,6 +21,7 @@ public class CameraStreamer {
this.cvSource = CameraServer.getInstance().putVideo(name,
cameraProcess.getProperties().staticProperties.imageWidth / divisor.value,
cameraProcess.getProperties().staticProperties.imageHeight / divisor.value);
setDivisor(divisor);
}
public void setDivisor(StreamDivisor newDivisor) {
@@ -37,7 +35,7 @@ public class CameraStreamer {
cameraProcess.getProperties().staticProperties.imageWidth / divisor.value,
cameraProcess.getProperties().staticProperties.imageHeight / divisor.value);
}
ServerHandler.sendFullSettings();
// ServerHandler.sendFullSettings();
}
public void setNewVideoMode(VideoMode newVideoMode) {
@@ -47,14 +45,16 @@ public class CameraStreamer {
}
public void runStream(Mat image) {
image.copyTo(streamBuffer);
if (divisor.value != 1) {
var camVal = cameraProcess.getProperties().staticProperties;
var newWidth = camVal.imageWidth / divisor.value;
var newHeight = camVal.imageHeight / divisor.value;
Size newSize = new Size(newWidth, newHeight);
Imgproc.resize(streamBuffer, streamBuffer, newSize);
synchronized (streamBufferLock) {
streamBuffer = image;
}
// if (divisor.value != 1) {
// var camVal = cameraProcess.getProperties().staticProperties;
// var newWidth = camVal.imageWidth / divisor.value;
// var newHeight = camVal.imageHeight / divisor.value;
// Size newSize = new Size(newWidth, newHeight);
// Imgproc.resize(streamBuffer, streamBuffer, newSize);
// }
cvSource.putFrame(streamBuffer);
}

View File

@@ -15,11 +15,10 @@ public class USBCameraProcess implements CameraProcess {
private Mat imageBuffer = new Mat();
private CameraProperties properties;
public USBCameraProcess(UsbCamera camera, CameraConfig config) {
baseCamera = camera;
public USBCameraProcess(CameraConfig config) {
baseCamera = new UsbCamera(config.name, config.path);
cvSink = CameraServer.getInstance().getVideo(baseCamera);
properties = new CameraProperties(baseCamera, config.fov);
properties = new CameraProperties(baseCamera, config);
setVideoMode(properties.videoModes.get(0));
}