Resize image in driver mode (#197)

This commit is contained in:
Matt
2020-12-30 10:41:31 -08:00
committed by GitHub
parent d327428e1b
commit abf5226405

View File

@@ -27,6 +27,7 @@ import org.photonvision.vision.frame.FrameStaticProperties;
import org.photonvision.vision.opencv.CVMat;
import org.photonvision.vision.pipe.impl.CalculateFPSPipe;
import org.photonvision.vision.pipe.impl.Draw2dCrosshairPipe;
import org.photonvision.vision.pipe.impl.ResizeImagePipe;
import org.photonvision.vision.pipe.impl.RotateImagePipe;
import org.photonvision.vision.pipeline.result.DriverModePipelineResult;
@@ -36,6 +37,7 @@ public class DriverModePipeline
private final RotateImagePipe rotateImagePipe = new RotateImagePipe();
private final Draw2dCrosshairPipe draw2dCrosshairPipe = new Draw2dCrosshairPipe();
private final CalculateFPSPipe calculateFPSPipe = new CalculateFPSPipe();
private final ResizeImagePipe resizeImagePipe = new ResizeImagePipe();
public DriverModePipeline() {
settings = new DriverModePipelineSettings();
@@ -53,6 +55,9 @@ public class DriverModePipeline
frameStaticProperties, settings.streamingFrameDivisor);
draw2dCrosshairPipe.setParams(draw2dCrosshairParams);
resizeImagePipe.setParams(
new ResizeImagePipe.ResizeImageParams(settings.streamingFrameDivisor));
if (PicamJNI.isSupported()) {
PicamJNI.setRotation(settings.inputImageRotationMode.value);
PicamJNI.setShouldCopyColor(true);
@@ -61,20 +66,29 @@ public class DriverModePipeline
@Override
public DriverModePipelineResult process(Frame frame, DriverModePipelineSettings settings) {
long totalNanos = 0;
boolean accelerated = PicamJNI.isSupported();
// apply pipes
var inputMat = frame.image.getMat();
if (inputMat.channels() == 1 && PicamJNI.isSupported()) {
if (inputMat.channels() == 1 && accelerated) {
long colorMatPtr = PicamJNI.grabFrame(true);
if (colorMatPtr == 0) throw new RuntimeException("Got null Mat from GPU Picam driver");
frame.image.release();
inputMat = new Mat(colorMatPtr);
}
var rotateImageResult = rotateImagePipe.run(inputMat);
totalNanos += resizeImagePipe.run(inputMat).nanosElapsed;
if (!accelerated) {
var rotateImageResult = rotateImagePipe.run(inputMat);
totalNanos += rotateImageResult.nanosElapsed;
}
var draw2dCrosshairResult = draw2dCrosshairPipe.run(Pair.of(inputMat, List.of()));
// calculate elapsed nanoseconds
long totalNanos = rotateImageResult.nanosElapsed + draw2dCrosshairResult.nanosElapsed;
totalNanos += draw2dCrosshairResult.nanosElapsed;
var fpsResult = calculateFPSPipe.run(null);
var fps = fpsResult.output;