diff --git a/Main/pom.xml b/Main/pom.xml index 9fb3efa1b..456b1a8bf 100644 --- a/Main/pom.xml +++ b/Main/pom.xml @@ -5,7 +5,7 @@ 4.0.0 org.chameleon-vision.main chameleon-vision - 1.1.3-BETA + 1.1.4-BETA @@ -14,7 +14,9 @@ maven-compiler-plugin 3.8.0 - 12 + 12 + 12 + true diff --git a/Main/src/main/java/com/chameleonvision/Main.java b/Main/src/main/java/com/chameleonvision/Main.java index 18f599a0b..e24da500f 100644 --- a/Main/src/main/java/com/chameleonvision/Main.java +++ b/Main/src/main/java/com/chameleonvision/Main.java @@ -24,7 +24,6 @@ public class Main { private static final int DEFAULT_PORT = 8888; - private static int webserverPort = DEFAULT_PORT; private static boolean ntServerMode = false; private static boolean manageNetwork = true; private static boolean ignoreRoot = false; @@ -43,7 +42,7 @@ public class Main { } } - public static final Platform CurrentPlatform = Platform.getCurrentPlatform(); + private static final Platform CurrentPlatform = Platform.getCurrentPlatform(); private static void handleArgs(String[] args) { for (int i = 0; i < args.length; i++) { @@ -127,12 +126,10 @@ public class Main { // Attempt to load the JNI Libraries try { - if (CurrentPlatform.equals(Platform.LINUX_ARM64)) CameraServerJNI.forceLoad(); CameraServerCvJNI.forceLoad(); } catch (IOException e) { - var errorStr = CurrentPlatform.equals(Platform.UNSUPPORTED) ? "Unsupported platform!" : "Failed to load JNI Libraries!"; - throw new RuntimeException(errorStr); + throw new RuntimeException("Failed to load JNI Libraries!"); } if (CameraManager.initializeCameras()) { @@ -152,6 +149,7 @@ public class Main { } } + int webserverPort = DEFAULT_PORT; System.out.printf("Starting Webserver at port %d\n", webserverPort); Server.main(webserverPort); } else { diff --git a/Main/src/main/java/com/chameleonvision/network/LinuxNetworking.java b/Main/src/main/java/com/chameleonvision/network/LinuxNetworking.java index 3e1d811de..42998a9a0 100644 --- a/Main/src/main/java/com/chameleonvision/network/LinuxNetworking.java +++ b/Main/src/main/java/com/chameleonvision/network/LinuxNetworking.java @@ -1,22 +1,13 @@ package com.chameleonvision.network; -import com.chameleonvision.settings.NetworkSettings; -import com.chameleonvision.settings.SettingsManager; -import com.chameleonvision.util.ShellExec; - -import java.io.BufferedOutputStream; import java.io.IOException; -import java.net.InetAddress; import java.net.SocketException; -import java.net.UnknownHostException; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class LinuxNetworking extends SysNetworking { - private ShellExec shell = new ShellExec(true, true); - @Override public boolean setDHCP() { String[] clearArgs = { "addr", "flush", "dev", networkInterface.name }; diff --git a/Main/src/main/java/com/chameleonvision/network/NetworkInterface.java b/Main/src/main/java/com/chameleonvision/network/NetworkInterface.java index 75b5f7224..2c20abf44 100644 --- a/Main/src/main/java/com/chameleonvision/network/NetworkInterface.java +++ b/Main/src/main/java/com/chameleonvision/network/NetworkInterface.java @@ -1,10 +1,8 @@ package com.chameleonvision.network; -import com.chameleonvision.settings.GeneralSettings; - -import java.net.InetAddress; import java.net.InterfaceAddress; +@SuppressWarnings("WeakerAccess") public class NetworkInterface { public final String name; public final String displayName; @@ -43,9 +41,8 @@ public class NetworkInterface { } // Transform the resulting value in xxx.xxx.xxx.xxx format, like if /// it was a standard address... - String maskString = ((shiftby >> 24) & 255) + "." + ((shiftby >> 16) & 255) + "." + ((shiftby >> 8) & 255) + "." + (shiftby & 255); - // Return the address thus created... - return maskString; + // Return the address thus created... + return ((shiftby >> 24) & 255) + "." + ((shiftby >> 16) & 255) + "." + ((shiftby >> 8) & 255) + "." + (shiftby & 255); // return InetAddress.getByName(maskString); } catch(Exception e) { diff --git a/Main/src/main/java/com/chameleonvision/network/NetworkManager.java b/Main/src/main/java/com/chameleonvision/network/NetworkManager.java index 359735f76..a724cf42a 100644 --- a/Main/src/main/java/com/chameleonvision/network/NetworkManager.java +++ b/Main/src/main/java/com/chameleonvision/network/NetworkManager.java @@ -1,7 +1,6 @@ package com.chameleonvision.network; -import com.chameleonvision.settings.NetworkSettings; import com.chameleonvision.settings.Platform; import com.chameleonvision.settings.SettingsManager; @@ -12,8 +11,7 @@ import java.util.List; public class NetworkManager { private NetworkManager() {} - protected static SysNetworking networking; - protected static NetworkInterface botInterface = null; + private static SysNetworking networking; private static boolean isManaged = false; public static void initialize(boolean manage) { @@ -64,7 +62,7 @@ public class NetworkManager { return; } - botInterface = goodInterfaces.get(0); + NetworkInterface botInterface = goodInterfaces.get(0); networking.setNetworkInterface(botInterface); } else { isManaged = false; @@ -78,6 +76,10 @@ public class NetworkManager { } } + private static byte[] GetTeamNumberIPBytes(int teamNumber) { + return new byte[]{(byte) (teamNumber / 100), (byte) (teamNumber % 100)}; + } + private static boolean loadFromGeneralSettings() { if (!isManaged) { return true; diff --git a/Main/src/main/java/com/chameleonvision/network/SysNetworking.java b/Main/src/main/java/com/chameleonvision/network/SysNetworking.java index 91684e775..63a609984 100644 --- a/Main/src/main/java/com/chameleonvision/network/SysNetworking.java +++ b/Main/src/main/java/com/chameleonvision/network/SysNetworking.java @@ -5,7 +5,6 @@ import com.chameleonvision.util.ShellExec; import java.io.IOException; import java.net.SocketException; import java.util.List; -import java.util.Scanner; public abstract class SysNetworking { diff --git a/Main/src/main/java/com/chameleonvision/network/WindowsNetworking.java b/Main/src/main/java/com/chameleonvision/network/WindowsNetworking.java index d6ccd829b..d03da14e2 100644 --- a/Main/src/main/java/com/chameleonvision/network/WindowsNetworking.java +++ b/Main/src/main/java/com/chameleonvision/network/WindowsNetworking.java @@ -1,8 +1,5 @@ package com.chameleonvision.network; -import com.chameleonvision.settings.NetworkSettings; -import com.chameleonvision.settings.SettingsManager; - import java.net.SocketException; import java.util.ArrayList; import java.util.Collections; diff --git a/Main/src/main/java/com/chameleonvision/settings/NetworkSettings.java b/Main/src/main/java/com/chameleonvision/settings/NetworkSettings.java deleted file mode 100644 index 78c28e017..000000000 --- a/Main/src/main/java/com/chameleonvision/settings/NetworkSettings.java +++ /dev/null @@ -1,80 +0,0 @@ -package com.chameleonvision.settings; - -import java.net.*; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Enumeration; - -import com.chameleonvision.util.Utilities; -import org.apache.commons.lang3.StringUtils; -import org.apache.commons.lang3.SystemUtils; - -public class NetworkSettings { - public String connectionType, ip, netmask, gateway, hostname; - - public void run() { -// String adapter = getAdapter(); - if (SystemUtils.IS_OS_LINUX) {//TODO check linux commands - String adapter = getAdapter(); - if (!adapter.equals("")) { - executeCommand("ifconfig " + adapter + " down"); - if (connectionType.equals("DHCP")) - executeCommand("dhclient -r " + adapter); - else if (connectionType.equals("Static")) { - executeCommand("ifconfig " + adapter + " " + this.ip + " netmask " + this.netmask); - executeCommand("route add default gw " + this.gateway + " " + adapter); - } - executeCommand("ifconfig " + adapter + " up"); - } - executeCommand("hostnamectl set-hostname " + this.hostname); - } -// //TODO check windows commands -// else if (SystemUtils.IS_OS_WINDOWS) { -// if (!adapter.equals("")) { -// if (connectionType.equals("DHCP")){ -// executeCommand("cmd /c interface ip set address \"" + adapter + "\" dhcp"); -// } -// else if (connectionType.equals("Static")) { -// executeCommand("cmd /c netsh interface ip set address \"" + adapter + "\" static " + this.ip + " " + this.netmask + " " + this.gateway + "1"); -// } -// } -// //TODO find a way to change hostname in windows -// } - } - - private void executeCommand(String command) { - try { - Process p = Runtime.getRuntime().exec(command); - System.out.println("Executing "+ command); - p.waitFor(); - p.destroy(); - } catch (Exception e) { - System.err.println("Error while executing command!"); - e.printStackTrace(); - } - } - - public static byte[] GetTeamNumberIPBytes(int teamNumber) { - return new byte[]{(byte) (teamNumber / 100), (byte) (teamNumber % 100)}; - } - - public static String getAdapter() { - try {//TODO fix windows get adapter - Enumeration nets = NetworkInterface.getNetworkInterfaces(); - for (NetworkInterface netint : Collections.list(nets)) { - Enumeration ee = netint.getInetAddresses(); - for (InetAddress addr : Collections.list(ee)) - if (addr instanceof Inet4Address) { - var addrString = addr.toString(); - if ((addr.getAddress()[0] & 0xFF) == 10 && (addr.getAddress()[1] & 0xFF) == 168) { - System.out.println("found robot network interface at " + netint.getName() + " ip: " + addr.getHostAddress()); - return netint.getName(); - } - } - } - } catch (SocketException e) { - System.err.println("Socket exception while trying to find current IP"); - } - return ""; - } -} diff --git a/Main/src/main/java/com/chameleonvision/settings/Platform.java b/Main/src/main/java/com/chameleonvision/settings/Platform.java index a018ffa73..64f70f1f7 100644 --- a/Main/src/main/java/com/chameleonvision/settings/Platform.java +++ b/Main/src/main/java/com/chameleonvision/settings/Platform.java @@ -45,7 +45,9 @@ public enum Platform { } catch (IOException e) { e.printStackTrace(); } - while (!shell.isOutputCompleted()) {} + while (!shell.isOutputCompleted()) { + // ignored + } if (shell.getExitCode() == 0) { var out = shell.getOutput(); out = out.split("\n")[0]; diff --git a/Main/src/main/java/com/chameleonvision/settings/SettingsManager.java b/Main/src/main/java/com/chameleonvision/settings/SettingsManager.java index 5cfa1eae8..d26444630 100644 --- a/Main/src/main/java/com/chameleonvision/settings/SettingsManager.java +++ b/Main/src/main/java/com/chameleonvision/settings/SettingsManager.java @@ -1,6 +1,5 @@ package com.chameleonvision.settings; -import com.chameleonvision.network.NetworkManager; import com.chameleonvision.util.FileHelper; import com.chameleonvision.vision.camera.CameraManager; import com.google.gson.Gson; @@ -21,16 +20,6 @@ public class SettingsManager { public static void initialize() { initGeneralSettings(); -// if (manageNetwork) { - -// NetworkSettings netSettings = new NetworkSettings(); -// netSettings.hostname = GeneralSettings.hostname; -// netSettings.gateway = GeneralSettings.gateway; -// netSettings.netmask = GeneralSettings.netmask; -// netSettings.connectionType = GeneralSettings.connection_type; -// netSettings.ip = GeneralSettings.ip; -// netSettings.run(); -// } var allCameras = CameraManager.getAllCamerasByName(); if (!allCameras.containsKey(GeneralSettings.currentCamera) && allCameras.size() > 0) { var cam = allCameras.entrySet().stream().findFirst().get().getValue(); diff --git a/Main/src/main/java/com/chameleonvision/util/ShellExec.java b/Main/src/main/java/com/chameleonvision/util/ShellExec.java index a6347edba..f0fa0f1cd 100644 --- a/Main/src/main/java/com/chameleonvision/util/ShellExec.java +++ b/Main/src/main/java/com/chameleonvision/util/ShellExec.java @@ -101,7 +101,7 @@ public class ShellExec { * http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html?page=4 */ @SuppressWarnings("WeakerAccess") - private class StreamGobbler extends Thread { + private static class StreamGobbler extends Thread { private InputStream is; private StringBuilder output; private volatile boolean completed; // mark volatile to guarantee a thread safety diff --git a/Main/src/main/java/com/chameleonvision/util/Utilities.java b/Main/src/main/java/com/chameleonvision/util/Utilities.java index 800a80330..0be21374e 100644 --- a/Main/src/main/java/com/chameleonvision/util/Utilities.java +++ b/Main/src/main/java/com/chameleonvision/util/Utilities.java @@ -26,7 +26,7 @@ public class Utilities { } public static List getDigits(int num) { - List digits = new ArrayList(); + List digits = new ArrayList<>(); collectDigits(num, digits); return digits; } diff --git a/Main/src/main/java/com/chameleonvision/vision/process/CVProcess.java b/Main/src/main/java/com/chameleonvision/vision/process/CVProcess.java index ca8f55fe3..3d2c07f36 100644 --- a/Main/src/main/java/com/chameleonvision/vision/process/CVProcess.java +++ b/Main/src/main/java/com/chameleonvision/vision/process/CVProcess.java @@ -24,6 +24,7 @@ public class CVProcess { private Mat binaryMat = new Mat(); private List filteredContours = new ArrayList<>(); private Comparator sortByCentermostComparator = Comparator.comparingDouble(this::calcDistance); + private List speckleRejectedContours = new ArrayList<>(); private Comparator sortByMomentsX = Comparator.comparingDouble(this::calcMomentsX); private List finalCountours = new ArrayList<>(); private MatOfPoint2f intersectMatA = new MatOfPoint2f(); @@ -86,6 +87,20 @@ public class CVProcess { return filteredContours; } + List rejectSpeckles(List inputContours, Double minimumPercentOfAverage) { + double averageArea = 0.0; + for(MatOfPoint c : inputContours) { + averageArea += Imgproc.contourArea(c); + } + averageArea /= inputContours.size(); + var minimumAllowableArea = minimumPercentOfAverage / 100.0 * averageArea; + speckleRejectedContours.clear(); + for(MatOfPoint c : inputContours) { + if(Imgproc.contourArea(c) >= minimumAllowableArea) speckleRejectedContours.add(c); + } + return speckleRejectedContours; + } + private double calcDistance(RotatedRect rect) { return FastMath.sqrt(FastMath.pow(cameraValues.CenterX - rect.center.x, 2) + FastMath.pow(cameraValues.CenterY - rect.center.y, 2)); } diff --git a/Main/src/main/java/com/chameleonvision/vision/process/PipelineResult.java b/Main/src/main/java/com/chameleonvision/vision/process/PipelineResult.java index bbb2dda82..f67249f01 100644 --- a/Main/src/main/java/com/chameleonvision/vision/process/PipelineResult.java +++ b/Main/src/main/java/com/chameleonvision/vision/process/PipelineResult.java @@ -2,6 +2,7 @@ package com.chameleonvision.vision.process; import org.opencv.core.RotatedRect; +@SuppressWarnings("WeakerAccess") public class PipelineResult { public boolean IsValid = false; public double CalibratedX = 0.0;