Compare commits
61 Commits
72e2789d50
...
Dermies
| Author | SHA1 | Date | |
|---|---|---|---|
| c4d3153bd1 | |||
| 0b389afe62 | |||
| d5fbd2bc0a | |||
| 1ef8af4d42 | |||
| 1fd1b4a5ac | |||
| f557828cda | |||
| 668a477289 | |||
| 8f85e3fccd | |||
| f7c74304f5 | |||
| d566e4bc4f | |||
| 49ac4353b3 | |||
| 3539fb7d65 | |||
| e4d2bfa00e | |||
| 0728ae3ca2 | |||
| 957d642f5d | |||
| 3d02641479 | |||
| d0fe8123e9 | |||
| 9e69714ae1 | |||
| 9effe8a7a9 | |||
|
|
1fcd905b07 | ||
|
|
ee0a82aa32 | ||
|
|
d1a6dd9f98 | ||
|
|
e47e1252fb | ||
|
|
ef94f87d8a | ||
| 5f2093a572 | |||
| 2dfd149990 | |||
|
|
4e3381edc4 | ||
|
|
1d617a0559 | ||
| bc6821a33e | |||
|
|
d2e7d1155d | ||
|
|
52360dde5f | ||
|
|
02a213f17b | ||
| 2cf206b306 | |||
| 257eb50640 | |||
| ca3fa0ed08 | |||
| fb5d143cd1 | |||
|
|
67af6fe4c0 | ||
|
|
93b1079747 | ||
|
|
b6a3076993 | ||
| 7f83808d2b | |||
| 189e9e530d | |||
|
|
7cdefa6f1d | ||
|
|
e72d25a213 | ||
|
|
6f3080293f | ||
|
|
fc5bc8ada8 | ||
| 532979807b | |||
| 4535fe0aec | |||
| 71ecbe0c3e | |||
|
|
2da4c3621e | ||
|
|
fbb68b4da7 | ||
|
|
58194d8979 | ||
| 093c32058c | |||
| 80d468a79a | |||
| b248c59e32 | |||
| 64f5b619b7 | |||
| 00f9852fa8 | |||
| 30ef123832 | |||
| 29884c03ed | |||
| a60fe56510 | |||
| f80662a453 | |||
| 30660b9afb |
3
.gitignore
vendored
3
.gitignore
vendored
@@ -2,6 +2,9 @@ target/
|
|||||||
!.mvn/wrapper/maven-wrapper.jar
|
!.mvn/wrapper/maven-wrapper.jar
|
||||||
!**/src/main/**/target/
|
!**/src/main/**/target/
|
||||||
!**/src/test/**/target/
|
!**/src/test/**/target/
|
||||||
|
logs/
|
||||||
|
out/
|
||||||
|
hs_err*.log
|
||||||
|
|
||||||
### IntelliJ IDEA ###
|
### IntelliJ IDEA ###
|
||||||
.idea/modules.xml
|
.idea/modules.xml
|
||||||
|
|||||||
52
.idea/artifacts/Dermies.xml
generated
Normal file
52
.idea/artifacts/Dermies.xml
generated
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
<component name="ArtifactManager">
|
||||||
|
<artifact type="jar" name="Dermies">
|
||||||
|
<output-path>$PROJECT_DIR$/out/artifacts/Dermies</output-path>
|
||||||
|
<root id="archive" name="Dermies.jar">
|
||||||
|
<element id="module-output" name="ErhaCam" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/controlsfx/controlsfx/11.2.1/controlsfx-11.2.1.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/bytedeco/libfreenect2/0.2.0-1.5.9/libfreenect2-0.2.0-1.5.9.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/bytedeco/ffmpeg/6.1.1-1.5.10/ffmpeg-6.1.1-1.5.10.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/com/beust/jcommander/1.82/jcommander-1.82.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/com/google/errorprone/error_prone_annotations/2.27.0/error_prone_annotations-2.27.0.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/bytedeco/opencv/4.9.0-1.5.10/opencv-4.9.0-1.5.10.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/bytedeco/opencv/4.9.0-1.5.10/opencv-4.9.0-1.5.10-windows-x86_64.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/com/google/code/gson/gson/2.11.0/gson-2.11.0.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/com/google/zxing/core/3.5.3/core-3.5.3.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/bytedeco/flycapture/2.13.3.31-1.5.9/flycapture-2.13.3.31-1.5.9.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/bytedeco/leptonica/1.84.1-1.5.10/leptonica-1.84.1-1.5.10.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/openjfx/javafx-controls/21/javafx-controls-21.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/bytedeco/openblas/0.3.26-1.5.10/openblas-0.3.26-1.5.10-windows-x86_64.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/openjfx/javafx-fxml/21/javafx-fxml-21.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/commons-net/commons-net/3.11.1/commons-net-3.11.1.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/bytedeco/libfreenect/0.5.7-1.5.9/libfreenect-0.5.7-1.5.9.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/openjfx/javafx-controls/21/javafx-controls-21-win.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/bytedeco/videoinput/0.200-1.5.9/videoinput-0.200-1.5.9.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/openjfx/javafx-base/21/javafx-base-21-win.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/net/java/dev/jna/jna/5.15.0/jna-5.15.0.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/tinylog/tinylog-impl/2.7.0/tinylog-impl-2.7.0.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/projectlombok/lombok/1.18.30/lombok-1.18.30.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/com/github/jai-imageio/jai-imageio-core/1.4.0/jai-imageio-core-1.4.0.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/xerial/sqlite-jdbc/3.46.0.0/sqlite-jdbc-3.46.0.0.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/openjfx/javafx-graphics/21/javafx-graphics-21.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/bytedeco/openblas/0.3.26-1.5.10/openblas-0.3.26-1.5.10.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/bytedeco/tesseract/5.3.4-1.5.10/tesseract-5.3.4-1.5.10.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/bytedeco/librealsense2/2.53.1-1.5.9/librealsense2-2.53.1-1.5.9.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/openjfx/javafx-base/21/javafx-base-21.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/openjfx/javafx-graphics/21/javafx-graphics-21-win.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/com/google/zxing/javase/3.5.3/javase-3.5.3.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/bytedeco/libdc1394/2.2.6-1.5.9/libdc1394-2.2.6-1.5.9.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/bytedeco/javacpp/1.5.10/javacpp-1.5.10-windows-x86_64.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/slf4j/slf4j-jcl/1.7.36/slf4j-jcl-1.7.36.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/bytedeco/artoolkitplus/2.3.1-1.5.9/artoolkitplus-2.3.1-1.5.9.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/bytedeco/ffmpeg/6.1.1-1.5.10/ffmpeg-6.1.1-1.5.10-windows-x86_64.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/bytedeco/librealsense/1.12.4-1.5.9/librealsense-1.12.4-1.5.9.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/bytedeco/javacv/1.5.10/javacv-1.5.10.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/bytedeco/javacpp/1.5.10/javacpp-1.5.10.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/tinylog/tinylog-api/2.7.0/tinylog-api-2.7.0.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/openjfx/javafx-fxml/21/javafx-fxml-21-win.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/bytedeco/videoinput/0.200-1.5.9/videoinput-0.200-1.5.9-windows-x86_64.jar" path-in-jar="/" />
|
||||||
|
</root>
|
||||||
|
</artifact>
|
||||||
|
</component>
|
||||||
90
.idea/artifacts/ErhaCam_jar.xml
generated
90
.idea/artifacts/ErhaCam_jar.xml
generated
@@ -3,63 +3,51 @@
|
|||||||
<output-path>$PROJECT_DIR$/out/artifacts/ErhaCam_jar</output-path>
|
<output-path>$PROJECT_DIR$/out/artifacts/ErhaCam_jar</output-path>
|
||||||
<root id="archive" name="ErhaCam.jar">
|
<root id="archive" name="ErhaCam.jar">
|
||||||
<element id="module-output" name="ErhaCam" />
|
<element id="module-output" name="ErhaCam" />
|
||||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/openjfx/javafx-fxml/21/javafx-fxml-21-win.jar" path-in-jar="/" />
|
|
||||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/xerial/sqlite-jdbc/3.46.0.0/sqlite-jdbc-3.46.0.0.jar" path-in-jar="/" />
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/xerial/sqlite-jdbc/3.46.0.0/sqlite-jdbc-3.46.0.0.jar" path-in-jar="/" />
|
||||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" path-in-jar="/" />
|
|
||||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/controlsfx/controlsfx/11.2.1/controlsfx-11.2.1.jar" path-in-jar="/" />
|
|
||||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/openjfx/javafx-base/21/javafx-base-21.jar" path-in-jar="/" />
|
|
||||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/bytedeco/javacv-platform/1.5.10/javacv-platform-1.5.10.jar" path-in-jar="/" />
|
|
||||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/bytedeco/javacv/1.5.10/javacv-1.5.10.jar" path-in-jar="/" />
|
|
||||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/bytedeco/javacpp/1.5.10/javacpp-1.5.10.jar" path-in-jar="/" />
|
|
||||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/bytedeco/openblas/0.3.26-1.5.10/openblas-0.3.26-1.5.10.jar" path-in-jar="/" />
|
|
||||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/bytedeco/opencv/4.9.0-1.5.10/opencv-4.9.0-1.5.10.jar" path-in-jar="/" />
|
|
||||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/bytedeco/ffmpeg/6.1.1-1.5.10/ffmpeg-6.1.1-1.5.10.jar" path-in-jar="/" />
|
|
||||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/bytedeco/flycapture/2.13.3.31-1.5.9/flycapture-2.13.3.31-1.5.9.jar" path-in-jar="/" />
|
|
||||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/bytedeco/libdc1394/2.2.6-1.5.9/libdc1394-2.2.6-1.5.9.jar" path-in-jar="/" />
|
|
||||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/bytedeco/libfreenect/0.5.7-1.5.9/libfreenect-0.5.7-1.5.9.jar" path-in-jar="/" />
|
|
||||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/bytedeco/libfreenect2/0.2.0-1.5.9/libfreenect2-0.2.0-1.5.9.jar" path-in-jar="/" />
|
|
||||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/bytedeco/librealsense/1.12.4-1.5.9/librealsense-1.12.4-1.5.9.jar" path-in-jar="/" />
|
|
||||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/bytedeco/librealsense2/2.53.1-1.5.9/librealsense2-2.53.1-1.5.9.jar" path-in-jar="/" />
|
|
||||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/bytedeco/videoinput/0.200-1.5.9/videoinput-0.200-1.5.9.jar" path-in-jar="/" />
|
|
||||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/bytedeco/artoolkitplus/2.3.1-1.5.9/artoolkitplus-2.3.1-1.5.9.jar" path-in-jar="/" />
|
|
||||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/bytedeco/leptonica/1.84.1-1.5.10/leptonica-1.84.1-1.5.10.jar" path-in-jar="/" />
|
|
||||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/bytedeco/tesseract/5.3.4-1.5.10/tesseract-5.3.4-1.5.10.jar" path-in-jar="/" />
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/bytedeco/tesseract/5.3.4-1.5.10/tesseract-5.3.4-1.5.10.jar" path-in-jar="/" />
|
||||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/bytedeco/javacpp-platform/1.5.10/javacpp-platform-1.5.10.jar" path-in-jar="/" />
|
|
||||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/bytedeco/javacpp/1.5.10/javacpp-1.5.10-windows-x86_64.jar" path-in-jar="/" />
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/bytedeco/javacpp/1.5.10/javacpp-1.5.10-windows-x86_64.jar" path-in-jar="/" />
|
||||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/bytedeco/openblas-platform/0.3.26-1.5.10/openblas-platform-0.3.26-1.5.10.jar" path-in-jar="/" />
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/bytedeco/artoolkitplus/2.3.1-1.5.9/artoolkitplus-2.3.1-1.5.9.jar" path-in-jar="/" />
|
||||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/bytedeco/opencv-platform/4.9.0-1.5.10/opencv-platform-4.9.0-1.5.10.jar" path-in-jar="/" />
|
|
||||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/bytedeco/opencv/4.9.0-1.5.10/opencv-4.9.0-1.5.10-windows-x86_64.jar" path-in-jar="/" />
|
|
||||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/bytedeco/ffmpeg-platform/6.1.1-1.5.10/ffmpeg-platform-6.1.1-1.5.10.jar" path-in-jar="/" />
|
|
||||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/bytedeco/flycapture-platform/2.13.3.31-1.5.9/flycapture-platform-2.13.3.31-1.5.9.jar" path-in-jar="/" />
|
|
||||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/bytedeco/libdc1394-platform/2.2.6-1.5.9/libdc1394-platform-2.2.6-1.5.9.jar" path-in-jar="/" />
|
|
||||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/bytedeco/libfreenect-platform/0.5.7-1.5.9/libfreenect-platform-0.5.7-1.5.9.jar" path-in-jar="/" />
|
|
||||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/bytedeco/libfreenect2-platform/0.2.0-1.5.9/libfreenect2-platform-0.2.0-1.5.9.jar" path-in-jar="/" />
|
|
||||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/bytedeco/librealsense-platform/1.12.4-1.5.9/librealsense-platform-1.12.4-1.5.9.jar" path-in-jar="/" />
|
|
||||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/bytedeco/librealsense2-platform/2.53.1-1.5.9/librealsense2-platform-2.53.1-1.5.9.jar" path-in-jar="/" />
|
|
||||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/bytedeco/videoinput-platform/0.200-1.5.9/videoinput-platform-0.200-1.5.9.jar" path-in-jar="/" />
|
|
||||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/bytedeco/videoinput/0.200-1.5.9/videoinput-0.200-1.5.9-windows-x86_64.jar" path-in-jar="/" />
|
|
||||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/bytedeco/artoolkitplus-platform/2.3.1-1.5.9/artoolkitplus-platform-2.3.1-1.5.9.jar" path-in-jar="/" />
|
|
||||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/bytedeco/leptonica-platform/1.84.1-1.5.10/leptonica-platform-1.84.1-1.5.10.jar" path-in-jar="/" />
|
|
||||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/bytedeco/tesseract-platform/5.3.4-1.5.10/tesseract-platform-5.3.4-1.5.10.jar" path-in-jar="/" />
|
|
||||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/commons-net/commons-net/3.11.1/commons-net-3.11.1.jar" path-in-jar="/" />
|
|
||||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/com/google/zxing/javase/3.5.3/javase-3.5.3.jar" path-in-jar="/" />
|
|
||||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/com/google/zxing/core/3.5.3/core-3.5.3.jar" path-in-jar="/" />
|
|
||||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/com/beust/jcommander/1.82/jcommander-1.82.jar" path-in-jar="/" />
|
|
||||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/com/github/jai-imageio/jai-imageio-core/1.4.0/jai-imageio-core-1.4.0.jar" path-in-jar="/" />
|
|
||||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/tinylog/tinylog-impl/2.7.0/tinylog-impl-2.7.0.jar" path-in-jar="/" />
|
|
||||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/tinylog/tinylog-api/2.7.0/tinylog-api-2.7.0.jar" path-in-jar="/" />
|
|
||||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/openjfx/javafx-controls/21/javafx-controls-21.jar" path-in-jar="/" />
|
|
||||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/openjfx/javafx-fxml/21/javafx-fxml-21.jar" path-in-jar="/" />
|
|
||||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/openjfx/javafx-graphics/21/javafx-graphics-21-win.jar" path-in-jar="/" />
|
|
||||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/com/google/code/gson/gson/2.11.0/gson-2.11.0.jar" path-in-jar="/" />
|
|
||||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/com/google/errorprone/error_prone_annotations/2.27.0/error_prone_annotations-2.27.0.jar" path-in-jar="/" />
|
|
||||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/openjfx/javafx-graphics/21/javafx-graphics-21.jar" path-in-jar="/" />
|
|
||||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/openjfx/javafx-base/21/javafx-base-21-win.jar" path-in-jar="/" />
|
|
||||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/net/java/dev/jna/jna/5.15.0/jna-5.15.0.jar" path-in-jar="/" />
|
|
||||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/slf4j/slf4j-jcl/1.7.36/slf4j-jcl-1.7.36.jar" path-in-jar="/" />
|
|
||||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.jar" path-in-jar="/" />
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/bytedeco/librealsense/1.12.4-1.5.9/librealsense-1.12.4-1.5.9.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/slf4j/slf4j-jcl/1.7.36/slf4j-jcl-1.7.36.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/openjfx/javafx-graphics/21/javafx-graphics-21-win.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/bytedeco/openblas/0.3.26-1.5.10/openblas-0.3.26-1.5.10.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/com/google/errorprone/error_prone_annotations/2.27.0/error_prone_annotations-2.27.0.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/com/beust/jcommander/1.82/jcommander-1.82.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/bytedeco/ffmpeg/6.1.1-1.5.10/ffmpeg-6.1.1-1.5.10.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/bytedeco/videoinput/0.200-1.5.9/videoinput-0.200-1.5.9-windows-x86_64.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/openjfx/javafx-fxml/21/javafx-fxml-21.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/com/google/code/gson/gson/2.11.0/gson-2.11.0.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/bytedeco/libdc1394/2.2.6-1.5.9/libdc1394-2.2.6-1.5.9.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/tinylog/tinylog-api/2.7.0/tinylog-api-2.7.0.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/projectlombok/lombok/1.18.30/lombok-1.18.30.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/bytedeco/libfreenect/0.5.7-1.5.9/libfreenect-0.5.7-1.5.9.jar" path-in-jar="/" />
|
||||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/openjfx/javafx-controls/21/javafx-controls-21-win.jar" path-in-jar="/" />
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/openjfx/javafx-controls/21/javafx-controls-21-win.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/bytedeco/opencv/4.9.0-1.5.10/opencv-4.9.0-1.5.10-windows-x86_64.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/com/google/zxing/core/3.5.3/core-3.5.3.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/openjfx/javafx-controls/21/javafx-controls-21.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/bytedeco/leptonica/1.84.1-1.5.10/leptonica-1.84.1-1.5.10.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/commons-net/commons-net/3.11.1/commons-net-3.11.1.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/bytedeco/librealsense2/2.53.1-1.5.9/librealsense2-2.53.1-1.5.9.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/net/java/dev/jna/jna/5.15.0/jna-5.15.0.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/tinylog/tinylog-impl/2.7.0/tinylog-impl-2.7.0.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/de/jensd/fontawesomefx/8.9/fontawesomefx-8.9.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/bytedeco/flycapture/2.13.3.31-1.5.9/flycapture-2.13.3.31-1.5.9.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/bytedeco/javacv/1.5.10/javacv-1.5.10.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/bytedeco/opencv/4.9.0-1.5.10/opencv-4.9.0-1.5.10.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/openjfx/javafx-base/21/javafx-base-21-win.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/controlsfx/controlsfx/11.2.1/controlsfx-11.2.1.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/bytedeco/videoinput/0.200-1.5.9/videoinput-0.200-1.5.9.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/com/github/jai-imageio/jai-imageio-core/1.4.0/jai-imageio-core-1.4.0.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/com/google/zxing/javase/3.5.3/javase-3.5.3.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/openjfx/javafx-graphics/21/javafx-graphics-21.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/openjfx/javafx-base/21/javafx-base-21.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/bytedeco/javacpp/1.5.10/javacpp-1.5.10.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/bytedeco/ffmpeg/6.1.1-1.5.10/ffmpeg-6.1.1-1.5.10-windows-x86_64.jar" path-in-jar="/" />
|
||||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/bytedeco/openblas/0.3.26-1.5.10/openblas-0.3.26-1.5.10-windows-x86_64.jar" path-in-jar="/" />
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/bytedeco/openblas/0.3.26-1.5.10/openblas-0.3.26-1.5.10-windows-x86_64.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/bytedeco/libfreenect2/0.2.0-1.5.9/libfreenect2-0.2.0-1.5.9.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/openjfx/javafx-fxml/21/javafx-fxml-21-win.jar" path-in-jar="/" />
|
||||||
</root>
|
</root>
|
||||||
</artifact>
|
</artifact>
|
||||||
</component>
|
</component>
|
||||||
6
.idea/copilot.data.migration.agent.xml
generated
Normal file
6
.idea/copilot.data.migration.agent.xml
generated
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="AgentMigrationStateService">
|
||||||
|
<option name="migrationStatus" value="COMPLETED" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
6
.idea/copilot.data.migration.ask.xml
generated
Normal file
6
.idea/copilot.data.migration.ask.xml
generated
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="AskMigrationStateService">
|
||||||
|
<option name="migrationStatus" value="COMPLETED" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
6
.idea/copilot.data.migration.ask2agent.xml
generated
Normal file
6
.idea/copilot.data.migration.ask2agent.xml
generated
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="Ask2AgentMigrationStateService">
|
||||||
|
<option name="migrationStatus" value="COMPLETED" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
6
.idea/copilot.data.migration.edit.xml
generated
Normal file
6
.idea/copilot.data.migration.edit.xml
generated
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="EditMigrationStateService">
|
||||||
|
<option name="migrationStatus" value="COMPLETED" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
5
.idea/inspectionProfiles/Project_Default.xml
generated
5
.idea/inspectionProfiles/Project_Default.xml
generated
@@ -1,6 +1,10 @@
|
|||||||
<component name="InspectionProjectProfileManager">
|
<component name="InspectionProjectProfileManager">
|
||||||
<profile version="1.0">
|
<profile version="1.0">
|
||||||
<option name="myName" value="Project Default" />
|
<option name="myName" value="Project Default" />
|
||||||
|
<inspection_tool class="AutoCloseableResource" enabled="false" level="WARNING" enabled_by_default="false">
|
||||||
|
<option name="METHOD_MATCHER_CONFIG" value="java.util.Formatter,format,java.io.Writer,append,com.google.common.base.Preconditions,checkNotNull,org.hibernate.Session,close,java.io.PrintWriter,printf,java.io.PrintStream,printf,java.lang.foreign.Arena,ofAuto,java.lang.foreign.Arena,global,java.util.concurrent.Executors,newFixedThreadPool" />
|
||||||
|
</inspection_tool>
|
||||||
|
<inspection_tool class="ClassEscapesItsScope" enabled="false" level="WARNING" enabled_by_default="false" />
|
||||||
<inspection_tool class="CommentedOutCode" enabled="true" level="WEAK WARNING" enabled_by_default="true">
|
<inspection_tool class="CommentedOutCode" enabled="true" level="WEAK WARNING" enabled_by_default="true">
|
||||||
<option name="minLines" value="3" />
|
<option name="minLines" value="3" />
|
||||||
</inspection_tool>
|
</inspection_tool>
|
||||||
@@ -12,5 +16,6 @@
|
|||||||
<option name="processComments" value="true" />
|
<option name="processComments" value="true" />
|
||||||
</inspection_tool>
|
</inspection_tool>
|
||||||
<inspection_tool class="SqlNoDataSourceInspection" enabled="false" level="WARNING" enabled_by_default="false" />
|
<inspection_tool class="SqlNoDataSourceInspection" enabled="false" level="WARNING" enabled_by_default="false" />
|
||||||
|
<inspection_tool class="UnusedReturnValue" enabled="false" level="WARNING" enabled_by_default="false" />
|
||||||
</profile>
|
</profile>
|
||||||
</component>
|
</component>
|
||||||
BIN
IU photoboth-01.jpg
Normal file
BIN
IU photoboth-01.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.1 MiB |
BIN
IU photoboth-02.jpg
Normal file
BIN
IU photoboth-02.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 253 KiB |
BIN
banners/IU photoboth-01.jpg
Normal file
BIN
banners/IU photoboth-01.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.1 MiB |
BIN
banners/IU photoboth-01_old.jpg
Normal file
BIN
banners/IU photoboth-01_old.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 452 KiB |
BIN
banners/IU photoboth-02.jpg
Normal file
BIN
banners/IU photoboth-02.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 253 KiB |
BIN
banners/WelcomeDermies.jpg
Normal file
BIN
banners/WelcomeDermies.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 614 KiB |
BIN
camera-shutter-click-01.wav
Normal file
BIN
camera-shutter-click-01.wav
Normal file
Binary file not shown.
@@ -1,22 +1,50 @@
|
|||||||
#Thu Dec 19 11:49:05 WIB 2024
|
#Wed Aug 27 11:07:31 WIB 2025
|
||||||
AudioPhase1=C\:\\Users\\rdkar\\OneDrive\\Documents\\IntelliJ Project\\ErhaCam\\audio\\phase1.mp3
|
AudioPhase1=C\:\\Users\\rdkar\\OneDrive\\Documents\\IntelliJ Project\\ErhaCam\\audio\\phase1.mp3
|
||||||
AudioPhase2=C\:\\Users\\rdkar\\OneDrive\\Documents\\IntelliJ Project\\ErhaCam\\audio\\phase2.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
|
AudioPhase3=C\:\\Users\\rdkar\\OneDrive\\Documents\\IntelliJ Project\\ErhaCam\\audio\\phase3.mp3
|
||||||
AudioPhase4=C\:\\Users\\rdkar\\OneDrive\\Documents\\IntelliJ Project\\ErhaCam\\audio\\phase4.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
|
AudioPhase5=C\:\\Users\\rdkar\\OneDrive\\Documents\\IntelliJ Project\\ErhaCam\\audio\\phase5.mp3
|
||||||
CameraCenter=OBSBOT Meet 2 StreamCamera
|
Cam1BottomCrop=20.0
|
||||||
CameraConfigCenter={"Brightness"\:0.0,"Contrast"\:32.0,"Saturation"\:64.0,"Hue"\:0.0,"Gain"\:0.0,"Exposure"\:157.0,"Sharpness"\:3.0,"Gamma"\:100.0,"AutoExposure"\:true,"AutoFocus"\:true,"AutoWhiteBalance"\:true}
|
Cam1LeftCrop=8.0
|
||||||
CameraConfigLeft45={"Brightness"\:37.58730158730158,"Contrast"\:32.0,"Saturation"\:64.0,"Hue"\:0.0,"Gain"\:0.0,"Exposure"\:157.0,"Sharpness"\:3.0,"Gamma"\:100.0,"AutoExposure"\:true,"AutoFocus"\:true,"AutoWhiteBalance"\:true}
|
Cam1RightCrop=8.0
|
||||||
CameraConfigLeft90={"Brightness"\:0.0,"Contrast"\:32.0,"Saturation"\:64.0,"Hue"\:0.0,"Gain"\:0.0,"Exposure"\:157.0,"Sharpness"\:3.0,"Gamma"\:100.0,"AutoExposure"\:true,"AutoFocus"\:true,"AutoWhiteBalance"\:true}
|
Cam1TopCrop=10.0
|
||||||
CameraConfigRight45={"Brightness"\:0.0,"Contrast"\:32.0,"Saturation"\:64.0,"Hue"\:0.0,"Gain"\:0.0,"Exposure"\:157.0,"Sharpness"\:3.0,"Gamma"\:100.0,"AutoExposure"\:true,"AutoFocus"\:true,"AutoWhiteBalance"\:true}
|
Cam2BottomCrop=20.0
|
||||||
CameraConfigRight90={"Brightness"\:0.0,"Contrast"\:32.0,"Saturation"\:64.0,"Hue"\:0.0,"Gain"\:0.0,"Exposure"\:157.0,"Sharpness"\:3.0,"Gamma"\:100.0,"AutoExposure"\:true,"AutoFocus"\:true,"AutoWhiteBalance"\:true}
|
Cam2LeftCrop=8.0
|
||||||
CameraLeft45=OBSBOT Meet 2 StreamCamera
|
Cam2RightCrop=8.0
|
||||||
|
Cam2TopCrop=10.0
|
||||||
|
Cam3BottomCrop=20.0
|
||||||
|
Cam3LeftCrop=8.0
|
||||||
|
Cam3RightCrop=8.0
|
||||||
|
Cam3TopCrop=10.0
|
||||||
|
Cam4BottomCrop=20.0
|
||||||
|
Cam4LeftCrop=8.0
|
||||||
|
Cam4RightCrop=8.0
|
||||||
|
Cam4TopCrop=10.0
|
||||||
|
Cam5BottomCrop=20.0
|
||||||
|
Cam5LeftCrop=8.0
|
||||||
|
Cam5RightCrop=8.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}
|
||||||
|
CameraConfigLeft90={"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}
|
||||||
|
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=OBSBOT Meet 2 StreamCamera
|
||||||
CameraRight45=OBSBOT Meet 2 StreamCamera
|
CameraRight45=
|
||||||
CameraRight90=OBSBOT Meet 2 StreamCamera
|
CameraRight90=
|
||||||
FTPHost=192.168.10.2
|
FTPHost=192.168.10.2
|
||||||
FTPPass=password
|
FTPPass=password
|
||||||
FTPPath=/
|
FTPPath=/
|
||||||
FTPPort=21
|
FTPPort=21
|
||||||
FTPUser=user
|
FTPUser=user
|
||||||
PhotoDirectory=C\:\\Users\\rdkar\\OneDrive\\Desktop\\photoresult
|
FlipCamera=false
|
||||||
|
MirrorCamera=false
|
||||||
|
PhotoDirectory=D\:\\Capture
|
||||||
|
Production=false
|
||||||
|
SharpnessThreshold=850.0
|
||||||
|
cascadeMaxSize=360
|
||||||
|
cascadeMinNeighbors=3
|
||||||
|
cascadeMinSize=250
|
||||||
|
cascadeScaleFactor=1.05
|
||||||
|
|||||||
BIN
countdown321.wav
Normal file
BIN
countdown321.wav
Normal file
Binary file not shown.
BIN
data_barcode_tidak_ditemukan.wav
Normal file
BIN
data_barcode_tidak_ditemukan.wav
Normal file
Binary file not shown.
BIN
database.db
BIN
database.db
Binary file not shown.
12213
haarcascade_eye.xml
Normal file
12213
haarcascade_eye.xml
Normal file
File diff suppressed because it is too large
Load Diff
29690
haarcascade_profileface.xml
Normal file
29690
haarcascade_profileface.xml
Normal file
File diff suppressed because it is too large
Load Diff
12213
haarcascades/haarcascade_eye.xml
Normal file
12213
haarcascades/haarcascade_eye.xml
Normal file
File diff suppressed because it is too large
Load Diff
33314
haarcascades/haarcascade_frontalface_default.xml
Normal file
33314
haarcascades/haarcascade_frontalface_default.xml
Normal file
File diff suppressed because it is too large
Load Diff
29690
haarcascades/haarcascade_profileface.xml
Normal file
29690
haarcascades/haarcascade_profileface.xml
Normal file
File diff suppressed because it is too large
Load Diff
1361
hs_err_pid42244.log
1361
hs_err_pid42244.log
File diff suppressed because one or more lines are too long
BIN
hubungistafkami.wav
Normal file
BIN
hubungistafkami.wav
Normal file
Binary file not shown.
BIN
kesalahan_server.wav
Normal file
BIN
kesalahan_server.wav
Normal file
Binary file not shown.
BIN
libs/win32-x86-64/SecureDongleJ.dll
Normal file
BIN
libs/win32-x86-64/SecureDongleJ.dll
Normal file
Binary file not shown.
BIN
libs/win32-x86/SecureDongleJ.dll
Normal file
BIN
libs/win32-x86/SecureDongleJ.dll
Normal file
Binary file not shown.
@@ -47,3 +47,448 @@
|
|||||||
2024-10-21 15:28:21 INFO: GetAll success, result count: 36
|
2024-10-21 15:28:21 INFO: GetAll success, result count: 36
|
||||||
2024-10-21 15:28:25 INFO: Not loading empty fxml file
|
2024-10-21 15:28:25 INFO: Not loading empty fxml file
|
||||||
2024-10-21 15:28:25 INFO: Application closed
|
2024-10-21 15:28:25 INFO: Application closed
|
||||||
|
2025-03-24 16:03:28 INFO: Config.ConfigFile.<init>() Current working directory in Java : C:\Users\rdkar\OneDrive\Documents\IntelliJ Project\ErhaCam
|
||||||
|
2025-03-24 16:03:28 INFO: Config.ConfigFile.Load() Load config file at C:\Users\rdkar\OneDrive\Documents\IntelliJ Project\ErhaCam\config.properties
|
||||||
|
2025-03-24 16:03:28 INFO: Config.ConfigFile.Load() Config Loaded
|
||||||
|
2025-03-24 16:03:29 INFO: Config.SomeCodes.LoadQRReader() QRReader loaded
|
||||||
|
2025-03-24 16:03:30 INFO: Config.SomeCodes.LoadFaceDetector() FaceDetector loaded
|
||||||
|
2025-03-24 16:03:30 INFO: id.co.gtc.erhacam.MainApplication.start() Application started
|
||||||
|
2025-03-24 16:03:31 INFO: Database.Sqlite.CreateDatabase() Database created successfully
|
||||||
|
2025-03-24 16:03:31 INFO: Database.Sqlite.GetAll() GetAll success, result count: 55
|
||||||
|
2025-03-24 16:04:08 INFO: id.co.gtc.erhacam.MainView.loadContent() Not loading empty fxml file
|
||||||
|
2025-03-24 16:04:08 INFO: id.co.gtc.erhacam.MainApplication.lambda$start$0() Application closed
|
||||||
|
2025-03-21 14:43:56 INFO: Config.ConfigFile.<init>() Current working directory in Java : C:\Users\Erha\IdeaProjects\ErhaCam
|
||||||
|
2025-03-21 14:43:56 INFO: Config.ConfigFile.Load() Load config file at C:\Users\Erha\IdeaProjects\ErhaCam\config.properties
|
||||||
|
2025-03-21 14:43:56 INFO: id.co.gtc.erhacam.Detectors.setFaceMaxSize() FaceMaxSize created with value : 500
|
||||||
|
2025-03-21 14:43:56 INFO: id.co.gtc.erhacam.Detectors.setFaceMaxSize() EyeMaxSize created with value : 83
|
||||||
|
2025-03-21 14:43:56 INFO: id.co.gtc.erhacam.Detectors.setFaceMinSize() FaceMinSize created with value : 250
|
||||||
|
2025-03-21 14:43:56 INFO: id.co.gtc.erhacam.Detectors.setFaceMinSize() EyeMinSize created with value : 41
|
||||||
|
2025-03-21 14:43:56 INFO: Config.ConfigFile.Load() Config Loaded
|
||||||
|
2025-03-21 14:43:56 INFO: Config.SomeCodes.MakeDirectory() Error creating directory: C:\Users\rdkar\OneDrive\Desktop\Erha Capture\FullQuality, Msg : C:\Users\rdkar
|
||||||
|
2025-03-21 14:43:56 INFO: Config.SomeCodes.MakeDirectory() Error creating directory: C:\Users\rdkar\OneDrive\Desktop\Erha Capture\FullQualityCrop, Msg : C:\Users\rdkar
|
||||||
|
2025-03-21 14:43:56 INFO: Config.SomeCodes.MakeDirectory() Error creating directory: C:\Users\rdkar\OneDrive\Desktop\Erha Capture\Compressed, Msg : C:\Users\rdkar
|
||||||
|
2025-03-21 14:43:56 INFO: Config.SomeCodes.MakeDirectory() Error creating directory: C:\Users\rdkar\OneDrive\Desktop\Erha Capture\CompressedCrop, Msg : C:\Users\rdkar
|
||||||
|
2025-03-21 14:43:56 INFO: Config.SomeCodes.MakeDirectory() Error creating directory: C:\Users\rdkar\OneDrive\Desktop\Erha Capture\thumbs, Msg : C:\Users\rdkar
|
||||||
|
2025-03-21 14:44:00 ERROR: id.co.gtc.erhacam.MainApplication.start() Secure Dongle not found
|
||||||
|
2025-03-21 14:44:52 INFO: Config.ConfigFile.<init>() Current working directory in Java : C:\Users\Erha\IdeaProjects\ErhaCam
|
||||||
|
2025-03-21 14:44:52 INFO: Config.ConfigFile.Load() Load config file at C:\Users\Erha\IdeaProjects\ErhaCam\config.properties
|
||||||
|
2025-03-21 14:44:52 INFO: id.co.gtc.erhacam.Detectors.setFaceMaxSize() FaceMaxSize created with value : 500
|
||||||
|
2025-03-21 14:44:52 INFO: id.co.gtc.erhacam.Detectors.setFaceMaxSize() EyeMaxSize created with value : 83
|
||||||
|
2025-03-21 14:44:52 INFO: id.co.gtc.erhacam.Detectors.setFaceMinSize() FaceMinSize created with value : 250
|
||||||
|
2025-03-21 14:44:52 INFO: id.co.gtc.erhacam.Detectors.setFaceMinSize() EyeMinSize created with value : 41
|
||||||
|
2025-03-21 14:44:52 INFO: Config.ConfigFile.Load() Config Loaded
|
||||||
|
2025-03-21 14:44:52 INFO: Config.SomeCodes.MakeDirectory() Error creating directory: C:\Users\rdkar\OneDrive\Desktop\Erha Capture\FullQuality, Msg : C:\Users\rdkar
|
||||||
|
2025-03-21 14:44:52 INFO: Config.SomeCodes.MakeDirectory() Error creating directory: C:\Users\rdkar\OneDrive\Desktop\Erha Capture\FullQualityCrop, Msg : C:\Users\rdkar
|
||||||
|
2025-03-21 14:44:52 INFO: Config.SomeCodes.MakeDirectory() Error creating directory: C:\Users\rdkar\OneDrive\Desktop\Erha Capture\Compressed, Msg : C:\Users\rdkar
|
||||||
|
2025-03-21 14:44:52 INFO: Config.SomeCodes.MakeDirectory() Error creating directory: C:\Users\rdkar\OneDrive\Desktop\Erha Capture\CompressedCrop, Msg : C:\Users\rdkar
|
||||||
|
2025-03-21 14:44:52 INFO: Config.SomeCodes.MakeDirectory() Error creating directory: C:\Users\rdkar\OneDrive\Desktop\Erha Capture\thumbs, Msg : C:\Users\rdkar
|
||||||
|
2025-03-21 14:44:52 INFO: id.co.gtc.erhacam.MainApplication.start() Secure Dongle UserID valid
|
||||||
|
2025-03-21 14:44:52 INFO: Config.SomeCodes.ExtractResource() Resource File extracted: /countdown321.wav
|
||||||
|
2025-03-21 14:44:53 INFO: id.co.gtc.erhacam.CaptureView.initialize() Audio Player : Inited
|
||||||
|
2025-03-21 14:44:53 INFO: Config.SomeCodes.LoadQRReader() QRReader loaded
|
||||||
|
2025-03-21 14:44:53 INFO: Config.SomeCodes.ExtractResource() Resource File extracted: /haarcascade_frontalface_alt.xml
|
||||||
|
2025-03-21 14:44:53 INFO: id.co.gtc.erhacam.Detectors.LoadFrontalFaceDetector() Face Detector file : C:\Users\Erha\IdeaProjects\ErhaCam\haarcascade_frontalface_alt.xml
|
||||||
|
2025-03-21 14:44:58 INFO: id.co.gtc.erhacam.Detectors.LoadFrontalFaceDetector() FaceDetector loaded
|
||||||
|
2025-03-21 14:44:58 INFO: id.co.gtc.erhacam.Detectors.LoadEyeDetector() Eye Detector file : C:\Users\Erha\IdeaProjects\ErhaCam\haarcascade_eye.xml
|
||||||
|
2025-03-21 14:44:58 INFO: id.co.gtc.erhacam.Detectors.LoadEyeDetector() EyeDetector loaded
|
||||||
|
2025-03-21 14:44:58 INFO: id.co.gtc.erhacam.Detectors.LoadProfileFaceDetector() Profile Face Detector file : C:\Users\Erha\IdeaProjects\ErhaCam\haarcascade_profileface.xml
|
||||||
|
2025-03-21 14:44:58 INFO: id.co.gtc.erhacam.Detectors.LoadProfileFaceDetector() ProfileFaceDetector loaded
|
||||||
|
2025-03-21 14:44:58 INFO: id.co.gtc.erhacam.MainApplication.start() Application started
|
||||||
|
2025-03-21 14:44:58 INFO: SecureDongle.SecureDongle.lambda$StartMonitor$0() Start Monitoring UserID=14022025
|
||||||
|
2025-03-21 14:45:06 INFO: id.co.gtc.erhacam.SettingView.initialize() Found 1 Cameras
|
||||||
|
2025-03-21 14:45:06 INFO: id.co.gtc.erhacam.SettingView.lambda$initialize$0() adding camera : OBSBOT Meet 2 StreamCamera to camera list
|
||||||
|
2025-03-21 14:45:13 INFO: Config.ConfigFile.SetCameraLeft90() Camera Left 90 Degree changed from ACER QHD User Facing to OBSBOT Meet 2 StreamCamera
|
||||||
|
2025-03-21 14:45:24 INFO: Config.ConfigFile.SetPhotoDirectory() Photo Directory changed from C:\Users\rdkar\OneDrive\Desktop\Erha Capture to C:\Users\Erha\Desktop\ErhaCapture
|
||||||
|
2025-03-21 14:45:24 INFO: Config.ConfigFile.Save() Config Saved
|
||||||
|
2025-03-21 14:45:29 INFO: id.co.gtc.erhacam.CaptureView.initialize() Audio Player : Inited
|
||||||
|
2025-03-21 14:45:29 INFO: id.co.gtc.erhacam.CaptureView.lambda$initialize$15() Left90 Index: 0
|
||||||
|
2025-03-21 14:45:29 INFO: id.co.gtc.erhacam.CaptureView.onLog() [01] : QR Reader loaded
|
||||||
|
2025-03-21 14:45:29 INFO: id.co.gtc.erhacam.CaptureView.onLog() [01] : Face detector loaded
|
||||||
|
2025-03-21 14:45:32 INFO: id.co.gtc.erhacam.CaptureView.onLog() [01] : Camera Started with resolution 2160x3840@0
|
||||||
|
2025-03-21 14:45:53 ERROR: id.co.gtc.erhacam.MainView.loadContent() loadContent Not loading empty fxml file
|
||||||
|
2025-03-21 14:45:53 INFO: id.co.gtc.erhacam.MainApplication.lambda$start$0() Application closed
|
||||||
|
2025-03-21 14:50:19 INFO: Config.ConfigFile.<init>() Current working directory in Java : C:\Users\Erha\IdeaProjects\ErhaCam
|
||||||
|
2025-03-21 14:50:19 INFO: Config.ConfigFile.Load() Load config file at C:\Users\Erha\IdeaProjects\ErhaCam\config.properties
|
||||||
|
2025-03-21 14:50:19 INFO: id.co.gtc.erhacam.Detectors.setFaceMaxSize() FaceMaxSize created with value : 500
|
||||||
|
2025-03-21 14:50:19 INFO: id.co.gtc.erhacam.Detectors.setFaceMaxSize() EyeMaxSize created with value : 83
|
||||||
|
2025-03-21 14:50:19 INFO: id.co.gtc.erhacam.Detectors.setFaceMinSize() FaceMinSize created with value : 250
|
||||||
|
2025-03-21 14:50:19 INFO: id.co.gtc.erhacam.Detectors.setFaceMinSize() EyeMinSize created with value : 41
|
||||||
|
2025-03-21 14:50:19 INFO: Config.ConfigFile.Load() Config Loaded
|
||||||
|
2025-03-21 14:50:19 INFO: Config.SomeCodes.MakeDirectory() Directory created: C:\Users\Erha\Desktop\ErhaCapture\FullQuality
|
||||||
|
2025-03-21 14:50:19 INFO: Config.SomeCodes.MakeDirectory() Directory created: C:\Users\Erha\Desktop\ErhaCapture\FullQualityCrop
|
||||||
|
2025-03-21 14:50:19 INFO: Config.SomeCodes.MakeDirectory() Directory created: C:\Users\Erha\Desktop\ErhaCapture\Compressed
|
||||||
|
2025-03-21 14:50:19 INFO: Config.SomeCodes.MakeDirectory() Directory created: C:\Users\Erha\Desktop\ErhaCapture\CompressedCrop
|
||||||
|
2025-03-21 14:50:19 INFO: Config.SomeCodes.MakeDirectory() Directory created: C:\Users\Erha\Desktop\ErhaCapture\thumbs
|
||||||
|
2025-03-21 14:50:19 INFO: id.co.gtc.erhacam.MainApplication.start() Secure Dongle UserID valid
|
||||||
|
2025-03-21 14:50:19 INFO: id.co.gtc.erhacam.CaptureView.initialize() Audio Player : Inited
|
||||||
|
2025-03-21 14:50:19 INFO: Config.SomeCodes.LoadQRReader() QRReader loaded
|
||||||
|
2025-03-21 14:50:19 INFO: id.co.gtc.erhacam.Detectors.LoadFrontalFaceDetector() Face Detector file : C:\Users\Erha\IdeaProjects\ErhaCam\haarcascade_frontalface_alt.xml
|
||||||
|
2025-03-21 14:50:19 INFO: id.co.gtc.erhacam.Detectors.LoadFrontalFaceDetector() FaceDetector loaded
|
||||||
|
2025-03-21 14:50:19 INFO: id.co.gtc.erhacam.Detectors.LoadEyeDetector() Eye Detector file : C:\Users\Erha\IdeaProjects\ErhaCam\haarcascade_eye.xml
|
||||||
|
2025-03-21 14:50:19 INFO: id.co.gtc.erhacam.Detectors.LoadEyeDetector() EyeDetector loaded
|
||||||
|
2025-03-21 14:50:19 INFO: id.co.gtc.erhacam.Detectors.LoadProfileFaceDetector() Profile Face Detector file : C:\Users\Erha\IdeaProjects\ErhaCam\haarcascade_profileface.xml
|
||||||
|
2025-03-21 14:50:19 INFO: id.co.gtc.erhacam.Detectors.LoadProfileFaceDetector() ProfileFaceDetector loaded
|
||||||
|
2025-03-21 14:50:20 INFO: id.co.gtc.erhacam.MainApplication.start() Application started
|
||||||
|
2025-03-21 14:50:20 INFO: SecureDongle.SecureDongle.lambda$StartMonitor$0() Start Monitoring UserID=14022025
|
||||||
|
2025-03-21 14:50:20 INFO: id.co.gtc.erhacam.CaptureView.lambda$initialize$15() Left90 Index: 0
|
||||||
|
2025-03-21 14:50:20 INFO: id.co.gtc.erhacam.CaptureView.onLog() [01] : QR Reader loaded
|
||||||
|
2025-03-21 14:50:20 INFO: id.co.gtc.erhacam.CaptureView.onLog() [01] : Face detector loaded
|
||||||
|
2025-03-21 14:50:25 INFO: id.co.gtc.erhacam.CaptureView.onLog() [01] : Camera Started with resolution 2160x3840@0
|
||||||
|
2025-03-21 15:18:02 INFO: Config.ConfigFile.<init>() Current working directory in Java : C:\Users\Erha\IdeaProjects\ErhaCam
|
||||||
|
2025-03-21 15:18:02 INFO: Config.ConfigFile.Load() Load config file at C:\Users\Erha\IdeaProjects\ErhaCam\config.properties
|
||||||
|
2025-03-21 15:18:02 INFO: id.co.gtc.erhacam.Detectors.setFaceMaxSize() FaceMaxSize created with value : 500
|
||||||
|
2025-03-21 15:18:02 INFO: id.co.gtc.erhacam.Detectors.setFaceMaxSize() EyeMaxSize created with value : 83
|
||||||
|
2025-03-21 15:18:02 INFO: id.co.gtc.erhacam.Detectors.setFaceMinSize() FaceMinSize created with value : 250
|
||||||
|
2025-03-21 15:18:02 INFO: id.co.gtc.erhacam.Detectors.setFaceMinSize() EyeMinSize created with value : 41
|
||||||
|
2025-03-21 15:18:02 INFO: Config.ConfigFile.Load() Config Loaded
|
||||||
|
2025-03-21 15:18:02 INFO: Config.SomeCodes.MakeDirectory() Directory exists: C:\Users\Erha\Desktop\ErhaCapture\FullQuality
|
||||||
|
2025-03-21 15:18:02 INFO: Config.SomeCodes.MakeDirectory() Directory exists: C:\Users\Erha\Desktop\ErhaCapture\FullQualityCrop
|
||||||
|
2025-03-21 15:18:02 INFO: Config.SomeCodes.MakeDirectory() Directory exists: C:\Users\Erha\Desktop\ErhaCapture\Compressed
|
||||||
|
2025-03-21 15:18:02 INFO: Config.SomeCodes.MakeDirectory() Directory exists: C:\Users\Erha\Desktop\ErhaCapture\CompressedCrop
|
||||||
|
2025-03-21 15:18:02 INFO: Config.SomeCodes.MakeDirectory() Directory exists: C:\Users\Erha\Desktop\ErhaCapture\thumbs
|
||||||
|
2025-03-21 15:18:02 INFO: id.co.gtc.erhacam.MainApplication.start() Secure Dongle UserID valid
|
||||||
|
2025-03-21 15:18:03 INFO: Config.SomeCodes.ExtractResource() Resource File extracted: /kesalahan_server.wav
|
||||||
|
2025-03-21 15:18:03 INFO: Config.SomeCodes.ExtractResource() Resource File extracted: /data_barcode_tidak_ditemukan.wav
|
||||||
|
2025-03-21 15:18:03 INFO: id.co.gtc.erhacam.CaptureView.initialize() Audio Player : Inited
|
||||||
|
2025-03-21 15:18:03 INFO: Config.SomeCodes.LoadQRReader() QRReader loaded
|
||||||
|
2025-03-21 15:18:03 INFO: id.co.gtc.erhacam.Detectors.LoadFrontalFaceDetector() Face Detector file : C:\Users\Erha\IdeaProjects\ErhaCam\haarcascade_frontalface_alt.xml
|
||||||
|
2025-03-21 15:18:03 INFO: id.co.gtc.erhacam.Detectors.LoadFrontalFaceDetector() FaceDetector loaded
|
||||||
|
2025-03-21 15:18:03 INFO: id.co.gtc.erhacam.Detectors.LoadEyeDetector() Eye Detector file : C:\Users\Erha\IdeaProjects\ErhaCam\haarcascade_eye.xml
|
||||||
|
2025-03-21 15:18:03 INFO: id.co.gtc.erhacam.Detectors.LoadEyeDetector() EyeDetector loaded
|
||||||
|
2025-03-21 15:18:03 INFO: id.co.gtc.erhacam.Detectors.LoadProfileFaceDetector() Profile Face Detector file : C:\Users\Erha\IdeaProjects\ErhaCam\haarcascade_profileface.xml
|
||||||
|
2025-03-21 15:18:03 INFO: id.co.gtc.erhacam.Detectors.LoadProfileFaceDetector() ProfileFaceDetector loaded
|
||||||
|
2025-03-21 15:18:03 INFO: id.co.gtc.erhacam.MainApplication.start() Application started
|
||||||
|
2025-03-21 15:18:03 INFO: SecureDongle.SecureDongle.lambda$StartMonitor$0() Start Monitoring UserID=14022025
|
||||||
|
2025-03-21 15:18:03 INFO: id.co.gtc.erhacam.CaptureView.lambda$initialize$15() Left90 Index: 0
|
||||||
|
2025-03-21 15:18:03 INFO: id.co.gtc.erhacam.CaptureView.onLog() [01] : QR Reader loaded
|
||||||
|
2025-03-21 15:18:03 INFO: id.co.gtc.erhacam.CaptureView.onLog() [01] : Face detector loaded
|
||||||
|
2025-03-21 15:18:09 INFO: id.co.gtc.erhacam.CaptureView.onLog() [01] : Camera Started with resolution 2160x3840@0
|
||||||
|
2025-03-21 15:18:11 ERROR: id.co.gtc.erhacam.CaptureView.call() Record associated with barcode
|
||||||
|
2025-03-21 15:18:23 ERROR: id.co.gtc.erhacam.MainView.loadContent() loadContent Not loading empty fxml file
|
||||||
|
2025-03-21 15:18:23 INFO: id.co.gtc.erhacam.MainApplication.lambda$start$0() Application closed
|
||||||
|
2025-03-21 15:19:32 INFO: Config.ConfigFile.<init>() Current working directory in Java : C:\Users\Erha\IdeaProjects\ErhaCam
|
||||||
|
2025-03-21 15:19:32 INFO: Config.ConfigFile.Load() Load config file at C:\Users\Erha\IdeaProjects\ErhaCam\config.properties
|
||||||
|
2025-03-21 15:19:32 INFO: id.co.gtc.erhacam.Detectors.setFaceMaxSize() FaceMaxSize created with value : 500
|
||||||
|
2025-03-21 15:19:32 INFO: id.co.gtc.erhacam.Detectors.setFaceMaxSize() EyeMaxSize created with value : 83
|
||||||
|
2025-03-21 15:19:32 INFO: id.co.gtc.erhacam.Detectors.setFaceMinSize() FaceMinSize created with value : 250
|
||||||
|
2025-03-21 15:19:32 INFO: id.co.gtc.erhacam.Detectors.setFaceMinSize() EyeMinSize created with value : 41
|
||||||
|
2025-03-21 15:19:32 INFO: Config.ConfigFile.Load() Config Loaded
|
||||||
|
2025-03-21 15:19:32 INFO: Config.SomeCodes.MakeDirectory() Directory exists: C:\Users\Erha\Desktop\ErhaCapture\FullQuality
|
||||||
|
2025-03-21 15:19:32 INFO: Config.SomeCodes.MakeDirectory() Directory exists: C:\Users\Erha\Desktop\ErhaCapture\FullQualityCrop
|
||||||
|
2025-03-21 15:19:32 INFO: Config.SomeCodes.MakeDirectory() Directory exists: C:\Users\Erha\Desktop\ErhaCapture\Compressed
|
||||||
|
2025-03-21 15:19:32 INFO: Config.SomeCodes.MakeDirectory() Directory exists: C:\Users\Erha\Desktop\ErhaCapture\CompressedCrop
|
||||||
|
2025-03-21 15:19:32 INFO: Config.SomeCodes.MakeDirectory() Directory exists: C:\Users\Erha\Desktop\ErhaCapture\thumbs
|
||||||
|
2025-03-21 15:19:32 INFO: id.co.gtc.erhacam.MainApplication.start() Secure Dongle UserID valid
|
||||||
|
2025-03-21 15:19:32 INFO: id.co.gtc.erhacam.CaptureView.initialize() Audio Player : Inited
|
||||||
|
2025-03-21 15:19:33 INFO: Config.SomeCodes.LoadQRReader() QRReader loaded
|
||||||
|
2025-03-21 15:19:33 INFO: id.co.gtc.erhacam.Detectors.LoadFrontalFaceDetector() Face Detector file : C:\Users\Erha\IdeaProjects\ErhaCam\haarcascade_frontalface_alt.xml
|
||||||
|
2025-03-21 15:19:33 INFO: id.co.gtc.erhacam.Detectors.LoadFrontalFaceDetector() FaceDetector loaded
|
||||||
|
2025-03-21 15:19:33 INFO: id.co.gtc.erhacam.Detectors.LoadEyeDetector() Eye Detector file : C:\Users\Erha\IdeaProjects\ErhaCam\haarcascade_eye.xml
|
||||||
|
2025-03-21 15:19:33 INFO: id.co.gtc.erhacam.Detectors.LoadEyeDetector() EyeDetector loaded
|
||||||
|
2025-03-21 15:19:33 INFO: id.co.gtc.erhacam.Detectors.LoadProfileFaceDetector() Profile Face Detector file : C:\Users\Erha\IdeaProjects\ErhaCam\haarcascade_profileface.xml
|
||||||
|
2025-03-21 15:19:33 INFO: id.co.gtc.erhacam.Detectors.LoadProfileFaceDetector() ProfileFaceDetector loaded
|
||||||
|
2025-03-21 15:19:33 INFO: id.co.gtc.erhacam.MainApplication.start() Application started
|
||||||
|
2025-03-21 15:19:33 INFO: SecureDongle.SecureDongle.lambda$StartMonitor$0() Start Monitoring UserID=14022025
|
||||||
|
2025-03-21 15:19:33 INFO: id.co.gtc.erhacam.CaptureView.lambda$initialize$15() Left90 Index: 0
|
||||||
|
2025-03-21 15:19:33 INFO: id.co.gtc.erhacam.CaptureView.onLog() [01] : QR Reader loaded
|
||||||
|
2025-03-21 15:19:33 INFO: id.co.gtc.erhacam.CaptureView.onLog() [01] : Face detector loaded
|
||||||
|
2025-03-21 15:19:38 INFO: id.co.gtc.erhacam.CaptureView.onLog() [01] : Camera Started with resolution 2160x3840@0
|
||||||
|
2025-03-21 15:19:43 ERROR: id.co.gtc.erhacam.CaptureView.call() Record associated with barcode
|
||||||
|
2025-03-21 15:19:50 ERROR: id.co.gtc.erhacam.MainView.loadContent() loadContent Not loading empty fxml file
|
||||||
|
2025-03-21 15:19:50 INFO: id.co.gtc.erhacam.MainApplication.lambda$start$0() Application closed
|
||||||
|
2025-03-21 15:23:01 INFO: Config.ConfigFile.<init>() Current working directory in Java : C:\Users\Erha\IdeaProjects\ErhaCam
|
||||||
|
2025-03-21 15:23:01 INFO: Config.ConfigFile.Load() Load config file at C:\Users\Erha\IdeaProjects\ErhaCam\config.properties
|
||||||
|
2025-03-21 15:23:01 INFO: id.co.gtc.erhacam.Detectors.setFaceMaxSize() FaceMaxSize created with value : 500
|
||||||
|
2025-03-21 15:23:01 INFO: id.co.gtc.erhacam.Detectors.setFaceMaxSize() EyeMaxSize created with value : 83
|
||||||
|
2025-03-21 15:23:01 INFO: id.co.gtc.erhacam.Detectors.setFaceMinSize() FaceMinSize created with value : 250
|
||||||
|
2025-03-21 15:23:01 INFO: id.co.gtc.erhacam.Detectors.setFaceMinSize() EyeMinSize created with value : 41
|
||||||
|
2025-03-21 15:23:01 INFO: Config.ConfigFile.Load() Config Loaded
|
||||||
|
2025-03-21 15:23:01 INFO: Config.SomeCodes.MakeDirectory() Directory exists: C:\Users\Erha\Desktop\ErhaCapture\FullQuality
|
||||||
|
2025-03-21 15:23:01 INFO: Config.SomeCodes.MakeDirectory() Directory exists: C:\Users\Erha\Desktop\ErhaCapture\FullQualityCrop
|
||||||
|
2025-03-21 15:23:01 INFO: Config.SomeCodes.MakeDirectory() Directory exists: C:\Users\Erha\Desktop\ErhaCapture\Compressed
|
||||||
|
2025-03-21 15:23:01 INFO: Config.SomeCodes.MakeDirectory() Directory exists: C:\Users\Erha\Desktop\ErhaCapture\CompressedCrop
|
||||||
|
2025-03-21 15:23:01 INFO: Config.SomeCodes.MakeDirectory() Directory exists: C:\Users\Erha\Desktop\ErhaCapture\thumbs
|
||||||
|
2025-03-21 15:23:01 INFO: id.co.gtc.erhacam.MainApplication.start() Secure Dongle UserID valid
|
||||||
|
2025-03-21 15:23:01 INFO: id.co.gtc.erhacam.CaptureView.initialize() Audio Player : Inited
|
||||||
|
2025-03-21 15:23:01 INFO: Config.SomeCodes.LoadQRReader() QRReader loaded
|
||||||
|
2025-03-21 15:23:01 INFO: id.co.gtc.erhacam.Detectors.LoadFrontalFaceDetector() Face Detector file : C:\Users\Erha\IdeaProjects\ErhaCam\haarcascade_frontalface_alt.xml
|
||||||
|
2025-03-21 15:23:01 INFO: id.co.gtc.erhacam.Detectors.LoadFrontalFaceDetector() FaceDetector loaded
|
||||||
|
2025-03-21 15:23:01 INFO: id.co.gtc.erhacam.Detectors.LoadEyeDetector() Eye Detector file : C:\Users\Erha\IdeaProjects\ErhaCam\haarcascade_eye.xml
|
||||||
|
2025-03-21 15:23:01 INFO: id.co.gtc.erhacam.Detectors.LoadEyeDetector() EyeDetector loaded
|
||||||
|
2025-03-21 15:23:01 INFO: id.co.gtc.erhacam.Detectors.LoadProfileFaceDetector() Profile Face Detector file : C:\Users\Erha\IdeaProjects\ErhaCam\haarcascade_profileface.xml
|
||||||
|
2025-03-21 15:23:01 INFO: id.co.gtc.erhacam.Detectors.LoadProfileFaceDetector() ProfileFaceDetector loaded
|
||||||
|
2025-03-21 15:23:02 INFO: id.co.gtc.erhacam.MainApplication.start() Application started
|
||||||
|
2025-03-21 15:23:02 INFO: SecureDongle.SecureDongle.lambda$StartMonitor$0() Start Monitoring UserID=14022025
|
||||||
|
2025-03-21 15:23:02 INFO: id.co.gtc.erhacam.CaptureView.lambda$initialize$15() Left90 Index: 0
|
||||||
|
2025-03-21 15:23:02 INFO: id.co.gtc.erhacam.CaptureView.onLog() [01] : QR Reader loaded
|
||||||
|
2025-03-21 15:23:02 INFO: id.co.gtc.erhacam.CaptureView.onLog() [01] : Face detector loaded
|
||||||
|
2025-03-21 15:23:07 INFO: id.co.gtc.erhacam.CaptureView.onLog() [01] : Camera Started with resolution 2160x3840@0
|
||||||
|
2025-03-21 15:23:08 ERROR: id.co.gtc.erhacam.CaptureView.call() Record associated with barcode
|
||||||
|
2025-03-21 15:23:08 ERROR: id.co.gtc.erhacam.CaptureView.call() Record associated with barcode
|
||||||
|
2025-03-21 15:23:08 ERROR: id.co.gtc.erhacam.CaptureView.call() Record associated with barcode
|
||||||
|
2025-03-21 15:23:08 ERROR: id.co.gtc.erhacam.CaptureView.call() Record associated with barcode
|
||||||
|
2025-03-21 15:24:41 INFO: Config.ConfigFile.<init>() Current working directory in Java : C:\Users\Erha\IdeaProjects\ErhaCam
|
||||||
|
2025-03-21 15:24:41 INFO: Config.ConfigFile.Load() Load config file at C:\Users\Erha\IdeaProjects\ErhaCam\config.properties
|
||||||
|
2025-03-21 15:24:41 INFO: id.co.gtc.erhacam.Detectors.setFaceMaxSize() FaceMaxSize created with value : 500
|
||||||
|
2025-03-21 15:24:41 INFO: id.co.gtc.erhacam.Detectors.setFaceMaxSize() EyeMaxSize created with value : 83
|
||||||
|
2025-03-21 15:24:41 INFO: id.co.gtc.erhacam.Detectors.setFaceMinSize() FaceMinSize created with value : 250
|
||||||
|
2025-03-21 15:24:41 INFO: id.co.gtc.erhacam.Detectors.setFaceMinSize() EyeMinSize created with value : 41
|
||||||
|
2025-03-21 15:24:41 INFO: Config.ConfigFile.Load() Config Loaded
|
||||||
|
2025-03-21 15:24:41 INFO: Config.SomeCodes.MakeDirectory() Directory exists: C:\Users\Erha\Desktop\ErhaCapture\FullQuality
|
||||||
|
2025-03-21 15:24:41 INFO: Config.SomeCodes.MakeDirectory() Directory exists: C:\Users\Erha\Desktop\ErhaCapture\FullQualityCrop
|
||||||
|
2025-03-21 15:24:41 INFO: Config.SomeCodes.MakeDirectory() Directory exists: C:\Users\Erha\Desktop\ErhaCapture\Compressed
|
||||||
|
2025-03-21 15:24:41 INFO: Config.SomeCodes.MakeDirectory() Directory exists: C:\Users\Erha\Desktop\ErhaCapture\CompressedCrop
|
||||||
|
2025-03-21 15:24:41 INFO: Config.SomeCodes.MakeDirectory() Directory exists: C:\Users\Erha\Desktop\ErhaCapture\thumbs
|
||||||
|
2025-03-21 15:24:41 INFO: id.co.gtc.erhacam.MainApplication.start() Secure Dongle UserID valid
|
||||||
|
2025-03-21 15:24:42 INFO: id.co.gtc.erhacam.CaptureView.initialize() Audio Player : Inited
|
||||||
|
2025-03-21 15:24:42 INFO: Config.SomeCodes.LoadQRReader() QRReader loaded
|
||||||
|
2025-03-21 15:24:42 INFO: id.co.gtc.erhacam.Detectors.LoadFrontalFaceDetector() Face Detector file : C:\Users\Erha\IdeaProjects\ErhaCam\haarcascade_frontalface_alt.xml
|
||||||
|
2025-03-21 15:24:42 INFO: id.co.gtc.erhacam.Detectors.LoadFrontalFaceDetector() FaceDetector loaded
|
||||||
|
2025-03-21 15:24:42 INFO: id.co.gtc.erhacam.Detectors.LoadEyeDetector() Eye Detector file : C:\Users\Erha\IdeaProjects\ErhaCam\haarcascade_eye.xml
|
||||||
|
2025-03-21 15:24:42 INFO: id.co.gtc.erhacam.Detectors.LoadEyeDetector() EyeDetector loaded
|
||||||
|
2025-03-21 15:24:42 INFO: id.co.gtc.erhacam.Detectors.LoadProfileFaceDetector() Profile Face Detector file : C:\Users\Erha\IdeaProjects\ErhaCam\haarcascade_profileface.xml
|
||||||
|
2025-03-21 15:24:42 INFO: id.co.gtc.erhacam.Detectors.LoadProfileFaceDetector() ProfileFaceDetector loaded
|
||||||
|
2025-03-21 15:24:42 INFO: id.co.gtc.erhacam.MainApplication.start() Application started
|
||||||
|
2025-03-21 15:24:42 INFO: SecureDongle.SecureDongle.lambda$StartMonitor$0() Start Monitoring UserID=14022025
|
||||||
|
2025-03-21 15:24:42 INFO: id.co.gtc.erhacam.CaptureView.lambda$initialize$15() Left90 Index: 0
|
||||||
|
2025-03-21 15:24:42 INFO: id.co.gtc.erhacam.CaptureView.onLog() [01] : QR Reader loaded
|
||||||
|
2025-03-21 15:24:42 INFO: id.co.gtc.erhacam.CaptureView.onLog() [01] : Face detector loaded
|
||||||
|
2025-03-21 15:24:48 INFO: id.co.gtc.erhacam.CaptureView.onLog() [01] : Camera Started with resolution 2160x3840@0
|
||||||
|
2025-03-21 15:24:49 ERROR: id.co.gtc.erhacam.CaptureView.call() Record associated with barcode
|
||||||
|
2025-03-21 15:28:22 INFO: Config.ConfigFile.<init>() Current working directory in Java : C:\Users\Erha\IdeaProjects\ErhaCam
|
||||||
|
2025-03-21 15:28:22 INFO: Config.ConfigFile.Load() Load config file at C:\Users\Erha\IdeaProjects\ErhaCam\config.properties
|
||||||
|
2025-03-21 15:28:22 INFO: id.co.gtc.erhacam.Detectors.setFaceMaxSize() FaceMaxSize created with value : 500
|
||||||
|
2025-03-21 15:28:22 INFO: id.co.gtc.erhacam.Detectors.setFaceMaxSize() EyeMaxSize created with value : 83
|
||||||
|
2025-03-21 15:28:22 INFO: id.co.gtc.erhacam.Detectors.setFaceMinSize() FaceMinSize created with value : 250
|
||||||
|
2025-03-21 15:28:22 INFO: id.co.gtc.erhacam.Detectors.setFaceMinSize() EyeMinSize created with value : 41
|
||||||
|
2025-03-21 15:28:22 INFO: Config.ConfigFile.Load() Config Loaded
|
||||||
|
2025-03-21 15:28:22 INFO: Config.SomeCodes.MakeDirectory() Directory exists: C:\Users\Erha\Desktop\ErhaCapture\FullQuality
|
||||||
|
2025-03-21 15:28:22 INFO: Config.SomeCodes.MakeDirectory() Directory exists: C:\Users\Erha\Desktop\ErhaCapture\FullQualityCrop
|
||||||
|
2025-03-21 15:28:22 INFO: Config.SomeCodes.MakeDirectory() Directory exists: C:\Users\Erha\Desktop\ErhaCapture\Compressed
|
||||||
|
2025-03-21 15:28:22 INFO: Config.SomeCodes.MakeDirectory() Directory exists: C:\Users\Erha\Desktop\ErhaCapture\CompressedCrop
|
||||||
|
2025-03-21 15:28:22 INFO: Config.SomeCodes.MakeDirectory() Directory exists: C:\Users\Erha\Desktop\ErhaCapture\thumbs
|
||||||
|
2025-03-21 15:28:22 INFO: id.co.gtc.erhacam.MainApplication.start() Secure Dongle UserID valid
|
||||||
|
2025-03-21 15:28:22 INFO: id.co.gtc.erhacam.CaptureView.initialize() Audio Player : Inited
|
||||||
|
2025-03-21 15:28:22 INFO: Config.SomeCodes.LoadQRReader() QRReader loaded
|
||||||
|
2025-03-21 15:28:22 INFO: id.co.gtc.erhacam.Detectors.LoadFrontalFaceDetector() Face Detector file : C:\Users\Erha\IdeaProjects\ErhaCam\haarcascade_frontalface_alt.xml
|
||||||
|
2025-03-21 15:28:22 INFO: id.co.gtc.erhacam.Detectors.LoadFrontalFaceDetector() FaceDetector loaded
|
||||||
|
2025-03-21 15:28:22 INFO: id.co.gtc.erhacam.Detectors.LoadEyeDetector() Eye Detector file : C:\Users\Erha\IdeaProjects\ErhaCam\haarcascade_eye.xml
|
||||||
|
2025-03-21 15:28:22 INFO: id.co.gtc.erhacam.Detectors.LoadEyeDetector() EyeDetector loaded
|
||||||
|
2025-03-21 15:28:22 INFO: id.co.gtc.erhacam.Detectors.LoadProfileFaceDetector() Profile Face Detector file : C:\Users\Erha\IdeaProjects\ErhaCam\haarcascade_profileface.xml
|
||||||
|
2025-03-21 15:28:22 INFO: id.co.gtc.erhacam.Detectors.LoadProfileFaceDetector() ProfileFaceDetector loaded
|
||||||
|
2025-03-21 15:28:23 INFO: id.co.gtc.erhacam.MainApplication.start() Application started
|
||||||
|
2025-03-21 15:28:23 INFO: SecureDongle.SecureDongle.lambda$StartMonitor$0() Start Monitoring UserID=14022025
|
||||||
|
2025-03-21 15:28:23 INFO: id.co.gtc.erhacam.CaptureView.lambda$initialize$15() Left90 Index: 0
|
||||||
|
2025-03-21 15:28:23 INFO: id.co.gtc.erhacam.CaptureView.onLog() [01] : QR Reader loaded
|
||||||
|
2025-03-21 15:28:23 INFO: id.co.gtc.erhacam.CaptureView.onLog() [01] : Face detector loaded
|
||||||
|
2025-03-21 15:28:28 INFO: id.co.gtc.erhacam.CaptureView.onLog() [01] : Camera Started with resolution 2160x3840@0
|
||||||
|
2025-03-21 15:28:33 ERROR: id.co.gtc.erhacam.CaptureView.call() Record associated with barcode
|
||||||
|
2025-03-21 15:28:41 ERROR: id.co.gtc.erhacam.MainView.loadContent() loadContent Not loading empty fxml file
|
||||||
|
2025-03-21 15:28:41 INFO: id.co.gtc.erhacam.MainApplication.lambda$start$0() Application closed
|
||||||
|
2025-03-21 15:39:18 INFO: Config.ConfigFile.<init>() Current working directory in Java : C:\Users\Erha\IdeaProjects\ErhaCam
|
||||||
|
2025-03-21 15:39:18 INFO: Config.ConfigFile.Load() Load config file at C:\Users\Erha\IdeaProjects\ErhaCam\config.properties
|
||||||
|
2025-03-21 15:39:18 INFO: id.co.gtc.erhacam.Detectors.setFaceMaxSize() FaceMaxSize created with value : 500
|
||||||
|
2025-03-21 15:39:18 INFO: id.co.gtc.erhacam.Detectors.setFaceMaxSize() EyeMaxSize created with value : 83
|
||||||
|
2025-03-21 15:39:18 INFO: id.co.gtc.erhacam.Detectors.setFaceMinSize() FaceMinSize created with value : 250
|
||||||
|
2025-03-21 15:39:18 INFO: id.co.gtc.erhacam.Detectors.setFaceMinSize() EyeMinSize created with value : 41
|
||||||
|
2025-03-21 15:39:18 INFO: Config.ConfigFile.Load() Config Loaded
|
||||||
|
2025-03-21 15:39:18 INFO: Config.SomeCodes.MakeDirectory() Directory exists: C:\Users\Erha\Desktop\ErhaCapture\FullQuality
|
||||||
|
2025-03-21 15:39:18 INFO: Config.SomeCodes.MakeDirectory() Directory exists: C:\Users\Erha\Desktop\ErhaCapture\FullQualityCrop
|
||||||
|
2025-03-21 15:39:18 INFO: Config.SomeCodes.MakeDirectory() Directory exists: C:\Users\Erha\Desktop\ErhaCapture\Compressed
|
||||||
|
2025-03-21 15:39:18 INFO: Config.SomeCodes.MakeDirectory() Directory exists: C:\Users\Erha\Desktop\ErhaCapture\CompressedCrop
|
||||||
|
2025-03-21 15:39:18 INFO: Config.SomeCodes.MakeDirectory() Directory exists: C:\Users\Erha\Desktop\ErhaCapture\thumbs
|
||||||
|
2025-03-21 15:39:18 INFO: id.co.gtc.erhacam.MainApplication.start() Secure Dongle UserID valid
|
||||||
|
2025-03-21 15:39:18 INFO: id.co.gtc.erhacam.CaptureView.initialize() Audio Player : Inited
|
||||||
|
2025-03-21 15:39:18 INFO: Config.SomeCodes.LoadQRReader() QRReader loaded
|
||||||
|
2025-03-21 15:39:18 INFO: id.co.gtc.erhacam.Detectors.LoadFrontalFaceDetector() Face Detector file : C:\Users\Erha\IdeaProjects\ErhaCam\haarcascade_frontalface_alt.xml
|
||||||
|
2025-03-21 15:39:18 INFO: id.co.gtc.erhacam.Detectors.LoadFrontalFaceDetector() FaceDetector loaded
|
||||||
|
2025-03-21 15:39:18 INFO: id.co.gtc.erhacam.Detectors.LoadEyeDetector() Eye Detector file : C:\Users\Erha\IdeaProjects\ErhaCam\haarcascade_eye.xml
|
||||||
|
2025-03-21 15:39:18 INFO: id.co.gtc.erhacam.Detectors.LoadEyeDetector() EyeDetector loaded
|
||||||
|
2025-03-21 15:39:18 INFO: id.co.gtc.erhacam.Detectors.LoadProfileFaceDetector() Profile Face Detector file : C:\Users\Erha\IdeaProjects\ErhaCam\haarcascade_profileface.xml
|
||||||
|
2025-03-21 15:39:18 INFO: id.co.gtc.erhacam.Detectors.LoadProfileFaceDetector() ProfileFaceDetector loaded
|
||||||
|
2025-03-21 15:39:19 INFO: id.co.gtc.erhacam.MainApplication.start() Application started
|
||||||
|
2025-03-21 15:39:19 INFO: SecureDongle.SecureDongle.lambda$StartMonitor$0() Start Monitoring UserID=14022025
|
||||||
|
2025-03-21 15:39:19 INFO: id.co.gtc.erhacam.CaptureView.lambda$initialize$15() Left90 Index: 0
|
||||||
|
2025-03-21 15:39:19 INFO: id.co.gtc.erhacam.CaptureView.onLog() [01] : QR Reader loaded
|
||||||
|
2025-03-21 15:39:19 INFO: id.co.gtc.erhacam.CaptureView.onLog() [01] : Face detector loaded
|
||||||
|
2025-03-21 15:39:24 INFO: id.co.gtc.erhacam.CaptureView.onLog() [01] : Camera Started with resolution 2160x3840@0
|
||||||
|
2025-03-21 15:39:26 ERROR: id.co.gtc.erhacam.CaptureView.call() Record associated with barcode
|
||||||
|
2025-03-21 15:39:36 ERROR: id.co.gtc.erhacam.CaptureView.call() Record associated with barcode
|
||||||
|
2025-03-21 15:39:36 ERROR: id.co.gtc.erhacam.CaptureView.call() Record associated with barcode
|
||||||
|
2025-03-21 15:39:42 ERROR: id.co.gtc.erhacam.MainView.loadContent() loadContent Not loading empty fxml file
|
||||||
|
2025-03-21 15:39:42 INFO: id.co.gtc.erhacam.MainApplication.lambda$start$0() Application closed
|
||||||
|
2025-03-21 15:43:57 INFO: Config.ConfigFile.<init>() Current working directory in Java : C:\Users\Erha\IdeaProjects\ErhaCam
|
||||||
|
2025-03-21 15:43:57 INFO: Config.ConfigFile.Load() Load config file at C:\Users\Erha\IdeaProjects\ErhaCam\config.properties
|
||||||
|
2025-03-21 15:43:57 INFO: id.co.gtc.erhacam.Detectors.setFaceMaxSize() FaceMaxSize created with value : 500
|
||||||
|
2025-03-21 15:43:57 INFO: id.co.gtc.erhacam.Detectors.setFaceMaxSize() EyeMaxSize created with value : 83
|
||||||
|
2025-03-21 15:43:57 INFO: id.co.gtc.erhacam.Detectors.setFaceMinSize() FaceMinSize created with value : 250
|
||||||
|
2025-03-21 15:43:57 INFO: id.co.gtc.erhacam.Detectors.setFaceMinSize() EyeMinSize created with value : 41
|
||||||
|
2025-03-21 15:43:57 INFO: Config.ConfigFile.Load() Config Loaded
|
||||||
|
2025-03-21 15:43:57 INFO: Config.SomeCodes.MakeDirectory() Directory exists: C:\Users\Erha\Desktop\ErhaCapture\FullQuality
|
||||||
|
2025-03-21 15:43:57 INFO: Config.SomeCodes.MakeDirectory() Directory exists: C:\Users\Erha\Desktop\ErhaCapture\FullQualityCrop
|
||||||
|
2025-03-21 15:43:57 INFO: Config.SomeCodes.MakeDirectory() Directory exists: C:\Users\Erha\Desktop\ErhaCapture\Compressed
|
||||||
|
2025-03-21 15:43:57 INFO: Config.SomeCodes.MakeDirectory() Directory exists: C:\Users\Erha\Desktop\ErhaCapture\CompressedCrop
|
||||||
|
2025-03-21 15:43:57 INFO: Config.SomeCodes.MakeDirectory() Directory exists: C:\Users\Erha\Desktop\ErhaCapture\thumbs
|
||||||
|
2025-03-21 15:43:57 INFO: id.co.gtc.erhacam.MainApplication.start() Secure Dongle UserID valid
|
||||||
|
2025-03-21 15:43:57 INFO: id.co.gtc.erhacam.CaptureView.initialize() Audio Player : Inited
|
||||||
|
2025-03-21 15:43:57 INFO: Config.SomeCodes.LoadQRReader() QRReader loaded
|
||||||
|
2025-03-21 15:43:57 INFO: id.co.gtc.erhacam.Detectors.LoadFrontalFaceDetector() Face Detector file : C:\Users\Erha\IdeaProjects\ErhaCam\haarcascade_frontalface_alt.xml
|
||||||
|
2025-03-21 15:43:57 INFO: id.co.gtc.erhacam.Detectors.LoadFrontalFaceDetector() FaceDetector loaded
|
||||||
|
2025-03-21 15:43:57 INFO: id.co.gtc.erhacam.Detectors.LoadEyeDetector() Eye Detector file : C:\Users\Erha\IdeaProjects\ErhaCam\haarcascade_eye.xml
|
||||||
|
2025-03-21 15:43:57 INFO: id.co.gtc.erhacam.Detectors.LoadEyeDetector() EyeDetector loaded
|
||||||
|
2025-03-21 15:43:57 INFO: id.co.gtc.erhacam.Detectors.LoadProfileFaceDetector() Profile Face Detector file : C:\Users\Erha\IdeaProjects\ErhaCam\haarcascade_profileface.xml
|
||||||
|
2025-03-21 15:43:57 INFO: id.co.gtc.erhacam.Detectors.LoadProfileFaceDetector() ProfileFaceDetector loaded
|
||||||
|
2025-03-21 15:43:58 INFO: id.co.gtc.erhacam.MainApplication.start() Application started
|
||||||
|
2025-03-21 15:43:58 INFO: SecureDongle.SecureDongle.lambda$StartMonitor$0() Start Monitoring UserID=14022025
|
||||||
|
2025-03-21 15:43:58 INFO: id.co.gtc.erhacam.CaptureView.lambda$initialize$15() Left90 Index: 0
|
||||||
|
2025-03-21 15:43:58 INFO: id.co.gtc.erhacam.CaptureView.onLog() [01] : QR Reader loaded
|
||||||
|
2025-03-21 15:43:58 INFO: id.co.gtc.erhacam.CaptureView.onLog() [01] : Face detector loaded
|
||||||
|
2025-03-21 15:44:03 INFO: id.co.gtc.erhacam.CaptureView.onLog() [01] : Camera Started with resolution 2160x3840@0
|
||||||
|
2025-03-21 15:44:07 ERROR: id.co.gtc.erhacam.CaptureView.call() Record associated with barcode
|
||||||
|
2025-03-21 15:44:21 ERROR: id.co.gtc.erhacam.MainView.loadContent() loadContent Not loading empty fxml file
|
||||||
|
2025-03-21 15:44:21 INFO: id.co.gtc.erhacam.MainApplication.lambda$start$0() Application closed
|
||||||
|
2025-03-21 15:57:31 INFO: Config.ConfigFile.<init>() Current working directory in Java : C:\Users\Erha\IdeaProjects\ErhaCam
|
||||||
|
2025-03-21 15:57:31 INFO: Config.ConfigFile.Load() Load config file at C:\Users\Erha\IdeaProjects\ErhaCam\config.properties
|
||||||
|
2025-03-21 15:57:31 INFO: id.co.gtc.erhacam.Detectors.setFaceMaxSize() FaceMaxSize created with value : 500
|
||||||
|
2025-03-21 15:57:31 INFO: id.co.gtc.erhacam.Detectors.setFaceMaxSize() EyeMaxSize created with value : 83
|
||||||
|
2025-03-21 15:57:31 INFO: id.co.gtc.erhacam.Detectors.setFaceMinSize() FaceMinSize created with value : 250
|
||||||
|
2025-03-21 15:57:31 INFO: id.co.gtc.erhacam.Detectors.setFaceMinSize() EyeMinSize created with value : 41
|
||||||
|
2025-03-21 15:57:31 INFO: Config.ConfigFile.Load() Config Loaded
|
||||||
|
2025-03-21 15:57:31 INFO: Config.SomeCodes.MakeDirectory() Directory exists: C:\Users\Erha\Desktop\ErhaCapture\FullQuality
|
||||||
|
2025-03-21 15:57:31 INFO: Config.SomeCodes.MakeDirectory() Directory exists: C:\Users\Erha\Desktop\ErhaCapture\FullQualityCrop
|
||||||
|
2025-03-21 15:57:31 INFO: Config.SomeCodes.MakeDirectory() Directory exists: C:\Users\Erha\Desktop\ErhaCapture\Compressed
|
||||||
|
2025-03-21 15:57:31 INFO: Config.SomeCodes.MakeDirectory() Directory exists: C:\Users\Erha\Desktop\ErhaCapture\CompressedCrop
|
||||||
|
2025-03-21 15:57:31 INFO: Config.SomeCodes.MakeDirectory() Directory exists: C:\Users\Erha\Desktop\ErhaCapture\thumbs
|
||||||
|
2025-03-21 15:57:31 INFO: id.co.gtc.erhacam.MainApplication.start() Secure Dongle UserID valid
|
||||||
|
2025-03-21 15:57:31 INFO: id.co.gtc.erhacam.CaptureView.initialize() Audio Player : Inited
|
||||||
|
2025-03-21 15:57:31 INFO: Config.SomeCodes.LoadQRReader() QRReader loaded
|
||||||
|
2025-03-21 15:57:31 INFO: id.co.gtc.erhacam.Detectors.LoadFrontalFaceDetector() Face Detector file : C:\Users\Erha\IdeaProjects\ErhaCam\haarcascade_frontalface_alt.xml
|
||||||
|
2025-03-21 15:57:31 INFO: id.co.gtc.erhacam.Detectors.LoadFrontalFaceDetector() FaceDetector loaded
|
||||||
|
2025-03-21 15:57:31 INFO: id.co.gtc.erhacam.Detectors.LoadEyeDetector() Eye Detector file : C:\Users\Erha\IdeaProjects\ErhaCam\haarcascade_eye.xml
|
||||||
|
2025-03-21 15:57:31 INFO: id.co.gtc.erhacam.Detectors.LoadEyeDetector() EyeDetector loaded
|
||||||
|
2025-03-21 15:57:31 INFO: id.co.gtc.erhacam.Detectors.LoadProfileFaceDetector() Profile Face Detector file : C:\Users\Erha\IdeaProjects\ErhaCam\haarcascade_profileface.xml
|
||||||
|
2025-03-21 15:57:31 INFO: id.co.gtc.erhacam.Detectors.LoadProfileFaceDetector() ProfileFaceDetector loaded
|
||||||
|
2025-03-21 15:57:31 INFO: id.co.gtc.erhacam.MainApplication.start() Application started
|
||||||
|
2025-03-21 15:57:31 INFO: SecureDongle.SecureDongle.lambda$StartMonitor$0() Start Monitoring UserID=14022025
|
||||||
|
2025-03-21 15:57:31 INFO: id.co.gtc.erhacam.CaptureView.lambda$initialize$15() Left90 Index: 0
|
||||||
|
2025-03-21 15:57:31 INFO: id.co.gtc.erhacam.CaptureView.onLog() [01] : QR Reader loaded
|
||||||
|
2025-03-21 15:57:31 INFO: id.co.gtc.erhacam.CaptureView.onLog() [01] : Face detector loaded
|
||||||
|
2025-03-21 15:57:37 INFO: id.co.gtc.erhacam.CaptureView.onLog() [01] : Camera Started with resolution 2160x3840@0
|
||||||
|
2025-03-21 15:57:45 ERROR: id.co.gtc.erhacam.CaptureView.call() Record associated with barcode
|
||||||
|
2025-03-21 15:57:59 ERROR: id.co.gtc.erhacam.MainView.loadContent() loadContent Not loading empty fxml file
|
||||||
|
2025-03-21 15:57:59 INFO: id.co.gtc.erhacam.MainApplication.lambda$start$0() Application closed
|
||||||
|
2025-03-21 15:58:54 INFO: Config.ConfigFile.<init>() Current working directory in Java : C:\Users\Erha\IdeaProjects\ErhaCam
|
||||||
|
2025-03-21 15:58:54 INFO: Config.ConfigFile.Load() Load config file at C:\Users\Erha\IdeaProjects\ErhaCam\config.properties
|
||||||
|
2025-03-21 15:58:54 INFO: id.co.gtc.erhacam.Detectors.setFaceMaxSize() FaceMaxSize created with value : 500
|
||||||
|
2025-03-21 15:58:54 INFO: id.co.gtc.erhacam.Detectors.setFaceMaxSize() EyeMaxSize created with value : 83
|
||||||
|
2025-03-21 15:58:54 INFO: id.co.gtc.erhacam.Detectors.setFaceMinSize() FaceMinSize created with value : 250
|
||||||
|
2025-03-21 15:58:54 INFO: id.co.gtc.erhacam.Detectors.setFaceMinSize() EyeMinSize created with value : 41
|
||||||
|
2025-03-21 15:58:54 INFO: Config.ConfigFile.Load() Config Loaded
|
||||||
|
2025-03-21 15:58:54 INFO: Config.SomeCodes.MakeDirectory() Directory exists: C:\Users\Erha\Desktop\ErhaCapture\FullQuality
|
||||||
|
2025-03-21 15:58:54 INFO: Config.SomeCodes.MakeDirectory() Directory exists: C:\Users\Erha\Desktop\ErhaCapture\FullQualityCrop
|
||||||
|
2025-03-21 15:58:54 INFO: Config.SomeCodes.MakeDirectory() Directory exists: C:\Users\Erha\Desktop\ErhaCapture\Compressed
|
||||||
|
2025-03-21 15:58:54 INFO: Config.SomeCodes.MakeDirectory() Directory exists: C:\Users\Erha\Desktop\ErhaCapture\CompressedCrop
|
||||||
|
2025-03-21 15:58:54 INFO: Config.SomeCodes.MakeDirectory() Directory exists: C:\Users\Erha\Desktop\ErhaCapture\thumbs
|
||||||
|
2025-03-21 15:58:55 INFO: id.co.gtc.erhacam.MainApplication.start() Secure Dongle UserID valid
|
||||||
|
2025-03-21 15:58:55 INFO: id.co.gtc.erhacam.CaptureView.initialize() Audio Player : Inited
|
||||||
|
2025-03-21 15:58:55 INFO: Config.SomeCodes.LoadQRReader() QRReader loaded
|
||||||
|
2025-03-21 15:58:55 INFO: id.co.gtc.erhacam.Detectors.LoadFrontalFaceDetector() Face Detector file : C:\Users\Erha\IdeaProjects\ErhaCam\haarcascade_frontalface_alt.xml
|
||||||
|
2025-03-21 15:58:55 INFO: id.co.gtc.erhacam.Detectors.LoadFrontalFaceDetector() FaceDetector loaded
|
||||||
|
2025-03-21 15:58:55 INFO: id.co.gtc.erhacam.Detectors.LoadEyeDetector() Eye Detector file : C:\Users\Erha\IdeaProjects\ErhaCam\haarcascade_eye.xml
|
||||||
|
2025-03-21 15:58:55 INFO: id.co.gtc.erhacam.Detectors.LoadEyeDetector() EyeDetector loaded
|
||||||
|
2025-03-21 15:58:55 INFO: id.co.gtc.erhacam.Detectors.LoadProfileFaceDetector() Profile Face Detector file : C:\Users\Erha\IdeaProjects\ErhaCam\haarcascade_profileface.xml
|
||||||
|
2025-03-21 15:58:55 INFO: id.co.gtc.erhacam.Detectors.LoadProfileFaceDetector() ProfileFaceDetector loaded
|
||||||
|
2025-03-21 15:58:55 INFO: id.co.gtc.erhacam.MainApplication.start() Application started
|
||||||
|
2025-03-21 15:58:55 INFO: SecureDongle.SecureDongle.lambda$StartMonitor$0() Start Monitoring UserID=14022025
|
||||||
|
2025-03-21 15:58:55 INFO: id.co.gtc.erhacam.CaptureView.lambda$initialize$15() Left90 Index: 0
|
||||||
|
2025-03-21 15:58:55 INFO: id.co.gtc.erhacam.CaptureView.onLog() [01] : QR Reader loaded
|
||||||
|
2025-03-21 15:58:55 INFO: id.co.gtc.erhacam.CaptureView.onLog() [01] : Face detector loaded
|
||||||
|
2025-03-21 15:59:01 INFO: id.co.gtc.erhacam.CaptureView.onLog() [01] : Camera Started with resolution 2160x3840@0
|
||||||
|
2025-03-21 15:59:03 ERROR: id.co.gtc.erhacam.CaptureView.call() Record associated with barcode
|
||||||
|
2025-03-21 16:07:12 INFO: Config.ConfigFile.<init>() Current working directory in Java : C:\Users\Erha\IdeaProjects\ErhaCam
|
||||||
|
2025-03-21 16:07:12 INFO: Config.ConfigFile.Load() Load config file at C:\Users\Erha\IdeaProjects\ErhaCam\config.properties
|
||||||
|
2025-03-21 16:07:12 INFO: id.co.gtc.erhacam.Detectors.setFaceMaxSize() FaceMaxSize created with value : 500
|
||||||
|
2025-03-21 16:07:12 INFO: id.co.gtc.erhacam.Detectors.setFaceMaxSize() EyeMaxSize created with value : 83
|
||||||
|
2025-03-21 16:07:12 INFO: id.co.gtc.erhacam.Detectors.setFaceMinSize() FaceMinSize created with value : 250
|
||||||
|
2025-03-21 16:07:12 INFO: id.co.gtc.erhacam.Detectors.setFaceMinSize() EyeMinSize created with value : 41
|
||||||
|
2025-03-21 16:07:12 INFO: Config.ConfigFile.Load() Config Loaded
|
||||||
|
2025-03-21 16:07:12 INFO: Config.SomeCodes.MakeDirectory() Directory exists: C:\Users\Erha\Desktop\ErhaCapture\FullQuality
|
||||||
|
2025-03-21 16:07:12 INFO: Config.SomeCodes.MakeDirectory() Directory exists: C:\Users\Erha\Desktop\ErhaCapture\FullQualityCrop
|
||||||
|
2025-03-21 16:07:12 INFO: Config.SomeCodes.MakeDirectory() Directory exists: C:\Users\Erha\Desktop\ErhaCapture\Compressed
|
||||||
|
2025-03-21 16:07:12 INFO: Config.SomeCodes.MakeDirectory() Directory exists: C:\Users\Erha\Desktop\ErhaCapture\CompressedCrop
|
||||||
|
2025-03-21 16:07:12 INFO: Config.SomeCodes.MakeDirectory() Directory exists: C:\Users\Erha\Desktop\ErhaCapture\thumbs
|
||||||
|
2025-03-21 16:07:12 INFO: id.co.gtc.erhacam.MainApplication.start() Secure Dongle UserID valid
|
||||||
|
2025-03-21 16:07:12 INFO: id.co.gtc.erhacam.CaptureView.initialize() Audio Player : Inited
|
||||||
|
2025-03-21 16:07:12 INFO: Config.SomeCodes.LoadQRReader() QRReader loaded
|
||||||
|
2025-03-21 16:07:12 INFO: id.co.gtc.erhacam.Detectors.LoadFrontalFaceDetector() Face Detector file : C:\Users\Erha\IdeaProjects\ErhaCam\haarcascade_frontalface_alt.xml
|
||||||
|
2025-03-21 16:07:13 INFO: id.co.gtc.erhacam.Detectors.LoadFrontalFaceDetector() FaceDetector loaded
|
||||||
|
2025-03-21 16:07:13 INFO: id.co.gtc.erhacam.Detectors.LoadEyeDetector() Eye Detector file : C:\Users\Erha\IdeaProjects\ErhaCam\haarcascade_eye.xml
|
||||||
|
2025-03-21 16:07:13 INFO: id.co.gtc.erhacam.Detectors.LoadEyeDetector() EyeDetector loaded
|
||||||
|
2025-03-21 16:07:13 INFO: id.co.gtc.erhacam.Detectors.LoadProfileFaceDetector() Profile Face Detector file : C:\Users\Erha\IdeaProjects\ErhaCam\haarcascade_profileface.xml
|
||||||
|
2025-03-21 16:07:13 INFO: id.co.gtc.erhacam.Detectors.LoadProfileFaceDetector() ProfileFaceDetector loaded
|
||||||
|
2025-03-21 16:07:13 INFO: id.co.gtc.erhacam.MainApplication.start() Application started
|
||||||
|
2025-03-21 16:07:13 INFO: SecureDongle.SecureDongle.lambda$StartMonitor$0() Start Monitoring UserID=14022025
|
||||||
|
2025-03-21 16:07:13 INFO: id.co.gtc.erhacam.CaptureView.lambda$initialize$15() Left90 Index: 0
|
||||||
|
2025-03-21 16:07:13 INFO: id.co.gtc.erhacam.CaptureView.onLog() [01] : QR Reader loaded
|
||||||
|
2025-03-21 16:07:13 INFO: id.co.gtc.erhacam.CaptureView.onLog() [01] : Face detector loaded
|
||||||
|
2025-03-21 16:07:18 INFO: id.co.gtc.erhacam.CaptureView.onLog() [01] : Camera Started with resolution 2160x3840@0
|
||||||
|
2025-03-21 16:07:51 ERROR: id.co.gtc.erhacam.CaptureView.call() Record associated with barcode
|
||||||
|
2025-03-21 16:08:12 ERROR: id.co.gtc.erhacam.CaptureView.call() Record associated with barcode
|
||||||
|
2025-03-21 16:08:33 INFO: id.co.gtc.erhacam.CaptureView.onPlaybackStarted() Audio Positikan Muka Started
|
||||||
|
2025-03-21 16:08:40 INFO: id.co.gtc.erhacam.CaptureView.onPlaybackFinished() Audio Positikan Muka Finished
|
||||||
|
2025-03-24 16:05:16 INFO: Config.ConfigFile.<init>() Current working directory in Java : C:\Users\rdkar\OneDrive\Documents\IntelliJ Project\ErhaCam
|
||||||
|
2025-03-24 16:05:16 INFO: Config.ConfigFile.Load() Load config file at C:\Users\rdkar\OneDrive\Documents\IntelliJ Project\ErhaCam\config.properties
|
||||||
|
2025-03-24 16:05:16 INFO: id.co.gtc.erhacam.Detectors.setFaceMaxSize() FaceMaxSize created with value : 500
|
||||||
|
2025-03-24 16:05:16 INFO: id.co.gtc.erhacam.Detectors.setFaceMaxSize() EyeMaxSize created with value : 83
|
||||||
|
2025-03-24 16:05:16 INFO: id.co.gtc.erhacam.Detectors.setFaceMinSize() FaceMinSize created with value : 250
|
||||||
|
2025-03-24 16:05:16 INFO: id.co.gtc.erhacam.Detectors.setFaceMinSize() EyeMinSize created with value : 41
|
||||||
|
2025-03-24 16:05:16 INFO: Config.ConfigFile.Load() Config Loaded
|
||||||
|
2025-03-24 16:05:16 INFO: Config.SomeCodes.MakeDirectory() Error creating directory: C:\Users\Erha\Desktop\ErhaCapture\FullQuality, Msg : C:\Users\Erha
|
||||||
|
2025-03-24 16:05:16 INFO: Config.SomeCodes.MakeDirectory() Error creating directory: C:\Users\Erha\Desktop\ErhaCapture\FullQualityCrop, Msg : C:\Users\Erha
|
||||||
|
2025-03-24 16:05:16 INFO: Config.SomeCodes.MakeDirectory() Error creating directory: C:\Users\Erha\Desktop\ErhaCapture\Compressed, Msg : C:\Users\Erha
|
||||||
|
2025-03-24 16:05:16 INFO: Config.SomeCodes.MakeDirectory() Error creating directory: C:\Users\Erha\Desktop\ErhaCapture\CompressedCrop, Msg : C:\Users\Erha
|
||||||
|
2025-03-24 16:05:16 INFO: Config.SomeCodes.MakeDirectory() Error creating directory: C:\Users\Erha\Desktop\ErhaCapture\thumbs, Msg : C:\Users\Erha
|
||||||
|
2025-03-24 16:05:17 INFO: id.co.gtc.erhacam.MainApplication.start() Secure Dongle UserID valid
|
||||||
|
2025-03-24 16:05:18 INFO: id.co.gtc.erhacam.CaptureView.initialize() Audio Player : Inited
|
||||||
|
2025-03-24 16:05:19 INFO: Config.SomeCodes.LoadQRReader() QRReader loaded
|
||||||
|
2025-03-24 16:05:19 INFO: id.co.gtc.erhacam.Detectors.LoadFrontalFaceDetector() Face Detector file : C:\Users\rdkar\OneDrive\Documents\IntelliJ Project\ErhaCam\haarcascade_frontalface_alt.xml
|
||||||
|
2025-03-24 16:05:19 INFO: id.co.gtc.erhacam.Detectors.LoadFrontalFaceDetector() FaceDetector loaded
|
||||||
|
2025-03-24 16:05:19 INFO: id.co.gtc.erhacam.Detectors.LoadEyeDetector() Eye Detector file : C:\Users\rdkar\OneDrive\Documents\IntelliJ Project\ErhaCam\haarcascade_eye.xml
|
||||||
|
2025-03-24 16:05:19 INFO: id.co.gtc.erhacam.Detectors.LoadEyeDetector() EyeDetector loaded
|
||||||
|
2025-03-24 16:05:19 INFO: id.co.gtc.erhacam.Detectors.LoadProfileFaceDetector() Profile Face Detector file : C:\Users\rdkar\OneDrive\Documents\IntelliJ Project\ErhaCam\haarcascade_profileface.xml
|
||||||
|
2025-03-24 16:05:19 INFO: id.co.gtc.erhacam.Detectors.LoadProfileFaceDetector() ProfileFaceDetector loaded
|
||||||
|
2025-03-24 16:05:20 INFO: id.co.gtc.erhacam.MainApplication.start() Application started
|
||||||
|
2025-03-24 16:05:20 INFO: id.co.gtc.erhacam.CaptureView.lambda$initialize$13() Left90 Index: 1
|
||||||
|
2025-03-24 16:05:20 INFO: SecureDongle.SecureDongle.lambda$StartMonitor$0() Start Monitoring UserID=14022025
|
||||||
|
2025-03-24 16:05:20 INFO: id.co.gtc.erhacam.CaptureView.onLog() [01] : QR Reader loaded
|
||||||
|
2025-03-24 16:05:20 INFO: id.co.gtc.erhacam.CaptureView.onLog() [01] : Face detector loaded
|
||||||
|
2025-03-24 16:05:24 INFO: id.co.gtc.erhacam.SettingView.initialize() Found 3 Cameras
|
||||||
|
2025-03-24 16:05:24 INFO: id.co.gtc.erhacam.SettingView.lambda$initialize$2() adding camera : ACER QHD User Facing to camera list
|
||||||
|
2025-03-24 16:05:24 INFO: id.co.gtc.erhacam.SettingView.lambda$initialize$2() adding camera : OBSBOT Meet 2 StreamCamera to camera list
|
||||||
|
2025-03-24 16:05:24 INFO: id.co.gtc.erhacam.SettingView.lambda$initialize$2() adding camera : OBSBOT Virtual Camera to camera list
|
||||||
|
2025-03-24 16:05:31 INFO: Database.Sqlite.CreateDatabase() Database created successfully
|
||||||
|
2025-03-24 16:05:31 INFO: Database.Sqlite.GetAll() GetAll success, result count: 90
|
||||||
|
2025-03-24 16:05:32 INFO: id.co.gtc.erhacam.CaptureView.initialize() Audio Player : Inited
|
||||||
|
2025-03-24 16:05:32 INFO: id.co.gtc.erhacam.CaptureView.lambda$initialize$13() Left90 Index: 1
|
||||||
|
2025-03-24 16:05:32 INFO: id.co.gtc.erhacam.CaptureView.onLog() [01] : QR Reader loaded
|
||||||
|
2025-03-24 16:05:32 INFO: id.co.gtc.erhacam.CaptureView.onLog() [01] : Face detector loaded
|
||||||
|
2025-03-24 16:05:33 ERROR: id.co.gtc.erhacam.PhotoRow.loadImage() Error loading image: C:\Users\Erha\IdeaProjects\ErhaCam\thumbs\240980 2025-3-24_12-38-45 01.png, Msg : OpenCV(4.9.0) D:\a\javacpp-presets\javacpp-presets\opencv\cppbuild\windows-x86_64\opencv-4.9.0\modules\imgproc\src\resize.cpp:4152: error: (-215:Assertion failed) !ssize.empty() in function 'cv::resize'
|
||||||
|
|
||||||
|
2025-03-24 16:05:33 ERROR: id.co.gtc.erhacam.PhotoRow.loadImage() Error loading image: C:\Users\Erha\Desktop\ErhaCapture\thumbs\240980 2025-3-24_13-50-34 01.png, Msg : OpenCV(4.9.0) D:\a\javacpp-presets\javacpp-presets\opencv\cppbuild\windows-x86_64\opencv-4.9.0\modules\imgproc\src\resize.cpp:4152: error: (-215:Assertion failed) !ssize.empty() in function 'cv::resize'
|
||||||
|
|
||||||
|
2025-03-24 16:05:33 ERROR: id.co.gtc.erhacam.PhotoRow.loadImage() Error loading image: C:\Users\Erha\Desktop\ErhaCapture\thumbs\240980 2025-3-24_14-41-17 01.png, Msg : OpenCV(4.9.0) D:\a\javacpp-presets\javacpp-presets\opencv\cppbuild\windows-x86_64\opencv-4.9.0\modules\imgproc\src\resize.cpp:4152: error: (-215:Assertion failed) !ssize.empty() in function 'cv::resize'
|
||||||
|
|
||||||
|
2025-03-24 16:05:33 ERROR: id.co.gtc.erhacam.PhotoRow.loadImage() Error loading image: C:\Users\Erha\Desktop\ErhaCapture\thumbs\240980 2025-3-24_14-49-11 01.png, Msg : OpenCV(4.9.0) D:\a\javacpp-presets\javacpp-presets\opencv\cppbuild\windows-x86_64\opencv-4.9.0\modules\imgproc\src\resize.cpp:4152: error: (-215:Assertion failed) !ssize.empty() in function 'cv::resize'
|
||||||
|
|
||||||
|
2025-03-24 16:05:33 ERROR: id.co.gtc.erhacam.PhotoRow.loadImage() Error loading image: C:\Users\Erha\Desktop\ErhaCapture\thumbs\240980 2025-3-24_14-50-41 01.png, Msg : OpenCV(4.9.0) D:\a\javacpp-presets\javacpp-presets\opencv\cppbuild\windows-x86_64\opencv-4.9.0\modules\imgproc\src\resize.cpp:4152: error: (-215:Assertion failed) !ssize.empty() in function 'cv::resize'
|
||||||
|
|
||||||
|
2025-03-24 16:05:33 ERROR: id.co.gtc.erhacam.PhotoRow.loadImage() Error loading image: C:\Users\Erha\Desktop\ErhaCapture\thumbs\240980 2025-3-24_15-12-36 01.png, Msg : OpenCV(4.9.0) D:\a\javacpp-presets\javacpp-presets\opencv\cppbuild\windows-x86_64\opencv-4.9.0\modules\imgproc\src\resize.cpp:4152: error: (-215:Assertion failed) !ssize.empty() in function 'cv::resize'
|
||||||
|
|
||||||
|
2025-03-24 16:05:33 ERROR: id.co.gtc.erhacam.PhotoRow.loadImage() Error loading image: C:\Users\Erha\Desktop\ErhaCapture\thumbs\240980 2025-3-24_15-26-18 01.png, Msg : OpenCV(4.9.0) D:\a\javacpp-presets\javacpp-presets\opencv\cppbuild\windows-x86_64\opencv-4.9.0\modules\imgproc\src\resize.cpp:4152: error: (-215:Assertion failed) !ssize.empty() in function 'cv::resize'
|
||||||
|
|
||||||
|
2025-03-24 16:05:33 ERROR: id.co.gtc.erhacam.PhotoRow.loadImage() Error loading image: C:\Users\Erha\Desktop\ErhaCapture\thumbs\240980 2025-3-24_15-36-34 01.png, Msg : OpenCV(4.9.0) D:\a\javacpp-presets\javacpp-presets\opencv\cppbuild\windows-x86_64\opencv-4.9.0\modules\imgproc\src\resize.cpp:4152: error: (-215:Assertion failed) !ssize.empty() in function 'cv::resize'
|
||||||
|
|
||||||
|
2025-03-24 16:05:33 ERROR: id.co.gtc.erhacam.PhotoRow.loadImage() Error loading image: C:\Users\Erha\Desktop\ErhaCapture\thumbs\240980 2025-3-24_15-37-53 01.png, Msg : OpenCV(4.9.0) D:\a\javacpp-presets\javacpp-presets\opencv\cppbuild\windows-x86_64\opencv-4.9.0\modules\imgproc\src\resize.cpp:4152: error: (-215:Assertion failed) !ssize.empty() in function 'cv::resize'
|
||||||
|
|
||||||
|
2025-03-24 16:07:13 ERROR: id.co.gtc.erhacam.MainView.loadContent() loadContent Not loading empty fxml file
|
||||||
|
2025-03-24 16:07:13 INFO: id.co.gtc.erhacam.MainApplication.lambda$start$0() Application closed
|
||||||
|
|||||||
Binary file not shown.
@@ -1,22 +1,26 @@
|
|||||||
#Wed Oct 23 10:37:24 WIB 2024
|
#Mon Feb 03 15:09:08 ICT 2025
|
||||||
AudioPhase1=C\:\\Users\\rdkar\\OneDrive\\Documents\\IntelliJ Project\\ErhaCam\\out\\artifacts\\ErhaCam_jar\\audio\\phase1.mp3
|
AudioPhase1=\\\\RDKARTONO_SFG14\\ErhaCam_jar\\audio\\phase1.mp3
|
||||||
AudioPhase2=C\:\\Users\\rdkar\\OneDrive\\Documents\\IntelliJ Project\\ErhaCam\\out\\artifacts\\ErhaCam_jar\\audio\\phase2.mp3
|
AudioPhase2=\\\\RDKARTONO_SFG14\\ErhaCam_jar\\audio\\phase2.mp3
|
||||||
AudioPhase3=C\:\\Users\\rdkar\\OneDrive\\Documents\\IntelliJ Project\\ErhaCam\\out\\artifacts\\ErhaCam_jar\\audio\\phase3.mp3
|
AudioPhase3=\\\\RDKARTONO_SFG14\\ErhaCam_jar\\audio\\phase3.mp3
|
||||||
AudioPhase4=C\:\\Users\\rdkar\\OneDrive\\Documents\\IntelliJ Project\\ErhaCam\\out\\artifacts\\ErhaCam_jar\\audio\\phase4.mp3
|
AudioPhase4=\\\\RDKARTONO_SFG14\\ErhaCam_jar\\audio\\phase4.mp3
|
||||||
AudioPhase5=C\:\\Users\\rdkar\\OneDrive\\Documents\\IntelliJ Project\\ErhaCam\\out\\artifacts\\ErhaCam_jar\\audio\\phase5.mp3
|
AudioPhase5=\\\\RDKARTONO_SFG14\\ErhaCam_jar\\audio\\phase5.mp3
|
||||||
CameraCenter=
|
CameraCenter=OBSBOT Meet 2 StreamCamera
|
||||||
CameraConfigCenter={"Brightness"\:0.0,"Contrast"\:0.0,"Saturation"\:0.0,"Hue"\:0.0,"Gain"\:0.0,"Exposure"\:1.0,"Sharpness"\:0.0,"Gamma"\:0.0,"AutoExposure"\:true,"AutoFocus"\:true,"AutoWhiteBalance"\:true}
|
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"\:0.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}
|
||||||
CameraConfigLeft90={"Brightness"\:0.0,"Contrast"\:0.0,"Saturation"\:0.0,"Hue"\:0.0,"Gain"\:0.0,"Exposure"\:1.0,"Sharpness"\:0.0,"Gamma"\:0.0,"AutoExposure"\:true,"AutoFocus"\:true,"AutoWhiteBalance"\:true}
|
CameraConfigLeft90={"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}
|
||||||
CameraConfigRight45={"Brightness"\:0.0,"Contrast"\:0.0,"Saturation"\:0.0,"Hue"\:0.0,"Gain"\:0.0,"Exposure"\:1.0,"Sharpness"\:0.0,"Gamma"\:0.0,"AutoExposure"\:true,"AutoFocus"\:true,"AutoWhiteBalance"\:true}
|
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"\:0.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=
|
CameraLeft45=OBSBOT Meet 2 StreamCamera
|
||||||
CameraLeft90=
|
CameraLeft90=OBSBOT Meet 2 StreamCamera
|
||||||
CameraRight45=
|
CameraRight45=OBSBOT Meet 2 StreamCamera
|
||||||
CameraRight90=
|
CameraRight90=OBSBOT Meet 2 StreamCamera
|
||||||
FTPHost=192.168.10.2
|
FTPHost=192.168.10.2
|
||||||
FTPPass=password
|
FTPPass=password
|
||||||
FTPPath=/
|
FTPPath=/
|
||||||
FTPPort=21
|
FTPPort=21
|
||||||
FTPUser=user
|
FTPUser=user
|
||||||
PhotoDirectory=C\:\\Users\\rdkar\\OneDrive\\Documents\\IntelliJ Project\\ErhaCam\\out\\artifacts\\ErhaCam_jar
|
PhotoDirectory=\\\\RDKARTONO_SFG14\\ErhaCam_jar
|
||||||
|
cascadeMaxSize=400
|
||||||
|
cascadeMinNeighbors=3
|
||||||
|
cascadeMinSize=200
|
||||||
|
cascadeScaleFactor=1.1
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
BIN
pengambilan_berhasil.wav
Normal file
BIN
pengambilan_berhasil.wav
Normal file
Binary file not shown.
BIN
pengambilan_berhasil_tunggu_lobby.wav
Normal file
BIN
pengambilan_berhasil_tunggu_lobby.wav
Normal file
Binary file not shown.
BIN
pengambilan_gagal.wav
Normal file
BIN
pengambilan_gagal.wav
Normal file
Binary file not shown.
105
pom.xml
105
pom.xml
@@ -36,16 +36,115 @@
|
|||||||
<version>${junit.version}</version>
|
<version>${junit.version}</version>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<!-- <dependency>-->
|
||||||
|
<!-- <groupId>org.bytedeco</groupId>-->
|
||||||
|
<!-- <artifactId>javacv-platform</artifactId>-->
|
||||||
|
<!-- <version>1.5.10</version>-->
|
||||||
|
<!-- <exclusions>-->
|
||||||
|
<!-- <exclusion>-->
|
||||||
|
<!-- <groupId>org.bytedeco</groupId>-->
|
||||||
|
<!-- <artifactId>leptonica-platform</artifactId>-->
|
||||||
|
<!-- </exclusion>-->
|
||||||
|
<!-- <exclusion>-->
|
||||||
|
<!-- <groupId>org.bytedeco</groupId>-->
|
||||||
|
<!-- <artifactId>artoolkitplus-platform</artifactId>-->
|
||||||
|
<!-- </exclusion>-->
|
||||||
|
<!-- <exclusion>-->
|
||||||
|
<!-- <groupId>org.bytedeco</groupId>-->
|
||||||
|
<!-- <artifactId>libdc1394-platform</artifactId>-->
|
||||||
|
<!-- </exclusion>-->
|
||||||
|
<!-- <exclusion>-->
|
||||||
|
<!-- <groupId>org.bytedeco</groupId>-->
|
||||||
|
<!-- <artifactId>libfreenect-platform</artifactId>-->
|
||||||
|
<!-- </exclusion>-->
|
||||||
|
<!-- <exclusion>-->
|
||||||
|
<!-- <groupId>org.bytedeco</groupId>-->
|
||||||
|
<!-- <artifactId>libfreenect2-platform</artifactId>-->
|
||||||
|
<!-- </exclusion>-->
|
||||||
|
<!-- <exclusion>-->
|
||||||
|
<!-- <groupId>org.bytedeco</groupId>-->
|
||||||
|
<!-- <artifactId>flycapture-platform</artifactId>-->
|
||||||
|
<!-- </exclusion>-->
|
||||||
|
<!-- <exclusion>-->
|
||||||
|
<!-- <groupId>org.bytedeco</groupId>-->
|
||||||
|
<!-- <artifactId>librealsense-platform</artifactId>-->
|
||||||
|
<!-- </exclusion>-->
|
||||||
|
<!-- <exclusion>-->
|
||||||
|
<!-- <groupId>org.bytedeco</groupId>-->
|
||||||
|
<!-- <artifactId>librealsense2-platform</artifactId>-->
|
||||||
|
<!-- </exclusion>-->
|
||||||
|
<!-- <exclusion>-->
|
||||||
|
<!-- <groupId>org.bytedeco</groupId>-->
|
||||||
|
<!-- <artifactId>tesseract-platform</artifactId>-->
|
||||||
|
<!-- </exclusion>-->
|
||||||
|
<!-- <!– platform dibuangin semua, kemudian tambah sendiri linux-arm64, windows-x86_64, linux-x86_64 –>-->
|
||||||
|
<!-- <exclusion>-->
|
||||||
|
<!-- <groupId>org.bytedeco</groupId>-->
|
||||||
|
<!-- <artifactId>flandmark-platform</artifactId>-->
|
||||||
|
<!-- </exclusion>-->
|
||||||
|
|
||||||
|
<!-- <exclusion>-->
|
||||||
|
<!-- <groupId>org.bytedeco</groupId>-->
|
||||||
|
<!-- <artifactId>openblas-platform</artifactId>-->
|
||||||
|
<!-- </exclusion>-->
|
||||||
|
|
||||||
|
<!-- <exclusion>-->
|
||||||
|
<!-- <groupId>org.bytedeco</groupId>-->
|
||||||
|
<!-- <artifactId>ffmpeg-platform</artifactId>-->
|
||||||
|
<!-- </exclusion>-->
|
||||||
|
<!-- <exclusion>-->
|
||||||
|
<!-- <groupId>org.bytedeco</groupId>-->
|
||||||
|
<!-- <artifactId>videoinput-platform</artifactId>-->
|
||||||
|
<!-- </exclusion>-->
|
||||||
|
<!-- <exclusion>-->
|
||||||
|
<!-- <groupId>org.bytedeco</groupId>-->
|
||||||
|
<!-- <artifactId>javacpp-platform</artifactId>-->
|
||||||
|
<!-- </exclusion>-->
|
||||||
|
<!-- <exclusion>-->
|
||||||
|
<!-- <groupId>org.bytedeco</groupId>-->
|
||||||
|
<!-- <artifactId>opencv-platform</artifactId>-->
|
||||||
|
<!-- </exclusion>-->
|
||||||
|
|
||||||
|
<!-- </exclusions>-->
|
||||||
|
<!-- </dependency>-->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.bytedeco</groupId>
|
<groupId>org.bytedeco</groupId>
|
||||||
<artifactId>javacv-platform</artifactId>
|
<artifactId>javacv</artifactId>
|
||||||
<version>1.5.10</version>
|
<version>1.5.10</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.bytedeco</groupId>
|
||||||
|
<artifactId>videoinput</artifactId>
|
||||||
|
<version>0.200-1.5.9</version>
|
||||||
|
<classifier>windows-x86_64</classifier>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.bytedeco</groupId>
|
<groupId>org.bytedeco</groupId>
|
||||||
<artifactId>javacpp-platform</artifactId>
|
<artifactId>ffmpeg</artifactId>
|
||||||
<version>1.5.10</version>
|
<version>6.1.1-1.5.10</version>
|
||||||
|
<classifier>windows-x86_64</classifier>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.bytedeco</groupId>
|
||||||
|
<artifactId>opencv</artifactId>
|
||||||
|
<version>4.9.0-1.5.10</version>
|
||||||
|
<classifier>windows-x86_64</classifier>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.bytedeco</groupId>
|
||||||
|
<artifactId>javacpp</artifactId>
|
||||||
|
<version>1.5.10</version>
|
||||||
|
<classifier>windows-x86_64</classifier>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.bytedeco</groupId>
|
||||||
|
<artifactId>openblas</artifactId>
|
||||||
|
<version>0.3.26-1.5.10</version>
|
||||||
|
<classifier>windows-x86_64</classifier>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>commons-net</groupId>
|
<groupId>commons-net</groupId>
|
||||||
<artifactId>commons-net</artifactId>
|
<artifactId>commons-net</artifactId>
|
||||||
|
|||||||
BIN
posisikan_wajah.wav
Normal file
BIN
posisikan_wajah.wav
Normal file
Binary file not shown.
BIN
scan_barcode.wav
Normal file
BIN
scan_barcode.wav
Normal file
Binary file not shown.
@@ -3,10 +3,37 @@ package BASS;
|
|||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import org.tinylog.Logger;
|
import org.tinylog.Logger;
|
||||||
|
|
||||||
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
|
import static Config.SomeCodes.Wait;
|
||||||
|
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
public class AudioPlayer {
|
public class AudioPlayer {
|
||||||
private final Bass bass = Bass.Instance;
|
private final Bass bass = Bass.Instance;
|
||||||
private @Getter boolean inited = false;
|
private @Getter boolean inited = false;
|
||||||
|
private @Getter String currentFile = "";
|
||||||
|
private int currentFileHandle = 0;
|
||||||
|
|
||||||
|
public void WaitUntilFinished(){
|
||||||
|
while(currentFileHandle!=0){
|
||||||
|
Wait(10);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isPlaying(){
|
||||||
|
return currentFileHandle!=0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void StopCurrentPlayback(){
|
||||||
|
if (currentFileHandle!=0){
|
||||||
|
if (bass.BASS_ChannelStop(currentFileHandle)){
|
||||||
|
Logger.info("AudioPlayer StopCurrentPlayback success");
|
||||||
|
} else Logger.error("AudioPlayer StopCurrentPlayback failed, error code: "+bass.BASS_ErrorGetCode());
|
||||||
|
}
|
||||||
|
currentFileHandle = 0;
|
||||||
|
currentFile = "";
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initialize AudioPlayer
|
* Initialize AudioPlayer
|
||||||
@@ -18,6 +45,7 @@ public class AudioPlayer {
|
|||||||
if (deviceid>-1){
|
if (deviceid>-1){
|
||||||
int initflags = Bass.BASS_DEVICE_16BITS | Bass.BASS_DEVICE_STEREO | Bass.BASS_DEVICE_FREQ | Bass.BASS_DEVICE_REINIT;
|
int initflags = Bass.BASS_DEVICE_16BITS | Bass.BASS_DEVICE_STEREO | Bass.BASS_DEVICE_FREQ | Bass.BASS_DEVICE_REINIT;
|
||||||
if (bass.BASS_Init(deviceid,samplingrate,initflags)){
|
if (bass.BASS_Init(deviceid,samplingrate,initflags)){
|
||||||
|
currentFileHandle = 0;
|
||||||
inited = true;
|
inited = true;
|
||||||
} else Logger.error("AudioPlayer initialization failed, BASS_Init failed, error code: " + bass.BASS_ErrorGetCode());
|
} else Logger.error("AudioPlayer initialization failed, BASS_Init failed, error code: " + bass.BASS_ErrorGetCode());
|
||||||
} else Logger.error("AudioPlayer initialization failed, deviceid is not correct");
|
} else Logger.error("AudioPlayer initialization failed, deviceid is not correct");
|
||||||
@@ -34,6 +62,8 @@ public class AudioPlayer {
|
|||||||
} else Logger.error("AudioPlayer Free failed, error code: "+bass.BASS_ErrorGetCode());
|
} else Logger.error("AudioPlayer Free failed, error code: "+bass.BASS_ErrorGetCode());
|
||||||
inited = false;
|
inited = false;
|
||||||
}
|
}
|
||||||
|
currentFile = "";
|
||||||
|
currentFileHandle = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -72,14 +102,15 @@ public class AudioPlayer {
|
|||||||
* Play Audio File
|
* Play Audio File
|
||||||
* @param filename File to be played
|
* @param filename File to be played
|
||||||
* @param playbackstatus PlaybackStatus callback
|
* @param playbackstatus PlaybackStatus callback
|
||||||
* @return true if success, false if failed
|
|
||||||
*/
|
*/
|
||||||
public boolean PlayFile(final String filename, final PlaybackStatus playbackstatus){
|
public void PlayFile(final String filename, final PlaybackStatus playbackstatus){
|
||||||
if (inited){
|
if (inited && filename!=null && !filename.isBlank()){
|
||||||
int filehandle = bass.BASS_StreamCreateFile(false, filename, 0, 0, 0);
|
int filehandle = bass.BASS_StreamCreateFile(false, filename, 0, 0, 0);
|
||||||
if (filehandle!=0){
|
if (filehandle!=0){
|
||||||
if (bass.BASS_ChannelStart(filehandle)){
|
if (bass.BASS_ChannelStart(filehandle)){
|
||||||
new Thread(()->{
|
currentFile = filename;
|
||||||
|
currentFileHandle = filehandle;
|
||||||
|
Thread pl = new Thread(() -> {
|
||||||
if (playbackstatus!=null) playbackstatus.onPlaybackStarted(filename);
|
if (playbackstatus!=null) playbackstatus.onPlaybackStarted(filename);
|
||||||
boolean iscontinue = true;
|
boolean iscontinue = true;
|
||||||
while(iscontinue){
|
while(iscontinue){
|
||||||
@@ -92,21 +123,30 @@ public class AudioPlayer {
|
|||||||
iscontinue = false;
|
iscontinue = false;
|
||||||
break;
|
break;
|
||||||
default : {
|
default : {
|
||||||
try {
|
Wait(1000);
|
||||||
Thread.sleep(100);
|
|
||||||
} catch (InterruptedException e) {
|
|
||||||
iscontinue = false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (playbackstatus!=null) playbackstatus.onPlaybackFinished(filename);
|
if (playbackstatus!=null) playbackstatus.onPlaybackFinished(filename);
|
||||||
}).start();
|
currentFile = "";
|
||||||
return true;
|
currentFileHandle = 0;
|
||||||
} else Logger.error("AudioPlayer PlayFile failed, BASS_ChannelStart failed, error code: "+bass.BASS_ErrorGetCode());
|
});
|
||||||
} else Logger.error("AudioPlayer PlayFile failed, BASS_StreamCreateFile failed, error code: "+bass.BASS_ErrorGetCode());
|
pl.setName("PlaybackStatus Monitor Thread");
|
||||||
} else Logger.info("AudioPlayer PlayFile failed, AudioPlayer is not initialized");
|
pl.setDaemon(true);
|
||||||
return false;
|
pl.start();
|
||||||
|
|
||||||
|
} else {
|
||||||
|
Logger.error("AudioPlayer PlayFile failed, BASS_ChannelStart failed, error code: "+bass.BASS_ErrorGetCode());
|
||||||
|
if (playbackstatus!=null) playbackstatus.onPlaybackFailure(filename);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Logger.error("AudioPlayer PlayFile failed, BASS_StreamCreateFile failed, error code: "+bass.BASS_ErrorGetCode());
|
||||||
|
if (playbackstatus!=null) playbackstatus.onPlaybackFailure(filename);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Logger.info("AudioPlayer PlayFile failed, AudioPlayer is not initialized");
|
||||||
|
if (playbackstatus!=null) playbackstatus.onPlaybackFailure(filename);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,12 @@ package Camera;
|
|||||||
|
|
||||||
public interface LiveCamEvent {
|
public interface LiveCamEvent {
|
||||||
void onDetectedQRCode(String qrCode);
|
void onDetectedQRCode(String qrCode);
|
||||||
void onFaceDetector(boolean hasface, int width, int height);
|
void onFrontalFaceDetector(boolean hasface, int width, int height);
|
||||||
|
void onProfileFaceDetector(boolean hasface, int width, int height);
|
||||||
|
void onEyeDetector(boolean hasEye);
|
||||||
void onLog(String log);
|
void onLog(String log);
|
||||||
|
void onBlink(int counter);
|
||||||
|
void onDoubleBlink(int counter);
|
||||||
|
void onStartCapturing();
|
||||||
|
void onIntervalUpdate();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ public enum ObsbotMeet2 {
|
|||||||
Mode4(0.2, 640, 360, "16:9"),
|
Mode4(0.2, 640, 360, "16:9"),
|
||||||
Mode5(0.3, 640, 480, "4:3"),
|
Mode5(0.3, 640, 480, "4:3"),
|
||||||
ModeBest(8.3, 3840, 2160, "16:9"),
|
ModeBest(8.3, 3840, 2160, "16:9"),
|
||||||
ModeLive(0.3, 640, 480, "4:3");
|
ModeLive(0.3, 640, 360, "16:9");
|
||||||
|
|
||||||
private final double Megapixel;
|
private final double Megapixel;
|
||||||
private final int width;
|
private final int width;
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
package Config;
|
package Config;
|
||||||
|
|
||||||
|
import id.co.gtc.erhacam.MainApplication;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.val;
|
|
||||||
import org.tinylog.Logger;
|
import org.tinylog.Logger;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
@@ -40,6 +40,42 @@ public class ConfigFile {
|
|||||||
|
|
||||||
private String PhotoDirectory;
|
private String PhotoDirectory;
|
||||||
|
|
||||||
|
private @Getter double cascadeScaleFactor;
|
||||||
|
private @Getter int cascadeMinNeighbors;
|
||||||
|
private @Getter int cascadeMinSize;
|
||||||
|
private @Getter int cascadeMaxSize;
|
||||||
|
|
||||||
|
private @Getter boolean MirrorCamera = false;
|
||||||
|
private @Getter boolean FlipCamera = false;
|
||||||
|
private @Getter boolean isProduction = true;
|
||||||
|
|
||||||
|
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 = 20.0;
|
||||||
|
private @Getter double Cam1LeftCrop = 8.0;
|
||||||
|
private @Getter double Cam1RightCrop = 8.0;
|
||||||
|
private @Getter double Cam2TopCrop = 10.0;
|
||||||
|
private @Getter double Cam2BottomCrop = 20.0;
|
||||||
|
private @Getter double Cam2LeftCrop = 8.0;
|
||||||
|
private @Getter double Cam2RightCrop = 8.0;
|
||||||
|
private @Getter double Cam3TopCrop = 10.0;
|
||||||
|
private @Getter double Cam3BottomCrop = 20.0;
|
||||||
|
private @Getter double Cam3LeftCrop = 8.0;
|
||||||
|
private @Getter double Cam3RightCrop = 8.0;
|
||||||
|
private @Getter double Cam4TopCrop = 10.0;
|
||||||
|
private @Getter double Cam4BottomCrop = 20.0;
|
||||||
|
private @Getter double Cam4LeftCrop = 8.0;
|
||||||
|
private @Getter double Cam4RightCrop = 8.0;
|
||||||
|
private @Getter double Cam5TopCrop = 10.0;
|
||||||
|
private @Getter double Cam5BottomCrop = 20.0;
|
||||||
|
private @Getter double Cam5LeftCrop = 10.0;
|
||||||
|
private @Getter double Cam5RightCrop = 10.0;
|
||||||
|
|
||||||
private boolean needsave = false;
|
private boolean needsave = false;
|
||||||
|
|
||||||
public ConfigFile(){
|
public ConfigFile(){
|
||||||
@@ -48,6 +84,244 @@ public class ConfigFile {
|
|||||||
Load();
|
Load();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setAPI(boolean isProduction){
|
||||||
|
if (this.isProduction != isProduction){
|
||||||
|
this.isProduction = isProduction;
|
||||||
|
needsave = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
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;
|
||||||
|
needsave = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFlipCamera(boolean value){
|
||||||
|
if (FlipCamera != value){
|
||||||
|
FlipCamera = value;
|
||||||
|
needsave = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSharpnessThreshold(double value){
|
||||||
|
if (SharpnessThreshold != value){
|
||||||
|
SharpnessThreshold = value;
|
||||||
|
needsave = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCascadeScaleFactor(double value){
|
||||||
|
if (cascadeScaleFactor != value){
|
||||||
|
cascadeScaleFactor = value;
|
||||||
|
needsave = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCascadeMinNeighbors(int value){
|
||||||
|
if (cascadeMinNeighbors != value){
|
||||||
|
cascadeMinNeighbors = value;
|
||||||
|
needsave = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCascadeMinSize(int value){
|
||||||
|
if (cascadeMinSize != value){
|
||||||
|
cascadeMinSize = value;
|
||||||
|
needsave = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCascadeMaxSize(int value){
|
||||||
|
if (cascadeMaxSize != value){
|
||||||
|
cascadeMaxSize = value;
|
||||||
|
needsave = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void SetPhotoDirectory(String path){
|
public void SetPhotoDirectory(String path){
|
||||||
if (ValidString(path)){
|
if (ValidString(path)){
|
||||||
if (!path.equals(PhotoDirectory)){
|
if (!path.equals(PhotoDirectory)){
|
||||||
@@ -521,6 +795,11 @@ public class ConfigFile {
|
|||||||
if (prop.getProperty("FTPPass") == null) allcorrect = false;
|
if (prop.getProperty("FTPPass") == null) allcorrect = false;
|
||||||
if (prop.getProperty("FTPPath") == null) allcorrect = false;
|
if (prop.getProperty("FTPPath") == null) allcorrect = false;
|
||||||
if (prop.getProperty("PhotoDirectory") == null) allcorrect = false;
|
if (prop.getProperty("PhotoDirectory") == null) allcorrect = false;
|
||||||
|
if (prop.getProperty("MirrorCamera") == null) allcorrect = false;
|
||||||
|
if (prop.getProperty("FlipCamera") == null) allcorrect = false;
|
||||||
|
if (prop.getProperty("SharpnessThreshold") == null) allcorrect = false;
|
||||||
|
if (prop.getProperty("Production") == null) allcorrect = false;
|
||||||
|
|
||||||
|
|
||||||
if (prop.getProperty(CameraConfigEnum.CameraConfigLeft90.toString()) == null) allcorrect = false;
|
if (prop.getProperty(CameraConfigEnum.CameraConfigLeft90.toString()) == null) allcorrect = false;
|
||||||
if (prop.getProperty(CameraConfigEnum.CameraConfigLeft45.toString()) == null) allcorrect = false;
|
if (prop.getProperty(CameraConfigEnum.CameraConfigLeft45.toString()) == null) allcorrect = false;
|
||||||
@@ -528,6 +807,33 @@ public class ConfigFile {
|
|||||||
if (prop.getProperty(CameraConfigEnum.CameraConfigRight45.toString()) == null) allcorrect = false;
|
if (prop.getProperty(CameraConfigEnum.CameraConfigRight45.toString()) == null) allcorrect = false;
|
||||||
if (prop.getProperty(CameraConfigEnum.CameraConfigRight90.toString()) == null) allcorrect = false;
|
if (prop.getProperty(CameraConfigEnum.CameraConfigRight90.toString()) == null) allcorrect = false;
|
||||||
|
|
||||||
|
if (prop.getProperty("cascadeScaleFactor") == null) allcorrect = false;
|
||||||
|
if (prop.getProperty("cascadeMinNeighbors") == null) allcorrect = false;
|
||||||
|
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){
|
if (allcorrect){
|
||||||
AudioPhase1 = prop.getProperty("AudioPhase1");
|
AudioPhase1 = prop.getProperty("AudioPhase1");
|
||||||
AudioPhase2 = prop.getProperty("AudioPhase2");
|
AudioPhase2 = prop.getProperty("AudioPhase2");
|
||||||
@@ -554,7 +860,57 @@ public class ConfigFile {
|
|||||||
ConfigRight45 = gson.fromJson(prop.getProperty(CameraConfigEnum.CameraConfigRight45.toString()), CameraConfig.class);
|
ConfigRight45 = gson.fromJson(prop.getProperty(CameraConfigEnum.CameraConfigRight45.toString()), CameraConfig.class);
|
||||||
ConfigRight90 = gson.fromJson(prop.getProperty(CameraConfigEnum.CameraConfigRight90.toString()), CameraConfig.class);
|
ConfigRight90 = gson.fromJson(prop.getProperty(CameraConfigEnum.CameraConfigRight90.toString()), CameraConfig.class);
|
||||||
|
|
||||||
|
cascadeScaleFactor = cascadetoDouble(prop.getProperty("cascadeScaleFactor"));
|
||||||
|
cascadeMinNeighbors = toInt(prop.getProperty("cascadeMinNeighbors"));
|
||||||
|
cascadeMinSize = toInt(prop.getProperty("cascadeMinSize"));
|
||||||
|
cascadeMaxSize = toInt(prop.getProperty("cascadeMaxSize"));
|
||||||
|
|
||||||
|
if (MainApplication.detectorsList!=null){
|
||||||
|
MainApplication.detectorsList.forEach((i, d) -> {
|
||||||
|
if (d != null) {
|
||||||
|
System.out.println("Setting face detection parameters for detector: " + i);
|
||||||
|
d.setFaceMaxSize(cascadeMaxSize);
|
||||||
|
d.setFaceMinSize(cascadeMinSize);
|
||||||
|
d.setScaleFactor(cascadeScaleFactor);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Detectors.setFaceMaxSize(cascadeMaxSize);
|
||||||
|
// Detectors.setFaceMinSize(cascadeMinSize);
|
||||||
|
// Detectors.setScaleFactor(cascadeScaleFactor);
|
||||||
|
|
||||||
|
MirrorCamera = toBoolean(prop.getProperty("MirrorCamera"));
|
||||||
|
FlipCamera = toBoolean(prop.getProperty("FlipCamera"));
|
||||||
|
isProduction = toBoolean(prop.getProperty("Production"));
|
||||||
|
|
||||||
|
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");
|
Logger.info("Config Loaded");
|
||||||
|
MakeDirectories();
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
Logger.info("Config File Not Correct, Creating Default");
|
Logger.info("Config File Not Correct, Creating Default");
|
||||||
@@ -568,6 +924,22 @@ public class ConfigFile {
|
|||||||
CreateDefault();
|
CreateDefault();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private double cascadetoDouble(String cascadeScaleFactor) {
|
||||||
|
try{
|
||||||
|
return Double.parseDouble(cascadeScaleFactor);
|
||||||
|
} catch (Exception e){
|
||||||
|
return 1.1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private double toDouble(String value) {
|
||||||
|
try{
|
||||||
|
return Double.parseDouble(value);
|
||||||
|
} catch (Exception e){
|
||||||
|
return 0.0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void CreateDefault(){
|
private void CreateDefault(){
|
||||||
AudioPhase1 = Path.of(currentDirectory, "audio", "phase1.mp3").toString();
|
AudioPhase1 = Path.of(currentDirectory, "audio", "phase1.mp3").toString();
|
||||||
AudioPhase2 = Path.of(currentDirectory, "audio", "phase2.mp3").toString();
|
AudioPhase2 = Path.of(currentDirectory, "audio", "phase2.mp3").toString();
|
||||||
@@ -584,15 +956,60 @@ public class ConfigFile {
|
|||||||
FTPUser = "user";
|
FTPUser = "user";
|
||||||
FTPPass = "password";
|
FTPPass = "password";
|
||||||
FTPPath = "/";
|
FTPPath = "/";
|
||||||
PhotoDirectory = currentDirectory;
|
PhotoDirectory = "D:\\Capture";
|
||||||
SetDefaultCameraConfig(ConfigLeft90);
|
SetDefaultCameraConfig(ConfigLeft90);
|
||||||
SetDefaultCameraConfig(ConfigLeft45);
|
SetDefaultCameraConfig(ConfigLeft45);
|
||||||
SetDefaultCameraConfig(ConfigCenter);
|
SetDefaultCameraConfig(ConfigCenter);
|
||||||
SetDefaultCameraConfig(ConfigRight45);
|
SetDefaultCameraConfig(ConfigRight45);
|
||||||
SetDefaultCameraConfig(ConfigRight90);
|
SetDefaultCameraConfig(ConfigRight90);
|
||||||
|
cascadeScaleFactor = 1.05;
|
||||||
|
cascadeMinNeighbors = 3;
|
||||||
|
cascadeMinSize = 250;
|
||||||
|
cascadeMaxSize = 360;
|
||||||
|
if (MainApplication.detectorsList!= null) MainApplication.detectorsList.forEach((i, d) -> {
|
||||||
|
if (d != null) {
|
||||||
|
d.setFaceMaxSize(cascadeMaxSize);
|
||||||
|
d.setFaceMinSize(cascadeMinSize);
|
||||||
|
d.setScaleFactor(cascadeScaleFactor);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
// Detectors.setFaceMaxSize(cascadeMaxSize);
|
||||||
|
// Detectors.setFaceMinSize(cascadeMinSize);
|
||||||
|
// Detectors.setScaleFactor(cascadeScaleFactor);
|
||||||
|
MirrorCamera = false;
|
||||||
|
FlipCamera = false;
|
||||||
|
isProduction = true;
|
||||||
|
SharpnessThreshold = 850.0;
|
||||||
|
|
||||||
|
Cam1TopCrop = 10.0;
|
||||||
|
Cam1BottomCrop = 20.0;
|
||||||
|
Cam1LeftCrop = 8.0;
|
||||||
|
Cam1RightCrop = 8.0;
|
||||||
|
|
||||||
|
Cam2TopCrop = 10.0;
|
||||||
|
Cam2BottomCrop = 20.0;
|
||||||
|
Cam2LeftCrop = 8.0;
|
||||||
|
Cam2RightCrop = 8.0;
|
||||||
|
|
||||||
|
Cam3TopCrop = 10.0;
|
||||||
|
Cam3BottomCrop = 20.0;
|
||||||
|
Cam3LeftCrop = 8.0;
|
||||||
|
Cam3RightCrop = 8.0;
|
||||||
|
|
||||||
|
Cam4TopCrop = 10.0;
|
||||||
|
Cam4BottomCrop = 20.0;
|
||||||
|
Cam4LeftCrop = 8.0;
|
||||||
|
Cam4RightCrop = 8.0;
|
||||||
|
|
||||||
|
Cam5TopCrop = 10.0;
|
||||||
|
Cam5BottomCrop = 20.0;
|
||||||
|
Cam5LeftCrop = 8.0;
|
||||||
|
Cam5RightCrop = 8.0;
|
||||||
|
|
||||||
Logger.info("Default Config Created");
|
Logger.info("Default Config Created");
|
||||||
needsave = true;
|
needsave = true;
|
||||||
Save();
|
Save();
|
||||||
|
MakeDirectories();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SetDefaultCameraConfig(CameraConfig cc){
|
private void SetDefaultCameraConfig(CameraConfig cc){
|
||||||
@@ -640,6 +1057,38 @@ public class ConfigFile {
|
|||||||
prop.setProperty(CameraConfigEnum.CameraConfigRight45.toString(), gson.toJson(ConfigRight45));
|
prop.setProperty(CameraConfigEnum.CameraConfigRight45.toString(), gson.toJson(ConfigRight45));
|
||||||
prop.setProperty(CameraConfigEnum.CameraConfigRight90.toString(), gson.toJson(ConfigRight90));
|
prop.setProperty(CameraConfigEnum.CameraConfigRight90.toString(), gson.toJson(ConfigRight90));
|
||||||
|
|
||||||
|
prop.setProperty("cascadeScaleFactor", String.valueOf(cascadeScaleFactor));
|
||||||
|
prop.setProperty("cascadeMinNeighbors", String.valueOf(cascadeMinNeighbors));
|
||||||
|
prop.setProperty("cascadeMinSize", String.valueOf(cascadeMinSize));
|
||||||
|
prop.setProperty("cascadeMaxSize", String.valueOf(cascadeMaxSize));
|
||||||
|
|
||||||
|
prop.setProperty("MirrorCamera", String.valueOf(MirrorCamera));
|
||||||
|
prop.setProperty("FlipCamera", String.valueOf(FlipCamera));
|
||||||
|
prop.setProperty("Production", String.valueOf(isProduction));
|
||||||
|
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{
|
try{
|
||||||
prop.store(new FileOutputStream(Path.of(currentDirectory, "config.properties").toString()), null);
|
prop.store(new FileOutputStream(Path.of(currentDirectory, "config.properties").toString()), null);
|
||||||
Logger.info("Config Saved");
|
Logger.info("Config Saved");
|
||||||
@@ -647,4 +1096,23 @@ public class ConfigFile {
|
|||||||
Logger.error("Error Save Config: " + e.getMessage());
|
Logger.error("Error Save Config: " + e.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private @Getter String FullQualityDirectory;
|
||||||
|
private @Getter String FullQualityCropDirectory;
|
||||||
|
private @Getter String CompressedDirectory;
|
||||||
|
private @Getter String CompressedCropDirectory;
|
||||||
|
private @Getter String ThumbsDirectory;
|
||||||
|
|
||||||
|
private void MakeDirectories(){
|
||||||
|
FullQualityDirectory = Path.of(PhotoDirectory,"FullQuality").toString();
|
||||||
|
FullQualityCropDirectory = Path.of(PhotoDirectory,"FullQualityCrop").toString();
|
||||||
|
CompressedDirectory = Path.of(PhotoDirectory,"Compressed").toString();
|
||||||
|
CompressedCropDirectory = Path.of(PhotoDirectory,"CompressedCrop").toString();
|
||||||
|
ThumbsDirectory = Path.of(PhotoDirectory,"thumbs").toString();
|
||||||
|
MakeDirectory(FullQualityDirectory);
|
||||||
|
MakeDirectory(FullQualityCropDirectory);
|
||||||
|
MakeDirectory(CompressedDirectory);
|
||||||
|
MakeDirectory(CompressedCropDirectory);
|
||||||
|
MakeDirectory(ThumbsDirectory);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,33 +3,55 @@ package Config;
|
|||||||
|
|
||||||
import com.google.gson.Gson;
|
import com.google.gson.Gson;
|
||||||
import com.google.zxing.MultiFormatReader;
|
import com.google.zxing.MultiFormatReader;
|
||||||
|
import javafx.application.Platform;
|
||||||
import javafx.embed.swing.SwingFXUtils;
|
import javafx.embed.swing.SwingFXUtils;
|
||||||
|
import javafx.scene.control.Alert;
|
||||||
|
import javafx.scene.control.Label;
|
||||||
|
import javafx.scene.control.TextArea;
|
||||||
|
import javafx.scene.control.TextField;
|
||||||
import javafx.scene.image.Image;
|
import javafx.scene.image.Image;
|
||||||
import lombok.val;
|
import javafx.scene.image.PixelFormat;
|
||||||
|
import javafx.scene.image.WritableImage;
|
||||||
|
import javafx.stage.Stage;
|
||||||
|
import lombok.NonNull;
|
||||||
|
import org.bytedeco.javacv.Frame;
|
||||||
import org.bytedeco.javacv.Java2DFrameConverter;
|
import org.bytedeco.javacv.Java2DFrameConverter;
|
||||||
import org.bytedeco.javacv.OpenCVFrameConverter;
|
import org.bytedeco.javacv.OpenCVFrameConverter;
|
||||||
|
import org.bytedeco.opencv.global.opencv_core;
|
||||||
import org.bytedeco.opencv.global.opencv_imgcodecs;
|
import org.bytedeco.opencv.global.opencv_imgcodecs;
|
||||||
import org.bytedeco.opencv.global.opencv_imgproc;
|
import org.bytedeco.opencv.global.opencv_imgproc;
|
||||||
import org.bytedeco.opencv.opencv_core.Mat;
|
import org.bytedeco.opencv.opencv_core.Mat;
|
||||||
|
import org.bytedeco.opencv.opencv_core.Rect;
|
||||||
import org.bytedeco.opencv.opencv_core.Size;
|
import org.bytedeco.opencv.opencv_core.Size;
|
||||||
import org.bytedeco.opencv.opencv_objdetect.CascadeClassifier;
|
import org.bytedeco.opencv.opencv_core.UMat;
|
||||||
import org.tinylog.Logger;
|
import org.tinylog.Logger;
|
||||||
|
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
|
import java.awt.image.DataBufferByte;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.net.Inet4Address;
|
import java.net.Inet4Address;
|
||||||
import java.net.Inet6Address;
|
import java.net.Inet6Address;
|
||||||
import java.net.InetAddress;
|
import java.net.InetAddress;
|
||||||
|
import java.nio.ByteBuffer;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
|
import java.nio.file.attribute.BasicFileAttributes;
|
||||||
|
import java.nio.file.attribute.FileTime;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.concurrent.CountDownLatch;
|
||||||
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
|
import static org.bytedeco.opencv.global.opencv_core.CV_64F;
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
public class SomeCodes {
|
public class SomeCodes {
|
||||||
|
// dermiesMode = true means for Dermies Clinic, false means for Erha Clinic
|
||||||
|
public static boolean DermiesMode = false;
|
||||||
public final static String currentDirectory = System.getProperty("user.dir");
|
public final static String currentDirectory = System.getProperty("user.dir");
|
||||||
private static final DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
private static final DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
||||||
public static final Java2DFrameConverter converter = new Java2DFrameConverter();
|
public static final Java2DFrameConverter converter = new Java2DFrameConverter();
|
||||||
@@ -37,6 +59,10 @@ public class SomeCodes {
|
|||||||
public static final Gson gson = new Gson();
|
public static final Gson gson = new Gson();
|
||||||
public static final ConfigFile config = new ConfigFile();
|
public static final ConfigFile config = new ConfigFile();
|
||||||
|
|
||||||
|
public static String GetDateTimeString(){
|
||||||
|
return LocalDateTime.now().format(dtf);
|
||||||
|
}
|
||||||
|
|
||||||
public static Path GetLogsPath(){
|
public static Path GetLogsPath(){
|
||||||
return Path.of(currentDirectory, "logs");
|
return Path.of(currentDirectory, "logs");
|
||||||
}
|
}
|
||||||
@@ -88,12 +114,21 @@ public class SomeCodes {
|
|||||||
Mat resized = new Mat();
|
Mat resized = new Mat();
|
||||||
opencv_imgproc.resize(mat, resized, new org.bytedeco.opencv.opencv_core.Size(width, height));
|
opencv_imgproc.resize(mat, resized, new org.bytedeco.opencv.opencv_core.Size(width, height));
|
||||||
BufferedImage img = converter.convert(matconverter.convert(resized));
|
BufferedImage img = converter.convert(matconverter.convert(resized));
|
||||||
|
resized.release();
|
||||||
return SwingFXUtils.toFXImage(img, null);
|
return SwingFXUtils.toFXImage(img, null);
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String RectToString(Rect rect){
|
||||||
|
if (rect!=null){
|
||||||
|
return "X:"+rect.x()+",Y:"+rect.y()+",W:"+rect.width()+",H:"+rect.height();
|
||||||
|
}
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Find thumbfile in thumbs directory
|
* Find thumbfile in thumbs directory
|
||||||
* @param sourcejpg source jpg file
|
* @param sourcejpg source jpg file
|
||||||
@@ -101,12 +136,7 @@ public class SomeCodes {
|
|||||||
*/
|
*/
|
||||||
public static String FindThumbfile(String sourcejpg){
|
public static String FindThumbfile(String sourcejpg){
|
||||||
File sourcefile = new File(sourcejpg);
|
File sourcefile = new File(sourcejpg);
|
||||||
Path thumbpath = Path.of(sourcefile.getParent(), "thumbs");
|
Path thumbpath = Path.of(config.getThumbsDirectory());
|
||||||
try{
|
|
||||||
if (!Files.exists(thumbpath)) Files.createDirectories(thumbpath);
|
|
||||||
} catch (Exception e){
|
|
||||||
Logger.error("Error creating thumbs directory: "+thumbpath+", Msg : "+e.getMessage());
|
|
||||||
}
|
|
||||||
Path thumbfile = thumbpath.resolve(sourcefile.getName());
|
Path thumbfile = thumbpath.resolve(sourcefile.getName());
|
||||||
if (Files.exists(thumbfile)){
|
if (Files.exists(thumbfile)){
|
||||||
return thumbfile.toString();
|
return thumbfile.toString();
|
||||||
@@ -114,6 +144,27 @@ public class SomeCodes {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void Wait(int millis){
|
||||||
|
try{
|
||||||
|
Thread.sleep(millis);
|
||||||
|
} catch (Exception e){
|
||||||
|
Logger.error("Error waiting: "+e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void WaitAsync(long millis, String threadname, Consumer<Void> success){
|
||||||
|
Thread thread = new Thread(()->{
|
||||||
|
try {
|
||||||
|
Thread.sleep(millis);
|
||||||
|
} catch (Exception ignored){ }
|
||||||
|
if (success != null) success.accept(null);
|
||||||
|
});
|
||||||
|
thread.setName(threadname);
|
||||||
|
thread.setDaemon(true);
|
||||||
|
thread.start();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Make thumbfile from source jpg file
|
* Make thumbfile from source jpg file
|
||||||
* @param sourcejpg source jpg file
|
* @param sourcejpg source jpg file
|
||||||
@@ -124,23 +175,23 @@ public class SomeCodes {
|
|||||||
try{
|
try{
|
||||||
File ff = new File(sourcejpg);
|
File ff = new File(sourcejpg);
|
||||||
if (ff.exists()){
|
if (ff.exists()){
|
||||||
Path thumbpath = Path.of(ff.getParent(), "thumbs");
|
String thumbfile = Path.of(config.getPhotoDirectory(),"thumbs", ff.getName()).toString();
|
||||||
if (!Files.exists(thumbpath)) Files.createDirectories(thumbpath);
|
|
||||||
String thumbfile = thumbpath.resolve(ff.getName()).toString();
|
|
||||||
File thumb = new File(thumbfile);
|
File thumb = new File(thumbfile);
|
||||||
if (thumb.exists()) return thumbfile;
|
if (thumb.exists()) {
|
||||||
|
return thumbfile;
|
||||||
|
}
|
||||||
|
|
||||||
Mat source = opencv_imgcodecs.imread(sourcejpg);
|
Mat source = opencv_imgcodecs.imread(sourcejpg);
|
||||||
if (source!=null && !source.empty()){
|
if (source!=null && !source.empty()){
|
||||||
Mat resized = new Mat();
|
Mat resized = new Mat();
|
||||||
opencv_imgproc.resize(source, resized, thumbsize);
|
opencv_imgproc.resize(source, resized, thumbsize);
|
||||||
opencv_imgcodecs.imwrite(thumbfile, resized);
|
opencv_imgcodecs.imwrite(thumbfile, resized);
|
||||||
Logger.info("Thumbfile created: "+thumbfile);
|
resized.release();
|
||||||
return thumbfile;
|
return thumbfile;
|
||||||
} else Logger.info("MakeThumbfile failed, Source File not valid image : "+sourcejpg);
|
}
|
||||||
} else Logger.info("MakeThumbfile failed, Source File not found: "+sourcejpg);
|
}
|
||||||
} catch (Exception e){
|
} catch (Exception e){
|
||||||
Logger.error("Error making thumbfile: "+sourcejpg+", Msg : "+e.getMessage());
|
System.out.println("Error making thumbfile: "+sourcejpg+", Msg : "+e.getMessage());
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -153,6 +204,79 @@ public class SomeCodes {
|
|||||||
return x.format(dtf);
|
return x.format(dtf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static LocalDateTime StringToLocalDateTime(String x){
|
||||||
|
if (ValidString(x)){
|
||||||
|
try{
|
||||||
|
return LocalDateTime.parse(x, dtf);
|
||||||
|
} catch (Exception e){
|
||||||
|
Logger.error("Error parsing date: "+x+", Msg : "+e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static LocalDateTime GetCreationTime(Path p){
|
||||||
|
try{
|
||||||
|
BasicFileAttributes attr = Files.readAttributes(p, BasicFileAttributes.class);
|
||||||
|
FileTime ft = attr.creationTime();
|
||||||
|
return LocalDateTime.ofInstant(ft.toInstant(), java.time.ZoneId.systemDefault());
|
||||||
|
} catch (Exception e){
|
||||||
|
Logger.error("Error getting creation time: "+p+", Msg : "+e.getMessage());
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static @NonNull Path[] GetFilesInDirectory(String path) {
|
||||||
|
if (ValidDirectory(path)) {
|
||||||
|
try{
|
||||||
|
return Files.list(Path.of(path))
|
||||||
|
.filter(Files::isRegularFile)
|
||||||
|
.toArray(Path[]::new);
|
||||||
|
} catch (Exception ignored){}
|
||||||
|
}
|
||||||
|
return new Path[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static boolean Delete(String... path){
|
||||||
|
if (path!=null && path.length>0){
|
||||||
|
Boolean[] result = new Boolean[path.length];
|
||||||
|
for(int i=0; i<path.length; i++){
|
||||||
|
try{
|
||||||
|
result[i] = Files.deleteIfExists(Path.of(path[i]));
|
||||||
|
if (result[i]) Logger.info("Delete: "+path[i]);
|
||||||
|
} catch (Exception e){
|
||||||
|
result[i] = false;
|
||||||
|
Logger.error("Error deleting file: "+path[i]+", Msg : "+e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return Arrays.stream(result).allMatch(x->x);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean Delete(Path... path){
|
||||||
|
if (path!=null && path.length>0){
|
||||||
|
Boolean[] result = new Boolean[path.length];
|
||||||
|
for(int i=0; i<path.length; i++){
|
||||||
|
try{
|
||||||
|
result[i] = Files.deleteIfExists(path[i]);
|
||||||
|
if (result[i]) Logger.info("Delete: "+path[i]);
|
||||||
|
} catch (Exception e){
|
||||||
|
result[i] = false;
|
||||||
|
Logger.error("Error deleting file: "+path[i]+", Msg : "+e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return Arrays.stream(result).allMatch(x->x);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Extract resource file to current directory
|
||||||
|
* @param filename resource file name
|
||||||
|
* @return extracted file path if success, or null if failed
|
||||||
|
*/
|
||||||
public static String ExtractResource(String filename){
|
public static String ExtractResource(String filename){
|
||||||
try{
|
try{
|
||||||
File destination = new File(currentDirectory, filename);
|
File destination = new File(currentDirectory, filename);
|
||||||
@@ -171,6 +295,11 @@ public class SomeCodes {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if path is valid directory
|
||||||
|
* @param path directory path
|
||||||
|
* @return true if valid directory, false if not valid directory
|
||||||
|
*/
|
||||||
public static boolean ValidDirectory(String path){
|
public static boolean ValidDirectory(String path){
|
||||||
if (ValidString(path)){
|
if (ValidString(path)){
|
||||||
File ff = new File(path);
|
File ff = new File(path);
|
||||||
@@ -179,10 +308,20 @@ public class SomeCodes {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if port number is valid
|
||||||
|
* @param port port number
|
||||||
|
* @return true if valid port number, false if not valid port number
|
||||||
|
*/
|
||||||
public static boolean ValidPortNumber(int port){
|
public static boolean ValidPortNumber(int port){
|
||||||
return port>0 && port<65536;
|
return port>0 && port<65536;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert string to integer
|
||||||
|
* @param x string
|
||||||
|
* @return integer value if success, or 0 if failed
|
||||||
|
*/
|
||||||
public static int toInt(String x){
|
public static int toInt(String x){
|
||||||
try {
|
try {
|
||||||
return Integer.parseInt(x);
|
return Integer.parseInt(x);
|
||||||
@@ -191,6 +330,15 @@ public class SomeCodes {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean toBoolean(String x){
|
||||||
|
return x!=null && x.equalsIgnoreCase("true");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if string is valid IPV4 address
|
||||||
|
* @param ipaddress IPV4 address
|
||||||
|
* @return true if valid IPV4 address, false if not valid IPV4 address
|
||||||
|
*/
|
||||||
public static boolean ValidIPV4(String ipaddress){
|
public static boolean ValidIPV4(String ipaddress){
|
||||||
if (ValidString(ipaddress)){
|
if (ValidString(ipaddress)){
|
||||||
try{
|
try{
|
||||||
@@ -206,6 +354,11 @@ public class SomeCodes {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if string is valid IPV6 address
|
||||||
|
* @param ipaddress IPV6 address
|
||||||
|
* @return true if valid IPV6 address, false if not valid IPV6 address
|
||||||
|
*/
|
||||||
public static boolean ValidIPV6(String ipaddress){
|
public static boolean ValidIPV6(String ipaddress){
|
||||||
if (ValidString(ipaddress)){
|
if (ValidString(ipaddress)){
|
||||||
try{
|
try{
|
||||||
@@ -221,6 +374,11 @@ public class SomeCodes {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get file name from file path
|
||||||
|
* @param filepath file path
|
||||||
|
* @return file name if success, or empty string if failed
|
||||||
|
*/
|
||||||
public static String GetFileName(String filepath){
|
public static String GetFileName(String filepath){
|
||||||
if (ValidString(filepath)){
|
if (ValidString(filepath)){
|
||||||
File ff = new File(filepath);
|
File ff = new File(filepath);
|
||||||
@@ -231,6 +389,11 @@ public class SomeCodes {
|
|||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if string is valid file
|
||||||
|
* @param filename file name
|
||||||
|
* @return true if valid file, false if not valid file
|
||||||
|
*/
|
||||||
public static boolean ValidFile(String filename){
|
public static boolean ValidFile(String filename){
|
||||||
if (ValidString(filename)){
|
if (ValidString(filename)){
|
||||||
File ff = new File(filename);
|
File ff = new File(filename);
|
||||||
@@ -239,13 +402,124 @@ public class SomeCodes {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean ValidString(String x){
|
/**
|
||||||
if (x!=null){
|
* Read file as byte array
|
||||||
return !x.isEmpty();
|
* @param filename file name
|
||||||
|
* @return byte array if success, or null if failed
|
||||||
|
*/
|
||||||
|
public static byte[] ReadFile(String filename){
|
||||||
|
if (ValidFile(filename)){
|
||||||
|
try{
|
||||||
|
return Files.readAllBytes(Path.of(filename));
|
||||||
|
} catch (Exception e){
|
||||||
|
Logger.error("Error reading file: "+filename+", Msg : "+e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Resize Rect
|
||||||
|
* @param original original Rect
|
||||||
|
* @param scaleX scale factor
|
||||||
|
* @param scaleY scale factor
|
||||||
|
* @param Xoffset X offset, positive value to increase width, negative value to decrease width
|
||||||
|
* @param Yoffset Y offset, positive value to increase height, negative value to decrease height
|
||||||
|
* @return resized Rect if success, or null if failed
|
||||||
|
*/
|
||||||
|
public static Rect ResizeRect(Rect original, double scaleX, double scaleY, int Xoffset, int Yoffset){
|
||||||
|
if (original!=null){
|
||||||
|
int newX = (int)(original.x()*scaleX);
|
||||||
|
newX -= Xoffset;
|
||||||
|
if (newX<0) newX = 0;
|
||||||
|
int newY = (int)(original.y()*scaleY);
|
||||||
|
newY -= Yoffset;
|
||||||
|
if (newY<0) newY = 0;
|
||||||
|
int newWidth = (int)(original.width()*scaleX);
|
||||||
|
newWidth += Xoffset*2;
|
||||||
|
int newHeight = (int)(original.height()*scaleX);
|
||||||
|
newHeight += Yoffset*2;
|
||||||
|
return new Rect(newX, newY, newWidth, newHeight);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static UMat CropUMat(UMat source, Rect ROI){
|
||||||
|
if (source!=null && !source.empty() && ValidROI(ROI)){
|
||||||
|
int x = ROI.x();
|
||||||
|
int y = ROI.y();
|
||||||
|
int width = ROI.width();
|
||||||
|
int height = ROI.height();
|
||||||
|
|
||||||
|
if (x>=0 && y>=0 && width>0 && height>0){
|
||||||
|
if (x+width>source.cols()) width = source.cols()-x;
|
||||||
|
if (y+height>source.rows()) height = source.rows()-y;
|
||||||
|
if (width>0 && height>0){
|
||||||
|
Rect crop = new Rect(x, y, width, height);
|
||||||
|
return new UMat(source, crop);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean Save(UMat source, String filename, int[] param){
|
||||||
|
if (source!=null && !source.empty() && ValidString(filename)){
|
||||||
|
try{
|
||||||
|
return opencv_imgcodecs.imwrite(filename, source, param);
|
||||||
|
} catch (Exception e){
|
||||||
|
Logger.error("Error saving file: "+filename+", Msg : "+e.getMessage());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Concatenate byte arrays
|
||||||
|
* @param args byte arrays
|
||||||
|
* @return concatenated byte array if success, or null if failed
|
||||||
|
*/
|
||||||
|
public static byte[] Concat(byte[]... args){
|
||||||
|
if (args!=null && args.length>0){
|
||||||
|
int total = 0;
|
||||||
|
for(byte[] x : args){
|
||||||
|
if (x!=null && x.length>0){
|
||||||
|
total += x.length;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (total>0){
|
||||||
|
byte[] result = new byte[total];
|
||||||
|
int offset = 0;
|
||||||
|
for(byte[] x : args){
|
||||||
|
if (x!=null && x.length>0){
|
||||||
|
System.arraycopy(x, 0, result, offset, x.length);
|
||||||
|
offset += x.length;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if string is valid
|
||||||
|
* @param x string
|
||||||
|
* @return true if valid, false if not valid
|
||||||
|
*/
|
||||||
|
public static boolean ValidString(String x){
|
||||||
|
if (x!=null){
|
||||||
|
return !x.isBlank();
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Open picture in default viewer
|
||||||
|
* @param filename picture file name
|
||||||
|
*/
|
||||||
public static void OpenPictureInDefaultViewer(String filename){
|
public static void OpenPictureInDefaultViewer(String filename){
|
||||||
try{
|
try{
|
||||||
File ff = new File(filename);
|
File ff = new File(filename);
|
||||||
@@ -275,20 +549,16 @@ public class SomeCodes {
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
public static CascadeClassifier faceDetector;
|
|
||||||
public static void LoadFaceDetector(){
|
|
||||||
String filename = SomeCodes.ExtractResource("/haarcascade_frontalface_alt.xml");
|
|
||||||
if (filename!=null) {
|
|
||||||
if (faceDetector==null) {
|
|
||||||
faceDetector = new CascadeClassifier(filename);
|
|
||||||
Logger.info("FaceDetector loaded");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Make array from string arguments
|
||||||
|
* @param args string arguments
|
||||||
|
* @return array of strings if success, or empty array if failed
|
||||||
|
*/
|
||||||
public static String[] MakeArray(String... args){
|
public static String[] MakeArray(String... args){
|
||||||
if (args!=null && args.length>0){
|
if (args!=null && args.length>0){
|
||||||
List<String> ll = new ArrayList<String>();
|
List<String> ll = new ArrayList<>();
|
||||||
for(String x : args){
|
for(String x : args){
|
||||||
if (ValidString(x)) ll.add(x);
|
if (ValidString(x)) ll.add(x);
|
||||||
}
|
}
|
||||||
@@ -297,8 +567,346 @@ public class SomeCodes {
|
|||||||
return new String[0];
|
return new String[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean ValidBarCode(String value){
|
||||||
|
if (value!=null && value.length()==10){
|
||||||
|
boolean valid = true;
|
||||||
|
for(int i=0; i<value.length(); i++){
|
||||||
|
if (!Character.isDigit(value.charAt(i))){
|
||||||
|
valid = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return valid;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if Valid PatientID found
|
||||||
|
* Patient ID is 10 digits number
|
||||||
|
* @param patientid Patient ID
|
||||||
|
* @return true if valid, false if not valid
|
||||||
|
*/
|
||||||
|
public static boolean ValidMedicalRecordId(String patientid){
|
||||||
|
if (patientid!=null && !patientid.isBlank()){
|
||||||
|
boolean valid = true;
|
||||||
|
for(int i=0; i<patientid.length(); i++){
|
||||||
|
if (!Character.isDigit(patientid.charAt(i))){
|
||||||
|
valid = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return valid;
|
||||||
|
} else return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check Region of Interest is a valid Rect
|
||||||
|
* @param ROI Region of Interest
|
||||||
|
* @return true if valid, false if not valid
|
||||||
|
*/
|
||||||
|
public static boolean ValidROI(Rect ROI){
|
||||||
|
if (ROI!=null){
|
||||||
|
if (ROI.x()>=0){
|
||||||
|
if (ROI.y()>=0){
|
||||||
|
if (ROI.width()>0){
|
||||||
|
return ROI.height() > 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void Print(String... x){
|
||||||
|
if (x != null){
|
||||||
|
for(String xx : x){
|
||||||
|
System.out.println(xx);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if Region of Interest is inside UMat
|
||||||
|
* @param ROI Region of Interest
|
||||||
|
* @param mat UMat
|
||||||
|
* @return true if inside, false if not inside
|
||||||
|
*/
|
||||||
|
public static boolean ROIInsideUMat(Rect ROI, UMat mat){
|
||||||
|
if (ValidROI(ROI)){
|
||||||
|
if (mat!=null){
|
||||||
|
return ROI.x()>=0 && ROI.y()>=0 &&
|
||||||
|
ROI.x()+ROI.width()<=mat.cols() &&
|
||||||
|
ROI.y()+ROI.height()<=mat.rows();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if Region of Interest 1 is same with Region of Interest 2
|
||||||
|
* @param ROI1 Region of Interest 1
|
||||||
|
* @param ROI2 Region of Interest 2
|
||||||
|
* @return true if same, false if different
|
||||||
|
*/
|
||||||
|
public static boolean IsSameROI(Rect ROI1, Rect ROI2){
|
||||||
|
if (ValidROI(ROI1) && ValidROI(ROI2)){
|
||||||
|
return ROI1.x()==ROI2.x() && ROI1.y()==ROI2.y() &&
|
||||||
|
ROI1.width()==ROI2.width() && ROI1.height()==ROI2.height();
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if Rect 1 is inside Rect 2
|
||||||
|
* @param smaller Rect 1
|
||||||
|
* @param bigger Rect 2
|
||||||
|
* @return true if inside, false if not inside
|
||||||
|
*/
|
||||||
|
public static boolean IsInsideRect(Rect smaller, Rect bigger){
|
||||||
|
if (smaller!=null && bigger!=null){
|
||||||
|
return smaller.x()>=bigger.x() && smaller.y()>=bigger.y() &&
|
||||||
|
smaller.x()+smaller.width()<=bigger.x()+bigger.width() &&
|
||||||
|
smaller.y()+smaller.height()<=bigger.y()+bigger.height();
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Make directory if not exists
|
||||||
|
* @param path directory path
|
||||||
|
*/
|
||||||
|
public static void MakeDirectory(String path){
|
||||||
|
if (ValidString(path)){
|
||||||
|
File ff = new File(path);
|
||||||
|
if (!ff.isDirectory()){
|
||||||
|
try{
|
||||||
|
Files.createDirectories(ff.toPath());
|
||||||
|
Logger.info("Directory created: "+path);
|
||||||
|
} catch (Exception e){
|
||||||
|
Logger.info("Error creating directory: "+path+", Msg : "+e.getMessage());
|
||||||
|
}
|
||||||
|
} else Logger.info("Directory exists: "+path);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static short ToShort(String x){
|
||||||
|
try{
|
||||||
|
return Short.parseShort(x);
|
||||||
|
} catch (Exception e){
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void LabelSetText(Label lbl, String text, String style){
|
||||||
|
if (lbl!=null){
|
||||||
|
if (text!=null){
|
||||||
|
if (text.equals(lbl.getText())) return;
|
||||||
|
if (Platform.isFxApplicationThread()){
|
||||||
|
lbl.setText(text);
|
||||||
|
if (style!=null && !style.isBlank()){
|
||||||
|
lbl.setStyle(style);
|
||||||
|
}
|
||||||
|
} else{
|
||||||
|
Platform.runLater(()-> {
|
||||||
|
lbl.setText(text);
|
||||||
|
if (style!=null && !style.isBlank()){
|
||||||
|
lbl.setStyle(style);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void TextAreaSetText(TextArea ta, String text){
|
||||||
|
if (ta!=null){
|
||||||
|
if (text!=null){
|
||||||
|
if (text.equals(ta.getText())) return;
|
||||||
|
if (Platform.isFxApplicationThread()){
|
||||||
|
ta.setText(text);
|
||||||
|
} else{
|
||||||
|
Platform.runLater(()-> ta.setText(text));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void TextFieldSetText(TextField tf, String text){
|
||||||
|
if (tf!=null){
|
||||||
|
if (text!=null){
|
||||||
|
if (text.equals(tf.getText())) return;
|
||||||
|
if (Platform.isFxApplicationThread()){
|
||||||
|
tf.setText(text);
|
||||||
|
} else{
|
||||||
|
Platform.runLater(()-> tf.setText(text));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public static void LabelVisible(Label label, boolean visible){
|
||||||
|
if (label!=null){
|
||||||
|
if (visible){
|
||||||
|
if (Platform.isFxApplicationThread()){
|
||||||
|
label.setVisible(true);
|
||||||
|
} else{
|
||||||
|
Platform.runLater(()-> label.setVisible(true));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (Platform.isFxApplicationThread()){
|
||||||
|
label.setVisible(false);
|
||||||
|
} else{
|
||||||
|
Platform.runLater(()-> label.setVisible(false));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void ShowAlert(Alert.AlertType type, String title, String header, String content){
|
||||||
|
Alert alert = new Alert(type);
|
||||||
|
alert.setTitle(title);
|
||||||
|
alert.setHeaderText(header);
|
||||||
|
alert.setContentText(content);
|
||||||
|
alert.showAndWait();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static double CalculateSharpness(String filename){
|
||||||
|
if (ValidFile(filename)){
|
||||||
|
try(Mat mat = opencv_imgcodecs.imread(filename)){
|
||||||
|
return CalculateSharpness(mat);
|
||||||
|
} catch (Exception e){
|
||||||
|
Logger.error("Error calculating sharpness: "+filename+", Msg : "+e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static double FindLowestValue(double... values){
|
||||||
|
if (values!=null && values.length>0){
|
||||||
|
double lowest = values[0];
|
||||||
|
for(double x : values){
|
||||||
|
if (x>=0){
|
||||||
|
if (x<lowest){
|
||||||
|
lowest = x;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
return lowest;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean ValidDouble(String x){
|
||||||
|
try{
|
||||||
|
double xx = Double.parseDouble(x);
|
||||||
|
return true;
|
||||||
|
} catch (Exception ignored){
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Calculate sharpness of image
|
||||||
|
* @param mat image in UMat format, expected in gray scale
|
||||||
|
* @return sharpness value
|
||||||
|
*/
|
||||||
|
public static double CalculateSharpness(Mat mat){
|
||||||
|
|
||||||
|
if (mat!=null && !mat.empty()){
|
||||||
|
if (mat.channels()!=1){
|
||||||
|
Mat grey = new Mat();
|
||||||
|
opencv_imgproc.cvtColor(mat, grey, opencv_imgproc.COLOR_BGR2GRAY);
|
||||||
|
mat = grey;
|
||||||
|
}
|
||||||
|
|
||||||
|
opencv_imgproc.equalizeHist(mat, mat);
|
||||||
|
|
||||||
|
Mat laplacian = new Mat();
|
||||||
|
|
||||||
|
opencv_imgproc.Laplacian(mat, laplacian, CV_64F);
|
||||||
|
|
||||||
|
Mat mean = new Mat(1,1, CV_64F);
|
||||||
|
Mat stddev = new Mat(1,1, CV_64F);
|
||||||
|
|
||||||
|
opencv_core.meanStdDev(laplacian, mean, stddev);
|
||||||
|
|
||||||
|
Mat _std = new Mat();
|
||||||
|
stddev.copyTo(_std);
|
||||||
|
|
||||||
|
double value = _std.createIndexer().getDouble(0,0);
|
||||||
|
_std.release();
|
||||||
|
laplacian.release();
|
||||||
|
return Math.pow(value,2);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean IsBlurred(Mat mat, double threshold){
|
||||||
|
return CalculateSharpness(mat)<threshold;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Image MatToImage(Mat mat){
|
||||||
|
Frame frame = matconverter.convert(mat);
|
||||||
|
BufferedImage bufferedImage = matToBufferedImage(mat);
|
||||||
|
return SwingFXUtils.toFXImage(bufferedImage, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static WritableImage matToWritableImage(Mat mat){
|
||||||
|
int cols = mat.cols();
|
||||||
|
int rows = mat.rows();
|
||||||
|
WritableImage writableImage = new WritableImage(cols, rows);
|
||||||
|
ByteBuffer buffer = mat.createBuffer();
|
||||||
|
PixelFormat<ByteBuffer> pixelFormat = PixelFormat.getByteRgbInstance();
|
||||||
|
writableImage.getPixelWriter().setPixels(0, 0, cols, rows, pixelFormat, buffer, cols * 3);
|
||||||
|
return writableImage;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static BufferedImage matToBufferedImage(Mat mat){
|
||||||
|
int type = BufferedImage.TYPE_BYTE_GRAY;
|
||||||
|
if (mat.channels() > 1) {
|
||||||
|
type = BufferedImage.TYPE_3BYTE_BGR;
|
||||||
|
}
|
||||||
|
BufferedImage image = new BufferedImage(mat.cols(), mat.rows(), type);
|
||||||
|
byte[] data = ((DataBufferByte) image.getRaster().getDataBuffer()).getData();
|
||||||
|
|
||||||
|
mat.data().get(data);
|
||||||
|
return image;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Close Stage if not null
|
||||||
|
* and wait until closed
|
||||||
|
* @param obj Stage object to close
|
||||||
|
*/
|
||||||
|
public static void closeStage(Stage obj) throws InterruptedException {
|
||||||
|
if (obj != null) {
|
||||||
|
if (Platform.isFxApplicationThread()) {
|
||||||
|
// Already on FX thread, just close directly
|
||||||
|
obj.close();
|
||||||
|
} else {
|
||||||
|
CountDownLatch latch = new CountDownLatch(1);
|
||||||
|
Platform.runLater(() -> {
|
||||||
|
try {
|
||||||
|
obj.close();
|
||||||
|
} finally {
|
||||||
|
latch.countDown();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
// Wait for runLater task to finish
|
||||||
|
latch.await();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
125
src/main/java/Database/PhotoCleaner.java
Normal file
125
src/main/java/Database/PhotoCleaner.java
Normal file
@@ -0,0 +1,125 @@
|
|||||||
|
package Database;
|
||||||
|
|
||||||
|
import Config.SomeCodes;
|
||||||
|
import org.tinylog.Logger;
|
||||||
|
|
||||||
|
import java.nio.file.Path;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* PhotoCleaner class
|
||||||
|
* Responsible for deleting photos older than a certain number of days
|
||||||
|
*/
|
||||||
|
public class PhotoCleaner {
|
||||||
|
private final int days;
|
||||||
|
private final boolean[] started;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* PhotoCleaner constructor
|
||||||
|
* @param days how many days old photos to delete
|
||||||
|
*/
|
||||||
|
public PhotoCleaner(int days){
|
||||||
|
this.days = days;
|
||||||
|
this.started = new boolean[]{false};
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Start PhotoCleaner Thread
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("BusyWait")
|
||||||
|
public void Start(){
|
||||||
|
Thread thread = new Thread(() -> {
|
||||||
|
started[0] = true;
|
||||||
|
while (started[0]) {
|
||||||
|
try {
|
||||||
|
System.out.println("Rechecking Database for older photos...");
|
||||||
|
// Delete photos older than the specified number of days
|
||||||
|
LocalDateTime now = LocalDateTime.now();
|
||||||
|
|
||||||
|
// delete from database
|
||||||
|
Thread sqldelete = new Thread(()->{
|
||||||
|
Sqlite sql = new Sqlite();
|
||||||
|
PhotoReviewClass[] prcs = sql.GetAll();
|
||||||
|
for (PhotoReviewClass prc : prcs) {
|
||||||
|
if (!started[0]) break;
|
||||||
|
if (prc != null && prc.getDateTime() != null) {
|
||||||
|
LocalDateTime ldt = SomeCodes.StringToLocalDateTime(prc.getDateTime());
|
||||||
|
if (ldt!=null){
|
||||||
|
if (ldt.isBefore(now.minusDays(days))) {
|
||||||
|
SomeCodes.Delete(prc.fullres());
|
||||||
|
SomeCodes.Delete(prc.cropped());
|
||||||
|
SomeCodes.Delete(prc.compressed());
|
||||||
|
SomeCodes.Delete(prc.compressedcrop());
|
||||||
|
SomeCodes.Delete(prc.thumbnails());
|
||||||
|
sql.Delete(prc);
|
||||||
|
Logger.info("Deleted PhotoReviewClass: " + prc.getDateTime() + " " + prc.getPrefix());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
RunThread(sqldelete, "DeleteFromDatabase");
|
||||||
|
|
||||||
|
// delete from disk
|
||||||
|
Thread deletefullres = new Thread(new DiskDeleter(SomeCodes.config.getFullQualityDirectory()));
|
||||||
|
RunThread(deletefullres, "DeleteFullRes");
|
||||||
|
Thread deletefullrescrop = new Thread(new DiskDeleter(SomeCodes.config.getFullQualityCropDirectory()));
|
||||||
|
RunThread(deletefullrescrop, "DeleteFullResCrop");
|
||||||
|
Thread deletecompressed = new Thread(new DiskDeleter(SomeCodes.config.getCompressedDirectory()));
|
||||||
|
RunThread(deletecompressed, "DeleteCompressed");
|
||||||
|
Thread deletecompressedcrop = new Thread(new DiskDeleter(SomeCodes.config.getCompressedCropDirectory()));
|
||||||
|
RunThread(deletecompressedcrop, "DeleteCompressedCrop");
|
||||||
|
Thread deletethumbnails = new Thread(new DiskDeleter(SomeCodes.config.getThumbsDirectory()));
|
||||||
|
RunThread(deletethumbnails, "DeleteThumbnails");
|
||||||
|
|
||||||
|
|
||||||
|
// Sleep for 1 hour
|
||||||
|
Thread.sleep(60 * 60 * 1000);
|
||||||
|
} catch (Exception e) {
|
||||||
|
Logger.error("Error in PhotoCleaner Thread: " + e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
System.out.println("PhotoCleaner stopped");
|
||||||
|
});
|
||||||
|
thread.setName("PhotoCleaner Thread");
|
||||||
|
thread.setDaemon(true);
|
||||||
|
thread.start();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void RunThread(Thread thread, String name){
|
||||||
|
thread.setName(name);
|
||||||
|
thread.setDaemon(true);
|
||||||
|
thread.start();
|
||||||
|
}
|
||||||
|
|
||||||
|
class DiskDeleter implements Runnable{
|
||||||
|
private final String path;
|
||||||
|
private final LocalDateTime now ;
|
||||||
|
public DiskDeleter(String path){
|
||||||
|
this.path = path;
|
||||||
|
this.now = LocalDateTime.now();
|
||||||
|
}
|
||||||
|
public void run(){
|
||||||
|
Path[] ppp = SomeCodes.GetFilesInDirectory(path);
|
||||||
|
if (ppp != null){
|
||||||
|
for(Path p : ppp){
|
||||||
|
if (!started[0]) break;
|
||||||
|
LocalDateTime ldt = SomeCodes.GetCreationTime(p);
|
||||||
|
if (ldt != null) {
|
||||||
|
if (ldt.isBefore(now.minusDays(days))) {
|
||||||
|
SomeCodes.Delete(p);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Stop PhotoCleaner Thread
|
||||||
|
*/
|
||||||
|
public void Stop(){
|
||||||
|
started[0] = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -2,6 +2,8 @@ package Database;
|
|||||||
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
import static Config.SomeCodes.MakeArray;
|
import static Config.SomeCodes.MakeArray;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
@@ -10,10 +12,25 @@ public class PhotoReviewClass {
|
|||||||
private String DateTime;
|
private String DateTime;
|
||||||
private String Prefix;
|
private String Prefix;
|
||||||
private String FileLeft90;
|
private String FileLeft90;
|
||||||
|
private String CompressedLeft90;
|
||||||
|
private String CroppedLeft90;
|
||||||
|
private String CompressedCropLeft90;
|
||||||
private String FileLeft45;
|
private String FileLeft45;
|
||||||
|
private String CompressedLeft45;
|
||||||
|
private String CroppedLeft45;
|
||||||
|
private String CompressedCropLeft45;
|
||||||
private String FileCenter;
|
private String FileCenter;
|
||||||
|
private String CompressedCenter;
|
||||||
|
private String CroppedCenter;
|
||||||
|
private String CompressedCropCenter;
|
||||||
private String FileRight45;
|
private String FileRight45;
|
||||||
|
private String CompressedRight45;
|
||||||
|
private String CroppedRight45;
|
||||||
|
private String CompressedCropRight45;
|
||||||
private String FileRight90;
|
private String FileRight90;
|
||||||
|
private String CompressedRight90;
|
||||||
|
private String CroppedRight90;
|
||||||
|
private String CompressedCropRight90;
|
||||||
private String ThumbLeft90;
|
private String ThumbLeft90;
|
||||||
private String ThumbLeft45;
|
private String ThumbLeft45;
|
||||||
private String ThumbCenter;
|
private String ThumbCenter;
|
||||||
@@ -52,16 +69,49 @@ public class PhotoReviewClass {
|
|||||||
this.ThumbRight90 = ThumbRight90;
|
this.ThumbRight90 = ThumbRight90;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString(){
|
||||||
|
return "id: "+id+"\r\nDateTime: "+DateTime+"\r\nPrefix: "+Prefix+"\r\nFileLeft90: "+FileLeft90+"\r\nFileLeft45: "+FileLeft45+"\r\nFileCenter: "+FileCenter+"\r\nFileRight45: "+FileRight45+"\r\nFileRight90: "+FileRight90+"\r\nThumbLeft90: "+ThumbLeft90+"\r\nThumbLeft45: "+ThumbLeft45+"\r\nThumbCenter: "+ThumbCenter+"\r\nThumbRight45: "+ThumbRight45+"\r\nThumbRight90: "+ThumbRight90;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get all files that are not null
|
* Get all Full Resolution files that are not null
|
||||||
* @return array of files
|
* @return array of files
|
||||||
*/
|
*/
|
||||||
public String[] files(){
|
public String[] fullres(){
|
||||||
return MakeArray(FileLeft90, FileLeft45, FileCenter, FileRight45, FileRight90);
|
return MakeArray(FileLeft90, FileLeft45, FileCenter, FileRight45, FileRight90);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get all Thumbnail files that are not null
|
||||||
|
* @return array of files
|
||||||
|
*/
|
||||||
public String[] thumbnails(){
|
public String[] thumbnails(){
|
||||||
return MakeArray(ThumbLeft90, ThumbLeft45, ThumbCenter, ThumbRight45, ThumbRight90);
|
return MakeArray(ThumbLeft90, ThumbLeft45, ThumbCenter, ThumbRight45, ThumbRight90);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get all Compressed files that are not null
|
||||||
|
* @return array of files
|
||||||
|
*/
|
||||||
|
public String[] compressed(){
|
||||||
|
return MakeArray(CompressedLeft90, CompressedLeft45, CompressedCenter, CompressedRight45, CompressedRight90);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get all Cropped full resolution files that are not null
|
||||||
|
* @return array of files
|
||||||
|
*/
|
||||||
|
public String[] cropped(){
|
||||||
|
return MakeArray(CroppedLeft90, CroppedLeft45, CroppedCenter, CroppedRight45, CroppedRight90);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get all Cropped compressed files that are not null
|
||||||
|
* @return array of files
|
||||||
|
*/
|
||||||
|
public String[] compressedcrop(){
|
||||||
|
return MakeArray(CompressedCropLeft90, CompressedCropLeft45, CompressedCropCenter, CompressedCropRight45, CompressedCropRight90);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ package Database;
|
|||||||
import static Config.SomeCodes.LocalDateTimeToString;
|
import static Config.SomeCodes.LocalDateTimeToString;
|
||||||
import static Config.SomeCodes.ValidString;
|
import static Config.SomeCodes.ValidString;
|
||||||
|
|
||||||
import lombok.val;
|
|
||||||
import org.tinylog.Logger;
|
import org.tinylog.Logger;
|
||||||
|
|
||||||
import java.sql.*;
|
import java.sql.*;
|
||||||
@@ -45,7 +44,28 @@ public class Sqlite {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Delete PhotoReviewClass object from database
|
||||||
|
* @param pr PhotoReviewClass objects
|
||||||
|
*/
|
||||||
|
public void Delete(PhotoReviewClass... pr){
|
||||||
|
if (pr!=null && pr.length>0){
|
||||||
|
try{
|
||||||
|
Connection conn = GetConnection();
|
||||||
|
if (conn != null){
|
||||||
|
for (PhotoReviewClass photo : pr) {
|
||||||
|
PreparedStatement stmt = conn.prepareStatement("DELETE FROM photos WHERE id = ?");
|
||||||
|
stmt.setInt(1, photo.getId());
|
||||||
|
stmt.execute();
|
||||||
|
}
|
||||||
|
conn.close();
|
||||||
|
Logger.info("Data deleted successfully");
|
||||||
|
} else Logger.info("Delete failed, connection is null");
|
||||||
|
} catch (Exception e){
|
||||||
|
Logger.error("Error deleting data: "+e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get all PhotoReviewClass object from database
|
* Get all PhotoReviewClass object from database
|
||||||
@@ -107,7 +127,6 @@ public class Sqlite {
|
|||||||
try{
|
try{
|
||||||
Connection conn = GetConnection();
|
Connection conn = GetConnection();
|
||||||
if (conn != null){
|
if (conn != null){
|
||||||
|
|
||||||
PreparedStatement stmt = conn.prepareStatement("INSERT INTO photos (DateTime, Prefix, FileLeft90, FileLeft45, FileCenter, FileRight45, FileRight90, ThumbLeft90, ThumbLeft45, ThumbCenter, ThumbRight45, ThumbRight90 ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
|
PreparedStatement stmt = conn.prepareStatement("INSERT INTO photos (DateTime, Prefix, FileLeft90, FileLeft45, FileCenter, FileRight45, FileRight90, ThumbLeft90, ThumbLeft45, ThumbCenter, ThumbRight45, ThumbRight90 ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
|
||||||
stmt.setString(1, LocalDateTimeToString(LocalDateTime.now()));
|
stmt.setString(1, LocalDateTimeToString(LocalDateTime.now()));
|
||||||
stmt.setString(2, ValidString(prefix)?prefix:"");
|
stmt.setString(2, ValidString(prefix)?prefix:"");
|
||||||
|
|||||||
10
src/main/java/ErhaAPI/BarcodeHttpResult.java
Normal file
10
src/main/java/ErhaAPI/BarcodeHttpResult.java
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
package ErhaAPI;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class BarcodeHttpResult {
|
||||||
|
private int statusCode;
|
||||||
|
private String body;
|
||||||
|
private BarcodeResult result;
|
||||||
|
}
|
||||||
29
src/main/java/ErhaAPI/BarcodeResult.java
Normal file
29
src/main/java/ErhaAPI/BarcodeResult.java
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
package ErhaAPI;
|
||||||
|
|
||||||
|
|
||||||
|
public class BarcodeResult {
|
||||||
|
public int currentPage;
|
||||||
|
public int limit;
|
||||||
|
public int totalPages;
|
||||||
|
public int totalRecords;
|
||||||
|
public String message;
|
||||||
|
public boolean error;
|
||||||
|
public String errorId;
|
||||||
|
public String errorMessage;
|
||||||
|
public String errorCode;
|
||||||
|
public PatientRecord[] data;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString(){
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
sb.append("currentPage : ").append(currentPage).append(", limit : ").append(limit).append(", totalPages : ").append(totalPages).append(", totalRecords : ").append(totalRecords).append(", message : ").append(message).append(", error : ").append(error);
|
||||||
|
if (data != null){
|
||||||
|
sb.append(", data : [");
|
||||||
|
for (PatientRecord pr : data){
|
||||||
|
sb.append(pr.toString()).append(", ");
|
||||||
|
}
|
||||||
|
sb.append("]");
|
||||||
|
}
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
236
src/main/java/ErhaAPI/ErhaAPI.java
Normal file
236
src/main/java/ErhaAPI/ErhaAPI.java
Normal file
@@ -0,0 +1,236 @@
|
|||||||
|
package ErhaAPI;
|
||||||
|
|
||||||
|
import Config.SomeCodes;
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.NonNull;
|
||||||
|
import org.tinylog.Logger;
|
||||||
|
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.net.ConnectException;
|
||||||
|
import java.net.URI;
|
||||||
|
import java.net.UnknownHostException;
|
||||||
|
import java.net.http.HttpClient;
|
||||||
|
import java.net.http.HttpRequest;
|
||||||
|
import java.net.http.HttpResponse;
|
||||||
|
import java.net.http.HttpTimeoutException;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.util.Base64;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
import static Config.SomeCodes.*;
|
||||||
|
|
||||||
|
|
||||||
|
public class ErhaAPI {
|
||||||
|
private @Getter String API_USERNAME = "erha-pb-001";
|
||||||
|
private @Getter String API_PASSWORD = "bM0tH!s";
|
||||||
|
|
||||||
|
private String auth;
|
||||||
|
private String API_URL="";
|
||||||
|
|
||||||
|
private final Gson gson = new Gson();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create Erha API object
|
||||||
|
* @param isProduction if true will use Production URL, if false will use Staging URL
|
||||||
|
*/
|
||||||
|
public ErhaAPI(boolean isProduction){
|
||||||
|
setProduction(isProduction);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public void setProduction(boolean isProduction){
|
||||||
|
final String API_URL_PROD = "https://connect-api.aryanoble.co.id/api";
|
||||||
|
final String API_URL_STAGING = "https://connect-api-staging.aryanoble.web.id/api";
|
||||||
|
if (isProduction){
|
||||||
|
if (!API_URL.equals(API_URL_PROD)){
|
||||||
|
API_URL = API_URL_PROD;
|
||||||
|
update_auth();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (!API_URL.equals(API_URL_STAGING)){
|
||||||
|
API_URL = API_URL_STAGING;
|
||||||
|
update_auth();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set API Username
|
||||||
|
* @param API_USERNAME API Username
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
public void setAPI_USERNAME(String API_USERNAME){
|
||||||
|
if (ValidString(API_USERNAME)){
|
||||||
|
if (!API_USERNAME.equals(this.API_USERNAME)){
|
||||||
|
this.API_USERNAME = API_USERNAME;
|
||||||
|
update_auth();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set API Password
|
||||||
|
* @param API_PASSWORD API Password
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
public void setAPI_PASSWORD(String API_PASSWORD){
|
||||||
|
if (ValidString(API_PASSWORD)){
|
||||||
|
if (!API_PASSWORD.equals(this.API_PASSWORD)){
|
||||||
|
this.API_PASSWORD = API_PASSWORD;
|
||||||
|
update_auth();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Validate Barcode data
|
||||||
|
* @param Barcode Barcode to verify
|
||||||
|
* @return BarcodeHttpResult object
|
||||||
|
*/
|
||||||
|
public @NonNull BarcodeHttpResult Validate_Barcode(String Barcode, boolean printdebug){
|
||||||
|
BarcodeHttpResult bhr = new BarcodeHttpResult();
|
||||||
|
if (ValidBarCode(Barcode)){
|
||||||
|
System.out.println("Checking Barcode : " + Barcode +" on "+(config.isProduction()?"Production":"Staging")+" API " );
|
||||||
|
try (HttpClient client = HttpClient.newHttpClient()) {
|
||||||
|
int medical_record_detail_id = toInt(Barcode);
|
||||||
|
HttpRequest request = HttpRequest.newBuilder()
|
||||||
|
.uri(java.net.URI.create(API_URL+ (DermiesMode ? "/photobooth/dermies/":"/photobooth/photobooth/") + medical_record_detail_id))
|
||||||
|
.header("Authorization", "Basic " + auth)
|
||||||
|
.GET()
|
||||||
|
.build();
|
||||||
|
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
|
||||||
|
|
||||||
|
|
||||||
|
bhr.setStatusCode(response.statusCode());
|
||||||
|
bhr.setBody(response.body());
|
||||||
|
|
||||||
|
if (response.statusCode()==200){
|
||||||
|
String body = response.body();
|
||||||
|
if (printdebug){
|
||||||
|
System.out.println("Validate_Barcode status code : " + response.statusCode());
|
||||||
|
System.out.println("Validate_Barcode HTTP body : ");
|
||||||
|
System.out.println(body);
|
||||||
|
}
|
||||||
|
BarcodeResult brr = gson.fromJson(body, BarcodeResult.class);
|
||||||
|
bhr.setResult(brr);
|
||||||
|
} else {
|
||||||
|
Logger.error("Validate_Barcode failed, status code : " , response.statusCode());
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (UnknownHostException e) {
|
||||||
|
// no internet or no DNS
|
||||||
|
Logger.error("Validate_Barcode UnknownHostException, Msg : " , e.getMessage());
|
||||||
|
bhr.setStatusCode(0);
|
||||||
|
bhr.setBody("No internet connection or DNS error");
|
||||||
|
} catch (ConnectException e) {
|
||||||
|
// connection refused
|
||||||
|
Logger.error("Validate_Barcode ConnectException , Msg : " , e.getMessage());
|
||||||
|
bhr.setStatusCode(-1);
|
||||||
|
bhr.setBody("Connection refused");
|
||||||
|
} catch( HttpTimeoutException e){
|
||||||
|
// timeout
|
||||||
|
Logger.error("Validate_Barcode HttpTimeoutException, Msg : " , e.getMessage());
|
||||||
|
bhr.setStatusCode(408);
|
||||||
|
bhr.setBody("Http Request timeout");
|
||||||
|
} catch (IOException | InterruptedException e) {
|
||||||
|
// generic network error
|
||||||
|
Logger.error("Validate_Barcode IOException/InterruptedException, Msg : " , e.getMessage());
|
||||||
|
bhr.setStatusCode(-2);
|
||||||
|
bhr.setBody("Network error: " + e.getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
return bhr;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Upload File
|
||||||
|
* @param patientID Patient ID
|
||||||
|
* @param filename File to upload
|
||||||
|
* @return UploadHttpResult object
|
||||||
|
*/
|
||||||
|
public @NonNull UploadHttpResult Upload_File(String patientID, String filename, boolean printdebug) {
|
||||||
|
UploadHttpResult uhr = new UploadHttpResult();
|
||||||
|
if (ValidMedicalRecordId(patientID)){
|
||||||
|
int medical_record_detail_id = toInt(patientID);
|
||||||
|
if (ValidFile(filename)){
|
||||||
|
File ff = new File(filename);
|
||||||
|
try (HttpClient client = HttpClient.newHttpClient()){
|
||||||
|
byte[] fileBytes = Files.readAllBytes(new java.io.File(filename).toPath());
|
||||||
|
String fn = ff.getName();
|
||||||
|
// Unique boundary for multipart data
|
||||||
|
String boundary = "----JavaHttpClientBoundary" + UUID.randomUUID();
|
||||||
|
String CRLF = "\r\n";
|
||||||
|
|
||||||
|
// Form Data (Text Field)
|
||||||
|
String formData1 = "--" + boundary + CRLF +
|
||||||
|
"Content-Disposition: form-data; name=\"medical_record_detail_id\"" + CRLF + CRLF +
|
||||||
|
medical_record_detail_id + CRLF;
|
||||||
|
|
||||||
|
// Form Data (File)
|
||||||
|
String formData2 = "--" + boundary + CRLF +
|
||||||
|
"Content-Disposition: form-data; name=\"file\"; filename=\"" + fn + "\"" + CRLF +
|
||||||
|
"Content-Type: image/jpeg" + CRLF + CRLF; // Change Content-Type accordingly
|
||||||
|
|
||||||
|
// End Boundary
|
||||||
|
String endBoundary = CRLF + "--" + boundary + "--" + CRLF;
|
||||||
|
|
||||||
|
// Combine all parts into a single byte array
|
||||||
|
byte[] multipartData = SomeCodes.Concat(
|
||||||
|
formData1.getBytes(),
|
||||||
|
formData2.getBytes(),
|
||||||
|
fileBytes,
|
||||||
|
endBoundary.getBytes()
|
||||||
|
);
|
||||||
|
|
||||||
|
System.out.println("Uploading file : " + filename + " to " + (config.isProduction()?"Production":"Staging")+" API ");
|
||||||
|
HttpRequest request = HttpRequest.newBuilder()
|
||||||
|
.uri(new URI(API_URL + (DermiesMode ?"/photobooth/dermies":"/photobooth/photobooth")))
|
||||||
|
.header("Authorization", "Basic " + auth)
|
||||||
|
.header("Content-Type", "multipart/form-data; boundary=" + boundary)
|
||||||
|
.POST(HttpRequest.BodyPublishers.ofByteArray(multipartData))
|
||||||
|
.build();
|
||||||
|
|
||||||
|
// Send request
|
||||||
|
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
|
||||||
|
|
||||||
|
uhr.setStatusCode(response.statusCode());
|
||||||
|
uhr.setBody(response.body());
|
||||||
|
if (printdebug){
|
||||||
|
System.out.println("Upload_File status code : " + response.statusCode());
|
||||||
|
System.out.println("Upload_File HTTP body : ");
|
||||||
|
System.out.println(response.body());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (response.statusCode()==200){
|
||||||
|
UploadResult ur = gson.fromJson(response.body(), UploadResult.class);
|
||||||
|
uhr.setResult(ur);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
Logger.error("Upload_File file ",filename," failed, status code : " , response.statusCode());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
} catch (Exception e){
|
||||||
|
Logger.error("Upload_File file ",filename," failed, Exception, Msg : " , e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return uhr;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void update_auth(){
|
||||||
|
auth = Base64.getEncoder().encodeToString((API_USERNAME + ":" + API_PASSWORD).getBytes());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
23
src/main/java/ErhaAPI/PatientRecord.java
Normal file
23
src/main/java/ErhaAPI/PatientRecord.java
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
package ErhaAPI;
|
||||||
|
|
||||||
|
public class PatientRecord {
|
||||||
|
public String medical_record_detail_id;
|
||||||
|
public String medical_staff_id;
|
||||||
|
public String medical_staff_name;
|
||||||
|
public String branch_id;
|
||||||
|
public String branch_code;
|
||||||
|
public String branch_name;
|
||||||
|
public String registration_id;
|
||||||
|
public String registration_date;
|
||||||
|
public String patient_id;
|
||||||
|
public String mrnl;
|
||||||
|
public String name;
|
||||||
|
public String phone;
|
||||||
|
public String birthdate;
|
||||||
|
public String service;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString(){
|
||||||
|
return "medical_record_detail_id : " + medical_record_detail_id + ", medical_staff_id : " + medical_staff_id + ", medical_staff_name : " + medical_staff_name + ", branch_id : " + branch_id + ", branch_code : " + branch_code + ", branch_name : " + branch_name + ", registration_id : " + registration_id + ", registration_date : " + registration_date + ", patient_id : " + patient_id + ", mrnl : " + mrnl + ", name : " + name + ", phone : " + phone + ", birthdate : " + birthdate + ", service : " + service;
|
||||||
|
}
|
||||||
|
}
|
||||||
48
src/main/java/ErhaAPI/PhotoResult.java
Normal file
48
src/main/java/ErhaAPI/PhotoResult.java
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
package ErhaAPI;
|
||||||
|
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.Setter;
|
||||||
|
import org.bytedeco.opencv.opencv_core.Rect;
|
||||||
|
|
||||||
|
@Getter @Setter
|
||||||
|
public class PhotoResult {
|
||||||
|
private final String cameraname;
|
||||||
|
private String fullres;
|
||||||
|
private String compressedfile;
|
||||||
|
private String fullcrop;
|
||||||
|
private String compressedcrop;
|
||||||
|
private String thumbnail;
|
||||||
|
private Rect BestROI;
|
||||||
|
private Rect ReducedROI;
|
||||||
|
private double sharpscore;
|
||||||
|
public PhotoResult(String cameraname){
|
||||||
|
this.cameraname = cameraname;
|
||||||
|
this.fullres = "";
|
||||||
|
this.compressedfile = "";
|
||||||
|
this.fullcrop = "";
|
||||||
|
this.compressedcrop = "";
|
||||||
|
this.thumbnail = "";
|
||||||
|
this.BestROI = null;
|
||||||
|
this.ReducedROI = null;
|
||||||
|
}
|
||||||
|
public PhotoResult(String cameraname,String fullres, String compressedfile, String fullcrop, String compressedcrop, String thumbnail){
|
||||||
|
this.cameraname = cameraname;
|
||||||
|
this.fullres = fullres;
|
||||||
|
this.compressedfile = compressedfile;
|
||||||
|
this.fullcrop = fullcrop;
|
||||||
|
this.compressedcrop = compressedcrop;
|
||||||
|
this.thumbnail = thumbnail;
|
||||||
|
this.BestROI = null;
|
||||||
|
this.ReducedROI = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString(){
|
||||||
|
return "Camera Name: " + cameraname + "\n" +
|
||||||
|
"Full Resolution: " + fullres + "\n" +
|
||||||
|
"Compressed File: " + compressedfile + "\n" +
|
||||||
|
"Full Crop: " + fullcrop + "\n" +
|
||||||
|
"Compressed Crop: " + compressedcrop + "\n" +
|
||||||
|
"Thumbnail: " + thumbnail + "\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
10
src/main/java/ErhaAPI/UploadHttpResult.java
Normal file
10
src/main/java/ErhaAPI/UploadHttpResult.java
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
package ErhaAPI;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class UploadHttpResult {
|
||||||
|
int statusCode;
|
||||||
|
String body;
|
||||||
|
UploadResult result;
|
||||||
|
}
|
||||||
18
src/main/java/ErhaAPI/UploadResult.java
Normal file
18
src/main/java/ErhaAPI/UploadResult.java
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
package ErhaAPI;
|
||||||
|
|
||||||
|
public class UploadResult {
|
||||||
|
public int currentPage;
|
||||||
|
public int limit;
|
||||||
|
public int totalPages;
|
||||||
|
public int totalRecords;
|
||||||
|
public boolean error;
|
||||||
|
public String errorId;
|
||||||
|
public String errorMessage;
|
||||||
|
public String errorCode;
|
||||||
|
public String message;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString(){
|
||||||
|
return "message : " + message + ", error : " + error + ", errorId : " + errorId + ", errorMessage : " + errorMessage + ", errorCode : " + errorCode ;
|
||||||
|
}
|
||||||
|
}
|
||||||
107
src/main/java/SecureDongle/LibSecureDongle.java
Normal file
107
src/main/java/SecureDongle/LibSecureDongle.java
Normal file
@@ -0,0 +1,107 @@
|
|||||||
|
package SecureDongle;
|
||||||
|
|
||||||
|
import com.sun.jna.Library;
|
||||||
|
import com.sun.jna.Native;
|
||||||
|
|
||||||
|
public interface LibSecureDongle extends Library {
|
||||||
|
LibSecureDongle Instance = (LibSecureDongle) Native.load("SecureDongleJ", LibSecureDongle.class);
|
||||||
|
short SD_FIND=1;
|
||||||
|
short SD_FIND_NEXT=2;
|
||||||
|
short SD_OPEN=3;
|
||||||
|
short SD_CLOSE=4;
|
||||||
|
short SD_READ=5;
|
||||||
|
short SD_WRITE=6;
|
||||||
|
short SD_RANDOM=7;
|
||||||
|
short SD_SEED=8;
|
||||||
|
short SD_WRITE_USERID=9;
|
||||||
|
short SD_READ_USERID=10;
|
||||||
|
short SD_SET_MODULE=11;
|
||||||
|
short SD_CHECK_MODULE=12;
|
||||||
|
short SD_WRITE_ARITHMETIC=13;
|
||||||
|
short SD_CALCULATE1=14;
|
||||||
|
short SD_CALCULATE2=15;
|
||||||
|
short SD_CALCULATE3=16;
|
||||||
|
short SD_DECREASE=17;
|
||||||
|
|
||||||
|
short SD_SET_RSAKEY_N=29;
|
||||||
|
short SD_SET_RSAKEY_D=30;
|
||||||
|
|
||||||
|
short SD_SET_DES_KEY=41;
|
||||||
|
short SD_DES_ENC=42;
|
||||||
|
short SD_DES_DEC=43;
|
||||||
|
short SD_RSA_ENC=44;
|
||||||
|
short SD_RSA_DEC=45;
|
||||||
|
|
||||||
|
short SD_READ_EX=46;
|
||||||
|
short SD_WRITE_EX=47;
|
||||||
|
|
||||||
|
short SD_SET_COUNTER_EX=160;
|
||||||
|
short SD_GET_COUNTER_EX=161;
|
||||||
|
short SD_SET_TIMER_EX=162;
|
||||||
|
short SD_GET_TIMER_EX=163;
|
||||||
|
short SD_ADJUST_TIMER_EX=164;
|
||||||
|
short SD_UPDATE_GEN_HEADER_EX=165;
|
||||||
|
short SD_UPDATE_GEN_EX=166;
|
||||||
|
short SD_UPDATE_CHECK_EX=167;
|
||||||
|
short SD_UPDATE_EX=168;
|
||||||
|
short SD_SET_UPDATE_KEY=169;
|
||||||
|
short SD_ADD_UPDATE_HEADER=170;
|
||||||
|
short SD_ADD_UPDATE_CONTENT=171;
|
||||||
|
short SD_GET_TIME_DWORD=172;
|
||||||
|
|
||||||
|
short SD_VERSION=100;
|
||||||
|
|
||||||
|
short DES_SINGLE_MODE=0;
|
||||||
|
short DES_TRIPLE_MODE=1;
|
||||||
|
short RSA_PRIVATE_KEY=0;
|
||||||
|
short RSA_PUBLIC_KEY=1;
|
||||||
|
short RSA_SECUREDONGLE_PADDING=0;
|
||||||
|
short RSA_USER_PADDING=1;
|
||||||
|
|
||||||
|
//error code
|
||||||
|
short ERR_SUCCESS=0;
|
||||||
|
short ERR_NO_ROCKEY=3;
|
||||||
|
short ERR_INVALID_PASSWORD=4;
|
||||||
|
short ERR_INVALID_PASSWORD_OR_ID=5;
|
||||||
|
short ERR_SETID=6;
|
||||||
|
short ERR_INVALID_ADDR_OR_SIZE=7;
|
||||||
|
short ERR_UNKNOWN_COMMAND=8;
|
||||||
|
short ERR_NOTBELEVEL3=9;
|
||||||
|
short ERR_READ=10;
|
||||||
|
short ERR_WRITE=11;
|
||||||
|
short ERR_RANDOM=12;
|
||||||
|
short ERR_SEED=13;
|
||||||
|
short ERR_CALCULATE=14;
|
||||||
|
short ERR_NO_OPEN=15;
|
||||||
|
short ERR_OPEN_OVERFLOW=16;
|
||||||
|
short ERR_NOMORE=17;
|
||||||
|
short ERR_NEED_FIND=18;
|
||||||
|
short ERR_DECREASE=19;
|
||||||
|
short ERR_AR_BADCOMMAND=20;
|
||||||
|
short ERR_AR_UNKNOWN_OPCODE=21;
|
||||||
|
short ERR_AR_WRONGBEGIN=22;
|
||||||
|
short ERR_AR_WRONG_END=23;
|
||||||
|
short ERR_AR_VALUEOVERFLOW=24;
|
||||||
|
|
||||||
|
short ERR_TOOMUCHTHREAD=25;
|
||||||
|
short ERR_INVALID_SD=30;
|
||||||
|
short ERR_INVALID_PARAMETER=31;
|
||||||
|
short ERR_INVALID_TIMEVALUE=32;
|
||||||
|
|
||||||
|
short ERR_SET_DES_KEY=40;
|
||||||
|
short ERR_DES_ENCRYPT=41;
|
||||||
|
short ERR_DES_DECRYPT=42;
|
||||||
|
short ERR_SET_RSAKEY_N=43;
|
||||||
|
short ERR_SET_RSAKEY_D=44;
|
||||||
|
short ERR_RSA_ENCRYPT=45;
|
||||||
|
short ERR_RSA_DECRYPT=46;
|
||||||
|
short ERR_INVALID_LENGTH=47;
|
||||||
|
|
||||||
|
short ERR_UNKNOWN=-1;
|
||||||
|
short ERR_RECEIVE_NULL=256;
|
||||||
|
short ERR_INVALID_BUFFER=257;
|
||||||
|
short ERR_UNKNOWN_SYSTEM=258;
|
||||||
|
short ERR_UNINIT_TIME_UNIT=259;
|
||||||
|
|
||||||
|
short SecureDongle(short command, short[] handle, int[] lp1, int[] lp2, short[] p1, short[] p2, short[] p3, short[] p4, byte[] buffer);
|
||||||
|
}
|
||||||
270
src/main/java/SecureDongle/SecureDongle.java
Normal file
270
src/main/java/SecureDongle/SecureDongle.java
Normal file
@@ -0,0 +1,270 @@
|
|||||||
|
package SecureDongle;
|
||||||
|
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.Setter;
|
||||||
|
import org.tinylog.Logger;
|
||||||
|
import static Config.SomeCodes.ToShort;
|
||||||
|
import static Config.SomeCodes.Wait;
|
||||||
|
|
||||||
|
public class SecureDongle {
|
||||||
|
|
||||||
|
private final int[] lp1 = new int[1];
|
||||||
|
private final int[] lp2 = new int[1];
|
||||||
|
// for Open/Close Handle
|
||||||
|
private final short[] handle = new short[1];
|
||||||
|
// P1
|
||||||
|
private final short[] p1 = new short[1];
|
||||||
|
// P2
|
||||||
|
private final short[] p2 = new short[1];
|
||||||
|
// P3
|
||||||
|
private final short[] p3 = new short[1];
|
||||||
|
// P4
|
||||||
|
private final short[] p4 = new short[1];
|
||||||
|
|
||||||
|
private final byte[] buffer = new byte[1024];
|
||||||
|
|
||||||
|
LibSecureDongle SD;
|
||||||
|
|
||||||
|
private @Getter boolean Opened = false;
|
||||||
|
private @Getter short Handle;
|
||||||
|
private @Getter int HardwareID = 0;
|
||||||
|
private @Getter int UserID = 0;
|
||||||
|
|
||||||
|
private @Setter SecureDongleEvent event;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create SecureDongle with P1, P2, P3, P4
|
||||||
|
* @param P1 Password 1
|
||||||
|
* @param P2 Password 2
|
||||||
|
* @param P3 Password 3
|
||||||
|
* @param P4 Password 4
|
||||||
|
*/
|
||||||
|
public SecureDongle(Short P1, Short P2, Short P3, Short P4){
|
||||||
|
this.p1[0] = P1;
|
||||||
|
this.p2[0] = P2;
|
||||||
|
this.p3[0] = P3;
|
||||||
|
this.p4[0] = P4;
|
||||||
|
SD = LibSecureDongle.Instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create SecureDongle with P1, P2, P3, P4
|
||||||
|
* @param P1 Password 1
|
||||||
|
* @param P2 Password 2
|
||||||
|
* @param P3 Password 3
|
||||||
|
* @param P4 Password 4
|
||||||
|
*/
|
||||||
|
public SecureDongle(String P1, String P2, String P3, String P4){
|
||||||
|
this.p1[0] = ToShort(P1);
|
||||||
|
this.p2[0] = ToShort(P2);
|
||||||
|
this.p3[0] = ToShort(P3);
|
||||||
|
this.p4[0] = ToShort(P4);
|
||||||
|
SD = LibSecureDongle.Instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Find SecureDongle
|
||||||
|
* This must be executed first time
|
||||||
|
* @return true if found
|
||||||
|
*/
|
||||||
|
public boolean Find(){
|
||||||
|
HardwareID = 0;
|
||||||
|
short result = SD.SecureDongle(LibSecureDongle.SD_FIND, handle, lp1, lp2, p1, p2, p3, p4, buffer);
|
||||||
|
|
||||||
|
if (result== LibSecureDongle.ERR_SUCCESS){
|
||||||
|
HardwareID = lp1[0];
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
if (event!=null) event.onDongleError("Find", result);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Open SecureDongle
|
||||||
|
* @return true if success
|
||||||
|
*/
|
||||||
|
public boolean Open(){
|
||||||
|
Handle=0;
|
||||||
|
if (HardwareID!=0){
|
||||||
|
lp1[0] = HardwareID;
|
||||||
|
short result = SD.SecureDongle(LibSecureDongle.SD_OPEN, handle, lp1, lp2, p1, p2, p3, p4, buffer);
|
||||||
|
if (result== LibSecureDongle.ERR_SUCCESS){
|
||||||
|
Handle = handle[0];
|
||||||
|
Opened = true;
|
||||||
|
return true;
|
||||||
|
} else if (event!=null) event.onDongleError("Open", result);
|
||||||
|
} //else System.out.println("HardwareID not found, Find SecureDongle first");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Close SecureDongle
|
||||||
|
* @return true if success
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("UnusedReturnValue")
|
||||||
|
public boolean Close(){
|
||||||
|
handle[0] = Handle;
|
||||||
|
short result = SD.SecureDongle(LibSecureDongle.SD_CLOSE, handle, lp1, lp2, p1, p2, p3, p4, buffer);
|
||||||
|
if (result== LibSecureDongle.ERR_SUCCESS){
|
||||||
|
return true;
|
||||||
|
} else if (event!=null) event.onDongleError("Close", result);
|
||||||
|
Opened = false;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Write to User Data Zone (UDZ)
|
||||||
|
* @param StartAddress start address of UDZ, zero based
|
||||||
|
* @param length length of data to write, max 1000 bytes
|
||||||
|
* @param data data to write
|
||||||
|
* @return true if success
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
public boolean Write(short StartAddress, short length, byte[] data){
|
||||||
|
if (Opened){
|
||||||
|
handle[0] = Handle;
|
||||||
|
p1[0] = StartAddress>=0 ? StartAddress : 0;
|
||||||
|
if (length<1) length=1;
|
||||||
|
if (length>1000) length=1000;
|
||||||
|
p2[0] = length;
|
||||||
|
System.arraycopy(data, 0, buffer, 0, length);
|
||||||
|
short result = SD.SecureDongle(LibSecureDongle.SD_WRITE, handle, lp1, lp2, p1, p2, p3, p4, buffer);
|
||||||
|
if (result== LibSecureDongle.ERR_SUCCESS){
|
||||||
|
return true;
|
||||||
|
} else if (event!=null) event.onDongleError("Write", result);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Read from User Data Zone (UDZ)
|
||||||
|
* @param StartAddress Start Address, zero based
|
||||||
|
* @param Length Length of data to read, max 1000 bytes
|
||||||
|
* @return byte array of data, length=0 if failed
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
public byte[] Read(short StartAddress, short Length){
|
||||||
|
if (Opened){
|
||||||
|
handle[0] = Handle;
|
||||||
|
p1[0] = StartAddress>=0 ? StartAddress : 0;
|
||||||
|
if (Length<1) Length=1;
|
||||||
|
if (Length>1000) Length=1000;
|
||||||
|
p2[0] = Length;
|
||||||
|
short result = SD.SecureDongle(LibSecureDongle.SD_READ, handle, lp1, lp2, p1, p2, p3, p4, buffer);
|
||||||
|
if (result== LibSecureDongle.ERR_SUCCESS){
|
||||||
|
byte[] data = new byte[Length];
|
||||||
|
System.arraycopy(buffer, 0, data, 0, Length);
|
||||||
|
return data;
|
||||||
|
} else if (event!=null) event.onDongleError("Read", result);
|
||||||
|
}
|
||||||
|
|
||||||
|
return new byte[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generate Random Number
|
||||||
|
* @return short array of random number
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
public short[] GenerateRandomNumber(){
|
||||||
|
short[] random = new short[4];
|
||||||
|
if (Opened){
|
||||||
|
handle[0] = Handle;
|
||||||
|
short result = SD.SecureDongle(LibSecureDongle.SD_RANDOM, handle, lp1, lp2, p1, p2, p3, p4, buffer);
|
||||||
|
if (result== LibSecureDongle.ERR_SUCCESS){
|
||||||
|
random[0] = p1[0];
|
||||||
|
random[1] = p2[0];
|
||||||
|
random[2] = p3[0];
|
||||||
|
random[3] = p4[0];
|
||||||
|
return random;
|
||||||
|
} else if (event!=null) event.onDongleError("GenerateRandomNumber", result);
|
||||||
|
}
|
||||||
|
|
||||||
|
return random;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Write UserID to SecureDongle
|
||||||
|
* @param UserID UserID to write
|
||||||
|
* @return true if success
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
public boolean WriteUserID(int UserID){
|
||||||
|
if (Opened){
|
||||||
|
handle[0] = Handle;
|
||||||
|
lp1[0] = UserID;
|
||||||
|
short result = SD.SecureDongle(LibSecureDongle.SD_WRITE_USERID, handle, lp1, lp2, p1, p2, p3, p4, buffer);
|
||||||
|
if (result== LibSecureDongle.ERR_SUCCESS){
|
||||||
|
this.UserID = UserID;
|
||||||
|
return true;
|
||||||
|
} else if (event!=null) event.onDongleError("WriteUserID", result);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Read UserID from SecureDongle
|
||||||
|
* @return UserID, 0 if failed
|
||||||
|
*/
|
||||||
|
public int ReadUserID(){
|
||||||
|
if (Opened){
|
||||||
|
handle[0] = Handle;
|
||||||
|
short result = SD.SecureDongle(LibSecureDongle.SD_READ_USERID, handle, lp1, lp2, p1, p2, p3, p4, buffer);
|
||||||
|
if (result== LibSecureDongle.ERR_SUCCESS){
|
||||||
|
this.UserID = lp1[0];
|
||||||
|
return UserID;
|
||||||
|
} else if (event!=null) event.onDongleError("ReadUserID", result);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean ismonitoring = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Stop Monitoring SecureDongle
|
||||||
|
*/
|
||||||
|
public void StopMonitor(){
|
||||||
|
ismonitoring = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Start Monitoring SecureDongle
|
||||||
|
* if dongle missing, will raise event onDongleMissing
|
||||||
|
*/
|
||||||
|
public void StartMonitor(){
|
||||||
|
Thread tx = new Thread(()->{
|
||||||
|
if (HardwareID==0) Find();
|
||||||
|
Open();
|
||||||
|
int firstUserID = ReadUserID();
|
||||||
|
Close();
|
||||||
|
if (firstUserID!=0){
|
||||||
|
ismonitoring = true;
|
||||||
|
Logger.info("Start Monitoring UserID="+Integer.toHexString(firstUserID));
|
||||||
|
while (ismonitoring){
|
||||||
|
Wait(5000);
|
||||||
|
Open();
|
||||||
|
int newUserID = ReadUserID();
|
||||||
|
Close();
|
||||||
|
if (newUserID!=firstUserID){
|
||||||
|
if (event!=null) event.onDongleMissing();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
System.out.println("Stop Monitoring");
|
||||||
|
} else System.out.println("Canceled Monitoring, UserID not found");
|
||||||
|
|
||||||
|
});
|
||||||
|
tx.setName("SecureDongle Monitor Thread");
|
||||||
|
tx.setDaemon(true);
|
||||||
|
tx.start();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
6
src/main/java/SecureDongle/SecureDongleEvent.java
Normal file
6
src/main/java/SecureDongle/SecureDongleEvent.java
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
package SecureDongle;
|
||||||
|
|
||||||
|
public interface SecureDongleEvent {
|
||||||
|
void onDongleMissing();
|
||||||
|
void onDongleError(String function,int errorCode);
|
||||||
|
}
|
||||||
395
src/main/java/id/co/gtc/erhacam/AutoCloseAlert.java
Normal file
395
src/main/java/id/co/gtc/erhacam/AutoCloseAlert.java
Normal file
@@ -0,0 +1,395 @@
|
|||||||
|
package id.co.gtc.erhacam;
|
||||||
|
|
||||||
|
import javafx.animation.KeyFrame;
|
||||||
|
import javafx.animation.PauseTransition;
|
||||||
|
import javafx.animation.Timeline;
|
||||||
|
import javafx.application.Platform;
|
||||||
|
|
||||||
|
import javafx.geometry.Insets;
|
||||||
|
import javafx.geometry.Pos;
|
||||||
|
import javafx.scene.Scene;
|
||||||
|
import javafx.scene.control.Label;
|
||||||
|
import javafx.scene.image.Image;
|
||||||
|
import javafx.scene.image.ImageView;
|
||||||
|
import javafx.scene.layout.*;
|
||||||
|
import javafx.scene.paint.Color;
|
||||||
|
import javafx.scene.shape.Circle;
|
||||||
|
import javafx.stage.*;
|
||||||
|
import javafx.util.Duration;
|
||||||
|
import org.tinylog.Logger;
|
||||||
|
|
||||||
|
import java.nio.file.Paths;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
|
import static Config.SomeCodes.*;
|
||||||
|
|
||||||
|
public class AutoCloseAlert {
|
||||||
|
|
||||||
|
private static Stage currentAlertStage;
|
||||||
|
public static String shownTitle = "";
|
||||||
|
public static String shownContent = "";
|
||||||
|
public static String shownHeader = "";
|
||||||
|
public static Image shownBanner = null;
|
||||||
|
public static Image banner_01;
|
||||||
|
public static Image banner_02;
|
||||||
|
private static Circle Cam1;
|
||||||
|
private static Circle Cam2;
|
||||||
|
private static Circle Cam3;
|
||||||
|
private static Circle Cam4;
|
||||||
|
private static Circle Cam5;
|
||||||
|
|
||||||
|
public static void init(){
|
||||||
|
String f_01;
|
||||||
|
if (DermiesMode){
|
||||||
|
f_01 = ExtractResource("/WelcomeDermies.jpg");
|
||||||
|
} else {
|
||||||
|
f_01 = ExtractResource("/IU photoboth-01.jpg");
|
||||||
|
}
|
||||||
|
|
||||||
|
//System.out.println("Banner 01 extracted as file: "+f_01);
|
||||||
|
String f_02 = ExtractResource("/IU photoboth-02.jpg");
|
||||||
|
//System.out.println("Banner 02 extracted as file: "+f_02);
|
||||||
|
banner_01 = LoadImage(f_01);
|
||||||
|
if (banner_01!=null) System.out.println("Banner 01 loaded"); else System.out.println("Banner 01 not loaded");
|
||||||
|
banner_02 = LoadImage(f_02);
|
||||||
|
if (banner_02!=null) System.out.println("Banner 02 loaded"); else System.out.println("Banner 02 not loaded");
|
||||||
|
Cam1 = new Circle(10, Color.RED);
|
||||||
|
Cam2 = new Circle(10, Color.RED);
|
||||||
|
Cam3 = new Circle(10, Color.RED);
|
||||||
|
if (!DermiesMode){
|
||||||
|
Cam4 = new Circle(10, Color.RED);
|
||||||
|
Cam5 = new Circle(10, Color.RED);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void ChangeCamStatus(int id, boolean active){
|
||||||
|
Circle x = switch (id){
|
||||||
|
case 1 -> Cam1;
|
||||||
|
case 2 -> Cam2;
|
||||||
|
case 3 -> Cam3;
|
||||||
|
case 4 -> DermiesMode? null: Cam4;
|
||||||
|
case 5 -> DermiesMode ? null : Cam5;
|
||||||
|
default -> null;
|
||||||
|
};
|
||||||
|
if (x!=null){
|
||||||
|
if (active){
|
||||||
|
x.setFill(Color.GREEN);
|
||||||
|
} else {
|
||||||
|
x.setFill(Color.RED);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Close the current alert if it is shown
|
||||||
|
*/
|
||||||
|
public static void close(){
|
||||||
|
if (currentAlertStage!=null){
|
||||||
|
try {
|
||||||
|
closeStage(currentAlertStage);
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
Logger.error("Error closing alert stage: " + e.getMessage());
|
||||||
|
}
|
||||||
|
currentAlertStage = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Show an alert with a title, header, content, and automatically close after a few seconds
|
||||||
|
* If called several times, the previous alert will be closed before showing a new one
|
||||||
|
* @param title the title of the alert
|
||||||
|
* @param header the header of the alert
|
||||||
|
* @param content the content of the alert
|
||||||
|
* @param seconds the number of seconds before the alert is closed, or put 0 to keep it open
|
||||||
|
* @param onClose What to do after auto close
|
||||||
|
*/
|
||||||
|
public static void show(String title, String header, String content, int seconds, Consumer<String> onClose) {
|
||||||
|
if (Platform.isFxApplicationThread()){
|
||||||
|
Stage alertStage = _showtext(title, header, content);
|
||||||
|
closeAlertStage(seconds, onClose, alertStage);
|
||||||
|
} else {
|
||||||
|
Platform.runLater(()->{
|
||||||
|
Stage alertStage = _showtext(title, header, content);
|
||||||
|
closeAlertStage(seconds, onClose, alertStage);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Show a banner image
|
||||||
|
* @param b1 Image to show
|
||||||
|
* @param seconds the number of seconds before the alert is closed, or put 0 to keep it open
|
||||||
|
* @param onClose What to do after auto close
|
||||||
|
*/
|
||||||
|
public static void showbanner(Image b1, int seconds, Consumer<String> onClose){
|
||||||
|
if (Platform.isFxApplicationThread()){
|
||||||
|
Stage alertStage = _showbanner(b1);
|
||||||
|
closeAlertStage(seconds, onClose, alertStage);
|
||||||
|
} else {
|
||||||
|
Platform.runLater(()->{
|
||||||
|
Stage alertStage = _showbanner(b1);
|
||||||
|
closeAlertStage(seconds, onClose, alertStage);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static void showpictures(String[] pictures, int seconds, Consumer<String> onClose){
|
||||||
|
List<Image> images = new ArrayList<>();
|
||||||
|
|
||||||
|
if (pictures != null){
|
||||||
|
for(String pp : pictures){
|
||||||
|
Image ii = LoadImage(pp);
|
||||||
|
if (ii!=null) images.add(ii);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!images.isEmpty()){
|
||||||
|
Image[] source = images.toArray(new Image[0]);
|
||||||
|
if (Platform.isFxApplicationThread()){
|
||||||
|
_showpictures(source, seconds, onClose);
|
||||||
|
} else {
|
||||||
|
Platform.runLater(()-> _showpictures(source,seconds, onClose));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void _showpictures(Image[] pictures, int seconds, Consumer<String> onClose){
|
||||||
|
close();
|
||||||
|
|
||||||
|
Stage alertStage = new Stage();
|
||||||
|
alertStage.initModality(Modality.APPLICATION_MODAL);
|
||||||
|
alertStage.initStyle(StageStyle.UTILITY);
|
||||||
|
alertStage.setAlwaysOnTop(true);
|
||||||
|
alertStage.setResizable(false);
|
||||||
|
int width = (int) Screen.getPrimary().getBounds().getWidth();
|
||||||
|
int height = (int) Screen.getPrimary().getBounds().getHeight();
|
||||||
|
|
||||||
|
HBox hbox = new HBox();
|
||||||
|
hbox.setAlignment(Pos.CENTER);
|
||||||
|
int fitwidth = width / pictures.length;
|
||||||
|
for(Image i : pictures){
|
||||||
|
ImageView iv = new ImageView(i);
|
||||||
|
iv.setPreserveRatio(true);
|
||||||
|
iv.setFitHeight(height);
|
||||||
|
iv.setFitWidth(fitwidth);
|
||||||
|
hbox.getChildren().add(iv);
|
||||||
|
}
|
||||||
|
|
||||||
|
BorderPane borderPane = new BorderPane();
|
||||||
|
borderPane.setCenter(hbox);
|
||||||
|
|
||||||
|
alertStage.setScene(new Scene(borderPane, width, height));
|
||||||
|
alertStage.centerOnScreen();
|
||||||
|
|
||||||
|
Timeline timeline = new Timeline();
|
||||||
|
timeline.getKeyFrames().add(new KeyFrame(Duration.seconds(0), event -> alertStage.show()));
|
||||||
|
|
||||||
|
timeline.getKeyFrames().add(new KeyFrame(Duration.seconds(seconds* (pictures.length)), event -> {
|
||||||
|
try {
|
||||||
|
closeStage(alertStage);
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
Logger.error("Error closing alert stage: " + e.getMessage());
|
||||||
|
}
|
||||||
|
//alertStage.close();
|
||||||
|
if (currentAlertStage == alertStage) {
|
||||||
|
currentAlertStage = null;
|
||||||
|
}
|
||||||
|
if (onClose!=null) onClose.accept(shownTitle);
|
||||||
|
clear();
|
||||||
|
}));
|
||||||
|
timeline.play();
|
||||||
|
|
||||||
|
currentAlertStage = alertStage;
|
||||||
|
shownTitle = "";
|
||||||
|
shownContent = "";
|
||||||
|
shownHeader = "";
|
||||||
|
shownBanner = null;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Stage _showbanner(Image image){
|
||||||
|
close();
|
||||||
|
|
||||||
|
Stage alertStage = new Stage();
|
||||||
|
alertStage.initModality(Modality.APPLICATION_MODAL);
|
||||||
|
alertStage.initStyle(StageStyle.UTILITY);
|
||||||
|
alertStage.setAlwaysOnTop(true);
|
||||||
|
alertStage.setResizable(false);
|
||||||
|
int width = (int) Screen.getPrimary().getBounds().getWidth();
|
||||||
|
int height = (int) Screen.getPrimary().getBounds().getHeight();
|
||||||
|
|
||||||
|
BorderPane borderPane = new BorderPane();
|
||||||
|
|
||||||
|
StackPane stackPane = new StackPane();
|
||||||
|
|
||||||
|
if (image!=null){
|
||||||
|
ImageView imageView = new ImageView(image);
|
||||||
|
imageView.setPreserveRatio(true);
|
||||||
|
imageView.setFitWidth(width);
|
||||||
|
imageView.setSmooth(true);
|
||||||
|
stackPane.getChildren().add(imageView);
|
||||||
|
}
|
||||||
|
|
||||||
|
HBox CamStatus = DermiesMode ? new HBox(30, Cam1, Cam2, Cam3) : new HBox(30, Cam1, Cam2, Cam3, Cam4, Cam5);
|
||||||
|
CamStatus.setMinHeight(60);
|
||||||
|
CamStatus.setAlignment(Pos.CENTER);
|
||||||
|
|
||||||
|
VBox vBox = new VBox(CamStatus);
|
||||||
|
vBox.setAlignment(Pos.BOTTOM_CENTER);
|
||||||
|
|
||||||
|
stackPane.getChildren().add(vBox);
|
||||||
|
|
||||||
|
borderPane.setCenter(stackPane);
|
||||||
|
|
||||||
|
alertStage.setScene(new Scene(borderPane, width, height));
|
||||||
|
alertStage.centerOnScreen();
|
||||||
|
alertStage.show();
|
||||||
|
|
||||||
|
currentAlertStage = alertStage;
|
||||||
|
shownBanner = image;
|
||||||
|
CamStatus.prefWidthProperty().bind(currentAlertStage.widthProperty());
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
shownTitle = "";
|
||||||
|
shownContent = "";
|
||||||
|
shownHeader = "";
|
||||||
|
|
||||||
|
return alertStage;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create an alert with a title, header, and content
|
||||||
|
* @param title the title
|
||||||
|
* @param header the header
|
||||||
|
* @param content the content
|
||||||
|
* @return the alert stage
|
||||||
|
*/
|
||||||
|
private static Stage _showtext(String title, String header, String content){
|
||||||
|
// close previous alert before showing a new one
|
||||||
|
close();
|
||||||
|
|
||||||
|
Stage alertStage = new Stage();
|
||||||
|
alertStage.initModality(Modality.APPLICATION_MODAL);
|
||||||
|
alertStage.initStyle(StageStyle.UTILITY);
|
||||||
|
alertStage.setAlwaysOnTop(true);
|
||||||
|
alertStage.setResizable(false);
|
||||||
|
|
||||||
|
double screenwidth = Screen.getPrimary().getBounds().getWidth();
|
||||||
|
double screenheight = Screen.getPrimary().getBounds().getHeight();
|
||||||
|
|
||||||
|
double height = screenheight/4.0;
|
||||||
|
double width = height * 21.0/9.0;
|
||||||
|
|
||||||
|
VBox root = new VBox(10);
|
||||||
|
root.setPadding(new Insets(12));
|
||||||
|
root.setPrefSize(width, height);
|
||||||
|
root.setAlignment(Pos.CENTER);
|
||||||
|
|
||||||
|
if (ValidString(header)){
|
||||||
|
Label headerLabel = new Label(header);
|
||||||
|
headerLabel.setStyle("-fx-font-weight: bold; -fx-font-size: 28px;");
|
||||||
|
headerLabel.setWrapText(true);
|
||||||
|
headerLabel.setMinHeight(height*0.25);
|
||||||
|
headerLabel.setMaxWidth(Double.MAX_VALUE);
|
||||||
|
headerLabel.prefWidthProperty().bind(root.widthProperty());
|
||||||
|
root.getChildren().add(headerLabel);
|
||||||
|
}
|
||||||
|
if (ValidString(content)){
|
||||||
|
Label contentLabel = new Label(content);
|
||||||
|
contentLabel.setWrapText(true);
|
||||||
|
contentLabel.setStyle("-fx-font-size: 24px;");
|
||||||
|
contentLabel.setMinHeight(height*0.75);
|
||||||
|
contentLabel.setMaxWidth(Double.MAX_VALUE);
|
||||||
|
contentLabel.prefWidthProperty().bind(root.widthProperty());
|
||||||
|
|
||||||
|
VBox.setVgrow(contentLabel, Priority.ALWAYS);
|
||||||
|
contentLabel.setAlignment(Pos.TOP_CENTER);
|
||||||
|
root.getChildren().add(contentLabel);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Scene scene = new Scene(root);
|
||||||
|
alertStage.setScene(scene);
|
||||||
|
|
||||||
|
alertStage.setTitle(title);
|
||||||
|
|
||||||
|
double x = screenwidth/2 - width/2;
|
||||||
|
double y = screenheight - height - 10;
|
||||||
|
alertStage.setX(x);
|
||||||
|
alertStage.setY(y);
|
||||||
|
|
||||||
|
alertStage.show();
|
||||||
|
currentAlertStage = alertStage;
|
||||||
|
shownHeader = ValidString(header) ? header : "";
|
||||||
|
shownContent = ValidString(content) ? content : "";
|
||||||
|
shownTitle = ValidString(title) ? title : "";
|
||||||
|
shownBanner = null;
|
||||||
|
|
||||||
|
return alertStage;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Close the alert after a few seconds
|
||||||
|
* @param seconds the number of seconds before the alert is closed, if 0, the alert will not be closed
|
||||||
|
* @param onClose What to do after auto close
|
||||||
|
* @param alertStage the alert stage to be closed
|
||||||
|
*/
|
||||||
|
private static void closeAlertStage(int seconds, Consumer<String> onClose, Stage alertStage) {
|
||||||
|
|
||||||
|
if (seconds>0){
|
||||||
|
PauseTransition delay = new PauseTransition(Duration.seconds(seconds));
|
||||||
|
delay.setOnFinished(e -> {
|
||||||
|
try {
|
||||||
|
closeStage(alertStage);
|
||||||
|
} catch (InterruptedException err) {
|
||||||
|
Logger.error("Error closing alert stage: " + err.getMessage());
|
||||||
|
}
|
||||||
|
//alertStage.close();
|
||||||
|
if (currentAlertStage == alertStage) {
|
||||||
|
currentAlertStage = null;
|
||||||
|
}
|
||||||
|
if (onClose!=null) onClose.accept(shownTitle);
|
||||||
|
clear();
|
||||||
|
} );
|
||||||
|
delay.play();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Image LoadImage(String filename){
|
||||||
|
if (ValidFile(filename)){
|
||||||
|
try{
|
||||||
|
return new Image(Paths.get(filename).toUri().toString());
|
||||||
|
} catch (Exception e){
|
||||||
|
Logger.error("Error loading image: " + filename+", Message: "+e.getMessage());
|
||||||
|
}
|
||||||
|
} else Logger.error("LoadImage: Invalid file: " + filename);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void clear(){
|
||||||
|
shownTitle = "";
|
||||||
|
shownContent = "";
|
||||||
|
shownHeader = "";
|
||||||
|
shownBanner= null;
|
||||||
|
}
|
||||||
|
}
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
84
src/main/java/id/co/gtc/erhacam/DetectorResult.java
Normal file
84
src/main/java/id/co/gtc/erhacam/DetectorResult.java
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
package id.co.gtc.erhacam;
|
||||||
|
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.Setter;
|
||||||
|
import org.bytedeco.opencv.opencv_core.Rect;
|
||||||
|
import org.bytedeco.opencv.opencv_core.Scalar;
|
||||||
|
import org.bytedeco.opencv.opencv_core.UMat;
|
||||||
|
import org.opencv.imgproc.Imgproc;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import static org.bytedeco.opencv.global.opencv_imgproc.rectangle;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
public class DetectorResult {
|
||||||
|
private @Setter Rect Face;
|
||||||
|
private List<Rect> Eyes;
|
||||||
|
private final int linethickness = 3;
|
||||||
|
private final int linetype = Imgproc.LINE_8;
|
||||||
|
private final int lineshift = 0;
|
||||||
|
|
||||||
|
public void AddEye(Rect eye){
|
||||||
|
if (Eyes == null) Eyes = new java.util.ArrayList<>();
|
||||||
|
Eyes.add(eye);
|
||||||
|
}
|
||||||
|
|
||||||
|
// trouble di sini
|
||||||
|
public void FaceRectangle(UMat mat){
|
||||||
|
if (mat == null || mat.empty()) return;
|
||||||
|
if (Face == null || Face.width() <= 0 || Face.height() <= 0) return;
|
||||||
|
if (Face.x() < 0 || Face.y() < 0) return; // ignore negative coordinates
|
||||||
|
if (Face.x() + Face.width() > mat.cols() || Face.y() + Face.height() > mat.rows()) return; // ignore out of bounds
|
||||||
|
if (haveFace()){
|
||||||
|
|
||||||
|
try{
|
||||||
|
rectangle(mat, Face, Scalar.GREEN, linethickness, linetype, lineshift);
|
||||||
|
|
||||||
|
} catch (Exception ignored){}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// trouble di sini
|
||||||
|
public void EyesRectangle(UMat mat){
|
||||||
|
if (mat == null || mat.empty()) return;
|
||||||
|
|
||||||
|
if (haveEyes()){
|
||||||
|
|
||||||
|
for(Rect eye : Eyes){
|
||||||
|
if (eye == null || eye.width() <= 0 || eye.height() <= 0) continue;
|
||||||
|
if (eye.x() < 0 || eye.y() < 0) continue; // ignore negative coordinates
|
||||||
|
if (eye.x() + eye.width() > mat.cols() || eye.y() + eye.height() > mat.rows()) continue; // ignore out of bounds
|
||||||
|
|
||||||
|
try{
|
||||||
|
rectangle(mat, eye, Scalar.BLUE);
|
||||||
|
|
||||||
|
} catch (Exception ignored){}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean haveFace(){
|
||||||
|
return Face != null && Face.width() > 0 && Face.height() > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getFaceWidth(){
|
||||||
|
if (!haveFace()) return 0;
|
||||||
|
return Face.width();
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getFaceHeight(){
|
||||||
|
if (!haveFace()) return 0;
|
||||||
|
return Face.height();
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean haveEyes(){
|
||||||
|
return Eyes != null && !Eyes.isEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getEyesCount(){
|
||||||
|
if (!haveEyes()) return 0;
|
||||||
|
return Eyes.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
205
src/main/java/id/co/gtc/erhacam/Detectors.java
Normal file
205
src/main/java/id/co/gtc/erhacam/Detectors.java
Normal file
@@ -0,0 +1,205 @@
|
|||||||
|
package id.co.gtc.erhacam;
|
||||||
|
|
||||||
|
import Config.SomeCodes;
|
||||||
|
import lombok.NonNull;
|
||||||
|
import org.bytedeco.opencv.opencv_core.*;
|
||||||
|
import org.bytedeco.opencv.opencv_objdetect.CascadeClassifier;
|
||||||
|
import org.tinylog.Logger;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class Detectors {
|
||||||
|
public CascadeClassifier frontalfaceDetector;
|
||||||
|
private CascadeClassifier eyeDetector;
|
||||||
|
private CascadeClassifier profilefaceDetector;
|
||||||
|
|
||||||
|
private double scaleFactor = 1.05; // revisi 09/05/2025, dari nilai 1.05
|
||||||
|
private final int minNeighbors = 3; // revisi 09/05/2025, dari nilai 3
|
||||||
|
private final int flags = 0;
|
||||||
|
private Size FaceminSize;
|
||||||
|
private Size FacemaxSize;
|
||||||
|
|
||||||
|
public Detectors(){
|
||||||
|
LoadFrontalFaceDetector();
|
||||||
|
LoadEyeDetector();
|
||||||
|
|
||||||
|
LoadProfileFaceDetector();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void LoadFrontalFaceDetector(){
|
||||||
|
// revisi 09/05/2025, dari filename = SomeCodes.ExtractResource("/haarcascade_frontalface_default.xml");
|
||||||
|
String filename = SomeCodes.ExtractResource("/haarcascade_frontalface_alt.xml");
|
||||||
|
if (filename!=null) {
|
||||||
|
try{
|
||||||
|
frontalfaceDetector = new CascadeClassifier(filename);
|
||||||
|
} catch (Exception e){
|
||||||
|
Logger.error("Exception on loading FaceDetector : " + e.getMessage());
|
||||||
|
}
|
||||||
|
} else Logger.error("Unable to extract face detector file");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void LoadProfileFaceDetector(){
|
||||||
|
String filename = SomeCodes.ExtractResource("/haarcascade_profileface.xml");
|
||||||
|
if (filename!=null) {
|
||||||
|
try{
|
||||||
|
profilefaceDetector = new CascadeClassifier(filename);
|
||||||
|
} catch (Exception e){
|
||||||
|
Logger.error("Exception on loading ProfileFaceDetector : " + e.getMessage());
|
||||||
|
}
|
||||||
|
} else Logger.error("Unable to extract profile face detector file");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void LoadEyeDetector(){
|
||||||
|
String filename = SomeCodes.ExtractResource("/haarcascade_eye.xml");
|
||||||
|
if (filename!=null) {
|
||||||
|
try{
|
||||||
|
|
||||||
|
eyeDetector = new CascadeClassifier(filename);
|
||||||
|
} catch (Exception e){
|
||||||
|
Logger.error("Exception on loading EyeDetector : " + e.getMessage());
|
||||||
|
}
|
||||||
|
} else Logger.error("Unable to extract eye detector file");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Detect if there is a frontal face, containing 2 eyes
|
||||||
|
* @param graymat Mat in Gray Scale
|
||||||
|
* @return List of Rect if face detected, otherwise empty list
|
||||||
|
*/
|
||||||
|
public @NonNull List<DetectorResult> HaveFrontalFace(Mat graymat){
|
||||||
|
List<DetectorResult> result = new ArrayList<>();
|
||||||
|
//System.out.println("Detecting frontal from "+ graymat.size().width() + "x" + graymat.size().height());
|
||||||
|
RectVector faces = DetectFrontalFace(graymat);
|
||||||
|
if (faces!=null && faces.size()>0){
|
||||||
|
//System.out.println("faces size = " + faces.size());
|
||||||
|
for(Rect face : faces.get()){
|
||||||
|
RectVector eyes = DetectEye(graymat, face.width());
|
||||||
|
DetectorResult dr = new DetectorResult();
|
||||||
|
dr.setFace(face);
|
||||||
|
//System.out.println("eyes size = " + eyes.size());
|
||||||
|
if (eyes.size()>=2){
|
||||||
|
for(Rect eye : eyes.get()){
|
||||||
|
if (SomeCodes.IsInsideRect(eye, face)) {
|
||||||
|
dr.AddEye(eye);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
result.add(dr);
|
||||||
|
}
|
||||||
|
} //else System.out.println("faces size = 0");
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public @NonNull List<DetectorResult> HaveLeft45Face(Mat graymat){
|
||||||
|
List<DetectorResult> result = new ArrayList<>();
|
||||||
|
RectVector faces = DetectProfileFace(graymat);
|
||||||
|
if (faces!=null && faces.size()>0){
|
||||||
|
|
||||||
|
for(Rect face : faces.get()){
|
||||||
|
RectVector eyes = DetectEye(graymat, face.width());
|
||||||
|
DetectorResult dr = new DetectorResult();
|
||||||
|
dr.setFace(face);
|
||||||
|
if (eyes.size()>0){
|
||||||
|
for(Rect eye : eyes.get()){
|
||||||
|
if (SomeCodes.IsInsideRect(eye, face)) dr.AddEye(eye);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
result.add(dr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public void setScaleFactor(double value){
|
||||||
|
if (scaleFactor!=value) scaleFactor = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFaceMinSize(int value){
|
||||||
|
if (FaceminSize!=null){
|
||||||
|
if (FaceminSize.width()!=value || FaceminSize.height()!=value) {
|
||||||
|
FaceminSize = new Size(value, value);
|
||||||
|
Logger.info("FaceMinSize changed to : " + FaceminSize.width());
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
FaceminSize = new Size(value, value);
|
||||||
|
Logger.info("FaceMinSize created with value : " + FaceminSize.width());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFaceMaxSize(int value){
|
||||||
|
if (FacemaxSize!=null){
|
||||||
|
if (FacemaxSize.width()!=value || FacemaxSize.height()!=value) {
|
||||||
|
FacemaxSize = new Size(value, value);
|
||||||
|
Logger.info("FaceMaxSize changed to : " + FacemaxSize.width());
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
FacemaxSize = new Size(value, value);
|
||||||
|
Logger.info("FaceMaxSize created with value : " + FacemaxSize.width());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public RectVector DetectProfileFace(Mat graymat){
|
||||||
|
return Detect(graymat, profilefaceDetector, scaleFactor, minNeighbors, flags, FaceminSize, FacemaxSize);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Detect Face from Mat
|
||||||
|
* @param graymat Mat in Gray Scale
|
||||||
|
* @return RectVector if face detected, otherwise null
|
||||||
|
*/
|
||||||
|
public RectVector DetectFrontalFace(Mat graymat){
|
||||||
|
return Detect(graymat, frontalfaceDetector, scaleFactor, minNeighbors, flags, FaceminSize, FacemaxSize);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Detect Eye from Mat
|
||||||
|
* If Eye detected, it will return RectVector with size is number of eyes detected
|
||||||
|
* @param graymat Mat in Gray Scale
|
||||||
|
* @return RectVector if eye detected, otherwise null
|
||||||
|
*/
|
||||||
|
public RectVector DetectEye(Mat graymat, int facewidth){
|
||||||
|
//return Detect(graymat, eyeDetector);
|
||||||
|
int minwidth = (int)(facewidth*0.2);
|
||||||
|
int maxwidth = (int)(facewidth*0.4);
|
||||||
|
Size minsize = new Size(minwidth, minwidth);
|
||||||
|
Size maxsize = new Size(maxwidth, maxwidth);
|
||||||
|
//System.out.println("Detecting Eye with minsize = " + minsize.width() + "x" + minsize.height() + ", maxsize = " + maxsize.width() + "x" + maxsize.height());
|
||||||
|
return Detect(graymat, eyeDetector, scaleFactor, minNeighbors, flags, minsize, maxsize);
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("SameParameterValue")
|
||||||
|
private RectVector Detect(Mat graymat, CascadeClassifier detector, double scaleFactor, int minNeighbors, int flags, Size minSize, Size maxSize){
|
||||||
|
if (detector!=null && !detector.empty()){
|
||||||
|
if (graymat!=null && graymat.channels()==1 && !graymat.empty()){
|
||||||
|
if (minSize!=null && maxSize!=null){
|
||||||
|
if (minSize.width()< maxSize.width() && minSize.height() < maxSize.height()){
|
||||||
|
if (graymat.cols()> minSize.width() && graymat.rows() > minSize.height()) {
|
||||||
|
try {
|
||||||
|
RectVector detected = new RectVector();
|
||||||
|
// try defaulting minSize and maxSize
|
||||||
|
detector.detectMultiScale(graymat, detected, scaleFactor, minNeighbors, flags, minSize, new Size());
|
||||||
|
|
||||||
|
return detected;
|
||||||
|
} catch (Exception e) {
|
||||||
|
System.out.println("Detectors Detect Error, Message : " + e.getMessage());
|
||||||
|
}
|
||||||
|
} else System.out.println("graymat is smaller than minSize");
|
||||||
|
|
||||||
|
} else System.out.println("minSize is larger than maxSize");
|
||||||
|
} else System.out.println("minSize or maxSize is null");
|
||||||
|
} else System.out.println("graymat is null, not 1 channel, or empty");
|
||||||
|
|
||||||
|
} else System.out.println("detector empty");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,45 +1,140 @@
|
|||||||
package id.co.gtc.erhacam;
|
package id.co.gtc.erhacam;
|
||||||
|
|
||||||
import Config.SomeCodes;
|
import Config.SomeCodes;
|
||||||
|
import Database.PhotoCleaner;
|
||||||
|
import SecureDongle.SecureDongle;
|
||||||
|
import SecureDongle.SecureDongleEvent;
|
||||||
import javafx.application.Application;
|
import javafx.application.Application;
|
||||||
|
import javafx.application.Platform;
|
||||||
import javafx.fxml.FXMLLoader;
|
import javafx.fxml.FXMLLoader;
|
||||||
import javafx.geometry.Rectangle2D;
|
import javafx.geometry.Rectangle2D;
|
||||||
import javafx.scene.Scene;
|
import javafx.scene.Scene;
|
||||||
|
import javafx.scene.control.Alert;
|
||||||
import javafx.stage.Screen;
|
import javafx.stage.Screen;
|
||||||
import javafx.stage.Stage;
|
import javafx.stage.Stage;
|
||||||
import org.tinylog.Logger;
|
import org.tinylog.Logger;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
import static Config.SomeCodes.config;
|
import static Config.SomeCodes.*;
|
||||||
|
|
||||||
|
|
||||||
public class MainApplication extends Application {
|
public class MainApplication extends Application {
|
||||||
|
|
||||||
|
final String version = "29102025-STAGING-1.0.8";
|
||||||
|
PhotoCleaner photoCleaner;
|
||||||
|
public static Map<Integer, Detectors> detectorsList = new HashMap<>();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void start(Stage stage) throws IOException {
|
public void start(Stage stage) throws IOException {
|
||||||
|
|
||||||
|
Runtime.getRuntime().addShutdownHook(new Thread(() -> {
|
||||||
|
if (photoCleaner!=null) photoCleaner.Stop();
|
||||||
|
System.out.println("ShutdownHook Checking running threads...");
|
||||||
|
// Map<Thread, StackTraceElement[]> allThreads = Thread.getAllStackTraces();
|
||||||
|
// for(Thread thread : allThreads.keySet()){
|
||||||
|
// System.out.println("Thread: " + thread.getName()+", State: " + thread.getState()+", Daemon: " + thread.isDaemon());
|
||||||
|
// thread.interrupt();
|
||||||
|
// }
|
||||||
|
}));
|
||||||
|
|
||||||
|
|
||||||
|
SecureDongle sd = new SecureDongle((short)0x4B30, (short)0xA66C, (short)0x3109, (short)0x37B1);
|
||||||
|
if (sd.Find()){
|
||||||
|
if (sd.Open()){
|
||||||
|
String UserID = Integer.toHexString(sd.ReadUserID()) ;
|
||||||
|
sd.Close();
|
||||||
|
|
||||||
|
if (UserID.equals("14022025") || UserID.equals("3102025")){
|
||||||
|
// 14022025 = Erha, 3102025 = Dermies
|
||||||
|
DermiesMode = !UserID.equals("14022025");
|
||||||
|
Logger.info("Secure Dongle UserID valid for "+(DermiesMode?"Dermies":"Erha"));
|
||||||
|
if (DermiesMode){
|
||||||
|
boolean needsave = false;
|
||||||
|
if (!config.getCameraRight45().isEmpty()){
|
||||||
|
System.out.println("Dermies mode, disable Camera 4");
|
||||||
|
config.SetCameraRight45("");
|
||||||
|
needsave = true;
|
||||||
|
}
|
||||||
|
if (!config.getCameraRight90().isEmpty()){
|
||||||
|
System.out.println("Dermies mode, disable Camera 5");
|
||||||
|
config.SetCameraRight90("");
|
||||||
|
needsave = true;
|
||||||
|
}
|
||||||
|
if (needsave) config.Save();
|
||||||
|
}
|
||||||
FXMLLoader fxmlLoader = new FXMLLoader(MainApplication.class.getResource("main-view.fxml"));
|
FXMLLoader fxmlLoader = new FXMLLoader(MainApplication.class.getResource("main-view.fxml"));
|
||||||
Screen screen = Screen.getPrimary();
|
Screen screen = Screen.getPrimary();
|
||||||
Rectangle2D screenbound = screen.getVisualBounds();
|
Rectangle2D screenbound = screen.getBounds();
|
||||||
Scene scene = new Scene(fxmlLoader.load(), screenbound.getWidth(), screenbound.getHeight());
|
Scene scene = new Scene(fxmlLoader.load(), screenbound.getWidth(), screenbound.getHeight());
|
||||||
stage.setTitle("MultiCam Capture App for ERHA");
|
stage.setTitle("MultiCam Capture App for "+(DermiesMode?"Dermies ":"Erha ") + version);
|
||||||
stage.setScene(scene);
|
stage.setScene(scene);
|
||||||
stage.setResizable(true);
|
stage.setResizable(true);
|
||||||
stage.setMaximized(true);
|
stage.setMaximized(true);
|
||||||
stage.setOnCloseRequest(e->{
|
stage.setOnCloseRequest(e->{
|
||||||
|
sd.StopMonitor();
|
||||||
config.Save();
|
config.Save();
|
||||||
MainView mainView = fxmlLoader.getController();
|
MainView mainView = fxmlLoader.getController();
|
||||||
mainView.Unload();
|
mainView.Unload();
|
||||||
Logger.info("Application closed");
|
Logger.info("Application closed");
|
||||||
});
|
});
|
||||||
SomeCodes.LoadQRReader();
|
SomeCodes.LoadQRReader();
|
||||||
SomeCodes.LoadFaceDetector();
|
// buang, pindah ke Cameradetail
|
||||||
|
//Detectors.LoadAllDetectors();
|
||||||
|
|
||||||
stage.show();
|
stage.show();
|
||||||
|
|
||||||
|
AutoCloseAlert.init();
|
||||||
|
|
||||||
Logger.info("Application started");
|
Logger.info("Application started");
|
||||||
|
System.out.println("Application version : " + version+" started");
|
||||||
|
System.out.println("Using "+(config.isProduction()?"Production":"Staging")+" API URL ");
|
||||||
|
sd.setEvent(new SecureDongleEvent() {
|
||||||
|
@Override
|
||||||
|
public void onDongleMissing() {
|
||||||
|
Logger.error("Secure Dongle Missing");
|
||||||
|
Platform.runLater(()->{
|
||||||
|
ShowAlert(Alert.AlertType.ERROR, "Secure Dongle Missing", "Secure Dongle Missing", "Secure Dongle Missing");
|
||||||
|
Platform.exit();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onDongleError(String function, int errorCode) {
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
sd.StartMonitor();
|
||||||
|
|
||||||
|
photoCleaner = new PhotoCleaner(90);
|
||||||
|
photoCleaner.Start();
|
||||||
|
|
||||||
|
} else {
|
||||||
|
ShowAlert(Alert.AlertType.ERROR, "Secure Dongle UserID not valid", "Secure Dongle UserID not valid", "Secure Dongle UserID not valid");
|
||||||
|
Logger.error("Secure Dongle UserID not valid");
|
||||||
|
Platform.exit();
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
ShowAlert(Alert.AlertType.ERROR, "Secure Dongle cannot be opened", "Secure Dongle cannot be opened", "Secure Dongle cannot be opened");
|
||||||
|
Logger.error("Secure Dongle cannot be opened");
|
||||||
|
Platform.exit();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
ShowAlert(Alert.AlertType.ERROR, "Secure Dongle not found", "Secure Dongle not found", "Secure Dongle not found");
|
||||||
|
Logger.error("Secure Dongle not found");
|
||||||
|
Platform.exit();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
SomeCodes.ExtractResource("/tinylog.properties");
|
SomeCodes.ExtractResource("/tinylog.properties");
|
||||||
launch();
|
launch();
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -9,6 +9,7 @@ import javafx.scene.layout.AnchorPane;
|
|||||||
import javafx.scene.layout.Pane;
|
import javafx.scene.layout.Pane;
|
||||||
import org.tinylog.Logger;
|
import org.tinylog.Logger;
|
||||||
|
|
||||||
|
import static Config.SomeCodes.DermiesMode;
|
||||||
import static Config.SomeCodes.ValidString;
|
import static Config.SomeCodes.ValidString;
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
@@ -41,8 +42,9 @@ public class MainView {
|
|||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
private void CaptureClick(ActionEvent event){
|
private void CaptureClick(ActionEvent event){
|
||||||
if (currentselected.equals("capture-view.fxml")) return;
|
String fxmlfile = DermiesMode?"capture-view-dermies.fxml":"capture-view.fxml";
|
||||||
loadContent("capture-view.fxml");
|
if (currentselected.equals(fxmlfile)) return;
|
||||||
|
loadContent(fxmlfile);
|
||||||
}
|
}
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
@@ -59,7 +61,7 @@ public class MainView {
|
|||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
private void initialize(){
|
private void initialize(){
|
||||||
ReviewClick(null);
|
CaptureClick(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Unload(){
|
public void Unload(){
|
||||||
@@ -92,8 +94,8 @@ public class MainView {
|
|||||||
currentcontroller = loader.getController();
|
currentcontroller = loader.getController();
|
||||||
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Logger.error("Unable to load " + fxmlfile + ", exception : " + e.getMessage());
|
Logger.error("Unable to load " ,fxmlfile, ", exception : ", e.getMessage());
|
||||||
}
|
}
|
||||||
} else Logger.info("Not loading empty fxml file");
|
} else Logger.error("loadContent Not loading empty fxml file");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -15,7 +15,7 @@ import org.tinylog.Logger;
|
|||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
|
|
||||||
import static Config.SomeCodes.config;
|
import static Config.SomeCodes.*;
|
||||||
|
|
||||||
public class PhotoRow {
|
public class PhotoRow {
|
||||||
@FXML
|
@FXML
|
||||||
@@ -28,13 +28,11 @@ public class PhotoRow {
|
|||||||
private final String borderstyle = "-fx-border-color: black; -fx-border-width: 1px;";
|
private final String borderstyle = "-fx-border-color: black; -fx-border-width: 1px;";
|
||||||
|
|
||||||
public void setDatetime(String datetime){
|
public void setDatetime(String datetime){
|
||||||
this.datetime.setText(datetime);
|
LabelSetText(this.datetime, datetime, borderstyle);
|
||||||
this.datetime.setStyle(borderstyle);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setPrefix(String prefix){
|
public void setPrefix(String prefix){
|
||||||
this.prefix.setText(prefix);
|
LabelSetText(this.prefix,prefix,borderstyle);
|
||||||
this.prefix.setStyle(borderstyle);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setPhotos(int width, int height, String... thumbnails){
|
public void setPhotos(int width, int height, String... thumbnails){
|
||||||
@@ -48,17 +46,12 @@ public class PhotoRow {
|
|||||||
imgview.setOnMouseClicked(e->{
|
imgview.setOnMouseClicked(e->{
|
||||||
if (e.getClickCount()>=2){
|
if (e.getClickCount()>=2){
|
||||||
File ff = new File(photopath);
|
File ff = new File(photopath);
|
||||||
String hires = Path.of(config.getPhotoDirectory(), ff.getName()).toString();
|
String hires = Path.of(config.getFullQualityDirectory(), ff.getName()).toString();
|
||||||
File hiresfile = new File(hires);
|
File hiresfile = new File(hires);
|
||||||
if (hiresfile.isFile()){
|
if (hiresfile.isFile()){
|
||||||
|
System.out.println("Opening file: "+hires);
|
||||||
SomeCodes.OpenPictureInDefaultViewer(hires);
|
SomeCodes.OpenPictureInDefaultViewer(hires);
|
||||||
} else {
|
} else ShowAlert(Alert.AlertType.ERROR, "Error", "File not found", "File not found: "+hires);
|
||||||
Alert alert = new Alert(Alert.AlertType.ERROR);
|
|
||||||
alert.setTitle("Error");
|
|
||||||
alert.setHeaderText("File not found");
|
|
||||||
alert.setContentText("File not found: "+hires);
|
|
||||||
alert.showAndWait();
|
|
||||||
}
|
|
||||||
e.consume();
|
e.consume();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -3,40 +3,47 @@ package id.co.gtc.erhacam;
|
|||||||
import FTP.FTPCheck;
|
import FTP.FTPCheck;
|
||||||
import javafx.application.Platform;
|
import javafx.application.Platform;
|
||||||
import javafx.fxml.FXML;
|
import javafx.fxml.FXML;
|
||||||
import javafx.scene.control.Alert;
|
import javafx.scene.control.*;
|
||||||
import javafx.scene.control.ComboBox;
|
import javafx.stage.DirectoryChooser;
|
||||||
import javafx.scene.control.TextField;
|
|
||||||
import javafx.stage.FileChooser;
|
import javafx.stage.FileChooser;
|
||||||
import lombok.val;
|
|
||||||
import org.bytedeco.javacv.VideoInputFrameGrabber;
|
import org.bytedeco.javacv.VideoInputFrameGrabber;
|
||||||
import org.tinylog.Logger;
|
import org.tinylog.Logger;
|
||||||
|
|
||||||
import java.io.File;
|
import static Config.SomeCodes.*;
|
||||||
|
|
||||||
import static Config.SomeCodes.config;
|
|
||||||
|
|
||||||
public class SettingView {
|
public class SettingView {
|
||||||
@FXML
|
@FXML
|
||||||
private TextField AudioPhase1;
|
private Label lblCamera1;
|
||||||
@FXML
|
@FXML
|
||||||
private TextField AudioPhase2;
|
private Label lblCamera2;
|
||||||
@FXML
|
@FXML
|
||||||
private TextField AudioPhase3;
|
private Label lblCamera3;
|
||||||
@FXML
|
@FXML
|
||||||
private TextField AudioPhase4;
|
private Label lblCamera4;
|
||||||
@FXML
|
@FXML
|
||||||
private TextField AudioPhase5;
|
private Label lblCamera5;
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
private ComboBox<String> CameraLeft90;
|
private ComboBox<String> Camera1;
|
||||||
@FXML
|
@FXML
|
||||||
private ComboBox<String> CameraLeft45;
|
private ComboBox<String> Camera2;
|
||||||
@FXML
|
@FXML
|
||||||
private ComboBox<String> CameraCenter;
|
private ComboBox<String> Camera3;
|
||||||
@FXML
|
@FXML
|
||||||
private ComboBox<String> CameraRight45;
|
private ComboBox<String> Camera4;
|
||||||
@FXML
|
@FXML
|
||||||
private ComboBox<String> CameraRight90;
|
private ComboBox<String> Camera5;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private Button ApplyCamera1;
|
||||||
|
@FXML
|
||||||
|
private Button ApplyCamera2;
|
||||||
|
@FXML
|
||||||
|
private Button ApplyCamera3;
|
||||||
|
@FXML
|
||||||
|
private Button ApplyCamera4;
|
||||||
|
@FXML
|
||||||
|
private Button ApplyCamera5;
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
private TextField FTPHost;
|
private TextField FTPHost;
|
||||||
@@ -49,10 +56,262 @@ public class SettingView {
|
|||||||
@FXML
|
@FXML
|
||||||
private TextField FTPPath;
|
private TextField FTPPath;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private TextField Sharpness;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private TextField PhotoDirectoryPath;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private CheckBox MirrorCamera;
|
||||||
|
|
||||||
|
@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 RadioButton apiStaging;
|
||||||
|
@FXML
|
||||||
|
private RadioButton apiProduction;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
public void changeAPIClick(){
|
||||||
|
if (apiStaging.isSelected()){
|
||||||
|
config.setAPI(false);
|
||||||
|
config.Save();
|
||||||
|
ShowAlert(Alert.AlertType.INFORMATION, "API Change", "API Change", "API Staging is selected, API will use Staging URL");
|
||||||
|
} else if (apiProduction.isSelected()){
|
||||||
|
config.setAPI(true);
|
||||||
|
config.Save();
|
||||||
|
ShowAlert(Alert.AlertType.INFORMATION, "API Change", "API Change", "API Production is selected, API will use Production URL");
|
||||||
|
} else {
|
||||||
|
ShowAlert(Alert.AlertType.ERROR, "API Change Error", "API Change Error", "Please select API Staging or API Production");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@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();
|
final FileChooser jfc = new FileChooser();
|
||||||
|
|
||||||
String[] cameranames = null;
|
String[] cameranames = null;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private TextField cascadeMinSize;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private TextField cascadeScaleFactor;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private TextField cascadeMaxSize;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private void ChangePhotoDirectoryPath(){
|
||||||
|
DirectoryChooser dc = new DirectoryChooser();
|
||||||
|
dc.setTitle("Select Directory");
|
||||||
|
String path = dc.showDialog(null).getAbsolutePath();
|
||||||
|
|
||||||
|
config.SetPhotoDirectory(path);
|
||||||
|
config.Save();
|
||||||
|
TextFieldSetText(PhotoDirectoryPath,path);
|
||||||
|
}
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private void SharpnessApply(){
|
||||||
|
String str = Sharpness.getText();
|
||||||
|
if (ValidDouble(str)){
|
||||||
|
config.setSharpnessThreshold(Double.parseDouble(str));
|
||||||
|
config.Save();
|
||||||
|
} else {
|
||||||
|
ShowAlert(Alert.AlertType.ERROR, "Sharpness Setting Error", "Sharpness Setting Error", "Sharpness Setting must be a number");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private void CascadeSettingApply(){
|
||||||
|
|
||||||
|
String minsize = cascadeMinSize.getText();
|
||||||
|
String scalefactor = cascadeScaleFactor.getText();
|
||||||
|
String maxsize = cascadeMaxSize.getText();
|
||||||
|
|
||||||
|
if (ValidString(minsize)){
|
||||||
|
if (ValidString(maxsize)){
|
||||||
|
if (ValidString(scalefactor)){
|
||||||
|
try{
|
||||||
|
int min = Integer.parseInt(minsize);
|
||||||
|
double scale = Double.parseDouble(scalefactor);
|
||||||
|
int max = Integer.parseInt(maxsize);
|
||||||
|
if (scale> 1.0){
|
||||||
|
if (min>0){
|
||||||
|
if (max>min){
|
||||||
|
config.setCascadeMaxSize(max);
|
||||||
|
config.setCascadeMinSize(min);
|
||||||
|
config.setCascadeScaleFactor(scale);
|
||||||
|
config.Save();
|
||||||
|
|
||||||
|
if (MainApplication.detectorsList!=null){
|
||||||
|
MainApplication.detectorsList.forEach((i,d)-> {
|
||||||
|
d.setFaceMaxSize(max);
|
||||||
|
d.setFaceMinSize(min);
|
||||||
|
d.setScaleFactor(scale);
|
||||||
|
});
|
||||||
|
|
||||||
|
} else {
|
||||||
|
Logger.error("MainApplication.detectorsList is null, unable to set cascade settings");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Detectors.setFaceMaxSize(max);
|
||||||
|
// Detectors.setFaceMinSize(min);
|
||||||
|
// Detectors.setScaleFactor(scale);
|
||||||
|
ShowAlert(Alert.AlertType.INFORMATION, "Cascade Setting", "Cascade Setting Saved", "Cascade Setting Saved Successfully");
|
||||||
|
|
||||||
|
} else show_cascade_alert("Max Size must be greater than Min Size");
|
||||||
|
} else show_cascade_alert("Min Size must be greater than 0");
|
||||||
|
} else show_cascade_alert("Scale Factor must be greater than 1.0");
|
||||||
|
} catch (NumberFormatException e){
|
||||||
|
show_cascade_alert("Min Size, Scale Factor, and Max Size must be a number");
|
||||||
|
}
|
||||||
|
} else show_cascade_alert("Scale Factor must not empty");
|
||||||
|
} else show_cascade_alert("Max Size must not empty");
|
||||||
|
} else show_cascade_alert("Min Size must not empty");
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void show_cascade_alert(String content){
|
||||||
|
ShowAlert(Alert.AlertType.ERROR, "Cascade Setting Error", "Cascade Setting Error", content);
|
||||||
|
}
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
public void initialize(){
|
public void initialize(){
|
||||||
FileChooser.ExtensionFilter filter = new FileChooser.ExtensionFilter("Audio File", "wav","mp3");
|
FileChooser.ExtensionFilter filter = new FileChooser.ExtensionFilter("Audio File", "wav","mp3");
|
||||||
@@ -66,48 +325,117 @@ public class SettingView {
|
|||||||
Logger.error("Unable to detect Cameras, Msg : "+e.getMessage());
|
Logger.error("Unable to detect Cameras, Msg : "+e.getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MirrorCamera.selectedProperty().addListener(((observable, oldValue, newValue) -> {
|
||||||
|
config.setMirrorCamera(newValue);
|
||||||
|
config.Save();
|
||||||
|
}));
|
||||||
|
|
||||||
|
FlipCamera.selectedProperty().addListener((observable, oldValue, newValue) -> {
|
||||||
|
config.setFlipCamera(newValue);
|
||||||
|
config.Save();
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
Platform.runLater(()->{
|
Platform.runLater(()->{
|
||||||
AudioPhase1.setText(config.getAudioPhase1());
|
|
||||||
AudioPhase2.setText(config.getAudioPhase2());
|
|
||||||
AudioPhase3.setText(config.getAudioPhase3());
|
|
||||||
AudioPhase4.setText(config.getAudioPhase4());
|
|
||||||
AudioPhase5.setText(config.getAudioPhase5());
|
|
||||||
|
|
||||||
CameraLeft90.getItems().clear();
|
if (DermiesMode){
|
||||||
CameraLeft45.getItems().clear();
|
lblCamera4.setVisible(false);
|
||||||
CameraCenter.getItems().clear();
|
lblCamera5.setVisible(false);
|
||||||
CameraRight45.getItems().clear();
|
Camera4.setVisible(false);
|
||||||
CameraRight90.getItems().clear();
|
Camera5.setVisible(false);
|
||||||
|
ApplyCamera4.setVisible(false);
|
||||||
|
ApplyCamera5.setVisible(false);
|
||||||
|
Cam4BottomCrop.setVisible(false);
|
||||||
|
Cam5BottomCrop.setVisible(false);
|
||||||
|
Cam4TopCrop.setVisible(false);
|
||||||
|
Cam5TopCrop.setVisible(false);
|
||||||
|
Cam4LeftCrop.setVisible(false);
|
||||||
|
Cam5LeftCrop.setVisible(false);
|
||||||
|
Cam4RightCrop.setVisible(false);
|
||||||
|
Cam5RightCrop.setVisible(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
Camera1.getItems().clear();
|
||||||
|
Camera2.getItems().clear();
|
||||||
|
Camera3.getItems().clear();
|
||||||
|
if (!DermiesMode){
|
||||||
|
Camera4.getItems().clear();
|
||||||
|
Camera5.getItems().clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
Camera1.getItems().add("");
|
||||||
|
Camera2.getItems().add("");
|
||||||
|
Camera3.getItems().add("");
|
||||||
|
if (!DermiesMode){
|
||||||
|
Camera4.getItems().add("");
|
||||||
|
Camera5.getItems().add("");
|
||||||
|
}
|
||||||
|
|
||||||
CameraLeft90.getItems().add("");
|
|
||||||
CameraLeft45.getItems().add("");
|
|
||||||
CameraCenter.getItems().add("");
|
|
||||||
CameraRight45.getItems().add("");
|
|
||||||
CameraRight90.getItems().add("");
|
|
||||||
|
|
||||||
for(String camera: cameranames){
|
for(String camera: cameranames){
|
||||||
Logger.info("adding camera : "+camera+" to camera list");
|
Logger.info("adding camera : "+camera+" to camera list");
|
||||||
CameraLeft90.getItems().add(camera);
|
Camera1.getItems().add(camera);
|
||||||
CameraLeft45.getItems().add(camera);
|
Camera2.getItems().add(camera);
|
||||||
CameraCenter.getItems().add(camera);
|
Camera3.getItems().add(camera);
|
||||||
CameraRight45.getItems().add(camera);
|
if (!DermiesMode){
|
||||||
CameraRight90.getItems().add(camera);
|
Camera4.getItems().add(camera);
|
||||||
|
Camera5.getItems().add(camera);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
Camera1.setValue(config.getCameraLeft90());
|
||||||
|
Camera2.setValue(config.getCameraLeft45());
|
||||||
|
Camera3.setValue(config.getCameraCenter());
|
||||||
|
if (!DermiesMode){
|
||||||
|
Camera4.setValue(config.getCameraRight45());
|
||||||
|
Camera5.setValue(config.getCameraRight90());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
TextFieldSetText(FTPHost,config.getFTPHost());
|
||||||
|
TextFieldSetText(FTPPort,config.getFTPPort());
|
||||||
|
TextFieldSetText(FTPUser,config.getFTPUser());
|
||||||
|
TextFieldSetText(FTPPass,config.getFTPPass());
|
||||||
|
TextFieldSetText(FTPPath,config.getFTPPath());
|
||||||
|
|
||||||
|
TextFieldSetText(PhotoDirectoryPath,config.getPhotoDirectory());
|
||||||
|
|
||||||
|
TextFieldSetText(cascadeScaleFactor,String.valueOf(config.getCascadeScaleFactor()));
|
||||||
|
TextFieldSetText(cascadeMinSize,String.valueOf(config.getCascadeMinSize()));
|
||||||
|
TextFieldSetText(cascadeMaxSize,String.valueOf(config.getCascadeMaxSize()));
|
||||||
|
|
||||||
|
|
||||||
|
MirrorCamera.setSelected(config.isMirrorCamera());
|
||||||
|
FlipCamera.setSelected(config.isFlipCamera());
|
||||||
|
apiStaging.setSelected(!config.isProduction());
|
||||||
|
apiProduction.setSelected(config.isProduction());
|
||||||
|
|
||||||
|
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()));
|
||||||
|
if (!DermiesMode){
|
||||||
|
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()));
|
||||||
}
|
}
|
||||||
|
|
||||||
CameraLeft90.setValue(config.getCameraLeft90());
|
|
||||||
CameraLeft45.setValue(config.getCameraLeft45());
|
|
||||||
CameraCenter.setValue(config.getCameraCenter());
|
|
||||||
CameraRight45.setValue(config.getCameraRight45());
|
|
||||||
CameraRight90.setValue(config.getCameraRight90());
|
|
||||||
|
|
||||||
FTPHost.setText(config.getFTPHost());
|
|
||||||
FTPPort.setText(config.getFTPPort());
|
|
||||||
FTPUser.setText(config.getFTPUser());
|
|
||||||
FTPPass.setText(config.getFTPPass());
|
|
||||||
FTPPath.setText(config.getFTPPath());
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -115,75 +443,29 @@ public class SettingView {
|
|||||||
config.Save();
|
config.Save();
|
||||||
}
|
}
|
||||||
|
|
||||||
@FXML
|
|
||||||
private void BrowseAudioPhase1(){
|
|
||||||
File file = jfc.showOpenDialog(null);
|
|
||||||
if (file!=null){
|
|
||||||
config.SetAudioPhase1(file.getAbsolutePath());
|
|
||||||
AudioPhase1.setText(config.getAudioPhase1());
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@FXML
|
|
||||||
private void BrowseAudioPhase2(){
|
|
||||||
File file = jfc.showOpenDialog(null);
|
|
||||||
if (file!=null){
|
|
||||||
config.SetAudioPhase2(file.getAbsolutePath());
|
|
||||||
AudioPhase2.setText(config.getAudioPhase2());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@FXML
|
|
||||||
private void BrowseAudioPhase3(){
|
|
||||||
File file = jfc.showOpenDialog(null);
|
|
||||||
if (file!=null){
|
|
||||||
config.SetAudioPhase3(file.getAbsolutePath());
|
|
||||||
AudioPhase3.setText(config.getAudioPhase3());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@FXML
|
|
||||||
private void BrowseAudioPhase4(){
|
|
||||||
File file = jfc.showOpenDialog(null);
|
|
||||||
if (file!=null){
|
|
||||||
config.SetAudioPhase4(file.getAbsolutePath());
|
|
||||||
AudioPhase4.setText(config.getAudioPhase4());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@FXML
|
|
||||||
private void BrowseAudioPhase5(){
|
|
||||||
File file = jfc.showOpenDialog(null);
|
|
||||||
if (file!=null){
|
|
||||||
config.SetAudioPhase5(file.getAbsolutePath());
|
|
||||||
AudioPhase5.setText(config.getAudioPhase5());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
private void ApplyCameraLeft90(){
|
private void ApplyCameraLeft90(){
|
||||||
config.SetCameraLeft90(CameraLeft90.getValue());
|
config.SetCameraLeft90(Camera1.getValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
private void ApplyCameraLeft45(){
|
private void ApplyCameraLeft45(){
|
||||||
config.SetCameraLeft45(CameraLeft45.getValue());
|
config.SetCameraLeft45(Camera2.getValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
private void ApplyCameraFront(){
|
private void ApplyCameraFront(){
|
||||||
config.SetCameraCenter(CameraCenter.getValue());
|
config.SetCameraCenter(Camera3.getValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
private void ApplyCameraRight45(){
|
private void ApplyCameraRight45(){
|
||||||
config.SetCameraRight45(CameraRight45.getValue());
|
config.SetCameraRight45(Camera4.getValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
private void ApplyCameraRight90(){
|
private void ApplyCameraRight90(){
|
||||||
config.SetCameraRight90(CameraRight90.getValue());
|
config.SetCameraRight90(Camera5.getValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
@@ -198,18 +480,8 @@ public class SettingView {
|
|||||||
config.SetFTPPass(FTPPass.getText());
|
config.SetFTPPass(FTPPass.getText());
|
||||||
config.SetFTPPath(FTPPath.getText());
|
config.SetFTPPath(FTPPath.getText());
|
||||||
|
|
||||||
val alert = new Alert(Alert.AlertType.INFORMATION);
|
ShowAlert(Alert.AlertType.INFORMATION, "FTP Configuration", "FTP Configuration Saved", "FTP Configuration Saved Successfully");
|
||||||
alert.setTitle("FTP Configuration");
|
} else ShowAlert(Alert.AlertType.ERROR, "FTP Error", "FTP Configuration Error", "FTP Configuration is incorrect, please check your FTP Configuration");
|
||||||
alert.setHeaderText("FTP Configuration Saved");
|
|
||||||
alert.setContentText("FTP Configuration Saved Successfully");
|
|
||||||
alert.showAndWait();
|
|
||||||
} else {
|
|
||||||
val alert = new Alert(Alert.AlertType.ERROR);
|
|
||||||
alert.setTitle("FTP Error");
|
|
||||||
alert.setHeaderText("FTP Configuration Error");
|
|
||||||
alert.setContentText("FTP Configuration is incorrect, please check your FTP Configuration");
|
|
||||||
alert.showAndWait();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import javafx.fxml.FXML;
|
|||||||
import javafx.scene.control.Label;
|
import javafx.scene.control.Label;
|
||||||
import javafx.scene.control.ProgressBar;
|
import javafx.scene.control.ProgressBar;
|
||||||
|
|
||||||
|
import static Config.SomeCodes.LabelSetText;
|
||||||
import static Config.SomeCodes.ValidString;
|
import static Config.SomeCodes.ValidString;
|
||||||
|
|
||||||
public class UploadProgress {
|
public class UploadProgress {
|
||||||
@@ -31,9 +32,7 @@ public class UploadProgress {
|
|||||||
* @param filename the filename to be displayed
|
* @param filename the filename to be displayed
|
||||||
*/
|
*/
|
||||||
public void SetFile(String filename){
|
public void SetFile(String filename){
|
||||||
if (ValidString(filename)){
|
LabelSetText(this.labelfile, filename,null);
|
||||||
labelfile.setText(filename);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -41,9 +40,7 @@ public class UploadProgress {
|
|||||||
* @param status the status to be displayed
|
* @param status the status to be displayed
|
||||||
*/
|
*/
|
||||||
public void SetStatus(String status){
|
public void SetStatus(String status){
|
||||||
if (ValidString(status)){
|
LabelSetText(this.labelstatus, status,null);
|
||||||
labelstatus.setText(status);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -15,11 +15,15 @@ module id.co.gtc.erhacam {
|
|||||||
requires org.tinylog.api;
|
requires org.tinylog.api;
|
||||||
requires java.sql;
|
requires java.sql;
|
||||||
requires javafx.graphics;
|
requires javafx.graphics;
|
||||||
|
requires java.net.http;
|
||||||
|
requires org.tinylog.impl;
|
||||||
|
|
||||||
|
|
||||||
opens id.co.gtc.erhacam to javafx.fxml;
|
opens id.co.gtc.erhacam to javafx.fxml;
|
||||||
opens BASS to com.sun.jna;
|
opens BASS to com.sun.jna;
|
||||||
opens Config to com.google.gson;
|
opens Config to com.google.gson;
|
||||||
opens Database to javafx.base;
|
opens Database to javafx.base;
|
||||||
|
opens ErhaAPI to com.google.gson;
|
||||||
exports id.co.gtc.erhacam;
|
exports id.co.gtc.erhacam;
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -196,11 +196,7 @@ public class Cameradetail_Arducam {
|
|||||||
* @param title Title of the Camera
|
* @param title Title of the Camera
|
||||||
*/
|
*/
|
||||||
public void setCameraTitle(String title){
|
public void setCameraTitle(String title){
|
||||||
if (ValidString(title)){
|
LabelSetText(this.cameratitle, title, null);
|
||||||
if (cameratitle!=null){
|
|
||||||
cameratitle.setText(title);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setSaturation(double value){
|
public void setSaturation(double value){
|
||||||
@@ -258,11 +254,7 @@ public class Cameradetail_Arducam {
|
|||||||
* @param status Status of the Camera
|
* @param status Status of the Camera
|
||||||
*/
|
*/
|
||||||
public void setCameraStatus(String status){
|
public void setCameraStatus(String status){
|
||||||
if (ValidString(status)){
|
LabelSetText(this.camerastatus, status,null);
|
||||||
if (camerastatus!=null){
|
|
||||||
camerastatus.setText(status);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -518,13 +510,12 @@ public class Cameradetail_Arducam {
|
|||||||
* @param prefix filename prefix
|
* @param prefix filename prefix
|
||||||
* @return filename path of the saved photo, or null if failed
|
* @return filename path of the saved photo, or null if failed
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings("BusyWait")
|
|
||||||
public String TakePhoto(String directory, String prefix){
|
public String TakePhoto(String directory, String prefix){
|
||||||
if (!ValidDirectory(directory)) directory = currentDirectory;
|
if (!ValidDirectory(directory)) directory = currentDirectory;
|
||||||
if (mGrabber!=null){
|
if (mGrabber!=null){
|
||||||
try{
|
try{
|
||||||
long nanos = System.nanoTime();
|
long nanos = System.nanoTime();
|
||||||
while(IsGrabbingLiveView.get()) Thread.sleep(10);
|
while(IsGrabbingLiveView.get()) Wait(10);
|
||||||
long delta = System.nanoTime() - nanos;
|
long delta = System.nanoTime() - nanos;
|
||||||
double ms = delta / 1000000.0;
|
double ms = delta / 1000000.0;
|
||||||
if (event!=null) event.onLog("Waited IsGrabbingLiveView for "+ms+" miliseconds");
|
if (event!=null) event.onLog("Waited IsGrabbingLiveView for "+ms+" miliseconds");
|
||||||
@@ -541,10 +532,10 @@ public class Cameradetail_Arducam {
|
|||||||
|
|
||||||
|
|
||||||
setAutoWB(true);
|
setAutoWB(true);
|
||||||
Thread.sleep(1000);
|
Wait(1000);
|
||||||
|
|
||||||
setAutoExposure(true);
|
setAutoExposure(true);
|
||||||
Thread.sleep(1000);
|
Wait(1000);
|
||||||
|
|
||||||
long delta3 = System.nanoTime() - nanos;
|
long delta3 = System.nanoTime() - nanos;
|
||||||
double ms3 = delta3 / 1000000.0;
|
double ms3 = delta3 / 1000000.0;
|
||||||
@@ -638,7 +629,7 @@ public class Cameradetail_Arducam {
|
|||||||
Capturing.set(false);
|
Capturing.set(false);
|
||||||
if (mGrabber!=null){
|
if (mGrabber!=null){
|
||||||
try{
|
try{
|
||||||
mGrabber.stop();
|
mGrabber.close();
|
||||||
Platform.runLater(()->setCameraStatus("Camera Stopped"));
|
Platform.runLater(()->setCameraStatus("Camera Stopped"));
|
||||||
} catch (Exception e){
|
} catch (Exception e){
|
||||||
if (event!=null) event.onLog("StopLiveView failed, Unable to Stop Camera, Error: " + e.getMessage());
|
if (event!=null) event.onLog("StopLiveView failed, Unable to Stop Camera, Error: " + e.getMessage());
|
||||||
@@ -672,14 +663,13 @@ public class Cameradetail_Arducam {
|
|||||||
AutoWhiteBalance.setSelected(true);
|
AutoWhiteBalance.setSelected(true);
|
||||||
|
|
||||||
val task = new Task<Image>() {
|
val task = new Task<Image>() {
|
||||||
@SuppressWarnings("BusyWait")
|
|
||||||
@Override
|
@Override
|
||||||
protected Image call() {
|
protected Image call() {
|
||||||
while (Capturing.get()) {
|
while (Capturing.get()) {
|
||||||
try {
|
try {
|
||||||
// selama proses pengambilan foto, jangan ambil frame
|
// selama proses pengambilan foto, jangan ambil frame
|
||||||
while(TakingPhoto.get() && Capturing.get()){
|
while(TakingPhoto.get() && Capturing.get()){
|
||||||
Thread.sleep(10);
|
Wait(10);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!Capturing.get()) return null;
|
if (!Capturing.get()) return null;
|
||||||
@@ -705,12 +695,12 @@ public class Cameradetail_Arducam {
|
|||||||
if (use_face){
|
if (use_face){
|
||||||
RectVector face = DetectFace(graymat);
|
RectVector face = DetectFace(graymat);
|
||||||
if (face!=null && face.size()>0){
|
if (face!=null && face.size()>0){
|
||||||
if (event!=null) event.onFaceDetector(true,photoWidth, photoHeight);
|
if (event!=null) event.onFrontalFaceDetector(true,photoWidth, photoHeight);
|
||||||
for(int i=0; i<face.size(); i++){
|
for(int i=0; i<face.size(); i++){
|
||||||
val rect = face.get(i);
|
val rect = face.get(i);
|
||||||
rectangle(umat, rect, Scalar.GREEN);
|
rectangle(umat, rect, Scalar.GREEN);
|
||||||
}
|
}
|
||||||
} else if (event!=null) event.onFaceDetector(false, photoWidth, photoHeight);
|
} else if (event!=null) event.onFrontalFaceDetector(false, photoWidth, photoHeight);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -736,7 +726,10 @@ public class Cameradetail_Arducam {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// start task
|
// start task
|
||||||
new Thread(task).start();
|
Thread taskThread = new Thread(task);
|
||||||
|
taskThread.setDaemon(true);
|
||||||
|
taskThread.start();
|
||||||
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@@ -782,11 +775,11 @@ public class Cameradetail_Arducam {
|
|||||||
* @return true if face detected, otherwise false
|
* @return true if face detected, otherwise false
|
||||||
*/
|
*/
|
||||||
private RectVector DetectFace(UMat graymat){
|
private RectVector DetectFace(UMat graymat){
|
||||||
if (faceDetector!=null){
|
// if (frontalfaceDetector!=null){
|
||||||
val face = new RectVector();
|
// val face = new RectVector();
|
||||||
faceDetector.detectMultiScale(graymat, face);
|
// frontalfaceDetector.detectMultiScale(graymat, face);
|
||||||
return face;
|
// return face;
|
||||||
}
|
// }
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
<?import javafx.scene.image.*?>
|
<?import javafx.scene.image.*?>
|
||||||
<?import javafx.scene.layout.*?>
|
<?import javafx.scene.layout.*?>
|
||||||
|
|
||||||
<AnchorPane prefHeight="280.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/11.0.14-internal" xmlns:fx="http://javafx.com/fxml/1" fx:controller="id.co.gtc.erhacam.Cameradetail">
|
<AnchorPane prefHeight="720.0" prefWidth="360.0" xmlns="http://javafx.com/javafx/17.0.12" xmlns:fx="http://javafx.com/fxml/1" fx:controller="id.co.gtc.erhacam.Cameradetail">
|
||||||
<children>
|
<children>
|
||||||
<GridPane layoutX="5.0" layoutY="5.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
|
<GridPane layoutX="5.0" layoutY="5.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
|
||||||
<columnConstraints>
|
<columnConstraints>
|
||||||
@@ -20,8 +20,12 @@
|
|||||||
<children>
|
<children>
|
||||||
<GridPane AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
|
<GridPane AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
|
||||||
<columnConstraints>
|
<columnConstraints>
|
||||||
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" percentWidth="20.0" />
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" percentWidth="10.0" />
|
||||||
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" percentWidth="10.0" prefWidth="100.0" />
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" percentWidth="10.0" prefWidth="100.0" />
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" percentWidth="10.0" prefWidth="100.0" />
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" percentWidth="10.0" prefWidth="100.0" />
|
||||||
</columnConstraints>
|
</columnConstraints>
|
||||||
<rowConstraints>
|
<rowConstraints>
|
||||||
<RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
|
<RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
|
||||||
@@ -37,6 +41,28 @@
|
|||||||
<Label fx:id="camerastatus" alignment="CENTER" style="-fx-border-color: black;" text="Camera Status" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" />
|
<Label fx:id="camerastatus" alignment="CENTER" style="-fx-border-color: black;" text="Camera Status" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" />
|
||||||
</children>
|
</children>
|
||||||
</AnchorPane>
|
</AnchorPane>
|
||||||
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" style="-fx-border-color: black;" GridPane.columnIndex="2">
|
||||||
|
<children>
|
||||||
|
<Label fx:id="face_indicator" alignment="CENTER" layoutY="8.0" prefHeight="30.0" prefWidth="35.0" text="Face" visible="false" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" />
|
||||||
|
|
||||||
|
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" style="-fx-border-color: black;" GridPane.columnIndex="3">
|
||||||
|
<children>
|
||||||
|
<Label fx:id="eye_indicator" alignment="CENTER" layoutY="8.0" prefHeight="30.0" prefWidth="35.0" text="Eye" visible="false" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" />
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="5">
|
||||||
|
<children>
|
||||||
|
<Label fx:id="sharpness_indicator" alignment="CENTER" layoutX="7.0" layoutY="8.0" prefHeight="30.0" prefWidth="35.0" style="-fx-border-color: black;" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" />
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="4">
|
||||||
|
<children>
|
||||||
|
<Label fx:id="BlinkCounterLabel" alignment="CENTER" layoutY="8.0" prefHeight="30.0" prefWidth="35.0" style="-fx-border-color: black;" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" />
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
</children>
|
</children>
|
||||||
</GridPane>
|
</GridPane>
|
||||||
</children>
|
</children>
|
||||||
@@ -46,15 +72,31 @@
|
|||||||
<GridPane layoutX="-28.0" layoutY="-29.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
|
<GridPane layoutX="-28.0" layoutY="-29.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
|
||||||
<columnConstraints>
|
<columnConstraints>
|
||||||
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" />
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" />
|
||||||
<ColumnConstraints fillWidth="false" minWidth="10.0" percentWidth="20.0" />
|
|
||||||
</columnConstraints>
|
</columnConstraints>
|
||||||
<rowConstraints>
|
<rowConstraints>
|
||||||
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
||||||
|
<RowConstraints maxHeight="-Infinity" minHeight="10.0" prefHeight="10.0" vgrow="SOMETIMES" />
|
||||||
</rowConstraints>
|
</rowConstraints>
|
||||||
<children>
|
<children>
|
||||||
<AnchorPane GridPane.columnIndex="1">
|
<AnchorPane fx:id="streamanchor">
|
||||||
<children>
|
<children>
|
||||||
<VBox maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="240.0" prefWidth="140.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
|
<StackPane layoutY="5.0" prefHeight="669.6" prefWidth="350.4" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
|
||||||
|
<children>
|
||||||
|
<ImageView fx:id="camerastream" fitWidth="340.0" pickOnBounds="true" preserveRatio="true" smooth="false" StackPane.alignment="CENTER">
|
||||||
|
<viewport>
|
||||||
|
<Rectangle2D height="640.0" width="360.0" />
|
||||||
|
</viewport>
|
||||||
|
</ImageView>
|
||||||
|
</children>
|
||||||
|
</StackPane>
|
||||||
|
</children>
|
||||||
|
<GridPane.margin>
|
||||||
|
<Insets />
|
||||||
|
</GridPane.margin>
|
||||||
|
</AnchorPane>
|
||||||
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" scaleZ="0.0" GridPane.rowIndex="1">
|
||||||
|
<children>
|
||||||
|
<VBox maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="240.0" prefWidth="140.0" scaleZ="0.0" visible="false" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
|
||||||
<children>
|
<children>
|
||||||
<Label text="Brightness" />
|
<Label text="Brightness" />
|
||||||
<Slider fx:id="brightnessSlider" min="-100.0">
|
<Slider fx:id="brightnessSlider" min="-100.0">
|
||||||
@@ -101,19 +143,6 @@
|
|||||||
</VBox>
|
</VBox>
|
||||||
</children>
|
</children>
|
||||||
</AnchorPane>
|
</AnchorPane>
|
||||||
<AnchorPane fx:id="streamanchor">
|
|
||||||
<children>
|
|
||||||
<StackPane prefHeight="240.0" prefWidth="351.2" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
|
|
||||||
<children>
|
|
||||||
<ImageView fx:id="camerastream" fitHeight="240.0" pickOnBounds="true">
|
|
||||||
<image>
|
|
||||||
<Image url="@gtcbackground.png" />
|
|
||||||
</image>
|
|
||||||
</ImageView>
|
|
||||||
</children>
|
|
||||||
</StackPane>
|
|
||||||
</children>
|
|
||||||
</AnchorPane>
|
|
||||||
</children>
|
</children>
|
||||||
</GridPane>
|
</GridPane>
|
||||||
</children>
|
</children>
|
||||||
|
|||||||
127
src/main/resources/id/co/gtc/erhacam/cameradetail_landscape.fxml
Normal file
127
src/main/resources/id/co/gtc/erhacam/cameradetail_landscape.fxml
Normal file
@@ -0,0 +1,127 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
|
<?import javafx.geometry.*?>
|
||||||
|
<?import javafx.scene.control.*?>
|
||||||
|
<?import javafx.scene.image.*?>
|
||||||
|
<?import javafx.scene.layout.*?>
|
||||||
|
|
||||||
|
<AnchorPane prefHeight="280.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/11.0.14-internal" xmlns:fx="http://javafx.com/fxml/1" fx:controller="id.co.gtc.erhacam.Cameradetail">
|
||||||
|
<children>
|
||||||
|
<GridPane layoutX="5.0" layoutY="5.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
|
||||||
|
<columnConstraints>
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" />
|
||||||
|
</columnConstraints>
|
||||||
|
<rowConstraints>
|
||||||
|
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
||||||
|
<RowConstraints maxHeight="-Infinity" minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
||||||
|
</rowConstraints>
|
||||||
|
<children>
|
||||||
|
<AnchorPane minHeight="30.0" GridPane.rowIndex="1">
|
||||||
|
<children>
|
||||||
|
<GridPane AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
|
||||||
|
<columnConstraints>
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" percentWidth="20.0" />
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
|
</columnConstraints>
|
||||||
|
<rowConstraints>
|
||||||
|
<RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
|
||||||
|
</rowConstraints>
|
||||||
|
<children>
|
||||||
|
<AnchorPane>
|
||||||
|
<children>
|
||||||
|
<Label fx:id="cameratitle" alignment="CENTER" style="-fx-border-color: black;" text="Camera Title" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" />
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
<AnchorPane GridPane.columnIndex="1">
|
||||||
|
<children>
|
||||||
|
<Label fx:id="camerastatus" alignment="CENTER" style="-fx-border-color: black;" text="Camera Status" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" />
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
</children>
|
||||||
|
</GridPane>
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
<AnchorPane prefHeight="200.0" prefWidth="200.0">
|
||||||
|
<children>
|
||||||
|
<GridPane layoutX="-28.0" layoutY="-29.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
|
||||||
|
<columnConstraints>
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" />
|
||||||
|
<ColumnConstraints fillWidth="false" minWidth="10.0" percentWidth="20.0" />
|
||||||
|
</columnConstraints>
|
||||||
|
<rowConstraints>
|
||||||
|
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
||||||
|
</rowConstraints>
|
||||||
|
<children>
|
||||||
|
<AnchorPane GridPane.columnIndex="1">
|
||||||
|
<children>
|
||||||
|
<VBox maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="240.0" prefWidth="140.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
|
||||||
|
<children>
|
||||||
|
<Label text="Brightness" />
|
||||||
|
<Slider fx:id="brightnessSlider" min="-100.0">
|
||||||
|
<VBox.margin>
|
||||||
|
<Insets />
|
||||||
|
</VBox.margin>
|
||||||
|
</Slider>
|
||||||
|
<Label text="Contrast" />
|
||||||
|
<Slider fx:id="contrastSlider" layoutX="10.0" layoutY="28.0" min="-100.0">
|
||||||
|
<VBox.margin>
|
||||||
|
<Insets />
|
||||||
|
</VBox.margin>
|
||||||
|
</Slider>
|
||||||
|
<Label layoutX="10.0" layoutY="42.0" text="Saturation" />
|
||||||
|
<Slider fx:id="saturationSlider" layoutX="10.0" layoutY="60.0" min="-100.0">
|
||||||
|
<VBox.margin>
|
||||||
|
<Insets />
|
||||||
|
</VBox.margin>
|
||||||
|
</Slider>
|
||||||
|
<Label layoutX="10.0" layoutY="74.0" text="Hue" />
|
||||||
|
<Slider fx:id="hueSlider" layoutX="10.0" layoutY="92.0" min="-100.0" prefHeight="14.0" prefWidth="63.0">
|
||||||
|
<VBox.margin>
|
||||||
|
<Insets />
|
||||||
|
</VBox.margin>
|
||||||
|
</Slider>
|
||||||
|
<Label layoutX="10.0" layoutY="106.0" text="Gain" />
|
||||||
|
<Slider fx:id="gainSlider" layoutX="10.0" layoutY="124.0" min="-100.0">
|
||||||
|
<VBox.margin>
|
||||||
|
<Insets />
|
||||||
|
</VBox.margin>
|
||||||
|
</Slider>
|
||||||
|
<Label layoutX="10.0" layoutY="138.0" text="Exposure" />
|
||||||
|
<Slider fx:id="exposureSlider" layoutX="10.0" layoutY="156.0" min="-100.0">
|
||||||
|
<VBox.margin>
|
||||||
|
<Insets />
|
||||||
|
</VBox.margin>
|
||||||
|
</Slider>
|
||||||
|
<Button maxWidth="1.7976931348623157E308" mnemonicParsing="false" onAction="#resetClick" text="Reset">
|
||||||
|
<VBox.margin>
|
||||||
|
<Insets left="5.0" right="5.0" top="5.0" />
|
||||||
|
</VBox.margin>
|
||||||
|
</Button>
|
||||||
|
</children>
|
||||||
|
</VBox>
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
<AnchorPane fx:id="streamanchor">
|
||||||
|
<children>
|
||||||
|
<StackPane AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
|
||||||
|
<children>
|
||||||
|
<ImageView fx:id="camerastream" fitWidth="240.0" pickOnBounds="true">
|
||||||
|
<image>
|
||||||
|
<Image url="@gtcbackground.png" />
|
||||||
|
</image>
|
||||||
|
</ImageView>
|
||||||
|
</children>
|
||||||
|
</StackPane>
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
</children>
|
||||||
|
</GridPane>
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
</children>
|
||||||
|
</GridPane>
|
||||||
|
</children>
|
||||||
|
<padding>
|
||||||
|
<Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
|
||||||
|
</padding>
|
||||||
|
</AnchorPane>
|
||||||
118
src/main/resources/id/co/gtc/erhacam/capture-view-dermies.fxml
Normal file
118
src/main/resources/id/co/gtc/erhacam/capture-view-dermies.fxml
Normal file
@@ -0,0 +1,118 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
|
<?import javafx.geometry.*?>
|
||||||
|
<?import javafx.scene.control.*?>
|
||||||
|
<?import javafx.scene.layout.*?>
|
||||||
|
<?import javafx.scene.text.*?>
|
||||||
|
|
||||||
|
<AnchorPane fx:id="CaptureViewAnchor" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" minHeight="-Infinity" minWidth="-Infinity" prefHeight="768.0" prefWidth="1024.0" xmlns="http://javafx.com/javafx/17.0.12" xmlns:fx="http://javafx.com/fxml/1" fx:controller="id.co.gtc.erhacam.CaptureView">
|
||||||
|
<children>
|
||||||
|
<GridPane layoutX="147.0" layoutY="239.0" AnchorPane.bottomAnchor="200.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
|
||||||
|
<columnConstraints>
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
|
</columnConstraints>
|
||||||
|
<rowConstraints>
|
||||||
|
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
||||||
|
</rowConstraints>
|
||||||
|
<children>
|
||||||
|
<AnchorPane fx:id="cam1" prefHeight="200.0" prefWidth="200.0" />
|
||||||
|
<AnchorPane fx:id="cam2" prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1" />
|
||||||
|
<AnchorPane fx:id="cam3" prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="2" />
|
||||||
|
</children>
|
||||||
|
</GridPane>
|
||||||
|
<GridPane layoutX="99.0" layoutY="147.0" style="-fx-grid-lines-visible: true;" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0">
|
||||||
|
<columnConstraints>
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
|
</columnConstraints>
|
||||||
|
<rowConstraints>
|
||||||
|
<RowConstraints maxHeight="-Infinity" minHeight="10.0" prefHeight="175.0" vgrow="SOMETIMES" />
|
||||||
|
</rowConstraints>
|
||||||
|
<children>
|
||||||
|
<AnchorPane fx:id="controlpane" prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1">
|
||||||
|
<padding>
|
||||||
|
<Insets top="5.0" />
|
||||||
|
</padding>
|
||||||
|
<children>
|
||||||
|
<Button fx:id="TakePhotoButton" disable="true" mnemonicParsing="false" onAction="#TakePhotos" prefHeight="175.0" prefWidth="512.0" text="Take Photo" AnchorPane.bottomAnchor="10.0" AnchorPane.leftAnchor="10.0" AnchorPane.rightAnchor="10.0" AnchorPane.topAnchor="10.0">
|
||||||
|
<font>
|
||||||
|
<Font size="48.0" />
|
||||||
|
</font>
|
||||||
|
</Button>
|
||||||
|
</children></AnchorPane>
|
||||||
|
<AnchorPane prefHeight="200.0" prefWidth="200.0">
|
||||||
|
<children>
|
||||||
|
<GridPane layoutX="68.0" layoutY="14.0" prefHeight="175.2" prefWidth="512.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
|
||||||
|
<columnConstraints>
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" percentWidth="30.0" prefWidth="100.0" />
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
|
</columnConstraints>
|
||||||
|
<rowConstraints>
|
||||||
|
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
||||||
|
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
||||||
|
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
||||||
|
</rowConstraints>
|
||||||
|
<children>
|
||||||
|
<AnchorPane prefHeight="200.0" prefWidth="200.0">
|
||||||
|
<children>
|
||||||
|
<Label layoutX="31.0" layoutY="6.0" prefHeight="30.0" prefWidth="154.0" text="Nomor Barcode" AnchorPane.bottomAnchor="5.0" AnchorPane.leftAnchor="5.0" AnchorPane.rightAnchor="5.0" AnchorPane.topAnchor="5.0">
|
||||||
|
<font>
|
||||||
|
<Font size="14.0" />
|
||||||
|
</font>
|
||||||
|
</Label>
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.rowIndex="1">
|
||||||
|
<children>
|
||||||
|
<Label layoutX="63.0" layoutY="6.0" prefHeight="30.4" prefWidth="154.4" text="Medical Record ID" AnchorPane.bottomAnchor="5.0" AnchorPane.leftAnchor="5.0" AnchorPane.rightAnchor="5.0" AnchorPane.topAnchor="5.0">
|
||||||
|
<font>
|
||||||
|
<Font size="14.0" />
|
||||||
|
</font>
|
||||||
|
</Label>
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.rowIndex="2">
|
||||||
|
<children>
|
||||||
|
<Label layoutX="63.0" layoutY="5.0" prefHeight="30.4" prefWidth="154.4" text="Patient Name" AnchorPane.bottomAnchor="5.0" AnchorPane.leftAnchor="5.0" AnchorPane.rightAnchor="5.0" AnchorPane.topAnchor="5.0">
|
||||||
|
<font>
|
||||||
|
<Font size="14.0" />
|
||||||
|
</font>
|
||||||
|
</Label>
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1">
|
||||||
|
<children>
|
||||||
|
<TextArea fx:id="barcodeData" editable="false" layoutX="-21.0" layoutY="-85.0" prefHeight="115.0" prefWidth="358.0" promptText="barcode read result" wrapText="true" AnchorPane.bottomAnchor="5.0" AnchorPane.leftAnchor="5.0" AnchorPane.rightAnchor="5.0" AnchorPane.topAnchor="5.0">
|
||||||
|
<font>
|
||||||
|
<Font size="18.0" />
|
||||||
|
</font>
|
||||||
|
</TextArea>
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1" GridPane.rowIndex="1">
|
||||||
|
<children>
|
||||||
|
<TextArea fx:id="medicalRecordID" editable="false" layoutX="14.0" layoutY="-84.0" prefHeight="116.0" prefWidth="358.4" promptText="medical record ID" wrapText="true" AnchorPane.bottomAnchor="5.0" AnchorPane.leftAnchor="5.0" AnchorPane.rightAnchor="5.0" AnchorPane.topAnchor="5.0">
|
||||||
|
<font>
|
||||||
|
<Font size="18.0" />
|
||||||
|
</font>
|
||||||
|
</TextArea>
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1" GridPane.rowIndex="2">
|
||||||
|
<children>
|
||||||
|
<TextArea fx:id="PatientName" editable="false" layoutX="-21.0" layoutY="-84.0" prefHeight="116.0" prefWidth="358.4" promptText="patient name" wrapText="true" AnchorPane.bottomAnchor="5.0" AnchorPane.leftAnchor="5.0" AnchorPane.rightAnchor="5.0" AnchorPane.topAnchor="5.0">
|
||||||
|
<font>
|
||||||
|
<Font size="18.0" />
|
||||||
|
</font>
|
||||||
|
</TextArea>
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
</children>
|
||||||
|
</GridPane>
|
||||||
|
</children></AnchorPane>
|
||||||
|
</children>
|
||||||
|
</GridPane>
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
@@ -3,108 +3,119 @@
|
|||||||
<?import javafx.geometry.*?>
|
<?import javafx.geometry.*?>
|
||||||
<?import javafx.scene.control.*?>
|
<?import javafx.scene.control.*?>
|
||||||
<?import javafx.scene.layout.*?>
|
<?import javafx.scene.layout.*?>
|
||||||
|
<?import javafx.scene.text.*?>
|
||||||
|
|
||||||
<AnchorPane fx:id="CaptureViewAnchor" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" minHeight="-Infinity" minWidth="-Infinity" prefHeight="768.0" prefWidth="1024.0" xmlns="http://javafx.com/javafx/11.0.14-internal" xmlns:fx="http://javafx.com/fxml/1" fx:controller="id.co.gtc.erhacam.CaptureView">
|
<AnchorPane fx:id="CaptureViewAnchor" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" minHeight="-Infinity" minWidth="-Infinity" prefHeight="768.0" prefWidth="1024.0" xmlns="http://javafx.com/javafx/17.0.12" xmlns:fx="http://javafx.com/fxml/1" fx:controller="id.co.gtc.erhacam.CaptureView">
|
||||||
<children>
|
<children>
|
||||||
<GridPane layoutX="99.0" layoutY="147.0" style="-fx-grid-lines-visible: true;" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
|
<GridPane layoutX="147.0" layoutY="239.0" AnchorPane.bottomAnchor="200.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
|
||||||
<columnConstraints>
|
<columnConstraints>
|
||||||
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
</columnConstraints>
|
</columnConstraints>
|
||||||
<rowConstraints>
|
<rowConstraints>
|
||||||
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
||||||
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
|
||||||
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
|
||||||
</rowConstraints>
|
</rowConstraints>
|
||||||
<children>
|
<children>
|
||||||
<AnchorPane fx:id="cam1" prefHeight="200.0" prefWidth="200.0" />
|
<AnchorPane fx:id="cam1" prefHeight="200.0" prefWidth="200.0" />
|
||||||
<AnchorPane fx:id="cam3" prefHeight="200.0" prefWidth="200.0" GridPane.rowIndex="1" />
|
|
||||||
<AnchorPane fx:id="cam5" prefHeight="200.0" prefWidth="200.0" GridPane.rowIndex="2" />
|
|
||||||
<AnchorPane fx:id="cam2" prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1" />
|
<AnchorPane fx:id="cam2" prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1" />
|
||||||
<AnchorPane fx:id="cam4" prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1" GridPane.rowIndex="1" />
|
<AnchorPane fx:id="cam3" prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="2" />
|
||||||
<AnchorPane fx:id="controlpane" prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1" GridPane.rowIndex="2">
|
<AnchorPane fx:id="cam4" prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="3" />
|
||||||
|
<AnchorPane fx:id="cam5" prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="4" />
|
||||||
|
</children>
|
||||||
|
</GridPane>
|
||||||
|
<GridPane layoutX="99.0" layoutY="147.0" style="-fx-grid-lines-visible: true;" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0">
|
||||||
|
<columnConstraints>
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
|
</columnConstraints>
|
||||||
|
<rowConstraints>
|
||||||
|
<RowConstraints maxHeight="-Infinity" minHeight="10.0" prefHeight="175.0" vgrow="SOMETIMES" />
|
||||||
|
</rowConstraints>
|
||||||
<children>
|
<children>
|
||||||
<VBox layoutX="108.0" layoutY="14.0" prefHeight="256.0" prefWidth="512.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
|
<AnchorPane fx:id="controlpane" prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1">
|
||||||
|
<padding>
|
||||||
|
<Insets top="5.0" />
|
||||||
|
</padding>
|
||||||
<children>
|
<children>
|
||||||
<GridPane>
|
<Button fx:id="TakePhotoButton" disable="true" mnemonicParsing="false" onAction="#TakePhotos" prefHeight="175.0" prefWidth="512.0" text="Take Photo" AnchorPane.bottomAnchor="10.0" AnchorPane.leftAnchor="10.0" AnchorPane.rightAnchor="10.0" AnchorPane.topAnchor="10.0">
|
||||||
|
<font>
|
||||||
|
<Font size="48.0" />
|
||||||
|
</font>
|
||||||
|
</Button>
|
||||||
|
</children></AnchorPane>
|
||||||
|
<AnchorPane prefHeight="200.0" prefWidth="200.0">
|
||||||
|
<children>
|
||||||
|
<GridPane layoutX="68.0" layoutY="14.0" prefHeight="175.2" prefWidth="512.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
|
||||||
<columnConstraints>
|
<columnConstraints>
|
||||||
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" percentWidth="30.0" prefWidth="100.0" />
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" percentWidth="30.0" prefWidth="100.0" />
|
||||||
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
</columnConstraints>
|
</columnConstraints>
|
||||||
<rowConstraints>
|
<rowConstraints>
|
||||||
<RowConstraints minHeight="30.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
||||||
<RowConstraints minHeight="30.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
||||||
|
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
||||||
</rowConstraints>
|
</rowConstraints>
|
||||||
<children>
|
<children>
|
||||||
<AnchorPane prefHeight="200.0" prefWidth="200.0">
|
<AnchorPane prefHeight="200.0" prefWidth="200.0">
|
||||||
<children>
|
<children>
|
||||||
<Label layoutX="28.0" layoutY="8.0" prefHeight="30.0" prefWidth="154.0" text="Save Directory" AnchorPane.bottomAnchor="5.0" AnchorPane.leftAnchor="5.0" AnchorPane.rightAnchor="5.0" AnchorPane.topAnchor="5.0" />
|
<Label layoutX="31.0" layoutY="6.0" prefHeight="30.0" prefWidth="154.0" text="Nomor Barcode" AnchorPane.bottomAnchor="5.0" AnchorPane.leftAnchor="5.0" AnchorPane.rightAnchor="5.0" AnchorPane.topAnchor="5.0">
|
||||||
|
<font>
|
||||||
|
<Font size="14.0" />
|
||||||
|
</font>
|
||||||
|
</Label>
|
||||||
</children>
|
</children>
|
||||||
</AnchorPane>
|
</AnchorPane>
|
||||||
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.rowIndex="1">
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.rowIndex="1">
|
||||||
<children>
|
<children>
|
||||||
<Label layoutX="31.0" layoutY="6.0" prefHeight="30.0" prefWidth="154.0" text="Patient ID" AnchorPane.bottomAnchor="5.0" AnchorPane.leftAnchor="5.0" AnchorPane.rightAnchor="5.0" AnchorPane.topAnchor="5.0" />
|
<Label layoutX="63.0" layoutY="6.0" prefHeight="30.4" prefWidth="154.4" text="Medical Record ID" AnchorPane.bottomAnchor="5.0" AnchorPane.leftAnchor="5.0" AnchorPane.rightAnchor="5.0" AnchorPane.topAnchor="5.0">
|
||||||
|
<font>
|
||||||
|
<Font size="14.0" />
|
||||||
|
</font>
|
||||||
|
</Label>
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.rowIndex="2">
|
||||||
|
<children>
|
||||||
|
<Label layoutX="63.0" layoutY="5.0" prefHeight="30.4" prefWidth="154.4" text="Patient Name" AnchorPane.bottomAnchor="5.0" AnchorPane.leftAnchor="5.0" AnchorPane.rightAnchor="5.0" AnchorPane.topAnchor="5.0">
|
||||||
|
<font>
|
||||||
|
<Font size="14.0" />
|
||||||
|
</font>
|
||||||
|
</Label>
|
||||||
</children>
|
</children>
|
||||||
</AnchorPane>
|
</AnchorPane>
|
||||||
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1">
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1">
|
||||||
<children>
|
<children>
|
||||||
<TextArea fx:id="directorypath" editable="false" layoutX="14.0" layoutY="-86.0" prefHeight="114.0" prefWidth="358.0" promptText="Directory to save Photos" wrapText="true" AnchorPane.bottomAnchor="5.0" AnchorPane.leftAnchor="5.0" AnchorPane.rightAnchor="5.0" AnchorPane.topAnchor="5.0" />
|
<TextArea fx:id="barcodeData" editable="false" layoutX="-21.0" layoutY="-85.0" prefHeight="115.0" prefWidth="358.0" promptText="barcode read result" wrapText="true" AnchorPane.bottomAnchor="5.0" AnchorPane.leftAnchor="5.0" AnchorPane.rightAnchor="5.0" AnchorPane.topAnchor="5.0">
|
||||||
|
<font>
|
||||||
|
<Font size="18.0" />
|
||||||
|
</font>
|
||||||
|
</TextArea>
|
||||||
</children>
|
</children>
|
||||||
</AnchorPane>
|
</AnchorPane>
|
||||||
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1" GridPane.rowIndex="1">
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1" GridPane.rowIndex="1">
|
||||||
<children>
|
<children>
|
||||||
<TextArea fx:id="prefixfile" layoutX="-21.0" layoutY="-85.0" prefHeight="115.0" prefWidth="358.0" promptText="Some identification for easy find" wrapText="true" AnchorPane.bottomAnchor="5.0" AnchorPane.leftAnchor="5.0" AnchorPane.rightAnchor="5.0" AnchorPane.topAnchor="5.0" />
|
<TextArea fx:id="medicalRecordID" editable="false" layoutX="14.0" layoutY="-84.0" prefHeight="116.0" prefWidth="358.4" promptText="medical record ID" wrapText="true" AnchorPane.bottomAnchor="5.0" AnchorPane.leftAnchor="5.0" AnchorPane.rightAnchor="5.0" AnchorPane.topAnchor="5.0">
|
||||||
|
<font>
|
||||||
|
<Font size="18.0" />
|
||||||
|
</font>
|
||||||
|
</TextArea>
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1" GridPane.rowIndex="2">
|
||||||
|
<children>
|
||||||
|
<TextArea fx:id="PatientName" editable="false" layoutX="-21.0" layoutY="-84.0" prefHeight="116.0" prefWidth="358.4" promptText="patient name" wrapText="true" AnchorPane.bottomAnchor="5.0" AnchorPane.leftAnchor="5.0" AnchorPane.rightAnchor="5.0" AnchorPane.topAnchor="5.0">
|
||||||
|
<font>
|
||||||
|
<Font size="18.0" />
|
||||||
|
</font>
|
||||||
|
</TextArea>
|
||||||
</children>
|
</children>
|
||||||
</AnchorPane>
|
</AnchorPane>
|
||||||
</children>
|
</children>
|
||||||
<VBox.margin>
|
|
||||||
<Insets bottom="5.0" top="5.0" />
|
|
||||||
</VBox.margin>
|
|
||||||
</GridPane>
|
</GridPane>
|
||||||
<GridPane>
|
</children></AnchorPane>
|
||||||
<columnConstraints>
|
|
||||||
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
|
||||||
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
|
||||||
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
|
||||||
</columnConstraints>
|
|
||||||
<rowConstraints>
|
|
||||||
<RowConstraints minHeight="30.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
|
||||||
</rowConstraints>
|
|
||||||
<children>
|
|
||||||
<AnchorPane prefHeight="200.0" prefWidth="200.0">
|
|
||||||
<children>
|
|
||||||
<Button layoutX="42.0" layoutY="14.0" mnemonicParsing="false" onAction="#ChangeDirectory" prefHeight="70.0" prefWidth="171.0" text="Change Directory" wrapText="true" AnchorPane.bottomAnchor="5.0" AnchorPane.leftAnchor="5.0" AnchorPane.rightAnchor="5.0" AnchorPane.topAnchor="0.0" />
|
|
||||||
</children>
|
|
||||||
</AnchorPane>
|
|
||||||
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1">
|
|
||||||
<children>
|
|
||||||
<Button layoutX="72.0" layoutY="35.0" mnemonicParsing="false" onAction="#AutoFocus" prefHeight="70.0" prefWidth="171.0" text="Auto Focus" wrapText="true" AnchorPane.bottomAnchor="5.0" AnchorPane.leftAnchor="5.0" AnchorPane.rightAnchor="5.0" AnchorPane.topAnchor="0.0" />
|
|
||||||
</children>
|
|
||||||
</AnchorPane>
|
|
||||||
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="2">
|
|
||||||
<children>
|
|
||||||
<Button fx:id="btnTakePhoto" layoutX="59.0" layoutY="23.0" mnemonicParsing="false" onAction="#TakePhotos" prefHeight="70.0" prefWidth="170.0" text="Take Photos" wrapText="true" AnchorPane.bottomAnchor="5.0" AnchorPane.leftAnchor="5.0" AnchorPane.rightAnchor="5.0" AnchorPane.topAnchor="0.0" />
|
|
||||||
</children>
|
|
||||||
</AnchorPane>
|
|
||||||
</children>
|
|
||||||
<VBox.margin>
|
|
||||||
<Insets top="5.0" />
|
|
||||||
</VBox.margin>
|
|
||||||
</GridPane>
|
|
||||||
<ScrollPane prefHeight="200.0" prefWidth="200.0">
|
|
||||||
<content>
|
|
||||||
<AnchorPane fx:id="progressanchor" />
|
|
||||||
</content>
|
|
||||||
<VBox.margin>
|
|
||||||
<Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
|
|
||||||
</VBox.margin>
|
|
||||||
</ScrollPane>
|
|
||||||
</children>
|
|
||||||
</VBox>
|
|
||||||
</children>
|
|
||||||
<padding>
|
|
||||||
<Insets top="5.0" />
|
|
||||||
</padding></AnchorPane>
|
|
||||||
</children>
|
</children>
|
||||||
</GridPane>
|
</GridPane>
|
||||||
</children>
|
</children>
|
||||||
|
|||||||
111
src/main/resources/id/co/gtc/erhacam/capture-view_landscape.fxml
Normal file
111
src/main/resources/id/co/gtc/erhacam/capture-view_landscape.fxml
Normal file
@@ -0,0 +1,111 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
|
<?import javafx.geometry.*?>
|
||||||
|
<?import javafx.scene.control.*?>
|
||||||
|
<?import javafx.scene.layout.*?>
|
||||||
|
|
||||||
|
<AnchorPane fx:id="CaptureViewAnchor" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" minHeight="-Infinity" minWidth="-Infinity" prefHeight="768.0" prefWidth="1024.0" xmlns="http://javafx.com/javafx/11.0.14-internal" xmlns:fx="http://javafx.com/fxml/1" fx:controller="id.co.gtc.erhacam.CaptureView">
|
||||||
|
<children>
|
||||||
|
<GridPane layoutX="99.0" layoutY="147.0" style="-fx-grid-lines-visible: true;" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
|
||||||
|
<columnConstraints>
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
|
</columnConstraints>
|
||||||
|
<rowConstraints>
|
||||||
|
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
||||||
|
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
||||||
|
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
||||||
|
</rowConstraints>
|
||||||
|
<children>
|
||||||
|
<AnchorPane fx:id="cam1" prefHeight="200.0" prefWidth="200.0" />
|
||||||
|
<AnchorPane fx:id="cam3" prefHeight="200.0" prefWidth="200.0" GridPane.rowIndex="1" />
|
||||||
|
<AnchorPane fx:id="cam5" prefHeight="200.0" prefWidth="200.0" GridPane.rowIndex="2" />
|
||||||
|
<AnchorPane fx:id="cam2" prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1" />
|
||||||
|
<AnchorPane fx:id="cam4" prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1" GridPane.rowIndex="1" />
|
||||||
|
<AnchorPane fx:id="controlpane" prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1" GridPane.rowIndex="2">
|
||||||
|
<children>
|
||||||
|
<VBox layoutX="108.0" layoutY="14.0" prefHeight="256.0" prefWidth="512.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
|
||||||
|
<children>
|
||||||
|
<GridPane>
|
||||||
|
<columnConstraints>
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" percentWidth="30.0" prefWidth="100.0" />
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
|
</columnConstraints>
|
||||||
|
<rowConstraints>
|
||||||
|
<RowConstraints minHeight="30.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
||||||
|
<RowConstraints minHeight="30.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
||||||
|
</rowConstraints>
|
||||||
|
<children>
|
||||||
|
<AnchorPane prefHeight="200.0" prefWidth="200.0">
|
||||||
|
<children>
|
||||||
|
<Label layoutX="28.0" layoutY="8.0" prefHeight="30.0" prefWidth="154.0" text="Save Directory" AnchorPane.bottomAnchor="5.0" AnchorPane.leftAnchor="5.0" AnchorPane.rightAnchor="5.0" AnchorPane.topAnchor="5.0" />
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.rowIndex="1">
|
||||||
|
<children>
|
||||||
|
<Label layoutX="31.0" layoutY="6.0" prefHeight="30.0" prefWidth="154.0" text="Patient ID" AnchorPane.bottomAnchor="5.0" AnchorPane.leftAnchor="5.0" AnchorPane.rightAnchor="5.0" AnchorPane.topAnchor="5.0" />
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1">
|
||||||
|
<children>
|
||||||
|
<TextArea fx:id="directorypath" editable="false" layoutX="14.0" layoutY="-86.0" prefHeight="114.0" prefWidth="358.0" promptText="Directory to save Photos" wrapText="true" AnchorPane.bottomAnchor="5.0" AnchorPane.leftAnchor="5.0" AnchorPane.rightAnchor="5.0" AnchorPane.topAnchor="5.0" />
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1" GridPane.rowIndex="1">
|
||||||
|
<children>
|
||||||
|
<TextArea fx:id="prefixfile" layoutX="-21.0" layoutY="-85.0" prefHeight="115.0" prefWidth="358.0" promptText="Some identification for easy find" wrapText="true" AnchorPane.bottomAnchor="5.0" AnchorPane.leftAnchor="5.0" AnchorPane.rightAnchor="5.0" AnchorPane.topAnchor="5.0" />
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
</children>
|
||||||
|
<VBox.margin>
|
||||||
|
<Insets bottom="5.0" top="5.0" />
|
||||||
|
</VBox.margin>
|
||||||
|
</GridPane>
|
||||||
|
<GridPane>
|
||||||
|
<columnConstraints>
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
|
</columnConstraints>
|
||||||
|
<rowConstraints>
|
||||||
|
<RowConstraints minHeight="30.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
||||||
|
</rowConstraints>
|
||||||
|
<children>
|
||||||
|
<AnchorPane prefHeight="200.0" prefWidth="200.0">
|
||||||
|
<children>
|
||||||
|
<Button layoutX="42.0" layoutY="14.0" mnemonicParsing="false" onAction="#ChangeDirectory" prefHeight="70.0" prefWidth="171.0" text="Change Directory" wrapText="true" AnchorPane.bottomAnchor="5.0" AnchorPane.leftAnchor="5.0" AnchorPane.rightAnchor="5.0" AnchorPane.topAnchor="0.0" />
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1">
|
||||||
|
<children>
|
||||||
|
<Button fx:id="btnAutoFocus" layoutX="72.0" layoutY="35.0" mnemonicParsing="false" onAction="#AutoFocus" prefHeight="70.0" prefWidth="171.0" text="Auto Focus" wrapText="true" AnchorPane.bottomAnchor="5.0" AnchorPane.leftAnchor="5.0" AnchorPane.rightAnchor="5.0" AnchorPane.topAnchor="0.0" />
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="2">
|
||||||
|
<children>
|
||||||
|
<Button fx:id="btnTakePhoto" layoutX="59.0" layoutY="23.0" mnemonicParsing="false" onAction="#TakePhotos" prefHeight="70.0" prefWidth="170.0" text="Take Photos" wrapText="true" AnchorPane.bottomAnchor="5.0" AnchorPane.leftAnchor="5.0" AnchorPane.rightAnchor="5.0" AnchorPane.topAnchor="0.0" />
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
</children>
|
||||||
|
<VBox.margin>
|
||||||
|
<Insets top="5.0" />
|
||||||
|
</VBox.margin>
|
||||||
|
</GridPane>
|
||||||
|
<ScrollPane prefHeight="200.0" prefWidth="200.0">
|
||||||
|
<content>
|
||||||
|
<AnchorPane fx:id="progressanchor" />
|
||||||
|
</content>
|
||||||
|
<VBox.margin>
|
||||||
|
<Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
|
||||||
|
</VBox.margin>
|
||||||
|
</ScrollPane>
|
||||||
|
</children>
|
||||||
|
</VBox>
|
||||||
|
</children>
|
||||||
|
<padding>
|
||||||
|
<Insets top="5.0" />
|
||||||
|
</padding></AnchorPane>
|
||||||
|
</children>
|
||||||
|
</GridPane>
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
@@ -19,16 +19,19 @@
|
|||||||
<RowConstraints minHeight="36.0" prefHeight="36.0" vgrow="SOMETIMES" />
|
<RowConstraints minHeight="36.0" prefHeight="36.0" vgrow="SOMETIMES" />
|
||||||
</rowConstraints>
|
</rowConstraints>
|
||||||
<children>
|
<children>
|
||||||
|
|
||||||
<AnchorPane prefHeight="200.0" prefWidth="200.0">
|
<AnchorPane prefHeight="200.0" prefWidth="200.0">
|
||||||
<children>
|
<children>
|
||||||
<Button fx:id="ReviewButton" layoutX="99.0" layoutY="2.0" mnemonicParsing="false" onAction="#ReviewClick" text="Review" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="10.0" AnchorPane.rightAnchor="5.0" AnchorPane.topAnchor="0.0" />
|
<Button fx:id="ReviewButton" layoutX="99.0" layoutY="2.0" mnemonicParsing="false" onAction="#ReviewClick" text="Review" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="10.0" AnchorPane.rightAnchor="5.0" AnchorPane.topAnchor="0.0" />
|
||||||
</children>
|
</children>
|
||||||
</AnchorPane>
|
</AnchorPane>
|
||||||
|
|
||||||
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1">
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1">
|
||||||
<children>
|
<children>
|
||||||
<Button fx:id="CaptureButton" layoutX="103.0" layoutY="6.0" mnemonicParsing="false" onAction="#CaptureClick" text="Capture" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="5.0" AnchorPane.rightAnchor="5.0" AnchorPane.topAnchor="0.0" />
|
<Button fx:id="CaptureButton" layoutX="103.0" layoutY="6.0" mnemonicParsing="false" onAction="#CaptureClick" text="Capture" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="5.0" AnchorPane.rightAnchor="5.0" AnchorPane.topAnchor="0.0" />
|
||||||
</children>
|
</children>
|
||||||
</AnchorPane>
|
</AnchorPane>
|
||||||
|
|
||||||
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="2">
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="2">
|
||||||
<children>
|
<children>
|
||||||
<Button fx:id="SettingButton" layoutX="64.0" layoutY="2.0" mnemonicParsing="false" onAction="#SettingClick" text="Setting" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="5.0" AnchorPane.rightAnchor="10.0" AnchorPane.topAnchor="0.0" />
|
<Button fx:id="SettingButton" layoutX="64.0" layoutY="2.0" mnemonicParsing="false" onAction="#SettingClick" text="Setting" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="5.0" AnchorPane.rightAnchor="10.0" AnchorPane.topAnchor="0.0" />
|
||||||
|
|||||||
@@ -1,16 +1,9 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
<?import javafx.scene.control.Button?>
|
<?import javafx.scene.control.*?>
|
||||||
<?import javafx.scene.control.ComboBox?>
|
<?import javafx.scene.layout.*?>
|
||||||
<?import javafx.scene.control.Label?>
|
|
||||||
<?import javafx.scene.control.TextField?>
|
|
||||||
<?import javafx.scene.layout.AnchorPane?>
|
|
||||||
<?import javafx.scene.layout.ColumnConstraints?>
|
|
||||||
<?import javafx.scene.layout.GridPane?>
|
|
||||||
<?import javafx.scene.layout.HBox?>
|
|
||||||
<?import javafx.scene.layout.RowConstraints?>
|
|
||||||
|
|
||||||
<AnchorPane maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" minHeight="-Infinity" minWidth="-Infinity" prefWidth="1024.0" xmlns="http://javafx.com/javafx/22" xmlns:fx="http://javafx.com/fxml/1" fx:controller="id.co.gtc.erhacam.SettingView">
|
<AnchorPane maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" minHeight="-Infinity" minWidth="-Infinity" prefWidth="1024.0" xmlns="http://javafx.com/javafx/17.0.12" xmlns:fx="http://javafx.com/fxml/1" fx:controller="id.co.gtc.erhacam.SettingView">
|
||||||
<children>
|
<children>
|
||||||
<GridPane layoutX="70.0" layoutY="78.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
|
<GridPane layoutX="70.0" layoutY="78.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
|
||||||
<columnConstraints>
|
<columnConstraints>
|
||||||
@@ -18,35 +11,42 @@
|
|||||||
</columnConstraints>
|
</columnConstraints>
|
||||||
<rowConstraints>
|
<rowConstraints>
|
||||||
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
||||||
<RowConstraints minHeight="200.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
<RowConstraints minHeight="300.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
||||||
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
||||||
<RowConstraints minHeight="200.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
<RowConstraints minHeight="200.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
||||||
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
||||||
<RowConstraints minHeight="200.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
<RowConstraints minHeight="40.0" prefHeight="40.0" vgrow="SOMETIMES" />
|
||||||
</rowConstraints>
|
</rowConstraints>
|
||||||
<children>
|
<children>
|
||||||
<AnchorPane prefHeight="200.0" prefWidth="200.0">
|
<AnchorPane prefHeight="200.0" prefWidth="200.0">
|
||||||
<children>
|
|
||||||
<Label alignment="CENTER" layoutX="44.0" layoutY="7.0" text="Audio Setting" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" />
|
|
||||||
</children>
|
|
||||||
</AnchorPane>
|
|
||||||
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.rowIndex="2">
|
|
||||||
<children>
|
<children>
|
||||||
<Label alignment="CENTER" layoutX="195.0" layoutY="7.0" text="Camera Setting" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" />
|
<Label alignment="CENTER" layoutX="195.0" layoutY="7.0" text="Camera Setting" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" />
|
||||||
</children>
|
</children>
|
||||||
</AnchorPane>
|
</AnchorPane>
|
||||||
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.rowIndex="4">
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.rowIndex="2">
|
||||||
<children>
|
<children>
|
||||||
<Label alignment="CENTER" layoutX="239.0" layoutY="8.0" text="FTP Setting" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" />
|
<Label alignment="CENTER" layoutX="239.0" layoutY="8.0" text="FTP Setting" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" />
|
||||||
</children>
|
</children>
|
||||||
</AnchorPane>
|
</AnchorPane>
|
||||||
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.rowIndex="1">
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.rowIndex="1">
|
||||||
<children>
|
<children>
|
||||||
<GridPane layoutX="149.0" layoutY="-29.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
|
<GridPane fx:id="camerassetting" prefHeight="300.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
|
||||||
<columnConstraints>
|
<columnConstraints>
|
||||||
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" percentWidth="15.0" prefWidth="100.0" />
|
<ColumnConstraints percentWidth="40.0" />
|
||||||
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
<ColumnConstraints percentWidth="40.0" />
|
||||||
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" percentWidth="15.0" prefWidth="100.0" />
|
<ColumnConstraints percentWidth="20.0" />
|
||||||
|
</columnConstraints>
|
||||||
|
<rowConstraints>
|
||||||
|
<RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
|
||||||
|
</rowConstraints>
|
||||||
|
<children>
|
||||||
|
<AnchorPane>
|
||||||
|
<children>
|
||||||
|
<GridPane fx:id="cameraselection" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
|
||||||
|
<columnConstraints>
|
||||||
|
<ColumnConstraints percentWidth="25" />
|
||||||
|
<ColumnConstraints percentWidth="50" />
|
||||||
|
<ColumnConstraints percentWidth="25" />
|
||||||
</columnConstraints>
|
</columnConstraints>
|
||||||
<rowConstraints>
|
<rowConstraints>
|
||||||
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
||||||
@@ -54,184 +54,465 @@
|
|||||||
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
||||||
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
||||||
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
||||||
</rowConstraints>
|
|
||||||
<children>
|
|
||||||
<AnchorPane prefHeight="200.0" prefWidth="200.0">
|
|
||||||
<children>
|
|
||||||
<Label layoutX="62.0" layoutY="8.0" text="Phase 1 File" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="5.0" AnchorPane.rightAnchor="5.0" AnchorPane.topAnchor="0.0" />
|
|
||||||
</children>
|
|
||||||
</AnchorPane>
|
|
||||||
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.rowIndex="1">
|
|
||||||
<children>
|
|
||||||
<Label layoutX="49.0" layoutY="8.0" prefHeight="30.4" prefWidth="180.0" text="Phase 2 File" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="5.0" AnchorPane.rightAnchor="5.0" AnchorPane.topAnchor="0.0" />
|
|
||||||
</children>
|
|
||||||
</AnchorPane>
|
|
||||||
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.rowIndex="2">
|
|
||||||
<children>
|
|
||||||
<Label layoutX="62.0" layoutY="5.0" prefHeight="30.4" prefWidth="180.0" text="Phase 3 File" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="5.0" AnchorPane.rightAnchor="5.0" AnchorPane.topAnchor="0.0" />
|
|
||||||
</children>
|
|
||||||
</AnchorPane>
|
|
||||||
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.rowIndex="3">
|
|
||||||
<children>
|
|
||||||
<Label layoutX="22.0" layoutY="6.0" prefHeight="30.4" prefWidth="180.0" text="Phase 4 File" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="5.0" AnchorPane.rightAnchor="5.0" AnchorPane.topAnchor="0.0" />
|
|
||||||
</children>
|
|
||||||
</AnchorPane>
|
|
||||||
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.rowIndex="4">
|
|
||||||
<children>
|
|
||||||
<Label layoutX="34.0" layoutY="6.0" prefHeight="30.4" prefWidth="180.0" text="Phase 5 File" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="5.0" AnchorPane.rightAnchor="5.0" AnchorPane.topAnchor="0.0" />
|
|
||||||
</children>
|
|
||||||
</AnchorPane>
|
|
||||||
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1">
|
|
||||||
<children>
|
|
||||||
<TextField fx:id="AudioPhase1" layoutX="14.0" layoutY="4.0" prefHeight="30.4" prefWidth="329.6" AnchorPane.bottomAnchor="2.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="2.0" AnchorPane.topAnchor="2.0" />
|
|
||||||
</children>
|
|
||||||
</AnchorPane>
|
|
||||||
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1" GridPane.rowIndex="1">
|
|
||||||
<children>
|
|
||||||
<TextField fx:id="AudioPhase2" layoutX="-32.0" layoutY="1.0" prefHeight="30.4" prefWidth="329.6" AnchorPane.bottomAnchor="2.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="2.0" AnchorPane.topAnchor="2.0" />
|
|
||||||
</children>
|
|
||||||
</AnchorPane>
|
|
||||||
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1" GridPane.rowIndex="2">
|
|
||||||
<children>
|
|
||||||
<TextField fx:id="AudioPhase3" layoutY="2.0" prefHeight="30.4" prefWidth="329.6" AnchorPane.bottomAnchor="2.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="2.0" AnchorPane.topAnchor="2.0" />
|
|
||||||
</children>
|
|
||||||
</AnchorPane>
|
|
||||||
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1" GridPane.rowIndex="3">
|
|
||||||
<children>
|
|
||||||
<TextField fx:id="AudioPhase4" layoutX="51.0" layoutY="2.0" prefHeight="30.4" prefWidth="329.6" AnchorPane.bottomAnchor="2.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="2.0" AnchorPane.topAnchor="2.0" />
|
|
||||||
</children>
|
|
||||||
</AnchorPane>
|
|
||||||
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1" GridPane.rowIndex="4">
|
|
||||||
<children>
|
|
||||||
<TextField fx:id="AudioPhase5" layoutX="14.0" layoutY="2.0" prefHeight="30.4" prefWidth="329.6" AnchorPane.bottomAnchor="2.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="2.0" AnchorPane.topAnchor="2.0" />
|
|
||||||
</children>
|
|
||||||
</AnchorPane>
|
|
||||||
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="2">
|
|
||||||
<children>
|
|
||||||
<Button layoutX="14.0" layoutY="3.0" mnemonicParsing="false" onAction="#BrowseAudioPhase1" prefHeight="30.4" prefWidth="90.4" text="Browse" AnchorPane.bottomAnchor="2.0" AnchorPane.leftAnchor="2.0" AnchorPane.rightAnchor="2.0" AnchorPane.topAnchor="2.0" />
|
|
||||||
</children>
|
|
||||||
</AnchorPane>
|
|
||||||
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="2" GridPane.rowIndex="1">
|
|
||||||
<children>
|
|
||||||
<Button layoutX="19.0" layoutY="4.0" mnemonicParsing="false" onAction="#BrowseAudioPhase2" prefHeight="30.4" prefWidth="90.4" text="Browse" AnchorPane.bottomAnchor="2.0" AnchorPane.leftAnchor="2.0" AnchorPane.rightAnchor="2.0" AnchorPane.topAnchor="2.0" />
|
|
||||||
</children>
|
|
||||||
</AnchorPane>
|
|
||||||
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="2" GridPane.rowIndex="2">
|
|
||||||
<children>
|
|
||||||
<Button layoutX="19.0" layoutY="4.0" mnemonicParsing="false" onAction="#BrowseAudioPhase3" prefHeight="30.4" prefWidth="90.4" text="Browse" AnchorPane.bottomAnchor="2.0" AnchorPane.leftAnchor="2.0" AnchorPane.rightAnchor="2.0" AnchorPane.topAnchor="2.0" />
|
|
||||||
</children>
|
|
||||||
</AnchorPane>
|
|
||||||
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="2" GridPane.rowIndex="3">
|
|
||||||
<children>
|
|
||||||
<Button layoutX="14.0" layoutY="14.0" mnemonicParsing="false" onAction="#BrowseAudioPhase4" prefHeight="40.0" prefWidth="90.4" text="Browse" AnchorPane.bottomAnchor="2.0" AnchorPane.leftAnchor="2.0" AnchorPane.rightAnchor="2.0" AnchorPane.topAnchor="2.0" />
|
|
||||||
</children>
|
|
||||||
</AnchorPane>
|
|
||||||
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="2" GridPane.rowIndex="4">
|
|
||||||
<children>
|
|
||||||
<Button layoutY="4.0" mnemonicParsing="false" onAction="#BrowseAudioPhase5" prefHeight="30.4" prefWidth="90.4" text="Browse" AnchorPane.bottomAnchor="2.0" AnchorPane.leftAnchor="2.0" AnchorPane.rightAnchor="2.0" AnchorPane.topAnchor="2.0" />
|
|
||||||
</children>
|
|
||||||
</AnchorPane>
|
|
||||||
</children>
|
|
||||||
</GridPane>
|
|
||||||
</children>
|
|
||||||
</AnchorPane>
|
|
||||||
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.rowIndex="3">
|
|
||||||
<children>
|
|
||||||
<GridPane layoutX="166.0" layoutY="-29.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
|
|
||||||
<columnConstraints>
|
|
||||||
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" percentWidth="15.0" prefWidth="100.0" />
|
|
||||||
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
|
||||||
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" percentWidth="15.0" prefWidth="100.0" />
|
|
||||||
</columnConstraints>
|
|
||||||
<rowConstraints>
|
|
||||||
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
|
||||||
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
||||||
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
||||||
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
||||||
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
||||||
</rowConstraints>
|
</rowConstraints>
|
||||||
<children>
|
<children>
|
||||||
<AnchorPane prefHeight="200.0" prefWidth="200.0">
|
|
||||||
<children>
|
|
||||||
<Label layoutX="30.0" layoutY="12.0" prefHeight="40.8" prefWidth="87.2" text="Left 90" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="5.0" AnchorPane.rightAnchor="5.0" AnchorPane.topAnchor="0.0" />
|
|
||||||
</children>
|
|
||||||
</AnchorPane>
|
|
||||||
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.rowIndex="1">
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.rowIndex="1">
|
||||||
<children>
|
<children>
|
||||||
<Label layoutX="44.0" layoutY="12.0" prefHeight="40.8" prefWidth="87.2" text="Left 45" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="5.0" AnchorPane.rightAnchor="5.0" AnchorPane.topAnchor="0.0" />
|
<Label fx:id="lblCamera1" layoutX="30.0" layoutY="12.0" prefHeight="40.8" prefWidth="87.2" text="Cam 1" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="5.0" AnchorPane.rightAnchor="5.0" AnchorPane.topAnchor="0.0" />
|
||||||
</children>
|
</children>
|
||||||
</AnchorPane>
|
</AnchorPane>
|
||||||
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.rowIndex="2">
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.rowIndex="2">
|
||||||
<children>
|
<children>
|
||||||
<Label layoutX="30.0" layoutY="6.0" prefHeight="40.8" prefWidth="87.2" text="Center" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="5.0" AnchorPane.rightAnchor="5.0" AnchorPane.topAnchor="0.0" />
|
<Label fx:id="lblCamera2" layoutX="44.0" layoutY="12.0" prefHeight="40.8" prefWidth="87.2" text="Cam 2" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="5.0" AnchorPane.rightAnchor="5.0" AnchorPane.topAnchor="0.0" />
|
||||||
</children>
|
</children>
|
||||||
</AnchorPane>
|
</AnchorPane>
|
||||||
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.rowIndex="3">
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.rowIndex="3">
|
||||||
<children>
|
<children>
|
||||||
<Label layoutX="24.0" layoutY="6.0" prefHeight="40.0" prefWidth="87.2" text="Right 45" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="5.0" AnchorPane.rightAnchor="5.0" AnchorPane.topAnchor="0.0" />
|
<Label fx:id="lblCamera3" layoutX="30.0" layoutY="6.0" prefHeight="40.8" prefWidth="87.2" text="Cam 3" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="5.0" AnchorPane.rightAnchor="5.0" AnchorPane.topAnchor="0.0" />
|
||||||
</children>
|
</children>
|
||||||
</AnchorPane>
|
</AnchorPane>
|
||||||
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.rowIndex="4">
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.rowIndex="4">
|
||||||
<children>
|
<children>
|
||||||
<Label layoutX="36.0" layoutY="11.0" prefHeight="40.0" prefWidth="87.2" text="Right 90" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="5.0" AnchorPane.rightAnchor="5.0" AnchorPane.topAnchor="0.0" />
|
<Label fx:id="lblCamera4" layoutX="24.0" layoutY="6.0" prefHeight="40.0" prefWidth="87.2" text="Cam 4" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="5.0" AnchorPane.rightAnchor="5.0" AnchorPane.topAnchor="0.0" />
|
||||||
</children>
|
|
||||||
</AnchorPane>
|
|
||||||
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1">
|
|
||||||
<children>
|
|
||||||
<ComboBox fx:id="CameraLeft90" layoutX="54.0" layoutY="8.0" prefHeight="40.8" prefWidth="408.0" AnchorPane.bottomAnchor="2.0" AnchorPane.leftAnchor="2.0" AnchorPane.rightAnchor="2.0" AnchorPane.topAnchor="2.0" />
|
|
||||||
</children>
|
|
||||||
</AnchorPane>
|
|
||||||
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1" GridPane.rowIndex="1">
|
|
||||||
<children>
|
|
||||||
<ComboBox fx:id="CameraLeft45" layoutX="26.0" layoutY="14.0" prefHeight="40.8" prefWidth="408.0" AnchorPane.bottomAnchor="2.0" AnchorPane.leftAnchor="2.0" AnchorPane.rightAnchor="2.0" AnchorPane.topAnchor="2.0" />
|
|
||||||
</children>
|
|
||||||
</AnchorPane>
|
|
||||||
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1" GridPane.rowIndex="2">
|
|
||||||
<children>
|
|
||||||
<ComboBox fx:id="CameraCenter" layoutX="88.0" layoutY="8.0" prefHeight="40.8" prefWidth="408.0" AnchorPane.bottomAnchor="2.0" AnchorPane.leftAnchor="2.0" AnchorPane.rightAnchor="2.0" AnchorPane.topAnchor="2.0" />
|
|
||||||
</children>
|
|
||||||
</AnchorPane>
|
|
||||||
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1" GridPane.rowIndex="3">
|
|
||||||
<children>
|
|
||||||
<ComboBox fx:id="CameraRight45" layoutX="54.0" layoutY="8.0" prefHeight="40.0" prefWidth="408.0" AnchorPane.bottomAnchor="2.0" AnchorPane.leftAnchor="2.0" AnchorPane.rightAnchor="2.0" AnchorPane.topAnchor="2.0" />
|
|
||||||
</children>
|
|
||||||
</AnchorPane>
|
|
||||||
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1" GridPane.rowIndex="4">
|
|
||||||
<children>
|
|
||||||
<ComboBox fx:id="CameraRight90" layoutX="75.0" layoutY="1.0" prefHeight="40.0" prefWidth="408.0" AnchorPane.bottomAnchor="2.0" AnchorPane.leftAnchor="2.0" AnchorPane.rightAnchor="2.0" AnchorPane.topAnchor="2.0" />
|
|
||||||
</children>
|
|
||||||
</AnchorPane>
|
|
||||||
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="2">
|
|
||||||
<children>
|
|
||||||
<Button layoutY="8.0" mnemonicParsing="false" onAction="#ApplyCameraLeft90" prefHeight="40.8" prefWidth="88.0" text="Apply" AnchorPane.bottomAnchor="2.0" AnchorPane.leftAnchor="2.0" AnchorPane.rightAnchor="2.0" AnchorPane.topAnchor="2.0" />
|
|
||||||
</children>
|
|
||||||
</AnchorPane>
|
|
||||||
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="2" GridPane.rowIndex="1">
|
|
||||||
<children>
|
|
||||||
<Button layoutX="22.0" layoutY="2.0" mnemonicParsing="false" onAction="#ApplyCameraLeft45" prefHeight="40.8" prefWidth="88.0" text="Apply" AnchorPane.bottomAnchor="2.0" AnchorPane.leftAnchor="2.0" AnchorPane.rightAnchor="2.0" AnchorPane.topAnchor="2.0" />
|
|
||||||
</children>
|
|
||||||
</AnchorPane>
|
|
||||||
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="2" GridPane.rowIndex="2">
|
|
||||||
<children>
|
|
||||||
<Button layoutX="18.0" layoutY="2.0" mnemonicParsing="false" onAction="#ApplyCameraFront" prefHeight="40.8" prefWidth="88.0" text="Apply" AnchorPane.bottomAnchor="2.0" AnchorPane.leftAnchor="2.0" AnchorPane.rightAnchor="2.0" AnchorPane.topAnchor="2.0" />
|
|
||||||
</children>
|
|
||||||
</AnchorPane>
|
|
||||||
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="2" GridPane.rowIndex="3">
|
|
||||||
<children>
|
|
||||||
<Button layoutX="22.0" layoutY="8.0" mnemonicParsing="false" onAction="#ApplyCameraRight45" prefHeight="40.0" prefWidth="88.0" text="Apply" AnchorPane.bottomAnchor="2.0" AnchorPane.leftAnchor="2.0" AnchorPane.rightAnchor="2.0" AnchorPane.topAnchor="2.0" />
|
|
||||||
</children>
|
|
||||||
</AnchorPane>
|
|
||||||
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="2" GridPane.rowIndex="4">
|
|
||||||
<children>
|
|
||||||
<Button layoutX="22.0" layoutY="8.0" mnemonicParsing="false" onAction="#ApplyCameraRight90" prefHeight="40.0" prefWidth="88.0" text="Apply" AnchorPane.bottomAnchor="2.0" AnchorPane.leftAnchor="2.0" AnchorPane.rightAnchor="2.0" AnchorPane.topAnchor="2.0" />
|
|
||||||
</children>
|
|
||||||
</AnchorPane>
|
|
||||||
</children>
|
|
||||||
</GridPane>
|
|
||||||
</children>
|
</children>
|
||||||
</AnchorPane>
|
</AnchorPane>
|
||||||
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.rowIndex="5">
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.rowIndex="5">
|
||||||
<children>
|
<children>
|
||||||
|
<Label fx:id="lblCamera5" layoutX="36.0" layoutY="11.0" prefHeight="40.0" prefWidth="87.2" text="Cam 5" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="5.0" AnchorPane.rightAnchor="5.0" AnchorPane.topAnchor="0.0" />
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1" GridPane.rowIndex="1">
|
||||||
|
<children>
|
||||||
|
<ComboBox fx:id="Camera1" layoutX="54.0" layoutY="8.0" prefHeight="40.8" prefWidth="408.0" AnchorPane.bottomAnchor="2.0" AnchorPane.leftAnchor="2.0" AnchorPane.rightAnchor="2.0" AnchorPane.topAnchor="2.0" />
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1" GridPane.rowIndex="2">
|
||||||
|
<children>
|
||||||
|
<ComboBox fx:id="Camera2" layoutX="26.0" layoutY="14.0" prefHeight="40.8" prefWidth="408.0" AnchorPane.bottomAnchor="2.0" AnchorPane.leftAnchor="2.0" AnchorPane.rightAnchor="2.0" AnchorPane.topAnchor="2.0" />
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1" GridPane.rowIndex="3">
|
||||||
|
<children>
|
||||||
|
<ComboBox fx:id="Camera3" layoutX="88.0" layoutY="8.0" prefHeight="40.8" prefWidth="408.0" AnchorPane.bottomAnchor="2.0" AnchorPane.leftAnchor="2.0" AnchorPane.rightAnchor="2.0" AnchorPane.topAnchor="2.0" />
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1" GridPane.rowIndex="4">
|
||||||
|
<children>
|
||||||
|
<ComboBox fx:id="Camera4" layoutX="54.0" layoutY="8.0" prefHeight="40.0" prefWidth="408.0" AnchorPane.bottomAnchor="2.0" AnchorPane.leftAnchor="2.0" AnchorPane.rightAnchor="2.0" AnchorPane.topAnchor="2.0" />
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1" GridPane.rowIndex="5">
|
||||||
|
<children>
|
||||||
|
<ComboBox fx:id="Camera5" layoutX="75.0" layoutY="1.0" prefHeight="40.0" prefWidth="408.0" AnchorPane.bottomAnchor="2.0" AnchorPane.leftAnchor="2.0" AnchorPane.rightAnchor="2.0" AnchorPane.topAnchor="2.0" />
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="2" GridPane.rowIndex="1">
|
||||||
|
<children>
|
||||||
|
<Button fx:id="ApplyCamera1" layoutY="8.0" mnemonicParsing="false" onAction="#ApplyCameraLeft90" prefHeight="40.8" prefWidth="88.0" text="Apply" AnchorPane.bottomAnchor="2.0" AnchorPane.leftAnchor="2.0" AnchorPane.rightAnchor="2.0" AnchorPane.topAnchor="2.0" />
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="2" GridPane.rowIndex="2">
|
||||||
|
<children>
|
||||||
|
<Button fx:id="ApplyCamera2" layoutX="22.0" layoutY="2.0" mnemonicParsing="false" onAction="#ApplyCameraLeft45" prefHeight="40.8" prefWidth="88.0" text="Apply" AnchorPane.bottomAnchor="2.0" AnchorPane.leftAnchor="2.0" AnchorPane.rightAnchor="2.0" AnchorPane.topAnchor="2.0" />
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="2" GridPane.rowIndex="3">
|
||||||
|
<children>
|
||||||
|
<Button fx:id="ApplyCamera3" layoutX="18.0" layoutY="2.0" mnemonicParsing="false" onAction="#ApplyCameraFront" prefHeight="40.8" prefWidth="88.0" text="Apply" AnchorPane.bottomAnchor="2.0" AnchorPane.leftAnchor="2.0" AnchorPane.rightAnchor="2.0" AnchorPane.topAnchor="2.0" />
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="2" GridPane.rowIndex="4">
|
||||||
|
<children>
|
||||||
|
<Button fx:id="ApplyCamera4" layoutX="22.0" layoutY="8.0" mnemonicParsing="false" onAction="#ApplyCameraRight45" prefHeight="40.0" prefWidth="88.0" text="Apply" AnchorPane.bottomAnchor="2.0" AnchorPane.leftAnchor="2.0" AnchorPane.rightAnchor="2.0" AnchorPane.topAnchor="2.0" />
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="2" GridPane.rowIndex="5">
|
||||||
|
<children>
|
||||||
|
<Button fx:id="ApplyCamera5" layoutX="22.0" layoutY="8.0" mnemonicParsing="false" onAction="#ApplyCameraRight90" prefHeight="40.0" prefWidth="88.0" text="Apply" AnchorPane.bottomAnchor="2.0" AnchorPane.leftAnchor="2.0" AnchorPane.rightAnchor="2.0" AnchorPane.topAnchor="2.0" />
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.rowIndex="6">
|
||||||
|
<children>
|
||||||
|
<Label layoutX="60.0" prefHeight="40.0" prefWidth="175.0" text="Mirror" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="5.0" AnchorPane.rightAnchor="5.0" AnchorPane.topAnchor="0.0" />
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1" GridPane.rowIndex="6">
|
||||||
|
<children>
|
||||||
|
<CheckBox fx:id="MirrorCamera" layoutX="30.0" layoutY="6.0" mnemonicParsing="false" prefHeight="40.0" prefWidth="175.0" AnchorPane.bottomAnchor="2.0" AnchorPane.leftAnchor="2.0" AnchorPane.rightAnchor="2.0" AnchorPane.topAnchor="2.0" />
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.rowIndex="7">
|
||||||
|
<children>
|
||||||
|
<Label prefHeight="40.0" prefWidth="175.0" text="Flip" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="5.0" AnchorPane.rightAnchor="5.0" AnchorPane.topAnchor="0.0" />
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1" GridPane.rowIndex="7">
|
||||||
|
<children>
|
||||||
|
<CheckBox fx:id="FlipCamera" mnemonicParsing="false" prefHeight="40.0" prefWidth="175.0" AnchorPane.bottomAnchor="2.0" AnchorPane.leftAnchor="2.0" AnchorPane.rightAnchor="2.0" AnchorPane.topAnchor="2.0" />
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
<AnchorPane prefHeight="200.0" prefWidth="200.0">
|
||||||
|
<children>
|
||||||
|
<Label layoutX="32.0" layoutY="19.0" prefHeight="37.0" prefWidth="92.0" text="Sharpness" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="5.0" AnchorPane.rightAnchor="5.0" AnchorPane.topAnchor="0.0" />
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1">
|
||||||
|
<children>
|
||||||
|
<TextField fx:id="Sharpness" layoutX="35.0" layoutY="2.0" prefHeight="37.0" prefWidth="368.0" promptText="if Sharpness below this number, photos considered as blurred" AnchorPane.bottomAnchor="2.0" AnchorPane.leftAnchor="2.0" AnchorPane.rightAnchor="2.0" AnchorPane.topAnchor="2.0" />
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
<AnchorPane GridPane.columnIndex="2">
|
||||||
|
<children>
|
||||||
|
<Button mnemonicParsing="false" onAction="#SharpnessApply" prefHeight="37.0" prefWidth="92.0" text="Apply" AnchorPane.bottomAnchor="2.0" AnchorPane.leftAnchor="2.0" AnchorPane.rightAnchor="2.0" AnchorPane.topAnchor="2.0" />
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
<AnchorPane GridPane.rowIndex="8">
|
||||||
|
<children>
|
||||||
|
<Label text="API Type" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="5.0" AnchorPane.rightAnchor="5.0" AnchorPane.topAnchor="0.0" />
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
<AnchorPane GridPane.columnIndex="1" GridPane.rowIndex="8">
|
||||||
|
<children>
|
||||||
|
<RadioButton fx:id="apiStaging" layoutX="14.0" layoutY="8.0" mnemonicParsing="false" text="Staging" AnchorPane.bottomAnchor="2.0" AnchorPane.leftAnchor="2.0" AnchorPane.topAnchor="2.0">
|
||||||
|
<toggleGroup>
|
||||||
|
<ToggleGroup fx:id="apiselect" />
|
||||||
|
</toggleGroup></RadioButton>
|
||||||
|
<RadioButton fx:id="apiProduction" layoutX="103.0" layoutY="11.0" mnemonicParsing="false" text="Production" toggleGroup="$apiselect" AnchorPane.bottomAnchor="2.0" AnchorPane.rightAnchor="2.0" AnchorPane.topAnchor="2.0" />
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
<AnchorPane GridPane.columnIndex="2" GridPane.rowIndex="8">
|
||||||
|
<children>
|
||||||
|
<Button mnemonicParsing="false" onAction="#changeAPIClick" prefHeight="33.6" prefWidth="102.4" text="Apply" AnchorPane.bottomAnchor="2.0" AnchorPane.leftAnchor="2.0" AnchorPane.rightAnchor="2.0" AnchorPane.topAnchor="2.0" />
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
</children>
|
||||||
|
</GridPane>
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
<AnchorPane maxWidth="400.0" GridPane.columnIndex="2">
|
||||||
|
<children>
|
||||||
|
<GridPane AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
|
||||||
|
<columnConstraints>
|
||||||
|
<ColumnConstraints prefWidth="300" />
|
||||||
|
</columnConstraints>
|
||||||
|
<rowConstraints>
|
||||||
|
<RowConstraints maxHeight="-Infinity" minHeight="-Infinity" prefHeight="30.0" vgrow="SOMETIMES" />
|
||||||
|
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
||||||
|
<RowConstraints maxHeight="-Infinity" prefHeight="30.0" vgrow="SOMETIMES" />
|
||||||
|
</rowConstraints>
|
||||||
|
<children>
|
||||||
|
<AnchorPane GridPane.rowIndex="2">
|
||||||
|
<children>
|
||||||
|
<Button mnemonicParsing="false" onAction="#CascadeSettingApply" prefHeight="40.0" prefWidth="410.4" text="Apply" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="5.0" AnchorPane.rightAnchor="5.0" AnchorPane.topAnchor="0.0" />
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
<AnchorPane>
|
||||||
|
<children>
|
||||||
|
<Label alignment="CENTER" prefHeight="30.4" prefWidth="410.4" text="Detection Parameters" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="5.0" AnchorPane.rightAnchor="5.0" AnchorPane.topAnchor="0.0" />
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
<AnchorPane GridPane.rowIndex="1">
|
||||||
|
<children>
|
||||||
|
<GridPane prefHeight="200.0" prefWidth="300.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="5.0" AnchorPane.rightAnchor="5.0" AnchorPane.topAnchor="0.0">
|
||||||
|
<columnConstraints>
|
||||||
|
<ColumnConstraints percentWidth="70.0" />
|
||||||
|
<ColumnConstraints percentWidth="30.0" />
|
||||||
|
</columnConstraints>
|
||||||
|
<rowConstraints>
|
||||||
|
<RowConstraints maxHeight="-Infinity" minHeight="-Infinity" prefHeight="40.0" vgrow="SOMETIMES" />
|
||||||
|
<RowConstraints maxHeight="-Infinity" minHeight="-Infinity" prefHeight="40.0" vgrow="SOMETIMES" />
|
||||||
|
<RowConstraints maxHeight="-Infinity" minHeight="-Infinity" prefHeight="40.0" vgrow="SOMETIMES" />
|
||||||
|
</rowConstraints>
|
||||||
|
<children>
|
||||||
|
<AnchorPane>
|
||||||
|
<children>
|
||||||
|
<Label prefHeight="40.0" text="Scale Factor" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" />
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
<AnchorPane GridPane.rowIndex="1">
|
||||||
|
<children>
|
||||||
|
<Label prefHeight="40.0" text="Minimum Size" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" />
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
<AnchorPane GridPane.rowIndex="2">
|
||||||
|
<children>
|
||||||
|
<Label prefHeight="40.0" text="Maximum Size" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" />
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
<AnchorPane GridPane.columnIndex="1">
|
||||||
|
<children>
|
||||||
|
<TextField fx:id="cascadeScaleFactor" alignment="CENTER" prefHeight="40.0" prefWidth="175.0" text="1.2" AnchorPane.bottomAnchor="5.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" />
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
<AnchorPane GridPane.columnIndex="1" GridPane.rowIndex="1">
|
||||||
|
<children>
|
||||||
|
<TextField fx:id="cascadeMinSize" alignment="CENTER" prefHeight="40.0" prefWidth="175.0" text="200" AnchorPane.bottomAnchor="5.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" />
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
<AnchorPane GridPane.columnIndex="1" GridPane.rowIndex="2">
|
||||||
|
<children>
|
||||||
|
<TextField fx:id="cascadeMaxSize" alignment="CENTER" prefHeight="40.0" prefWidth="175.2" text="400" AnchorPane.bottomAnchor="5.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" />
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
</children>
|
||||||
|
</GridPane>
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
</children>
|
||||||
|
</GridPane>
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
<AnchorPane GridPane.columnIndex="1">
|
||||||
|
<children>
|
||||||
|
<GridPane fx:id="cropsetting" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="5.0" AnchorPane.rightAnchor="5.0" AnchorPane.topAnchor="0.0">
|
||||||
|
<columnConstraints>
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
|
</columnConstraints>
|
||||||
|
<rowConstraints>
|
||||||
|
<RowConstraints maxHeight="-Infinity" minHeight="-Infinity" prefHeight="30.0" vgrow="SOMETIMES" />
|
||||||
|
<RowConstraints prefHeight="30.0" vgrow="SOMETIMES" />
|
||||||
|
<RowConstraints prefHeight="30.0" vgrow="SOMETIMES" />
|
||||||
|
<RowConstraints prefHeight="30.0" vgrow="SOMETIMES" />
|
||||||
|
<RowConstraints prefHeight="30.0" vgrow="SOMETIMES" />
|
||||||
|
<RowConstraints prefHeight="30.0" vgrow="SOMETIMES" />
|
||||||
|
<RowConstraints maxHeight="-Infinity" minHeight="-Infinity" prefHeight="50.0" vgrow="SOMETIMES" />
|
||||||
|
</rowConstraints>
|
||||||
|
<children>
|
||||||
|
<AnchorPane prefHeight="200.0" prefWidth="200.0">
|
||||||
|
<children>
|
||||||
|
<GridPane layoutX="-21.0" layoutY="-31.0" prefHeight="30.4" prefWidth="399.2" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
|
||||||
|
<columnConstraints>
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
|
</columnConstraints>
|
||||||
|
<rowConstraints>
|
||||||
|
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
||||||
|
</rowConstraints>
|
||||||
|
<children>
|
||||||
|
<AnchorPane prefHeight="200.0" prefWidth="200.0">
|
||||||
|
<children>
|
||||||
|
<Label alignment="CENTER" layoutX="36.0" layoutY="6.0" prefHeight="30.4" prefWidth="100.0" text="Top" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" />
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1">
|
||||||
|
<children>
|
||||||
|
<Label alignment="CENTER" text="Bottom" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" />
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="2">
|
||||||
|
<children>
|
||||||
|
<Label alignment="CENTER" layoutX="7.0" layoutY="8.0" text="Left" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" />
|
||||||
|
</children></AnchorPane>
|
||||||
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="3">
|
||||||
|
<children>
|
||||||
|
<Label alignment="CENTER" layoutX="36.0" layoutY="8.0" text="Right" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" />
|
||||||
|
</children></AnchorPane>
|
||||||
|
</children>
|
||||||
|
</GridPane>
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.rowIndex="1">
|
||||||
|
<children>
|
||||||
|
<GridPane prefHeight="50.4" prefWidth="399.2" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
|
||||||
|
<columnConstraints>
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
|
</columnConstraints>
|
||||||
|
<rowConstraints>
|
||||||
|
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
||||||
|
</rowConstraints>
|
||||||
|
<children>
|
||||||
|
<AnchorPane prefHeight="200.0" prefWidth="200.0">
|
||||||
|
<children>
|
||||||
|
<TextField fx:id="Cam1TopCrop" alignment="CENTER" promptText="crop percent" text="10" AnchorPane.bottomAnchor="3.0" AnchorPane.leftAnchor="3.0" AnchorPane.rightAnchor="3.0" AnchorPane.topAnchor="3.0" />
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1">
|
||||||
|
<children>
|
||||||
|
<TextField fx:id="Cam1BottomCrop" alignment="CENTER" promptText="crop percent" text="10" AnchorPane.bottomAnchor="3.0" AnchorPane.leftAnchor="3.0" AnchorPane.rightAnchor="3.0" AnchorPane.topAnchor="3.0" />
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="2">
|
||||||
|
<children>
|
||||||
|
<TextField fx:id="Cam1LeftCrop" alignment="CENTER" promptText="crop percent" text="10" AnchorPane.bottomAnchor="3.0" AnchorPane.leftAnchor="3.0" AnchorPane.rightAnchor="3.0" AnchorPane.topAnchor="3.0" />
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="3">
|
||||||
|
<children>
|
||||||
|
<TextField fx:id="Cam1RightCrop" alignment="CENTER" promptText="crop percent" text="10" AnchorPane.bottomAnchor="3.0" AnchorPane.leftAnchor="3.0" AnchorPane.rightAnchor="3.0" AnchorPane.topAnchor="3.0" />
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
</children>
|
||||||
|
</GridPane>
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.rowIndex="2">
|
||||||
|
<children>
|
||||||
|
<GridPane layoutX="-27.0" layoutY="-31.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
|
||||||
|
<columnConstraints>
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
|
</columnConstraints>
|
||||||
|
<rowConstraints>
|
||||||
|
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
||||||
|
</rowConstraints>
|
||||||
|
<children>
|
||||||
|
<AnchorPane prefHeight="200.0" prefWidth="200.0">
|
||||||
|
<children>
|
||||||
|
<TextField fx:id="Cam2TopCrop" alignment="CENTER" promptText="crop percent" text="10" AnchorPane.bottomAnchor="3.0" AnchorPane.leftAnchor="3.0" AnchorPane.rightAnchor="3.0" AnchorPane.topAnchor="3.0" />
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1">
|
||||||
|
<children>
|
||||||
|
<TextField fx:id="Cam2BottomCrop" alignment="CENTER" promptText="crop percent" text="10" AnchorPane.bottomAnchor="3.0" AnchorPane.leftAnchor="3.0" AnchorPane.rightAnchor="3.0" AnchorPane.topAnchor="3.0" />
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="2">
|
||||||
|
<children>
|
||||||
|
<TextField fx:id="Cam2LeftCrop" alignment="CENTER" promptText="crop percent" text="10" AnchorPane.bottomAnchor="3.0" AnchorPane.leftAnchor="3.0" AnchorPane.rightAnchor="3.0" AnchorPane.topAnchor="3.0" />
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="3">
|
||||||
|
<children>
|
||||||
|
<TextField fx:id="Cam2RightCrop" alignment="CENTER" promptText="crop percent" text="10" AnchorPane.bottomAnchor="3.0" AnchorPane.leftAnchor="3.0" AnchorPane.rightAnchor="3.0" AnchorPane.topAnchor="3.0" />
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
</children>
|
||||||
|
</GridPane>
|
||||||
|
</children></AnchorPane>
|
||||||
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.rowIndex="3">
|
||||||
|
<children>
|
||||||
|
<GridPane AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
|
||||||
|
<columnConstraints>
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
|
</columnConstraints>
|
||||||
|
<rowConstraints>
|
||||||
|
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
||||||
|
</rowConstraints>
|
||||||
|
<children>
|
||||||
|
<AnchorPane prefHeight="200.0" prefWidth="200.0">
|
||||||
|
<children>
|
||||||
|
<TextField fx:id="Cam3TopCrop" alignment="CENTER" promptText="crop percent" text="10" AnchorPane.bottomAnchor="3.0" AnchorPane.leftAnchor="3.0" AnchorPane.rightAnchor="3.0" AnchorPane.topAnchor="3.0" />
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1">
|
||||||
|
<children>
|
||||||
|
<TextField fx:id="Cam3BottomCrop" alignment="CENTER" promptText="crop percent" text="10" AnchorPane.bottomAnchor="3.0" AnchorPane.leftAnchor="3.0" AnchorPane.rightAnchor="3.0" AnchorPane.topAnchor="3.0" />
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="2">
|
||||||
|
<children>
|
||||||
|
<TextField fx:id="Cam3LeftCrop" alignment="CENTER" promptText="crop percent" text="10" AnchorPane.bottomAnchor="3.0" AnchorPane.leftAnchor="3.0" AnchorPane.rightAnchor="3.0" AnchorPane.topAnchor="3.0" />
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="3">
|
||||||
|
<children>
|
||||||
|
<TextField fx:id="Cam3RightCrop" alignment="CENTER" promptText="crop percent" text="10" AnchorPane.bottomAnchor="3.0" AnchorPane.leftAnchor="3.0" AnchorPane.rightAnchor="3.0" AnchorPane.topAnchor="3.0" />
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
</children>
|
||||||
|
</GridPane>
|
||||||
|
</children></AnchorPane>
|
||||||
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.rowIndex="4">
|
||||||
|
<children>
|
||||||
|
<GridPane AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
|
||||||
|
<columnConstraints>
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
|
</columnConstraints>
|
||||||
|
<rowConstraints>
|
||||||
|
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
||||||
|
</rowConstraints>
|
||||||
|
<children>
|
||||||
|
<AnchorPane prefHeight="200.0" prefWidth="200.0">
|
||||||
|
<children>
|
||||||
|
<TextField fx:id="Cam4TopCrop" alignment="CENTER" promptText="crop percent" text="10" AnchorPane.bottomAnchor="3.0" AnchorPane.leftAnchor="3.0" AnchorPane.rightAnchor="3.0" AnchorPane.topAnchor="3.0" />
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1">
|
||||||
|
<children>
|
||||||
|
<TextField fx:id="Cam4BottomCrop" alignment="CENTER" promptText="crop percent" text="10" AnchorPane.bottomAnchor="3.0" AnchorPane.leftAnchor="3.0" AnchorPane.rightAnchor="3.0" AnchorPane.topAnchor="3.0" />
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="2">
|
||||||
|
<children>
|
||||||
|
<TextField fx:id="Cam4LeftCrop" alignment="CENTER" promptText="crop percent" text="10" AnchorPane.bottomAnchor="3.0" AnchorPane.leftAnchor="3.0" AnchorPane.rightAnchor="3.0" AnchorPane.topAnchor="3.0" />
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="3">
|
||||||
|
<children>
|
||||||
|
<TextField fx:id="Cam4RightCrop" alignment="CENTER" promptText="crop percent" text="10" AnchorPane.bottomAnchor="3.0" AnchorPane.leftAnchor="3.0" AnchorPane.rightAnchor="3.0" AnchorPane.topAnchor="3.0" />
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
</children>
|
||||||
|
</GridPane>
|
||||||
|
</children></AnchorPane>
|
||||||
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.rowIndex="5">
|
||||||
|
<children>
|
||||||
|
<GridPane AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
|
||||||
|
<columnConstraints>
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
|
</columnConstraints>
|
||||||
|
<rowConstraints>
|
||||||
|
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
||||||
|
</rowConstraints>
|
||||||
|
<children>
|
||||||
|
<AnchorPane prefHeight="200.0" prefWidth="200.0">
|
||||||
|
<children>
|
||||||
|
<TextField fx:id="Cam5TopCrop" alignment="CENTER" promptText="crop percent" text="10" AnchorPane.bottomAnchor="3.0" AnchorPane.leftAnchor="3.0" AnchorPane.rightAnchor="3.0" AnchorPane.topAnchor="3.0" />
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1">
|
||||||
|
<children>
|
||||||
|
<TextField fx:id="Cam5BottomCrop" alignment="CENTER" promptText="crop percent" text="10" AnchorPane.bottomAnchor="3.0" AnchorPane.leftAnchor="3.0" AnchorPane.rightAnchor="3.0" AnchorPane.topAnchor="3.0" />
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="2">
|
||||||
|
<children>
|
||||||
|
<TextField fx:id="Cam5LeftCrop" alignment="CENTER" promptText="crop percent" text="10" AnchorPane.bottomAnchor="3.0" AnchorPane.leftAnchor="3.0" AnchorPane.rightAnchor="3.0" AnchorPane.topAnchor="3.0" />
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="3">
|
||||||
|
<children>
|
||||||
|
<TextField fx:id="Cam5RightCrop" alignment="CENTER" promptText="crop percent" text="10" AnchorPane.bottomAnchor="3.0" AnchorPane.leftAnchor="3.0" AnchorPane.rightAnchor="3.0" AnchorPane.topAnchor="3.0" />
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
</children>
|
||||||
|
</GridPane>
|
||||||
|
</children></AnchorPane>
|
||||||
|
<AnchorPane GridPane.rowIndex="6">
|
||||||
|
<children>
|
||||||
|
<Button fx:id="btnApplyCrop" mnemonicParsing="false" onAction="#ApplyCropClick" prefHeight="40.0" prefWidth="399.2" text="Apply Crop" AnchorPane.bottomAnchor="5.0" AnchorPane.leftAnchor="5.0" AnchorPane.rightAnchor="5.0" AnchorPane.topAnchor="5.0" />
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
</children>
|
||||||
|
</GridPane>
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
</children>
|
||||||
|
</GridPane>
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.rowIndex="3">
|
||||||
|
<children>
|
||||||
<HBox prefHeight="200.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
|
<HBox prefHeight="200.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
|
||||||
<children>
|
<children>
|
||||||
<GridPane HBox.hgrow="ALWAYS">
|
<GridPane HBox.hgrow="ALWAYS">
|
||||||
@@ -308,6 +589,42 @@
|
|||||||
</HBox>
|
</HBox>
|
||||||
</children>
|
</children>
|
||||||
</AnchorPane>
|
</AnchorPane>
|
||||||
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.rowIndex="4">
|
||||||
|
<children>
|
||||||
|
<Label alignment="CENTER" layoutX="287.0" prefHeight="30.4" prefWidth="1024.0" text="Directory Setting" textAlignment="CENTER" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" />
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.rowIndex="5">
|
||||||
|
<children>
|
||||||
|
<GridPane layoutX="75.0" layoutY="-31.0" prefHeight="40.0" prefWidth="1024.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
|
||||||
|
<columnConstraints>
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" percentWidth="15.0" prefWidth="100.0" />
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" percentWidth="10.0" prefWidth="100.0" />
|
||||||
|
</columnConstraints>
|
||||||
|
<rowConstraints>
|
||||||
|
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
|
||||||
|
</rowConstraints>
|
||||||
|
<children>
|
||||||
|
<AnchorPane>
|
||||||
|
<children>
|
||||||
|
<Label text="Photo Save" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="5.0" AnchorPane.rightAnchor="5.0" AnchorPane.topAnchor="0.0" />
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
<AnchorPane GridPane.columnIndex="1">
|
||||||
|
<children>
|
||||||
|
<TextField fx:id="PhotoDirectoryPath" editable="false" prefHeight="40.0" prefWidth="870.4" promptText="directory to save photo" AnchorPane.bottomAnchor="2.0" AnchorPane.leftAnchor="2.0" AnchorPane.rightAnchor="2.0" AnchorPane.topAnchor="2.0" />
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
<AnchorPane GridPane.columnIndex="2">
|
||||||
|
<children>
|
||||||
|
<Button mnemonicParsing="false" onAction="#ChangePhotoDirectoryPath" prefHeight="40.0" prefWidth="102.4" text="Browse" AnchorPane.bottomAnchor="2.0" AnchorPane.leftAnchor="2.0" AnchorPane.rightAnchor="2.0" AnchorPane.topAnchor="2.0" />
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
|
</children>
|
||||||
|
</GridPane>
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
||||||
</children>
|
</children>
|
||||||
</GridPane>
|
</GridPane>
|
||||||
</children>
|
</children>
|
||||||
|
|||||||
BIN
tahan_posisi.wav
Normal file
BIN
tahan_posisi.wav
Normal file
Binary file not shown.
@@ -1,4 +1,5 @@
|
|||||||
writer = rolling file
|
#writer = rolling file
|
||||||
|
writer = console
|
||||||
writer.file = logs/{date:yyyy-MM-dd}.log
|
writer.file = logs/{date:yyyy-MM-dd}.log
|
||||||
writer.format = {date:yyyy-MM-dd HH:mm:ss} {level}: {class}.{method}() {message}
|
writer.format = {date:yyyy-MM-dd HH:mm:ss} {level}: {class}.{method}() {message}
|
||||||
//writer.format = {date:yyyy-MM-dd HH:mm:ss} {level}: {message}
|
//writer.format = {date:yyyy-MM-dd HH:mm:ss} {level}: {message}
|
||||||
|
|||||||
BIN
upload_berhasil.wav
Normal file
BIN
upload_berhasil.wav
Normal file
Binary file not shown.
BIN
upload_gagal.wav
Normal file
BIN
upload_gagal.wav
Normal file
Binary file not shown.
BIN
voices/camera-shutter-click-01.wav
Normal file
BIN
voices/camera-shutter-click-01.wav
Normal file
Binary file not shown.
BIN
voices/countdown321.wav
Normal file
BIN
voices/countdown321.wav
Normal file
Binary file not shown.
BIN
voices/data_barcode_tidak_ditemukan.wav
Normal file
BIN
voices/data_barcode_tidak_ditemukan.wav
Normal file
Binary file not shown.
BIN
voices/dua.wav
BIN
voices/dua.wav
Binary file not shown.
BIN
voices/empat.wav
BIN
voices/empat.wav
Binary file not shown.
BIN
voices/hubungistafkami.wav
Normal file
BIN
voices/hubungistafkami.wav
Normal file
Binary file not shown.
BIN
voices/kesalahan_server.wav
Normal file
BIN
voices/kesalahan_server.wav
Normal file
Binary file not shown.
BIN
voices/pengambilan_berhasil.wav
Normal file
BIN
voices/pengambilan_berhasil.wav
Normal file
Binary file not shown.
BIN
voices/pengambilan_berhasil_tunggu_lobby.wav
Normal file
BIN
voices/pengambilan_berhasil_tunggu_lobby.wav
Normal file
Binary file not shown.
BIN
voices/pengambilan_gagal.wav
Normal file
BIN
voices/pengambilan_gagal.wav
Normal file
Binary file not shown.
BIN
voices/posisikan_wajah.wav
Normal file
BIN
voices/posisikan_wajah.wav
Normal file
Binary file not shown.
BIN
voices/satu.wav
BIN
voices/satu.wav
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user