WPI Image Test Mode (#81)

* Add camera config for calibration to test mode

* Add 3D capabilities to test mode

* Add resources to main for jar testmode

* Refactor path utilities for test mode

* Apply spotless
This commit is contained in:
Banks T
2020-08-08 14:21:38 -04:00
committed by GitHub
parent 61ab1b2bd2
commit ff58381056
15 changed files with 212 additions and 102 deletions

View File

@@ -56,7 +56,7 @@ public class BenchmarkTest {
var frameProvider =
new FileFrameProvider(
TestUtils.getWPIImagePath(TestUtils.WPI2019Image.kCargoSideStraightDark72in),
TestUtils.getWPIImagePath(TestUtils.WPI2019Image.kCargoSideStraightDark72in, false),
TestUtils.WPI2019Image.FOV);
benchmarkPipeline(frameProvider, pipeline, 5);
@@ -73,7 +73,7 @@ public class BenchmarkTest {
var frameProvider =
new FileFrameProvider(
TestUtils.getWPIImagePath(TestUtils.WPI2020Image.kBlueGoal_084in_Center),
TestUtils.getWPIImagePath(TestUtils.WPI2020Image.kBlueGoal_084in_Center, false),
TestUtils.WPI2020Image.FOV);
benchmarkPipeline(frameProvider, pipeline, 5);
@@ -90,7 +90,7 @@ public class BenchmarkTest {
var frameProvider =
new FileFrameProvider(
TestUtils.getWPIImagePath(TestUtils.WPI2020Image.kBlueGoal_084in_Center_720p),
TestUtils.getWPIImagePath(TestUtils.WPI2020Image.kBlueGoal_084in_Center_720p, false),
TestUtils.WPI2020Image.FOV);
benchmarkPipeline(frameProvider, pipeline, 5);
@@ -110,7 +110,7 @@ public class BenchmarkTest {
var frameProvider =
new FileFrameProvider(
TestUtils.getWPIImagePath(TestUtils.WPI2019Image.kCargoStraightDark72in_HighRes),
TestUtils.getWPIImagePath(TestUtils.WPI2019Image.kCargoStraightDark72in_HighRes, false),
TestUtils.WPI2019Image.FOV);
benchmarkPipeline(frameProvider, pipeline, 5);

View File

@@ -72,7 +72,7 @@ public class ShapeBenchmarkTest {
pipeline.getSettings().accuracyPercentage = 30.0;
var frameProvider =
new FileFrameProvider(
TestUtils.getWPIImagePath(TestUtils.WPI2019Image.kCargoSideStraightDark72in),
TestUtils.getWPIImagePath(TestUtils.WPI2019Image.kCargoSideStraightDark72in, false),
TestUtils.WPI2019Image.FOV);
benchmarkPipeline(frameProvider, pipeline, 5);
@@ -94,7 +94,7 @@ public class ShapeBenchmarkTest {
var frameProvider =
new FileFrameProvider(
TestUtils.getWPIImagePath(TestUtils.WPI2020Image.kBlueGoal_084in_Center),
TestUtils.getWPIImagePath(TestUtils.WPI2020Image.kBlueGoal_084in_Center, false),
TestUtils.WPI2020Image.FOV);
benchmarkPipeline(frameProvider, pipeline, 5);
@@ -116,7 +116,7 @@ public class ShapeBenchmarkTest {
var frameProvider =
new FileFrameProvider(
TestUtils.getWPIImagePath(TestUtils.WPI2020Image.kBlueGoal_084in_Center_720p),
TestUtils.getWPIImagePath(TestUtils.WPI2020Image.kBlueGoal_084in_Center_720p, false),
TestUtils.WPI2020Image.FOV);
benchmarkPipeline(frameProvider, pipeline, 5);
@@ -138,7 +138,7 @@ public class ShapeBenchmarkTest {
var frameProvider =
new FileFrameProvider(
TestUtils.getWPIImagePath(TestUtils.WPI2019Image.kCargoStraightDark72in_HighRes),
TestUtils.getWPIImagePath(TestUtils.WPI2019Image.kCargoStraightDark72in_HighRes, false),
TestUtils.WPI2019Image.FOV);
benchmarkPipeline(frameProvider, pipeline, 5);

View File

@@ -42,12 +42,13 @@ public class FileFrameProviderTest {
@Test
public void TestFilesExist() {
assertTrue(Files.exists(TestUtils.getTestImagesPath()));
assertTrue(Files.exists(TestUtils.getTestImagesPath(false)));
}
@Test
public void Load2019ImageOnceTest() {
var goodFilePath = TestUtils.getWPIImagePath(TestUtils.WPI2019Image.kCargoStraightDark72in);
var goodFilePath =
TestUtils.getWPIImagePath(TestUtils.WPI2019Image.kCargoStraightDark72in, false);
assertTrue(Files.exists(goodFilePath));
@@ -79,7 +80,8 @@ public class FileFrameProviderTest {
@Test
public void Load2020ImageOnceTest() {
var goodFilePath = TestUtils.getWPIImagePath(TestUtils.WPI2020Image.kBlueGoal_108in_Center);
var goodFilePath =
TestUtils.getWPIImagePath(TestUtils.WPI2020Image.kBlueGoal_108in_Center, false);
assertTrue(Files.exists(goodFilePath));

View File

@@ -17,13 +17,9 @@
package org.photonvision.vision.pipeline;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.*;
import com.fasterxml.jackson.databind.ObjectMapper;
import edu.wpi.first.wpilibj.geometry.Rotation2d;
import java.io.IOException;
import java.nio.file.Path;
import java.util.stream.Collectors;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@@ -61,23 +57,13 @@ public class CirclePNPTest {
}
private CameraCalibrationCoefficients getCoeffs(String filename) {
try {
var cameraCalibration =
new ObjectMapper()
.readValue(
(Path.of(TestUtils.getCalibrationPath().toString(), filename).toFile()),
CameraCalibrationCoefficients.class);
checkCameraCoefficients(cameraCalibration);
return cameraCalibration;
} catch (IOException e) {
e.printStackTrace();
return null;
}
var cameraCalibration = TestUtils.getCoeffs(filename, false);
checkCameraCoefficients(cameraCalibration);
return cameraCalibration;
}
private void checkCameraCoefficients(CameraCalibrationCoefficients cameraCalibration) {
assertNotNull(cameraCalibration);
assertEquals(3, cameraCalibration.cameraIntrinsics.rows);
assertEquals(3, cameraCalibration.cameraIntrinsics.cols);
assertEquals(3, cameraCalibration.cameraIntrinsics.getAsMat().rows());
@@ -124,7 +110,7 @@ public class CirclePNPTest {
var frameProvider =
new FileFrameProvider(
TestUtils.getPowercellImagePath(TestUtils.PowercellTestImages.kPowercell_test_6),
TestUtils.getPowercellImagePath(TestUtils.PowercellTestImages.kPowercell_test_6, false),
TestUtils.WPI2020Image.FOV);
CVPipelineResult pipelineResult = pipeline.run(frameProvider.get());
@@ -153,7 +139,7 @@ public class CirclePNPTest {
TestUtils.loadLibraries();
var frameProvider =
new FileFrameProvider(
TestUtils.getWPIImagePath(TestUtils.WPI2019Image.kCargoStraightDark72in_HighRes),
TestUtils.getWPIImagePath(TestUtils.WPI2019Image.kCargoStraightDark72in_HighRes, false),
TestUtils.WPI2019Image.FOV);
var settings = new ReflectivePipelineSettings();

View File

@@ -93,7 +93,7 @@ public class ColoredShapePipelineTest {
settings.allowableThreshold = 5;
var frameProvider =
new FileFrameProvider(
TestUtils.getPowercellImagePath(TestUtils.PowercellTestImages.kPowercell_test_6),
TestUtils.getPowercellImagePath(TestUtils.PowercellTestImages.kPowercell_test_6, false),
TestUtils.WPI2019Image.FOV);
testCircleShapeDetection(
pipeline, settings, frameProvider.get().frameStaticProperties, frameProvider.get());
@@ -101,10 +101,11 @@ public class ColoredShapePipelineTest {
public static void main(String[] args) {
TestUtils.loadLibraries();
System.out.println(TestUtils.getWPIImagePath(TestUtils.WPI2020Image.kBlueGoal_108in_Center));
System.out.println(
TestUtils.getWPIImagePath(TestUtils.WPI2020Image.kBlueGoal_108in_Center, false));
var frameProvider =
new FileFrameProvider(
TestUtils.getPolygonImagePath(TestUtils.PolygonTestImages.kPolygons),
TestUtils.getPolygonImagePath(TestUtils.PolygonTestImages.kPolygons, false),
TestUtils.WPI2019Image.FOV);
var settings = new ColoredShapePipelineSettings();
settings.hsvHue.set(0, 100);

View File

@@ -43,7 +43,7 @@ public class ReflectivePipelineTest {
var frameProvider =
new FileFrameProvider(
TestUtils.getWPIImagePath(TestUtils.WPI2019Image.kCargoStraightDark72in_HighRes),
TestUtils.getWPIImagePath(TestUtils.WPI2019Image.kCargoStraightDark72in_HighRes, false),
TestUtils.WPI2019Image.FOV);
TestUtils.showImage(frameProvider.get().image.getMat(), "Pipeline input", 1);
@@ -71,7 +71,7 @@ public class ReflectivePipelineTest {
var frameProvider =
new FileFrameProvider(
TestUtils.getWPIImagePath(TestUtils.WPI2020Image.kBlueGoal_108in_Center),
TestUtils.getWPIImagePath(TestUtils.WPI2020Image.kBlueGoal_108in_Center, false),
TestUtils.WPI2020Image.FOV);
CVPipelineResult pipelineResult = pipeline.run(frameProvider.get());
@@ -99,7 +99,7 @@ public class ReflectivePipelineTest {
TestUtils.loadLibraries();
var frameProvider =
new FileFrameProvider(
TestUtils.getWPIImagePath(TestUtils.WPI2019Image.kCargoStraightDark72in_HighRes),
TestUtils.getWPIImagePath(TestUtils.WPI2019Image.kCargoStraightDark72in_HighRes, false),
TestUtils.WPI2019Image.FOV);
var settings = new ReflectivePipelineSettings();

View File

@@ -20,10 +20,7 @@ package org.photonvision.vision.pipeline;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import com.fasterxml.jackson.databind.ObjectMapper;
import edu.wpi.first.wpilibj.geometry.Rotation2d;
import java.io.IOException;
import java.nio.file.Path;
import java.util.stream.Collectors;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
@@ -61,23 +58,13 @@ public class SolvePNPTest {
}
private CameraCalibrationCoefficients getCoeffs(String filename) {
try {
var cameraCalibration =
new ObjectMapper()
.readValue(
(Path.of(TestUtils.getCalibrationPath().toString(), filename).toFile()),
CameraCalibrationCoefficients.class);
checkCameraCoefficients(cameraCalibration);
return cameraCalibration;
} catch (IOException e) {
e.printStackTrace();
return null;
}
var cameraCalibration = TestUtils.getCoeffs(filename, false);
checkCameraCoefficients(cameraCalibration);
return cameraCalibration;
}
private void checkCameraCoefficients(CameraCalibrationCoefficients cameraCalibration) {
assertNotNull(cameraCalibration);
assertEquals(3, cameraCalibration.cameraIntrinsics.rows);
assertEquals(3, cameraCalibration.cameraIntrinsics.cols);
assertEquals(3, cameraCalibration.cameraIntrinsics.getAsMat().rows());
@@ -114,7 +101,7 @@ public class SolvePNPTest {
var frameProvider =
new FileFrameProvider(
TestUtils.getWPIImagePath(TestUtils.WPI2019Image.kCargoStraightDark48in),
TestUtils.getWPIImagePath(TestUtils.WPI2019Image.kCargoStraightDark48in, false),
TestUtils.WPI2019Image.FOV);
CVPipelineResult pipelineResult;
@@ -148,7 +135,7 @@ public class SolvePNPTest {
var frameProvider =
new FileFrameProvider(
TestUtils.getWPIImagePath(TestUtils.WPI2020Image.kBlueGoal_224in_Left),
TestUtils.getWPIImagePath(TestUtils.WPI2020Image.kBlueGoal_224in_Left, false),
TestUtils.WPI2020Image.FOV);
CVPipelineResult pipelineResult = pipeline.run(frameProvider.get());
@@ -163,26 +150,6 @@ public class SolvePNPTest {
TestUtils.showImage(pipelineResult.outputFrame.image.getMat(), "Pipeline output", 999999);
}
// @Test
// public void junk() {
// var frameProvider =
// new FileFrameProvider(
//
// TestUtils.getWPIImagePath(TestUtils.WPI2019Image.kCargoStraightDark72in_HighRes),
// TestUtils.WPI2019Image.FOV);
//
// var settings = new ReflectivePipelineSettings();
// settings.hsvHue.set(60, 100);
// settings.hsvSaturation.set(100, 255);
// settings.hsvValue.set(190, 255);
// settings.outputShowThresholded = true;
// settings.outputShowMultipleTargets = true;
// settings.contourGroupingMode = ContourGroupingMode.Dual;
// settings.contourIntersection = ContourIntersectionDirection.Up;
//
// continuouslyRunPipeline(frameProvider.getFrame(), settings);
// }
private static void continuouslyRunPipeline(Frame frame, ReflectivePipelineSettings settings) {
var pipeline = new ReflectivePipeline();
pipeline.settings = settings;
@@ -203,7 +170,7 @@ public class SolvePNPTest {
TestUtils.loadLibraries();
var frameProvider =
new FileFrameProvider(
TestUtils.getWPIImagePath(TestUtils.WPI2019Image.kCargoStraightDark72in_HighRes),
TestUtils.getWPIImagePath(TestUtils.WPI2019Image.kCargoStraightDark72in_HighRes, false),
TestUtils.WPI2019Image.FOV);
var settings = new ReflectivePipelineSettings();

View File

@@ -105,7 +105,8 @@ public class VisionModuleManagerTest {
sources.put(
new TestSource(
new FileFrameProvider(
TestUtils.getWPIImagePath(TestUtils.WPI2019Image.kCargoStraightDark72in_HighRes),
TestUtils.getWPIImagePath(
TestUtils.WPI2019Image.kCargoStraightDark72in_HighRes, false),
TestUtils.WPI2019Image.FOV)),
List.of());