Move various printTestResults methods to TestUtils

printTestResults was duplicated a lot, so it has been moved to TestUtils for maintainability.
This commit is contained in:
Gold856
2025-03-27 08:22:39 -04:00
committed by Matt Morley
parent ed7fc6bbcc
commit 75dee20d77
8 changed files with 35 additions and 93 deletions

View File

@@ -24,10 +24,13 @@ import java.awt.HeadlessException;
import java.io.File;
import java.io.IOException;
import java.nio.file.Path;
import java.util.stream.Collectors;
import org.opencv.core.Mat;
import org.opencv.highgui.HighGui;
import org.photonvision.jni.WpilibLoader;
import org.photonvision.vision.calibration.CameraCalibrationCoefficients;
import org.photonvision.vision.pipeline.result.CVPipelineResult;
import org.photonvision.vision.target.TrackedTarget;
public class TestUtils {
public static boolean loadLibraries() {
@@ -372,6 +375,22 @@ public class TestUtils {
showImage(frame, DefaultTimeoutMillis);
}
public static void printTestResults(CVPipelineResult pipelineResult) {
double fps = 1000 / pipelineResult.getLatencyMillis();
System.out.print(
"Pipeline ran in " + pipelineResult.getLatencyMillis() + "ms (" + fps + " fps), ");
System.out.println("Found " + pipelineResult.targets.size() + " valid targets");
}
public static void printTestResultsWithLocation(CVPipelineResult pipelineResult) {
printTestResults(pipelineResult);
System.out.println(
"Found targets at "
+ pipelineResult.targets.stream()
.map(TrackedTarget::getBestCameraToTarget3d)
.collect(Collectors.toList()));
}
public static Path getTestMode2023ImagePath() {
return getResourcesFolderPath(true)
.resolve("testimages")

View File

@@ -18,7 +18,6 @@
package org.photonvision.vision.pipeline;
import edu.wpi.first.math.geometry.Translation3d;
import java.util.stream.Collectors;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@@ -29,7 +28,6 @@ import org.photonvision.vision.camera.QuirkyCamera;
import org.photonvision.vision.frame.provider.FileFrameProvider;
import org.photonvision.vision.pipeline.result.CVPipelineResult;
import org.photonvision.vision.target.TargetModel;
import org.photonvision.vision.target.TrackedTarget;
public class AprilTagTest {
@BeforeEach
@@ -59,7 +57,7 @@ public class AprilTagTest {
CVPipelineResult pipelineResult;
pipelineResult = pipeline.run(frameProvider.get(), QuirkyCamera.DefaultCamera);
printTestResults(pipelineResult);
TestUtils.printTestResultsWithLocation(pipelineResult);
// Draw on input
var outputPipe = new OutputStreamPipeline();
@@ -124,7 +122,7 @@ public class AprilTagTest {
CVPipelineResult pipelineResult;
pipelineResult = pipeline.run(frameProvider.get(), QuirkyCamera.DefaultCamera);
printTestResults(pipelineResult);
TestUtils.printTestResultsWithLocation(pipelineResult);
// Draw on input
var outputPipe = new OutputStreamPipeline();
@@ -140,16 +138,4 @@ public class AprilTagTest {
Assertions.assertEquals(2, pose.getTranslation().getY(), 0.2);
Assertions.assertEquals(0.0, pose.getTranslation().getZ(), 0.2);
}
private static void printTestResults(CVPipelineResult pipelineResult) {
double fps = 1000 / pipelineResult.getLatencyMillis();
System.out.println(
"Pipeline ran in " + pipelineResult.getLatencyMillis() + "ms (" + fps + " " + "fps)");
System.out.println("Found " + pipelineResult.targets.size() + " valid targets");
System.out.println(
"Found targets at "
+ pipelineResult.targets.stream()
.map(TrackedTarget::getBestCameraToTarget3d)
.collect(Collectors.toList()));
}
}

View File

@@ -18,7 +18,6 @@
package org.photonvision.vision.pipeline;
import edu.wpi.first.math.geometry.Translation3d;
import java.util.stream.Collectors;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@@ -29,7 +28,6 @@ import org.photonvision.vision.camera.QuirkyCamera;
import org.photonvision.vision.frame.provider.FileFrameProvider;
import org.photonvision.vision.pipeline.result.CVPipelineResult;
import org.photonvision.vision.target.TargetModel;
import org.photonvision.vision.target.TrackedTarget;
public class ArucoPipelineTest {
@BeforeEach
@@ -59,7 +57,7 @@ public class ArucoPipelineTest {
CVPipelineResult pipelineResult;
pipelineResult = pipeline.run(frameProvider.get(), QuirkyCamera.DefaultCamera);
printTestResults(pipelineResult);
TestUtils.printTestResultsWithLocation(pipelineResult);
// Draw on input
var outputPipe = new OutputStreamPipeline();
@@ -102,16 +100,4 @@ public class ArucoPipelineTest {
// The object's Z axis should be (0, 0, 1)
Assertions.assertEquals(1, new Translation3d(0, 0, 1).rotateBy(pose.getRotation()).getZ(), 0.1);
}
private static void printTestResults(CVPipelineResult pipelineResult) {
double fps = 1000 / pipelineResult.getLatencyMillis();
System.out.println(
"Pipeline ran in " + pipelineResult.getLatencyMillis() + "ms (" + fps + " " + "fps)");
System.out.println("Found " + pipelineResult.targets.size() + " valid targets");
System.out.println(
"Found targets at "
+ pipelineResult.targets.stream()
.map(TrackedTarget::getBestCameraToTarget3d)
.collect(Collectors.toList()));
}
}

View File

@@ -20,7 +20,6 @@ package org.photonvision.vision.pipeline;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import java.util.stream.Collectors;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.photonvision.common.util.TestUtils;
@@ -34,7 +33,6 @@ import org.photonvision.vision.opencv.ContourIntersectionDirection;
import org.photonvision.vision.opencv.ContourShape;
import org.photonvision.vision.pipeline.result.CVPipelineResult;
import org.photonvision.vision.target.TargetModel;
import org.photonvision.vision.target.TrackedTarget;
public class CirclePNPTest {
private static final String LIFECAM_240P_CAL_FILE = "lifecam240p.json";
@@ -111,7 +109,7 @@ public class CirclePNPTest {
frameProvider.requestFrameThresholdType(pipeline.getThresholdType());
CVPipelineResult pipelineResult = pipeline.run(frameProvider.get(), QuirkyCamera.DefaultCamera);
printTestResults(pipelineResult);
TestUtils.printTestResultsWithLocation(pipelineResult);
TestUtils.showImage(
pipelineResult.inputAndOutputFrame.colorImage.getMat(), "Pipeline output", 999999);
@@ -123,7 +121,7 @@ public class CirclePNPTest {
while (true) {
CVPipelineResult pipelineResult = pipeline.run(frame, QuirkyCamera.DefaultCamera);
printTestResults(pipelineResult);
TestUtils.printTestResultsWithLocation(pipelineResult);
int preRelease = CVMat.getMatCount();
pipelineResult.release();
int postRelease = CVMat.getMatCount();
@@ -151,16 +149,4 @@ public class CirclePNPTest {
continuouslyRunPipeline(frameProvider.get(), settings);
}
private static void printTestResults(CVPipelineResult pipelineResult) {
double fps = 1000 / pipelineResult.getLatencyMillis();
System.out.println(
"Pipeline ran in " + pipelineResult.getLatencyMillis() + "ms (" + fps + " " + "fps)");
System.out.println("Found " + pipelineResult.targets.size() + " valid targets");
System.out.println(
"Found targets at "
+ pipelineResult.targets.stream()
.map(TrackedTarget::getBestCameraToTarget3d)
.collect(Collectors.toList()));
}
}

View File

@@ -35,7 +35,7 @@ public class ColoredShapePipelineTest {
TestUtils.showImage(
colouredShapePipelineResult.inputAndOutputFrame.processedImage.getMat(),
"Pipeline output: Triangle.");
printTestResults(colouredShapePipelineResult);
TestUtils.printTestResults(colouredShapePipelineResult);
}
public static void testQuadrilateralDetection(
@@ -46,7 +46,7 @@ public class ColoredShapePipelineTest {
TestUtils.showImage(
colouredShapePipelineResult.inputAndOutputFrame.processedImage.getMat(),
"Pipeline output: Quadrilateral.");
printTestResults(colouredShapePipelineResult);
TestUtils.printTestResults(colouredShapePipelineResult);
}
public static void testCustomShapeDetection(
@@ -57,7 +57,7 @@ public class ColoredShapePipelineTest {
TestUtils.showImage(
colouredShapePipelineResult.inputAndOutputFrame.processedImage.getMat(),
"Pipeline output: Custom.");
printTestResults(colouredShapePipelineResult);
TestUtils.printTestResults(colouredShapePipelineResult);
}
@Test
@@ -69,7 +69,7 @@ public class ColoredShapePipelineTest {
TestUtils.showImage(
colouredShapePipelineResult.inputAndOutputFrame.processedImage.getMat(),
"Pipeline output: Circle.");
printTestResults(colouredShapePipelineResult);
TestUtils.printTestResults(colouredShapePipelineResult);
}
@Test
@@ -115,11 +115,4 @@ public class ColoredShapePipelineTest {
// testCircleShapeDetection(pipeline, settings, frameProvider.get());
// testPowercellDetection(settings, pipeline);
}
private static void printTestResults(CVPipelineResult pipelineResult) {
double fps = 1000 / pipelineResult.getLatencyMillis();
System.out.print(
"Pipeline ran in " + pipelineResult.getLatencyMillis() + "ms (" + fps + " fps), ");
System.out.println("Found " + pipelineResult.targets.size() + " valid targets");
}
}

View File

@@ -60,7 +60,7 @@ public class ReflectivePipelineTest {
CVPipelineResult pipelineResult;
pipelineResult = pipeline.run(frameProvider.get(), QuirkyCamera.DefaultCamera);
printTestResults(pipelineResult);
TestUtils.printTestResults(pipelineResult);
Assertions.assertTrue(pipelineResult.hasTargets());
Assertions.assertEquals(2, pipelineResult.targets.size(), "Target count wrong!");
@@ -84,7 +84,7 @@ public class ReflectivePipelineTest {
TestUtils.WPI2020Image.FOV);
CVPipelineResult pipelineResult = pipeline.run(frameProvider.get(), QuirkyCamera.DefaultCamera);
printTestResults(pipelineResult);
TestUtils.printTestResults(pipelineResult);
TestUtils.showImage(
pipelineResult.inputAndOutputFrame.processedImage.getMat(), "Pipeline output");
@@ -95,7 +95,7 @@ public class ReflectivePipelineTest {
while (true) {
CVPipelineResult pipelineResult = pipeline.run(frame, QuirkyCamera.DefaultCamera);
printTestResults(pipelineResult);
TestUtils.printTestResults(pipelineResult);
int preRelease = CVMat.getMatCount();
pipelineResult.release();
int postRelease = CVMat.getMatCount();
@@ -123,11 +123,4 @@ public class ReflectivePipelineTest {
continuouslyRunPipeline(frameProvider.get(), settings);
}
private static void printTestResults(CVPipelineResult pipelineResult) {
double fps = 1000 / pipelineResult.getLatencyMillis();
System.out.print(
"Pipeline ran in " + pipelineResult.getLatencyMillis() + "ms (" + fps + " fps), ");
System.out.println("Found " + pipelineResult.targets.size() + " valid targets");
}
}

View File

@@ -24,7 +24,6 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
import edu.wpi.first.math.geometry.Rotation3d;
import edu.wpi.first.math.geometry.Translation3d;
import edu.wpi.first.math.util.Units;
import java.util.stream.Collectors;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.photonvision.common.util.TestUtils;
@@ -38,7 +37,6 @@ import org.photonvision.vision.opencv.ContourIntersectionDirection;
import org.photonvision.vision.pipe.impl.HSVPipe;
import org.photonvision.vision.pipeline.result.CVPipelineResult;
import org.photonvision.vision.target.TargetModel;
import org.photonvision.vision.target.TrackedTarget;
public class SolvePNPTest {
private static final String LIFECAM_240P_CAL_FILE = "lifecam240p.json";
@@ -113,7 +111,7 @@ public class SolvePNPTest {
frameProvider.requestHsvSettings(hsvParams);
CVPipelineResult pipelineResult = pipeline.run(frameProvider.get(), QuirkyCamera.DefaultCamera);
printTestResults(pipelineResult);
TestUtils.printTestResultsWithLocation(pipelineResult);
// Draw on input
var outputPipe = new OutputStreamPipeline();
@@ -168,7 +166,7 @@ public class SolvePNPTest {
frameProvider.requestHsvSettings(hsvParams);
CVPipelineResult pipelineResult = pipeline.run(frameProvider.get(), QuirkyCamera.DefaultCamera);
printTestResults(pipelineResult);
TestUtils.printTestResultsWithLocation(pipelineResult);
// Draw on input
var outputPipe = new OutputStreamPipeline();
@@ -204,7 +202,7 @@ public class SolvePNPTest {
while (true) {
CVPipelineResult pipelineResult = pipeline.run(frame, QuirkyCamera.DefaultCamera);
printTestResults(pipelineResult);
TestUtils.printTestResultsWithLocation(pipelineResult);
int preRelease = CVMat.getMatCount();
pipelineResult.release();
int postRelease = CVMat.getMatCount();
@@ -232,16 +230,4 @@ public class SolvePNPTest {
continuouslyRunPipeline(frameProvider.get(), settings);
}
private static void printTestResults(CVPipelineResult pipelineResult) {
double fps = 1000 / pipelineResult.getLatencyMillis();
System.out.println(
"Pipeline ran in " + pipelineResult.getLatencyMillis() + "ms (" + fps + " " + "fps)");
System.out.println("Found " + pipelineResult.targets.size() + " valid targets");
System.out.println(
"Found targets at "
+ pipelineResult.targets.stream()
.map(TrackedTarget::getBestCameraToTarget3d)
.collect(Collectors.toList()));
}
}

View File

@@ -190,7 +190,7 @@ public class VisionModuleManagerTest {
sleep(1500);
Assertions.assertNotNull(module0DataConsumer.result);
printTestResults(module0DataConsumer.result);
TestUtils.printTestResults(module0DataConsumer.result);
}
@Test
@@ -253,13 +253,6 @@ public class VisionModuleManagerTest {
assertTrue(idxs.contains(4));
}
private static void printTestResults(CVPipelineResult pipelineResult) {
double fps = 1000 / pipelineResult.getLatencyMillis();
System.out.print(
"Pipeline ran in " + pipelineResult.getLatencyMillis() + "ms (" + fps + " fps), ");
System.out.println("Found " + pipelineResult.targets.size() + " valid targets");
}
private void sleep(int millis) {
try {
Thread.sleep(millis);