2019-11-04 02:23:13 -05:00
|
|
|
package com.chameleonvision.classabstraction.camera;
|
|
|
|
|
|
2019-11-07 09:02:23 -08:00
|
|
|
import edu.wpi.cscore.CvSink;
|
2019-11-04 02:23:13 -05:00
|
|
|
import edu.wpi.cscore.UsbCamera;
|
2019-11-07 09:02:23 -08:00
|
|
|
import edu.wpi.cscore.VideoException;
|
2019-11-04 02:23:13 -05:00
|
|
|
import edu.wpi.cscore.VideoMode;
|
2019-11-07 09:02:23 -08:00
|
|
|
import edu.wpi.first.cameraserver.CameraServer;
|
|
|
|
|
import org.apache.commons.lang3.tuple.Pair;
|
|
|
|
|
import org.opencv.core.Mat;
|
2019-11-04 02:23:13 -05:00
|
|
|
|
2019-11-07 09:10:09 -08:00
|
|
|
public class USBCameraProcess implements CameraProcess {
|
2019-11-04 02:23:13 -05:00
|
|
|
private final UsbCamera baseCamera;
|
2019-11-07 09:02:23 -08:00
|
|
|
private final CvSink cvSink;
|
|
|
|
|
private Mat imageBuffer = new Mat();
|
2019-11-07 09:10:09 -08:00
|
|
|
public final CameraProperties properties;
|
2019-11-04 02:23:13 -05:00
|
|
|
|
2019-11-07 09:10:09 -08:00
|
|
|
public USBCameraProcess(UsbCamera camera, double fov) {
|
2019-11-04 02:23:13 -05:00
|
|
|
baseCamera = camera;
|
2019-11-07 09:02:23 -08:00
|
|
|
cvSink = CameraServer.getInstance().getVideo(baseCamera);
|
2019-11-04 02:23:13 -05:00
|
|
|
VideoMode vidMode = new VideoMode(VideoMode.PixelFormat.kYUYV, 640, 480, 60);
|
2019-11-07 09:02:23 -08:00
|
|
|
properties = new CameraProperties(baseCamera, fov);
|
|
|
|
|
}
|
|
|
|
|
|
2019-11-07 09:10:09 -08:00
|
|
|
@Override
|
|
|
|
|
public CameraProperties getProperties() {
|
|
|
|
|
return properties;
|
|
|
|
|
}
|
|
|
|
|
|
2019-11-07 09:02:23 -08:00
|
|
|
@Override
|
|
|
|
|
public Pair<Mat, Long> getFrame(Mat frame) {
|
|
|
|
|
var timestamp = System.nanoTime();
|
|
|
|
|
cvSink.grabFrame(imageBuffer);
|
|
|
|
|
imageBuffer.copyTo(frame);
|
|
|
|
|
return Pair.of(frame, timestamp - System.nanoTime());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void setExposure(int exposure) {
|
|
|
|
|
try {
|
|
|
|
|
baseCamera.setExposureManual(exposure);
|
|
|
|
|
} catch (VideoException e) {
|
2019-11-07 09:10:09 -08:00
|
|
|
System.err.println("USBCameraProcess Does not support exposure change");
|
2019-11-07 09:02:23 -08:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void setBrightness(int brightness) {
|
|
|
|
|
try {
|
|
|
|
|
baseCamera.setBrightness(brightness);
|
|
|
|
|
} catch (VideoException e) {
|
2019-11-07 09:10:09 -08:00
|
|
|
System.err.println("USBCameraProcess Does not support brightness change");
|
2019-11-07 09:02:23 -08:00
|
|
|
}
|
2019-11-04 02:23:13 -05:00
|
|
|
}
|
|
|
|
|
}
|