diff --git a/config.properties b/config.properties index 1a15db8..da28bc8 100644 --- a/config.properties +++ b/config.properties @@ -1,9 +1,29 @@ -#Thu May 22 11:19:22 WIB 2025 -AudioPhase1=C\:\\Users\\Erha\\IdeaProjects\\ErhaCam\\audio\\phase1.mp3 -AudioPhase2=C\:\\Users\\Erha\\IdeaProjects\\ErhaCam\\audio\\phase2.mp3 -AudioPhase3=C\:\\Users\\Erha\\IdeaProjects\\ErhaCam\\audio\\phase3.mp3 -AudioPhase4=C\:\\Users\\Erha\\IdeaProjects\\ErhaCam\\audio\\phase4.mp3 -AudioPhase5=C\:\\Users\\Erha\\IdeaProjects\\ErhaCam\\audio\\phase5.mp3 +#Mon May 26 14:20:06 WIB 2025 +AudioPhase1=C\:\\Users\\rdkar\\OneDrive\\Documents\\IntelliJ Project\\ErhaCam\\audio\\phase1.mp3 +AudioPhase2=C\:\\Users\\rdkar\\OneDrive\\Documents\\IntelliJ Project\\ErhaCam\\audio\\phase2.mp3 +AudioPhase3=C\:\\Users\\rdkar\\OneDrive\\Documents\\IntelliJ Project\\ErhaCam\\audio\\phase3.mp3 +AudioPhase4=C\:\\Users\\rdkar\\OneDrive\\Documents\\IntelliJ Project\\ErhaCam\\audio\\phase4.mp3 +AudioPhase5=C\:\\Users\\rdkar\\OneDrive\\Documents\\IntelliJ Project\\ErhaCam\\audio\\phase5.mp3 +Cam1BottomCrop=10.0 +Cam1LeftCrop=10.0 +Cam1RightCrop=10.0 +Cam1TopCrop=10.0 +Cam2BottomCrop=10.0 +Cam2LeftCrop=10.0 +Cam2RightCrop=10.0 +Cam2TopCrop=10.0 +Cam3BottomCrop=10.0 +Cam3LeftCrop=10.0 +Cam3RightCrop=10.0 +Cam3TopCrop=10.0 +Cam4BottomCrop=10.0 +Cam4LeftCrop=10.0 +Cam4RightCrop=10.0 +Cam4TopCrop=10.0 +Cam5BottomCrop=10.0 +Cam5LeftCrop=10.0 +Cam5RightCrop=10.0 +Cam5TopCrop=10.0 CameraCenter= CameraConfigCenter={"Brightness"\:0.0,"Contrast"\:0.0,"Saturation"\:0.0,"Hue"\:0.0,"Gain"\:1.0,"Exposure"\:1.0,"Sharpness"\:0.0,"Gamma"\:0.0,"AutoExposure"\:true,"AutoFocus"\:true,"AutoWhiteBalance"\:true} CameraConfigLeft45={"Brightness"\:0.0,"Contrast"\:0.0,"Saturation"\:0.0,"Hue"\:0.0,"Gain"\:1.0,"Exposure"\:1.0,"Sharpness"\:0.0,"Gamma"\:0.0,"AutoExposure"\:true,"AutoFocus"\:true,"AutoWhiteBalance"\:true} @@ -11,7 +31,7 @@ CameraConfigLeft90={"Brightness"\:0.0,"Contrast"\:0.0,"Saturation"\:0.0,"Hue"\:0 CameraConfigRight45={"Brightness"\:0.0,"Contrast"\:0.0,"Saturation"\:0.0,"Hue"\:0.0,"Gain"\:1.0,"Exposure"\:1.0,"Sharpness"\:0.0,"Gamma"\:0.0,"AutoExposure"\:true,"AutoFocus"\:true,"AutoWhiteBalance"\:true} CameraConfigRight90={"Brightness"\:0.0,"Contrast"\:0.0,"Saturation"\:0.0,"Hue"\:0.0,"Gain"\:1.0,"Exposure"\:1.0,"Sharpness"\:0.0,"Gamma"\:0.0,"AutoExposure"\:true,"AutoFocus"\:true,"AutoWhiteBalance"\:true} CameraLeft45= -CameraLeft90=OBSBOT Meet 2 StreamCamera +CameraLeft90= CameraRight45= CameraRight90= FTPHost=192.168.10.2 @@ -19,10 +39,10 @@ FTPPass=password FTPPath=/ FTPPort=21 FTPUser=user -FlipCamera=true -MirrorCamera=true -PhotoDirectory=C\:\\Users\\Erha\\Desktop\\ErhaCapture -SharpnessThreshold=1000.0 +FlipCamera=false +MirrorCamera=false +PhotoDirectory=C\:\\Users\\rdkar\\OneDrive\\Documents\\IntelliJ Project\\ErhaCam +SharpnessThreshold=300.0 cascadeMaxSize=500 cascadeMinNeighbors=3 cascadeMinSize=250 diff --git a/src/main/java/Config/ConfigFile.java b/src/main/java/Config/ConfigFile.java index 23da106..bbcf4f8 100644 --- a/src/main/java/Config/ConfigFile.java +++ b/src/main/java/Config/ConfigFile.java @@ -50,6 +50,31 @@ public class ConfigFile { private @Getter double SharpnessThreshold; + private @Getter final double topcropmax = 30.0; + private @Getter final double bottomcropmax = 30.0; + private @Getter final double leftcropmax = 30.0; + private @Getter final double rightcropmax = 30.0; + private @Getter double Cam1TopCrop = 10.0; + private @Getter double Cam1BottomCrop = 10.0; + private @Getter double Cam1LeftCrop = 10.0; + private @Getter double Cam1RightCrop = 10.0; + private @Getter double Cam2TopCrop = 10.0; + private @Getter double Cam2BottomCrop = 10.0; + private @Getter double Cam2LeftCrop = 10.0; + private @Getter double Cam2RightCrop = 10.0; + private @Getter double Cam3TopCrop = 10.0; + private @Getter double Cam3BottomCrop = 10.0; + private @Getter double Cam3LeftCrop = 10.0; + private @Getter double Cam3RightCrop = 10.0; + private @Getter double Cam4TopCrop = 10.0; + private @Getter double Cam4BottomCrop = 10.0; + private @Getter double Cam4LeftCrop = 10.0; + private @Getter double Cam4RightCrop = 10.0; + private @Getter double Cam5TopCrop = 10.0; + private @Getter double Cam5BottomCrop = 10.0; + private @Getter double Cam5LeftCrop = 10.0; + private @Getter double Cam5RightCrop = 10.0; + private boolean needsave = false; public ConfigFile(){ @@ -58,6 +83,188 @@ public class ConfigFile { Load(); } + public void setCam1TopCrop(String value){ + if (ValidDouble(value)){ + double v = toDouble(value); + if (v != Cam1TopCrop && v <= topcropmax && v >= 0.0){ + Cam1TopCrop = v; + needsave = true; + } + } + } + + public void setCam1BottomCrop(String value){ + if (ValidDouble(value)){ + double v = toDouble(value); + if (v != Cam1BottomCrop && v <= bottomcropmax && v >= 0.0){ + Cam1BottomCrop = v; + needsave = true; + } + } + } + public void setCam1LeftCrop(String value){ + if (ValidDouble(value)){ + double v = toDouble(value); + if (v != Cam1LeftCrop && v <= leftcropmax && v >= 0.0){ + Cam1LeftCrop = v; + needsave = true; + } + } + } + public void setCam1RightCrop(String value){ + if (ValidDouble(value)){ + double v = toDouble(value); + if (v != Cam1RightCrop && v <= rightcropmax && v >= 0.0){ + Cam1RightCrop = v; + needsave = true; + } + } + } + public void setCam2TopCrop(String value){ + if (ValidDouble(value)){ + double v = toDouble(value); + if (v != Cam2TopCrop && v <= topcropmax && v >= 0.0){ + Cam2TopCrop = v; + needsave = true; + } + } + } + public void setCam2BottomCrop(String value){ + if (ValidDouble(value)){ + double v = toDouble(value); + if (v != Cam2BottomCrop && v <= bottomcropmax && v >= 0.0){ + Cam2BottomCrop = v; + needsave = true; + } + } + } + public void setCam2LeftCrop(String value){ + if (ValidDouble(value)){ + double v = toDouble(value); + if (v != Cam2LeftCrop && v <= leftcropmax && v >= 0.0){ + Cam2LeftCrop = v; + needsave = true; + } + } + } + public void setCam2RightCrop(String value){ + if (ValidDouble(value)){ + double v = toDouble(value); + if (v != Cam2RightCrop && v <= rightcropmax && v >= 0.0){ + Cam2RightCrop = v; + needsave = true; + } + } + } + public void setCam3TopCrop(String value){ + if (ValidDouble(value)){ + double v = toDouble(value); + if (v != Cam3TopCrop && v <= topcropmax && v >= 0.0){ + Cam3TopCrop = v; + needsave = true; + } + } + } + public void setCam3BottomCrop(String value){ + if (ValidDouble(value)){ + double v = toDouble(value); + if (v != Cam3BottomCrop && v <= bottomcropmax && v >= 0.0){ + Cam3BottomCrop = v; + needsave = true; + } + } + } + public void setCam3LeftCrop(String value){ + if (ValidDouble(value)){ + double v = toDouble(value); + if (v != Cam3LeftCrop && v <= leftcropmax && v >= 0.0){ + Cam3LeftCrop = v; + needsave = true; + } + } + } + public void setCam3RightCrop(String value){ + if (ValidDouble(value)){ + double v = toDouble(value); + if (v != Cam3RightCrop && v <= rightcropmax && v >= 0.0){ + Cam3RightCrop = v; + needsave = true; + } + } + } + public void setCam4TopCrop(String value){ + if (ValidDouble(value)){ + double v = toDouble(value); + if (v != Cam4TopCrop && v <= topcropmax && v >= 0.0){ + Cam4TopCrop = v; + needsave = true; + } + } + } + public void setCam4BottomCrop(String value){ + if (ValidDouble(value)){ + double v = toDouble(value); + if (v != Cam4BottomCrop && v <= bottomcropmax && v >= 0.0){ + Cam4BottomCrop = v; + needsave = true; + } + } + } + public void setCam4LeftCrop(String value){ + if (ValidDouble(value)){ + double v = toDouble(value); + if (v != Cam4LeftCrop && v <= leftcropmax && v >= 0.0){ + Cam4LeftCrop = v; + needsave = true; + } + } + } + public void setCam4RightCrop(String value){ + if (ValidDouble(value)){ + double v = toDouble(value); + if (v != Cam4RightCrop && v <= rightcropmax && v >= 0.0){ + Cam4RightCrop = v; + needsave = true; + } + } + } + public void setCam5TopCrop(String value){ + if (ValidDouble(value)){ + double v = toDouble(value); + if (v != Cam5TopCrop && v <= topcropmax && v >= 0.0){ + Cam5TopCrop = v; + needsave = true; + } + } + } + public void setCam5BottomCrop(String value){ + if (ValidDouble(value)){ + double v = toDouble(value); + if (v != Cam5BottomCrop && v <= bottomcropmax && v >= 0.0){ + Cam5BottomCrop = v; + needsave = true; + } + } + } + public void setCam5LeftCrop(String value){ + if (ValidDouble(value)){ + double v = toDouble(value); + if (v != Cam5LeftCrop && v <= leftcropmax && v >= 0.0){ + Cam5LeftCrop = v; + needsave = true; + } + } + } + public void setCam5RightCrop(String value){ + if (ValidDouble(value)){ + double v = toDouble(value); + if (v != Cam5RightCrop && v <= rightcropmax && v >= 0.0){ + Cam5RightCrop = v; + needsave = true; + } + } + } + public void setMirrorCamera(boolean value){ if (MirrorCamera != value){ MirrorCamera = value; @@ -596,6 +803,28 @@ public class ConfigFile { if (prop.getProperty("cascadeMinSize") == null) allcorrect = false; if (prop.getProperty("cascadeMaxSize") == null) allcorrect = false; + if (prop.getProperty("Cam1TopCrop") == null) allcorrect = false; + if (prop.getProperty("Cam1BottomCrop") == null) allcorrect = false; + if (prop.getProperty("Cam1LeftCrop") == null) allcorrect = false; + if (prop.getProperty("Cam1RightCrop") == null) allcorrect = false; + if (prop.getProperty("Cam2TopCrop") == null) allcorrect = false; + if (prop.getProperty("Cam2BottomCrop") == null) allcorrect = false; + if (prop.getProperty("Cam2LeftCrop") == null) allcorrect = false; + if (prop.getProperty("Cam2RightCrop") == null) allcorrect = false; + if (prop.getProperty("Cam3TopCrop") == null) allcorrect = false; + if (prop.getProperty("Cam3BottomCrop") == null) allcorrect = false; + if (prop.getProperty("Cam3LeftCrop") == null) allcorrect = false; + if (prop.getProperty("Cam3RightCrop") == null) allcorrect = false; + if (prop.getProperty("Cam4TopCrop") == null) allcorrect = false; + if (prop.getProperty("Cam4BottomCrop") == null) allcorrect = false; + if (prop.getProperty("Cam4LeftCrop") == null) allcorrect = false; + if (prop.getProperty("Cam4RightCrop") == null) allcorrect = false; + if (prop.getProperty("Cam5TopCrop") == null) allcorrect = false; + if (prop.getProperty("Cam5BottomCrop") == null) allcorrect = false; + if (prop.getProperty("Cam5LeftCrop") == null) allcorrect = false; + if (prop.getProperty("Cam5RightCrop") == null) allcorrect = false; + + if (allcorrect){ AudioPhase1 = prop.getProperty("AudioPhase1"); AudioPhase2 = prop.getProperty("AudioPhase2"); @@ -622,7 +851,7 @@ public class ConfigFile { ConfigRight45 = gson.fromJson(prop.getProperty(CameraConfigEnum.CameraConfigRight45.toString()), CameraConfig.class); ConfigRight90 = gson.fromJson(prop.getProperty(CameraConfigEnum.CameraConfigRight90.toString()), CameraConfig.class); - cascadeScaleFactor = toDouble(prop.getProperty("cascadeScaleFactor")); + cascadeScaleFactor = cascadetoDouble(prop.getProperty("cascadeScaleFactor")); cascadeMinNeighbors = toInt(prop.getProperty("cascadeMinNeighbors")); cascadeMinSize = toInt(prop.getProperty("cascadeMinSize")); cascadeMaxSize = toInt(prop.getProperty("cascadeMaxSize")); @@ -636,6 +865,28 @@ public class ConfigFile { SharpnessThreshold = toDouble(prop.getProperty("SharpnessThreshold")); + Cam1TopCrop = toDouble(prop.getProperty("Cam1TopCrop")); + Cam1BottomCrop = toDouble(prop.getProperty("Cam1BottomCrop")); + Cam1LeftCrop = toDouble(prop.getProperty("Cam1LeftCrop")); + Cam1RightCrop = toDouble(prop.getProperty("Cam1RightCrop")); + Cam2TopCrop = toDouble(prop.getProperty("Cam2TopCrop")); + Cam2BottomCrop = toDouble(prop.getProperty("Cam2BottomCrop")); + Cam2LeftCrop = toDouble(prop.getProperty("Cam2LeftCrop")); + Cam2RightCrop = toDouble(prop.getProperty("Cam2RightCrop")); + Cam3TopCrop = toDouble(prop.getProperty("Cam3TopCrop")); + Cam3BottomCrop = toDouble(prop.getProperty("Cam3BottomCrop")); + Cam3LeftCrop = toDouble(prop.getProperty("Cam3LeftCrop")); + Cam3RightCrop = toDouble(prop.getProperty("Cam3RightCrop")); + Cam4TopCrop = toDouble(prop.getProperty("Cam4TopCrop")); + Cam4BottomCrop = toDouble(prop.getProperty("Cam4BottomCrop")); + Cam4LeftCrop = toDouble(prop.getProperty("Cam4LeftCrop")); + Cam4RightCrop = toDouble(prop.getProperty("Cam4RightCrop")); + Cam5TopCrop = toDouble(prop.getProperty("Cam5TopCrop")); + Cam5BottomCrop = toDouble(prop.getProperty("Cam5BottomCrop")); + Cam5LeftCrop = toDouble(prop.getProperty("Cam5LeftCrop")); + Cam5RightCrop = toDouble(prop.getProperty("Cam5RightCrop")); + + Logger.info("Config Loaded"); MakeDirectories(); return; @@ -651,7 +902,7 @@ public class ConfigFile { CreateDefault(); } - private double toDouble(String cascadeScaleFactor) { + private double cascadetoDouble(String cascadeScaleFactor) { try{ return Double.parseDouble(cascadeScaleFactor); } catch (Exception e){ @@ -659,6 +910,14 @@ public class ConfigFile { } } + private double toDouble(String value) { + try{ + return Double.parseDouble(value); + } catch (Exception e){ + return 0.0; + } + } + private void CreateDefault(){ AudioPhase1 = Path.of(currentDirectory, "audio", "phase1.mp3").toString(); AudioPhase2 = Path.of(currentDirectory, "audio", "phase2.mp3").toString(); @@ -691,6 +950,32 @@ public class ConfigFile { MirrorCamera = false; FlipCamera = false; SharpnessThreshold = 300.0; + + Cam1TopCrop = 10.0; + Cam1BottomCrop = 10.0; + Cam1LeftCrop = 10.0; + Cam1RightCrop = 10.0; + + Cam2TopCrop = 10.0; + Cam2BottomCrop = 10.0; + Cam2LeftCrop = 10.0; + Cam2RightCrop = 10.0; + + Cam3TopCrop = 10.0; + Cam3BottomCrop = 10.0; + Cam3LeftCrop = 10.0; + Cam3RightCrop = 10.0; + + Cam4TopCrop = 10.0; + Cam4BottomCrop = 10.0; + Cam4LeftCrop = 10.0; + Cam4RightCrop = 10.0; + + Cam5TopCrop = 10.0; + Cam5BottomCrop = 10.0; + Cam5LeftCrop = 10.0; + Cam5RightCrop = 10.0; + Logger.info("Default Config Created"); needsave = true; Save(); @@ -751,6 +1036,28 @@ public class ConfigFile { prop.setProperty("FlipCamera", String.valueOf(FlipCamera)); prop.setProperty("SharpnessThreshold", String.valueOf(SharpnessThreshold)); + prop.setProperty("Cam1TopCrop", String.valueOf(Cam1TopCrop)); + prop.setProperty("Cam1BottomCrop", String.valueOf(Cam1BottomCrop)); + prop.setProperty("Cam1LeftCrop", String.valueOf(Cam1LeftCrop)); + prop.setProperty("Cam1RightCrop", String.valueOf(Cam1RightCrop)); + prop.setProperty("Cam2TopCrop", String.valueOf(Cam2TopCrop)); + prop.setProperty("Cam2BottomCrop", String.valueOf(Cam2BottomCrop)); + prop.setProperty("Cam2LeftCrop", String.valueOf(Cam2LeftCrop)); + prop.setProperty("Cam2RightCrop", String.valueOf(Cam2RightCrop)); + prop.setProperty("Cam3TopCrop", String.valueOf(Cam3TopCrop)); + prop.setProperty("Cam3BottomCrop", String.valueOf(Cam3BottomCrop)); + prop.setProperty("Cam3LeftCrop", String.valueOf(Cam3LeftCrop)); + prop.setProperty("Cam3RightCrop", String.valueOf(Cam3RightCrop)); + prop.setProperty("Cam4TopCrop", String.valueOf(Cam4TopCrop)); + prop.setProperty("Cam4BottomCrop", String.valueOf(Cam4BottomCrop)); + prop.setProperty("Cam4LeftCrop", String.valueOf(Cam4LeftCrop)); + prop.setProperty("Cam4RightCrop", String.valueOf(Cam4RightCrop)); + prop.setProperty("Cam5TopCrop", String.valueOf(Cam5TopCrop)); + prop.setProperty("Cam5BottomCrop", String.valueOf(Cam5BottomCrop)); + prop.setProperty("Cam5LeftCrop", String.valueOf(Cam5LeftCrop)); + prop.setProperty("Cam5RightCrop", String.valueOf(Cam5RightCrop)); + + try{ prop.store(new FileOutputStream(Path.of(currentDirectory, "config.properties").toString()), null); Logger.info("Config Saved"); diff --git a/src/main/java/id/co/gtc/erhacam/CaptureView.java b/src/main/java/id/co/gtc/erhacam/CaptureView.java index d512d75..40df318 100644 --- a/src/main/java/id/co/gtc/erhacam/CaptureView.java +++ b/src/main/java/id/co/gtc/erhacam/CaptureView.java @@ -144,6 +144,7 @@ public class CaptureView { @FXML private void TakePhotos(){ + if (audioTimeline!=null) audioTimeline.stop(); String directory = config.getPhotoDirectory(); String prefix = RemoveSpaces(medicalRecordID.getText()) ; boolean has_face = Arrays.stream(have_face).anyMatch(AtomicBoolean::get); @@ -194,16 +195,18 @@ public class CaptureView { } else { isTakingPhoto.set(false); //AutoCloseAlert.show("QR Code Not Available", "", "Please scan QR before continue", 5, s -> AutoCloseAlert.show("Scan Barcode", "Silahkan Scan Barcode Anda", "Arahkan kertas barcode ke kamera", 0, null)); - if (!Objects.equals(AutoCloseAlert.shownBanner, AutoCloseAlert.banner_01)){ - if (AutoCloseAlert.banner_01!=null){ - AutoCloseAlert.showbanner(AutoCloseAlert.banner_01,0,null); - } - } +// if (!Objects.equals(AutoCloseAlert.shownBanner, AutoCloseAlert.banner_01)){ +// if (AutoCloseAlert.banner_01!=null){ +// AutoCloseAlert.showbanner(AutoCloseAlert.banner_01,0,null); +// } +// } + clear(); PlayFileWithoutEvent(audio_scan_barcode); } } else { isTakingPhoto.set(false); - AutoCloseAlert.show("Invalid Photo Directory","Photo Directory not set", "Please set photo directory at Setting", 5, s -> AutoCloseAlert.show("Setting", "Setting", "Please set photo directory", 0, null)); + AutoCloseAlert.show("Invalid Photo Directory","Photo Directory not set", "Please set photo directory at Setting", 5, s -> AutoCloseAlert.show("Setting", "Setting", "Please set photo directory", 0, sx-> clear())); + } @@ -480,6 +483,14 @@ public class CaptureView { String[] files = prc.compressed(); if (files.length>0){ + AutoCloseAlert.showpictures(prc.compressed(),3, (s)->{ + if (AutoCloseAlert.banner_02!=null) { + AutoCloseAlert.showbanner(AutoCloseAlert.banner_02, 0, null); + + UploadFiles(prc, prefix); + if (runningTask!=null) runningTask.cancel(false); + } + }); PlayFileWithEvent(audio_pengambilan_berhasil, new PlaybackStatus() { @Override public void onPlaybackStarted(String filename) { @@ -488,14 +499,7 @@ public class CaptureView { @Override public void onPlaybackFinished(String filename) { - AutoCloseAlert.showpictures(prc.compressed(),3, (s)->{ - if (AutoCloseAlert.banner_02!=null) { - AutoCloseAlert.showbanner(AutoCloseAlert.banner_02, 0, null); - UploadFiles(prc, prefix); - if (runningTask!=null) runningTask.cancel(false); - } - }); } @Override @@ -561,7 +565,7 @@ public class CaptureView { @FXML public void initialize(){ audio_posisikan_muka = ExtractResource("/posisikan_wajah.wav"); - audio_pengambilan_berhasil = ExtractResource("/pengambilan_berhasil.wav"); + audio_pengambilan_berhasil = ExtractResource("/pengambilan_berhasil_tunggu_lobby.wav"); audio_pengambilan_gagal = ExtractResource("/pengambilan_gagal.wav"); audio_scan_barcode = ExtractResource("/scan_barcode.wav"); audio_upload_gagal = ExtractResource("/upload_gagal.wav"); @@ -611,11 +615,12 @@ public class CaptureView { LoadCameraDetail(cam5, 5, CameraConfigEnum.CameraConfigRight90); Platform.runLater(()->{ - if (!Objects.equals(AutoCloseAlert.shownBanner, AutoCloseAlert.banner_01)){ - if (AutoCloseAlert.banner_01!=null){ - AutoCloseAlert.showbanner(AutoCloseAlert.banner_01,0,null); - } - } +// if (!Objects.equals(AutoCloseAlert.shownBanner, AutoCloseAlert.banner_01)){ +// if (AutoCloseAlert.banner_01!=null){ +// AutoCloseAlert.showbanner(AutoCloseAlert.banner_01,0,null); +// } +// } + clear(); int indexleft90=-1; int indexleft45=-1; @@ -707,6 +712,8 @@ public class CaptureView { } + Timeline audioTimeline; + private void clear(){ isTakingPhoto.set(false); TextAreaSetText(medicalRecordID,""); @@ -824,7 +831,7 @@ public class CaptureView { LiveCamEvent lce = new LiveCamEvent() { - Timeline audioTimeline; + @Override public void onDetectedQRCode(String barCode) { @@ -850,71 +857,61 @@ public class CaptureView { audioTimeline = new Timeline(); final int file_duration = 8; // audio_posisikan_muka durasi 7 detik - audioTimeline.getKeyFrames().add(new KeyFrame(Duration.seconds(0), k1 ->{ + audioTimeline.getKeyFrames().add(new KeyFrame(Duration.seconds(0), k1 -> PlayFileWithEvent(audio_posisikan_muka, new PlaybackStatus() { + @Override + public void onPlaybackStarted(String filename) { + anti_bawel.set(true); + System.out.println("Peringatan pertama audio_posisikan_muka"); + } - PlayFileWithEvent(audio_posisikan_muka, new PlaybackStatus() { - @Override - public void onPlaybackStarted(String filename) { - anti_bawel.set(true); - System.out.println("Peringatan pertama audio_posisikan_muka"); - } + @Override + public void onPlaybackFinished(String filename) { + anti_bawel.set(false); + } - @Override - public void onPlaybackFinished(String filename) { - anti_bawel.set(false); - } + @Override + public void onPlaybackFailure(String filename) { + anti_bawel.set(false); + } + }))); - @Override - public void onPlaybackFailure(String filename) { - anti_bawel.set(false); - } - }); + audioTimeline.getKeyFrames().add(new KeyFrame(Duration.seconds(file_duration+5), k2 -> PlayFileWithEvent(audio_posisikan_muka, new PlaybackStatus() { - })); + @Override + public void onPlaybackStarted(String filename) { + anti_bawel.set(true); + System.out.println("Peringatan kedua audio_posisikan_muka"); + } - audioTimeline.getKeyFrames().add(new KeyFrame(Duration.seconds(file_duration+5), k2 -> { - PlayFileWithEvent(audio_posisikan_muka, new PlaybackStatus() { + @Override + public void onPlaybackFinished(String filename) { + anti_bawel.set(false); + } - @Override - public void onPlaybackStarted(String filename) { - anti_bawel.set(true); - System.out.println("Peringatan kedua audio_posisikan_muka"); - } + @Override + public void onPlaybackFailure(String filename) { + anti_bawel.set(false); + } + }))); - @Override - public void onPlaybackFinished(String filename) { - anti_bawel.set(false); - } + audioTimeline.getKeyFrames().add(new KeyFrame(Duration.seconds(3*file_duration+5), k3 -> PlayFileWithEvent(audio_posisikan_muka, new PlaybackStatus() { - @Override - public void onPlaybackFailure(String filename) { - anti_bawel.set(false); - } - }); - })); + @Override + public void onPlaybackStarted(String filename) { + anti_bawel.set(true); + System.out.println("Peringatan ketiga audio_posisikan_muka"); + } - audioTimeline.getKeyFrames().add(new KeyFrame(Duration.seconds(3*file_duration+5), k3 -> { + @Override + public void onPlaybackFinished(String filename) { + anti_bawel.set(false); + } - PlayFileWithEvent(audio_posisikan_muka, new PlaybackStatus() { - - @Override - public void onPlaybackStarted(String filename) { - anti_bawel.set(true); - System.out.println("Peringatan ketiga audio_posisikan_muka"); - } - - @Override - public void onPlaybackFinished(String filename) { - anti_bawel.set(false); - } - - @Override - public void onPlaybackFailure(String filename) { - anti_bawel.set(false); - } - }); - - })); + @Override + public void onPlaybackFailure(String filename) { + anti_bawel.set(false); + } + }))); audioTimeline.getKeyFrames().add(new KeyFrame(Duration.seconds(5*file_duration+5), k4 ->{ PlayFileWithEvent(audio_hubungi_staf_kami, new PlaybackStatus() { @Override @@ -980,7 +977,7 @@ public class CaptureView { TextAreaSetText(PatientName, pr.name); if (anti_bawel.get()) return; // sudah ada LiveCamEvent lain yang bunyiin, jadi tidak usah bunyiin lagi - if (audioTimeline!=null) audioTimeline.play(); + if (audioTimeline!=null) audioTimeline.playFromStart(); } diff --git a/src/main/java/id/co/gtc/erhacam/MainApplication.java b/src/main/java/id/co/gtc/erhacam/MainApplication.java index d18ae85..318d6b1 100644 --- a/src/main/java/id/co/gtc/erhacam/MainApplication.java +++ b/src/main/java/id/co/gtc/erhacam/MainApplication.java @@ -30,11 +30,11 @@ public class MainApplication extends Application { Runtime.getRuntime().addShutdownHook(new Thread(() -> { if (photoCleaner!=null) photoCleaner.Stop(); System.out.println("ShutdownHook Checking running threads..."); - Map allThreads = Thread.getAllStackTraces(); - for(Thread thread : allThreads.keySet()){ - System.out.println("Thread: " + thread.getName()+", State: " + thread.getState()+", Daemon: " + thread.isDaemon()); - thread.interrupt(); - } +// Map allThreads = Thread.getAllStackTraces(); +// for(Thread thread : allThreads.keySet()){ +// System.out.println("Thread: " + thread.getName()+", State: " + thread.getState()+", Daemon: " + thread.isDaemon()); +// thread.interrupt(); +// } })); @@ -50,7 +50,7 @@ public class MainApplication extends Application { Screen screen = Screen.getPrimary(); Rectangle2D screenbound = screen.getBounds(); Scene scene = new Scene(fxmlLoader.load(), screenbound.getWidth(), screenbound.getHeight()); - stage.setTitle("MultiCam Capture App for ERHA 22052025-004"); + stage.setTitle("MultiCam Capture App for ERHA 26052025-001"); stage.setScene(scene); stage.setResizable(true); stage.setMaximized(true); diff --git a/src/main/java/id/co/gtc/erhacam/SettingView.java b/src/main/java/id/co/gtc/erhacam/SettingView.java index b886a14..b9a651b 100644 --- a/src/main/java/id/co/gtc/erhacam/SettingView.java +++ b/src/main/java/id/co/gtc/erhacam/SettingView.java @@ -49,6 +49,137 @@ public class SettingView { @FXML private CheckBox FlipCamera; + @FXML + private TextField Cam1TopCrop; + @FXML + private TextField Cam1BottomCrop; + @FXML + private TextField Cam1LeftCrop; + @FXML + private TextField Cam1RightCrop; + + @FXML + private TextField Cam2TopCrop; + @FXML + private TextField Cam2BottomCrop; + @FXML + private TextField Cam2LeftCrop; + @FXML + private TextField Cam2RightCrop; + + @FXML + private TextField Cam3TopCrop; + @FXML + private TextField Cam3BottomCrop; + @FXML + private TextField Cam3LeftCrop; + @FXML + private TextField Cam3RightCrop; + + @FXML + private TextField Cam4TopCrop; + @FXML + private TextField Cam4BottomCrop; + @FXML + private TextField Cam4LeftCrop; + @FXML + private TextField Cam4RightCrop; + + @FXML + private TextField Cam5TopCrop; + @FXML + private TextField Cam5BottomCrop; + @FXML + private TextField Cam5LeftCrop; + @FXML + private TextField Cam5RightCrop; + + @FXML + private void ApplyCropClick(){ + // Apply crop settings for each camera + boolean[] all_correct = {true}; + + CheckTextField(Cam1TopCrop,all_correct); + CheckTextField(Cam1BottomCrop,all_correct); + CheckTextField(Cam1LeftCrop,all_correct); + CheckTextField(Cam1RightCrop,all_correct); + CheckTextField(Cam2TopCrop,all_correct); + CheckTextField(Cam2BottomCrop,all_correct); + CheckTextField(Cam2LeftCrop,all_correct); + CheckTextField(Cam2RightCrop,all_correct); + CheckTextField(Cam3TopCrop,all_correct); + CheckTextField(Cam3BottomCrop,all_correct); + CheckTextField(Cam3LeftCrop,all_correct); + CheckTextField(Cam3RightCrop,all_correct); + CheckTextField(Cam4TopCrop,all_correct); + CheckTextField(Cam4BottomCrop,all_correct); + CheckTextField(Cam4LeftCrop,all_correct); + CheckTextField(Cam4RightCrop,all_correct); + CheckTextField(Cam5TopCrop,all_correct); + CheckTextField(Cam5BottomCrop,all_correct); + CheckTextField(Cam5LeftCrop,all_correct); + CheckTextField(Cam5RightCrop,all_correct); + + if (all_correct[0]){ + config.setCam1TopCrop(Cam1TopCrop.getText()); + config.setCam1BottomCrop(Cam1BottomCrop.getText()); + config.setCam1LeftCrop(Cam1LeftCrop.getText()); + config.setCam1RightCrop(Cam1RightCrop.getText()); + config.setCam2TopCrop(Cam2TopCrop.getText()); + config.setCam2BottomCrop(Cam2BottomCrop.getText()); + config.setCam2LeftCrop(Cam2LeftCrop.getText()); + config.setCam2RightCrop(Cam2RightCrop.getText()); + config.setCam3TopCrop(Cam3TopCrop.getText()); + config.setCam3BottomCrop(Cam3BottomCrop.getText()); + config.setCam3LeftCrop(Cam3LeftCrop.getText()); + config.setCam3RightCrop(Cam3RightCrop.getText()); + config.setCam4TopCrop(Cam4TopCrop.getText()); + config.setCam4BottomCrop(Cam4BottomCrop.getText()); + config.setCam4LeftCrop(Cam4LeftCrop.getText()); + config.setCam4RightCrop(Cam4RightCrop.getText()); + config.setCam5TopCrop(Cam5TopCrop.getText()); + config.setCam5BottomCrop(Cam5BottomCrop.getText()); + config.setCam5LeftCrop(Cam5LeftCrop.getText()); + config.setCam5RightCrop(Cam5RightCrop.getText()); + + config.Save(); + } else { + ShowAlert(Alert.AlertType.ERROR, "Crop Setting Error", "Crop Setting Error", "Please check your crop settings, some values are invalid"); + } + } + + private void CheckTextField(TextField tf, boolean[] value){ + if (ValidCropValue(tf)){ + tf.setStyle(""); + } else { + tf.setStyle("-fx-border-color: red;"); + value[0] = false; + } + } + + private boolean ValidCropValue(TextField tf){ + if (tf != null){ + double value; + String name = tf.getId(); + try { + value = Double.parseDouble(tf.getText()); + if (value >= 0.0){ + if (name.contains("Top")){ + return value <= config.getTopcropmax(); + } else if (name.contains("Bottom")){ + return value <= config.getBottomcropmax(); + } else if (name.contains("Left")){ + return value <= config.getLeftcropmax(); + } else if (name.contains("Right")){ + return value <= config.getRightcropmax(); + } + } + } catch (NumberFormatException ignored) { + } + } + return false; + } + final FileChooser jfc = new FileChooser(); @@ -200,6 +331,27 @@ public class SettingView { FlipCamera.setSelected(config.isFlipCamera()); TextFieldSetText(Sharpness,String.valueOf(config.getSharpnessThreshold())); + TextFieldSetText(Cam1TopCrop,String.valueOf(config.getCam1TopCrop())); + TextFieldSetText(Cam1BottomCrop,String.valueOf(config.getCam1BottomCrop())); + TextFieldSetText(Cam1LeftCrop,String.valueOf(config.getCam1LeftCrop())); + TextFieldSetText(Cam1RightCrop,String.valueOf(config.getCam1RightCrop())); + TextFieldSetText(Cam2TopCrop,String.valueOf(config.getCam2TopCrop())); + TextFieldSetText(Cam2BottomCrop,String.valueOf(config.getCam2BottomCrop())); + TextFieldSetText(Cam2LeftCrop,String.valueOf(config.getCam2LeftCrop())); + TextFieldSetText(Cam2RightCrop,String.valueOf(config.getCam2RightCrop())); + TextFieldSetText(Cam3TopCrop,String.valueOf(config.getCam3TopCrop())); + TextFieldSetText(Cam3BottomCrop,String.valueOf(config.getCam3BottomCrop())); + TextFieldSetText(Cam3LeftCrop,String.valueOf(config.getCam3LeftCrop())); + TextFieldSetText(Cam3RightCrop,String.valueOf(config.getCam3RightCrop())); + TextFieldSetText(Cam4TopCrop,String.valueOf(config.getCam4TopCrop())); + TextFieldSetText(Cam4BottomCrop,String.valueOf(config.getCam4BottomCrop())); + TextFieldSetText(Cam4LeftCrop,String.valueOf(config.getCam4LeftCrop())); + TextFieldSetText(Cam4RightCrop,String.valueOf(config.getCam4RightCrop())); + TextFieldSetText(Cam5TopCrop,String.valueOf(config.getCam5TopCrop())); + TextFieldSetText(Cam5BottomCrop,String.valueOf(config.getCam5BottomCrop())); + TextFieldSetText(Cam5LeftCrop,String.valueOf(config.getCam5LeftCrop())); + TextFieldSetText(Cam5RightCrop,String.valueOf(config.getCam5RightCrop())); + }); } diff --git a/src/main/resources/id/co/gtc/erhacam/setting-view.fxml b/src/main/resources/id/co/gtc/erhacam/setting-view.fxml index c0b02da..653de70 100644 --- a/src/main/resources/id/co/gtc/erhacam/setting-view.fxml +++ b/src/main/resources/id/co/gtc/erhacam/setting-view.fxml @@ -30,221 +30,463 @@ - + - - + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +