diff --git a/config.properties b/config.properties index b648323..0aac2f6 100644 --- a/config.properties +++ b/config.properties @@ -6,7 +6,7 @@ AudioFile04= AudioFile05=null AudioVolumeOutput=100 Camera_Rtsp_path=/axis-media/media.amp -Camera_ip=192.168.10.17 +Camera_ip=172.17.195.51 Camera_password=password Camera_port=80 Camera_user=root diff --git a/pom.xml b/pom.xml index a4abf65..70cd588 100644 --- a/pom.xml +++ b/pom.xml @@ -20,6 +20,8 @@ javacv 1.5.11 + + org.bytedeco opencv @@ -68,9 +70,9 @@ org.bytedeco cuda 12.6-9.5-1.5.11 - linux-arm64 + org.bytedeco javacpp diff --git a/src/main/java/Camera/YoloDetector.java b/src/main/java/Camera/YoloDetector.java index c17d6e7..c14f5b8 100644 --- a/src/main/java/Camera/YoloDetector.java +++ b/src/main/java/Camera/YoloDetector.java @@ -37,9 +37,11 @@ public class YoloDetector { if (SomeCodes.ValidFile(onnxfile)){ if (SomeCodes.ValidFile(namesfile)){ net = Dnn.readNetFromONNX(onnxfile); - net.setPreferableBackend(Dnn.DNN_BACKEND_OPENCV); + net.setPreferableBackend(Dnn.DNN_BACKEND_CUDA); + net.setPreferableTarget(Dnn.DNN_TARGET_CUDA); + //net.setPreferableBackend(Dnn.DNN_BACKEND_OPENCV); //net.setPreferableBackend(Dnn.DNN_BACKEND_INFERENCE_ENGINE); - net.setPreferableTarget(Dnn.DNN_TARGET_CPU); + //net.setPreferableTarget(Dnn.DNN_TARGET_CPU); //net.setPreferableTarget(Dnn.DNN_TARGET_NPU); classes = new ArrayList<>(); diff --git a/src/main/java/Other/SomeCodes.java b/src/main/java/Other/SomeCodes.java index 96f02ce..b2da24f 100644 --- a/src/main/java/Other/SomeCodes.java +++ b/src/main/java/Other/SomeCodes.java @@ -1,6 +1,7 @@ package Other; import com.google.gson.Gson; +import com.sun.jna.Platform; import org.bytedeco.javacpp.Loader; import org.bytedeco.javacv.Frame; import org.bytedeco.javacv.OpenCVFrameConverter; @@ -21,7 +22,14 @@ import java.util.Properties; public class SomeCodes { static{ - Loader.load(opencv_java.class); + //Loader.load(opencv_java.class); + if (Platform.isLinux()){ + File ff = new File("/usr/local/lib/libopencv_java4100.so"); + if (ff.isFile()){ + Logger.info("Loading opencv_java 4.10.0 with cuda from /usr/local/lib"); + System.load(ff.getAbsolutePath()); + } else Logger.info("library opencv_java with cuda not found, loading standard opencv"); + } else Logger.info("Platform is not Linux, loading standard opencv"); } public final static String currentDirectory = System.getProperty("user.dir"); diff --git a/src/main/java/Web/WebServer.java b/src/main/java/Web/WebServer.java index da22b71..2ec914f 100644 --- a/src/main/java/Web/WebServer.java +++ b/src/main/java/Web/WebServer.java @@ -272,9 +272,11 @@ public class WebServer { socketIOClients.forEach((key, client) -> client.disconnect()); socketIOClients.clear(); socketServer.stop(); + Logger.info("SocketIO server stopped"); } catch (JavalinException e){ Logger.error("Web server failed to stop: {}", e.getMessage()); + e.printStackTrace(); } } diff --git a/src/main/java/id/co/gtc/Main.java b/src/main/java/id/co/gtc/Main.java index 277c6c7..d712d86 100644 --- a/src/main/java/id/co/gtc/Main.java +++ b/src/main/java/id/co/gtc/Main.java @@ -32,7 +32,7 @@ public class Main { private static WebServer webServer; //change parameter ini untuk menggunakan Yolo atau tidak - private static final boolean use_Yolo = true; + private static final boolean use_Yolo = false; private static RtspGrabber rtspGrabber; private static PanTiltController panTiltController; @@ -54,22 +54,48 @@ public class Main { private static ExecutorService gpioExecutor = null; private static PCF8574 pcf8574 = null; - + private static final String Version = "V1.0 (04/03/2025)"; // Application start from here public static void main(String[] args) { System.setProperty("jna.debug_load", "false"); + System.out.println("BirdStrikeSoetta "+Version); + Runtime.getRuntime().addShutdownHook(new Thread(() -> { if (use_multiusb_audio) { - if (multiUSBAudioPlayer != null) multiUSBAudioPlayer.Unload(); + if (multiUSBAudioPlayer != null) { + multiUSBAudioPlayer.Unload(); + Logger.info("MultiUSB Audio Unloaded"); + } } else { - if (audioPlayer != null) audioPlayer.Unload(); + if (audioPlayer != null) { + audioPlayer.Unload(); + Logger.info("Audio Unloaded"); + } + } + if (webServer!=null) { + webServer.Stop(); + Logger.info("Web Server stopped"); + } + if (rtspGrabber!=null) { + rtspGrabber.Stop(); + Logger.info("Rtsp Grabber stopped"); + } + if (panTiltController!=null) { + panTiltController.Close(); + Logger.info("Pan Tilt Controller closed"); + } + if (vapixProtocol!=null) { + vapixProtocol.Close(); + Logger.info("Vapix Protocol closed"); + } + if (timer!=null) { + timer.cancel(); + Logger.info("Timer cancelled"); + } + if (gpioExecutor!=null) { + gpioExecutor.shutdown(); + Logger.info("GPIO Executor shutdown"); } - if (webServer!=null) webServer.Stop(); - if (rtspGrabber!=null) rtspGrabber.Stop(); - if (panTiltController!=null) panTiltController.Close(); - if (vapixProtocol!=null) vapixProtocol.Close(); - if (timer!=null) timer.cancel(); - if (gpioExecutor!=null) gpioExecutor.shutdown(); if (AmplifierPower!=null) { Logger.info("GPIO pin {} unexport : {}",AmplifierPower.pin, GPIO.UnexportPin(AmplifierPower)); } @@ -87,6 +113,7 @@ public class Main { } if (pcf8574!=null){ pcf8574.Close(); + Logger.info("PCF8574 closed"); } Logger.info("Application Stopped"); @@ -467,15 +494,23 @@ public class Main { Properties config = SomeCodes.LoadProperties("config.properties"); String targetip = config.getProperty("Camera_ip"); String rtsppath = config.getProperty("Camera_Rtsp_path"); - Logger.info("Camera IP : "+targetip); - Logger.info("Camera Rtsp Path : "+rtsppath); + int width = 1920; + int height = 1080; + + // TODO test pakai sony camera, nanti hapus + targetip = "172.17.195.51"; + rtsppath = "/video1"; + width = 1280; + height = 720; + Logger.info("Camera IP: {}, Rtsp Path: {}, Width: {}, Height: {}", targetip, rtsppath, width,height); + rtspGrabber = null; if (ValidString(targetip)){ if (ValidString(rtsppath)){ if (IpIsReachable(targetip)){ Logger.info("Camera IP : "+targetip+" is reachable"); rtspGrabber = new RtspGrabber(targetip, rtsppath, use_Yolo); - rtspGrabber.Start(true, 1920, 1080); + rtspGrabber.Start(true, width, height); } else Logger.warn("Camera IP : "+targetip+" is not reachable"); } else Logger.warn("Camera Path : "+rtsppath+" is not valid string"); } else Logger.warn("Camera IP : "+targetip+" is not valid string");