Compare commits
45 Commits
revision15
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| 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 |
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
|
||||||
|
|||||||
81
.idea/artifacts/ErhaCam_jar.xml
generated
81
.idea/artifacts/ErhaCam_jar.xml
generated
@@ -3,50 +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/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$/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/javacpp/1.5.10/javacpp-1.5.10.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/tinylog/tinylog-impl/2.7.0/tinylog-impl-2.7.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-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/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-win.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/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/videoinput/0.200-1.5.9/videoinput-0.200-1.5.9.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-controls/21/javafx-controls-21.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/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/projectlombok/lombok/1.18.30/lombok-1.18.30.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/openjfx/javafx-graphics/21/javafx-graphics-21.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$/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/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.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-fxml/21/javafx-fxml-21-win.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$/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/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$/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/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-controls/21/javafx-controls-21-win.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/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/javacv/1.5.10/javacv-1.5.10.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/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/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/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$/com/beust/jcommander/1.82/jcommander-1.82.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-base/21/javafx-base-21.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/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/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/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/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$/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/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/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>
|
||||||
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
camera-shutter-click-01.wav
Normal file
BIN
camera-shutter-click-01.wav
Normal file
Binary file not shown.
@@ -1,9 +1,29 @@
|
|||||||
#Mon Mar 17 15:01:40 WIB 2025
|
#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
|
||||||
|
Cam1BottomCrop=20.0
|
||||||
|
Cam1LeftCrop=8.0
|
||||||
|
Cam1RightCrop=8.0
|
||||||
|
Cam1TopCrop=10.0
|
||||||
|
Cam2BottomCrop=20.0
|
||||||
|
Cam2LeftCrop=8.0
|
||||||
|
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=
|
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}
|
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}
|
CameraConfigLeft45={"Brightness"\:0.0,"Contrast"\:0.0,"Saturation"\:0.0,"Hue"\:0.0,"Gain"\:1.0,"Exposure"\:1.0,"Sharpness"\:0.0,"Gamma"\:0.0,"AutoExposure"\:true,"AutoFocus"\:true,"AutoWhiteBalance"\:true}
|
||||||
@@ -11,7 +31,7 @@ CameraConfigLeft90={"Brightness"\:0.0,"Contrast"\:0.0,"Saturation"\:0.0,"Hue"\:0
|
|||||||
CameraConfigRight45={"Brightness"\:0.0,"Contrast"\:0.0,"Saturation"\:0.0,"Hue"\:0.0,"Gain"\:1.0,"Exposure"\:1.0,"Sharpness"\:0.0,"Gamma"\:0.0,"AutoExposure"\:true,"AutoFocus"\:true,"AutoWhiteBalance"\:true}
|
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}
|
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=
|
||||||
CameraLeft90=ACER QHD User Facing
|
CameraLeft90=OBSBOT Meet 2 StreamCamera
|
||||||
CameraRight45=
|
CameraRight45=
|
||||||
CameraRight90=
|
CameraRight90=
|
||||||
FTPHost=192.168.10.2
|
FTPHost=192.168.10.2
|
||||||
@@ -19,8 +39,12 @@ FTPPass=password
|
|||||||
FTPPath=/
|
FTPPath=/
|
||||||
FTPPort=21
|
FTPPort=21
|
||||||
FTPUser=user
|
FTPUser=user
|
||||||
PhotoDirectory=C\:\\Users\\rdkar\\OneDrive\\Desktop\\Erha Capture
|
FlipCamera=false
|
||||||
cascadeMaxSize=500
|
MirrorCamera=false
|
||||||
|
PhotoDirectory=D\:\\Capture
|
||||||
|
Production=false
|
||||||
|
SharpnessThreshold=850.0
|
||||||
|
cascadeMaxSize=360
|
||||||
cascadeMinNeighbors=3
|
cascadeMinNeighbors=3
|
||||||
cascadeMinSize=250
|
cascadeMinSize=250
|
||||||
cascadeScaleFactor=1.1
|
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.
24350
haarcascade_frontalface_alt.xml
Normal file
24350
haarcascade_frontalface_alt.xml
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
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.
@@ -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.
BIN
pengambilan_berhasil_tunggu_lobby.wav
Normal file
BIN
pengambilan_berhasil_tunggu_lobby.wav
Normal file
Binary file not shown.
@@ -3,6 +3,10 @@ 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 {
|
||||||
@@ -13,11 +17,7 @@ public class AudioPlayer {
|
|||||||
|
|
||||||
public void WaitUntilFinished(){
|
public void WaitUntilFinished(){
|
||||||
while(currentFileHandle!=0){
|
while(currentFileHandle!=0){
|
||||||
try {
|
Wait(10);
|
||||||
Thread.sleep(100);
|
|
||||||
} catch (InterruptedException ignored) {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -102,16 +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 && filename!=null && !filename.isEmpty()){
|
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)){
|
||||||
currentFile = filename;
|
currentFile = filename;
|
||||||
currentFileHandle = filehandle;
|
currentFileHandle = filehandle;
|
||||||
new Thread(()->{
|
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){
|
||||||
@@ -124,23 +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);
|
||||||
currentFile = "";
|
currentFile = "";
|
||||||
currentFileHandle = 0;
|
currentFileHandle = 0;
|
||||||
}).start();
|
});
|
||||||
return true;
|
pl.setName("PlaybackStatus Monitor Thread");
|
||||||
} else Logger.error("AudioPlayer PlayFile failed, BASS_ChannelStart failed, error code: "+bass.BASS_ErrorGetCode());
|
pl.setDaemon(true);
|
||||||
} else Logger.error("AudioPlayer PlayFile failed, BASS_StreamCreateFile failed, error code: "+bass.BASS_ErrorGetCode());
|
pl.start();
|
||||||
} else Logger.info("AudioPlayer PlayFile failed, AudioPlayer is not initialized");
|
|
||||||
return false;
|
} 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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,11 +4,10 @@ public interface LiveCamEvent {
|
|||||||
void onDetectedQRCode(String qrCode);
|
void onDetectedQRCode(String qrCode);
|
||||||
void onFrontalFaceDetector(boolean hasface, int width, int height);
|
void onFrontalFaceDetector(boolean hasface, int width, int height);
|
||||||
void onProfileFaceDetector(boolean hasface, int width, int height);
|
void onProfileFaceDetector(boolean hasface, int width, int height);
|
||||||
void onEyeDetector(boolean hasEye, int width, int height);
|
void onEyeDetector(boolean hasEye);
|
||||||
void onLeftEarDetector(boolean hasLeftEar, int width, int height);
|
|
||||||
void onRightEarDetector(boolean hasRightEar, int width, int height);
|
|
||||||
void onLeftEyeDetector(boolean hasLeftEye, int width, int height);
|
|
||||||
void onRightEyeDetector(boolean hasRightEye, int width, int height);
|
|
||||||
void onLog(String log);
|
void onLog(String log);
|
||||||
void onBlink(int counter);
|
void onBlink(int counter);
|
||||||
|
void onDoubleBlink(int counter);
|
||||||
|
void onStartCapturing();
|
||||||
|
void onIntervalUpdate();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
package Config;
|
package Config;
|
||||||
|
|
||||||
import id.co.gtc.erhacam.Detectors;
|
import id.co.gtc.erhacam.MainApplication;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import org.tinylog.Logger;
|
import org.tinylog.Logger;
|
||||||
|
|
||||||
@@ -45,6 +45,37 @@ public class ConfigFile {
|
|||||||
private @Getter int cascadeMinSize;
|
private @Getter int cascadeMinSize;
|
||||||
private @Getter int cascadeMaxSize;
|
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(){
|
||||||
@@ -53,6 +84,216 @@ 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){
|
public void setCascadeScaleFactor(double value){
|
||||||
if (cascadeScaleFactor != value){
|
if (cascadeScaleFactor != value){
|
||||||
cascadeScaleFactor = value;
|
cascadeScaleFactor = value;
|
||||||
@@ -554,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;
|
||||||
@@ -566,6 +812,28 @@ public class ConfigFile {
|
|||||||
if (prop.getProperty("cascadeMinSize") == null) allcorrect = false;
|
if (prop.getProperty("cascadeMinSize") == null) allcorrect = false;
|
||||||
if (prop.getProperty("cascadeMaxSize") == 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");
|
||||||
@@ -592,14 +860,54 @@ 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 = toDouble(prop.getProperty("cascadeScaleFactor"));
|
cascadeScaleFactor = cascadetoDouble(prop.getProperty("cascadeScaleFactor"));
|
||||||
cascadeMinNeighbors = toInt(prop.getProperty("cascadeMinNeighbors"));
|
cascadeMinNeighbors = toInt(prop.getProperty("cascadeMinNeighbors"));
|
||||||
cascadeMinSize = toInt(prop.getProperty("cascadeMinSize"));
|
cascadeMinSize = toInt(prop.getProperty("cascadeMinSize"));
|
||||||
cascadeMaxSize = toInt(prop.getProperty("cascadeMaxSize"));
|
cascadeMaxSize = toInt(prop.getProperty("cascadeMaxSize"));
|
||||||
|
|
||||||
Detectors.setFaceMaxSize(cascadeMaxSize);
|
if (MainApplication.detectorsList!=null){
|
||||||
Detectors.setFaceMinSize(cascadeMinSize);
|
MainApplication.detectorsList.forEach((i, d) -> {
|
||||||
Detectors.setScaleFactor(cascadeScaleFactor);
|
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();
|
MakeDirectories();
|
||||||
@@ -616,7 +924,7 @@ public class ConfigFile {
|
|||||||
CreateDefault();
|
CreateDefault();
|
||||||
}
|
}
|
||||||
|
|
||||||
private double toDouble(String cascadeScaleFactor) {
|
private double cascadetoDouble(String cascadeScaleFactor) {
|
||||||
try{
|
try{
|
||||||
return Double.parseDouble(cascadeScaleFactor);
|
return Double.parseDouble(cascadeScaleFactor);
|
||||||
} catch (Exception e){
|
} catch (Exception e){
|
||||||
@@ -624,6 +932,14 @@ public class ConfigFile {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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();
|
||||||
@@ -640,19 +956,56 @@ 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.1;
|
cascadeScaleFactor = 1.05;
|
||||||
cascadeMinNeighbors = 3;
|
cascadeMinNeighbors = 3;
|
||||||
cascadeMinSize = 250;
|
cascadeMinSize = 250;
|
||||||
cascadeMaxSize = 500;
|
cascadeMaxSize = 360;
|
||||||
Detectors.setFaceMaxSize(cascadeMaxSize);
|
if (MainApplication.detectorsList!= null) MainApplication.detectorsList.forEach((i, d) -> {
|
||||||
Detectors.setFaceMinSize(cascadeMinSize);
|
if (d != null) {
|
||||||
Detectors.setScaleFactor(cascadeScaleFactor);
|
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();
|
||||||
@@ -709,6 +1062,33 @@ public class ConfigFile {
|
|||||||
prop.setProperty("cascadeMinSize", String.valueOf(cascadeMinSize));
|
prop.setProperty("cascadeMinSize", String.valueOf(cascadeMinSize));
|
||||||
prop.setProperty("cascadeMaxSize", String.valueOf(cascadeMaxSize));
|
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");
|
||||||
|
|||||||
@@ -3,9 +3,18 @@ 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.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 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_core;
|
||||||
@@ -18,17 +27,24 @@ 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;
|
import static org.bytedeco.opencv.global.opencv_core.CV_64F;
|
||||||
|
|
||||||
@@ -96,6 +112,7 @@ 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;
|
||||||
@@ -133,6 +150,19 @@ public class SomeCodes {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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
|
||||||
@@ -154,6 +184,7 @@ public class SomeCodes {
|
|||||||
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);
|
||||||
|
resized.release();
|
||||||
return thumbfile;
|
return thumbfile;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -171,6 +202,74 @@ 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
|
* Extract resource file to current directory
|
||||||
* @param filename resource file name
|
* @param filename resource file name
|
||||||
@@ -229,6 +328,10 @@ public class SomeCodes {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean toBoolean(String x){
|
||||||
|
return x!=null && x.equalsIgnoreCase("true");
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check if string is valid IPV4 address
|
* Check if string is valid IPV4 address
|
||||||
* @param ipaddress IPV4 address
|
* @param ipaddress IPV4 address
|
||||||
@@ -406,7 +509,7 @@ public class SomeCodes {
|
|||||||
*/
|
*/
|
||||||
public static boolean ValidString(String x){
|
public static boolean ValidString(String x){
|
||||||
if (x!=null){
|
if (x!=null){
|
||||||
return !x.isEmpty();
|
return !x.isBlank();
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -483,7 +586,7 @@ public class SomeCodes {
|
|||||||
* @return true if valid, false if not valid
|
* @return true if valid, false if not valid
|
||||||
*/
|
*/
|
||||||
public static boolean ValidMedicalRecordId(String patientid){
|
public static boolean ValidMedicalRecordId(String patientid){
|
||||||
if (patientid!=null && !patientid.isEmpty()){
|
if (patientid!=null && !patientid.isBlank()){
|
||||||
boolean valid = true;
|
boolean valid = true;
|
||||||
for(int i=0; i<patientid.length(); i++){
|
for(int i=0; i<patientid.length(); i++){
|
||||||
if (!Character.isDigit(patientid.charAt(i))){
|
if (!Character.isDigit(patientid.charAt(i))){
|
||||||
@@ -505,9 +608,7 @@ public class SomeCodes {
|
|||||||
if (ROI.x()>=0){
|
if (ROI.x()>=0){
|
||||||
if (ROI.y()>=0){
|
if (ROI.y()>=0){
|
||||||
if (ROI.width()>0){
|
if (ROI.width()>0){
|
||||||
if (ROI.height()>0){
|
return ROI.height() > 0;
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -516,7 +617,7 @@ public class SomeCodes {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void Print(String... x){
|
public static void Print(String... x){
|
||||||
if (x!=null && x.length>0){
|
if (x != null){
|
||||||
for(String xx : x){
|
for(String xx : x){
|
||||||
System.out.println(xx);
|
System.out.println(xx);
|
||||||
}
|
}
|
||||||
@@ -544,7 +645,7 @@ public class SomeCodes {
|
|||||||
* Check if Region of Interest 1 is same with Region of Interest 2
|
* Check if Region of Interest 1 is same with Region of Interest 2
|
||||||
* @param ROI1 Region of Interest 1
|
* @param ROI1 Region of Interest 1
|
||||||
* @param ROI2 Region of Interest 2
|
* @param ROI2 Region of Interest 2
|
||||||
* @return true if same, false if not same
|
* @return true if same, false if different
|
||||||
*/
|
*/
|
||||||
public static boolean IsSameROI(Rect ROI1, Rect ROI2){
|
public static boolean IsSameROI(Rect ROI1, Rect ROI2){
|
||||||
if (ValidROI(ROI1) && ValidROI(ROI2)){
|
if (ValidROI(ROI1) && ValidROI(ROI2)){
|
||||||
@@ -597,6 +698,77 @@ public class SomeCodes {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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){
|
public static void ShowAlert(Alert.AlertType type, String title, String header, String content){
|
||||||
Alert alert = new Alert(type);
|
Alert alert = new Alert(type);
|
||||||
alert.setTitle(title);
|
alert.setTitle(title);
|
||||||
@@ -608,7 +780,7 @@ public class SomeCodes {
|
|||||||
public static double CalculateSharpness(String filename){
|
public static double CalculateSharpness(String filename){
|
||||||
if (ValidFile(filename)){
|
if (ValidFile(filename)){
|
||||||
try(Mat mat = opencv_imgcodecs.imread(filename)){
|
try(Mat mat = opencv_imgcodecs.imread(filename)){
|
||||||
return CalculateSharpness(new UMat(mat));
|
return CalculateSharpness(mat);
|
||||||
} catch (Exception e){
|
} catch (Exception e){
|
||||||
Logger.error("Error calculating sharpness: "+filename+", Msg : "+e.getMessage());
|
Logger.error("Error calculating sharpness: "+filename+", Msg : "+e.getMessage());
|
||||||
}
|
}
|
||||||
@@ -620,35 +792,119 @@ public class SomeCodes {
|
|||||||
if (values!=null && values.length>0){
|
if (values!=null && values.length>0){
|
||||||
double lowest = values[0];
|
double lowest = values[0];
|
||||||
for(double x : values){
|
for(double x : values){
|
||||||
|
if (x>=0){
|
||||||
if (x<lowest){
|
if (x<lowest){
|
||||||
lowest = x;
|
lowest = x;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
return lowest;
|
return lowest;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static double CalculateSharpness(UMat mat){
|
public static boolean ValidDouble(String x){
|
||||||
if (mat!=null && !mat.empty()){
|
try{
|
||||||
UMat gray = new UMat();
|
double xx = Double.parseDouble(x);
|
||||||
opencv_imgproc.cvtColor(mat, gray, opencv_imgproc.COLOR_BGR2GRAY);
|
return true;
|
||||||
UMat laplacian = new UMat();
|
} 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_imgproc.Laplacian(gray, laplacian, CV_64F);
|
|
||||||
UMat mean = new UMat(1,1, CV_64F);
|
|
||||||
UMat stddev = new UMat(1,1, CV_64F);
|
|
||||||
opencv_core.meanStdDev(laplacian, mean, stddev);
|
opencv_core.meanStdDev(laplacian, mean, stddev);
|
||||||
|
|
||||||
Mat _std = new Mat();
|
Mat _std = new Mat();
|
||||||
stddev.copyTo(_std);
|
stddev.copyTo(_std);
|
||||||
|
|
||||||
return _std.ptr(0).getDouble() * _std.ptr(0).getDouble();
|
double value = _std.createIndexer().getDouble(0,0);
|
||||||
|
_std.release();
|
||||||
|
laplacian.release();
|
||||||
|
return Math.pow(value,2);
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean IsBlurred(UMat mat, double threshold){
|
public static boolean IsBlurred(Mat mat, double threshold){
|
||||||
return CalculateSharpness(mat)<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
|
||||||
|
|||||||
@@ -40,13 +40,32 @@ public class Sqlite {
|
|||||||
*/
|
*/
|
||||||
public void Insert(PhotoReviewClass pr){
|
public void Insert(PhotoReviewClass pr){
|
||||||
if (pr!=null){
|
if (pr!=null){
|
||||||
// System.out.println("Inserting PhotoReviewClass");
|
|
||||||
// System.out.println(pr);
|
|
||||||
Insert(pr.getPrefix(), pr.getFileLeft90(), pr.getFileLeft45(), pr.getFileCenter(), pr.getFileRight45(), pr.getFileRight90(), pr.getThumbLeft90(), pr.getThumbLeft45(), pr.getThumbCenter(), pr.getThumbRight45(), pr.getThumbRight90());
|
Insert(pr.getPrefix(), pr.getFileLeft90(), pr.getFileLeft45(), pr.getFileCenter(), pr.getFileRight45(), pr.getFileRight90(), pr.getThumbLeft90(), pr.getThumbLeft45(), pr.getThumbCenter(), pr.getThumbRight45(), pr.getThumbRight90());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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
|
||||||
@@ -108,14 +127,6 @@ public class Sqlite {
|
|||||||
try{
|
try{
|
||||||
Connection conn = GetConnection();
|
Connection conn = GetConnection();
|
||||||
if (conn != null){
|
if (conn != null){
|
||||||
// System.out.println("Inserting data");
|
|
||||||
// System.out.println("prefix: "+prefix);
|
|
||||||
// System.out.println("fileLeft90: "+fileLeft90);
|
|
||||||
// System.out.println("fileLeft45: "+fileLeft45);
|
|
||||||
// System.out.println("fileCenter: "+fileCenter);
|
|
||||||
// System.out.println("fileRight45: "+fileRight45);
|
|
||||||
// System.out.println("fileRight90: "+fileRight90);
|
|
||||||
|
|
||||||
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;
|
||||||
|
}
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
package ErhaAPI;
|
package ErhaAPI;
|
||||||
|
|
||||||
|
|
||||||
public class BarcodeResullt {
|
public class BarcodeResult {
|
||||||
public int currentPage;
|
public int currentPage;
|
||||||
public int limit;
|
public int limit;
|
||||||
public int totalPages;
|
public int totalPages;
|
||||||
@@ -3,15 +3,19 @@ package ErhaAPI;
|
|||||||
import Config.SomeCodes;
|
import Config.SomeCodes;
|
||||||
import com.google.gson.Gson;
|
import com.google.gson.Gson;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
import lombok.NonNull;
|
||||||
import org.tinylog.Logger;
|
import org.tinylog.Logger;
|
||||||
|
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.net.ConnectException;
|
||||||
import java.net.URI;
|
import java.net.URI;
|
||||||
|
import java.net.UnknownHostException;
|
||||||
import java.net.http.HttpClient;
|
import java.net.http.HttpClient;
|
||||||
import java.net.http.HttpRequest;
|
import java.net.http.HttpRequest;
|
||||||
import java.net.http.HttpResponse;
|
import java.net.http.HttpResponse;
|
||||||
|
import java.net.http.HttpTimeoutException;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.util.Base64;
|
import java.util.Base64;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
@@ -26,7 +30,7 @@ public class ErhaAPI {
|
|||||||
|
|
||||||
|
|
||||||
private String auth;
|
private String auth;
|
||||||
private final String API_URL;
|
private String API_URL="";
|
||||||
|
|
||||||
private final Gson gson = new Gson();
|
private final Gson gson = new Gson();
|
||||||
|
|
||||||
@@ -35,11 +39,25 @@ public class ErhaAPI {
|
|||||||
* @param isProduction if true will use Production URL, if false will use Staging URL
|
* @param isProduction if true will use Production URL, if false will use Staging URL
|
||||||
*/
|
*/
|
||||||
public ErhaAPI(boolean isProduction){
|
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_PROD = "https://connect-api.aryanoble.co.id/api";
|
||||||
final String API_URL_STAGING = "https://connect-api-staging.aryanoble.web.id/api";
|
final String API_URL_STAGING = "https://connect-api-staging.aryanoble.web.id/api";
|
||||||
API_URL = isProduction ? API_URL_PROD : API_URL_STAGING;
|
if (isProduction){
|
||||||
|
if (!API_URL.equals(API_URL_PROD)){
|
||||||
|
API_URL = API_URL_PROD;
|
||||||
update_auth();
|
update_auth();
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
if (!API_URL.equals(API_URL_STAGING)){
|
||||||
|
API_URL = API_URL_STAGING;
|
||||||
|
update_auth();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set API Username
|
* Set API Username
|
||||||
* @param API_USERNAME API Username
|
* @param API_USERNAME API Username
|
||||||
@@ -68,14 +86,16 @@ public class ErhaAPI {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Validate Barcode data
|
* Validate Barcode data
|
||||||
* @param Barcode Barcode to verify
|
* @param Barcode Barcode to verify
|
||||||
* @return BarcodeResullt object if success, or null if failed
|
* @return BarcodeHttpResult object
|
||||||
*/
|
*/
|
||||||
public BarcodeResullt Validate_Barcode(String Barcode, boolean printdebug){
|
public @NonNull BarcodeHttpResult Validate_Barcode(String Barcode, boolean printdebug){
|
||||||
|
BarcodeHttpResult bhr = new BarcodeHttpResult();
|
||||||
if (ValidBarCode(Barcode)){
|
if (ValidBarCode(Barcode)){
|
||||||
|
System.out.println("Checking Barcode : " + Barcode +" on "+(config.isProduction()?"Production":"Staging")+" API " );
|
||||||
try (HttpClient client = HttpClient.newHttpClient()) {
|
try (HttpClient client = HttpClient.newHttpClient()) {
|
||||||
int medical_record_detail_id = toInt(Barcode);
|
int medical_record_detail_id = toInt(Barcode);
|
||||||
HttpRequest request = HttpRequest.newBuilder()
|
HttpRequest request = HttpRequest.newBuilder()
|
||||||
@@ -84,6 +104,11 @@ public class ErhaAPI {
|
|||||||
.GET()
|
.GET()
|
||||||
.build();
|
.build();
|
||||||
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
|
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
|
||||||
|
|
||||||
|
|
||||||
|
bhr.setStatusCode(response.statusCode());
|
||||||
|
bhr.setBody(response.body());
|
||||||
|
|
||||||
if (response.statusCode()==200){
|
if (response.statusCode()==200){
|
||||||
String body = response.body();
|
String body = response.body();
|
||||||
if (printdebug){
|
if (printdebug){
|
||||||
@@ -91,22 +116,36 @@ public class ErhaAPI {
|
|||||||
System.out.println("Validate_Barcode HTTP body : ");
|
System.out.println("Validate_Barcode HTTP body : ");
|
||||||
System.out.println(body);
|
System.out.println(body);
|
||||||
}
|
}
|
||||||
return gson.fromJson(body, BarcodeResullt.class);
|
BarcodeResult brr = gson.fromJson(body, BarcodeResult.class);
|
||||||
|
bhr.setResult(brr);
|
||||||
} else {
|
} else {
|
||||||
Logger.error("Validate_Barcode failed, status code : " , response.statusCode());
|
Logger.error("Validate_Barcode failed, status code : " , response.statusCode());
|
||||||
System.out.println("Validate Barcode status code : " + response.statusCode());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch (IOException e) {
|
} catch (UnknownHostException e) {
|
||||||
System.out.println("Validate_Barcode IO Exception, Msg : " + e.getMessage());
|
// no internet or no DNS
|
||||||
Logger.error("Validate_Barcode IO Exception, Msg : " , e.getMessage());
|
Logger.error("Validate_Barcode UnknownHostException, Msg : " , e.getMessage());
|
||||||
} catch (InterruptedException e) {
|
bhr.setStatusCode(0);
|
||||||
System.out.println("Validate_Barcode Interrupted Exception, Msg : " + e.getMessage());
|
bhr.setBody("No internet connection or DNS error");
|
||||||
Logger.error("Validate_Barcode Interrupted Exception, Msg : " , e.getMessage());
|
} 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 null;
|
return bhr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -116,9 +155,10 @@ public class ErhaAPI {
|
|||||||
* Upload File
|
* Upload File
|
||||||
* @param patientID Patient ID
|
* @param patientID Patient ID
|
||||||
* @param filename File to upload
|
* @param filename File to upload
|
||||||
* @return null if failed, or response body if success
|
* @return UploadHttpResult object
|
||||||
*/
|
*/
|
||||||
public UploadResult Upload_File(String patientID, String filename, boolean printdebug) {
|
public @NonNull UploadHttpResult Upload_File(String patientID, String filename, boolean printdebug) {
|
||||||
|
UploadHttpResult uhr = new UploadHttpResult();
|
||||||
if (ValidMedicalRecordId(patientID)){
|
if (ValidMedicalRecordId(patientID)){
|
||||||
int medical_record_detail_id = toInt(patientID);
|
int medical_record_detail_id = toInt(patientID);
|
||||||
if (ValidFile(filename)){
|
if (ValidFile(filename)){
|
||||||
@@ -151,7 +191,7 @@ public class ErhaAPI {
|
|||||||
endBoundary.getBytes()
|
endBoundary.getBytes()
|
||||||
);
|
);
|
||||||
|
|
||||||
|
System.out.println("Uploading file : " + filename + " to " + (config.isProduction()?"Production":"Staging")+" API ");
|
||||||
HttpRequest request = HttpRequest.newBuilder()
|
HttpRequest request = HttpRequest.newBuilder()
|
||||||
.uri(new URI(API_URL + "/photobooth/photobooth"))
|
.uri(new URI(API_URL + "/photobooth/photobooth"))
|
||||||
.header("Authorization", "Basic " + auth)
|
.header("Authorization", "Basic " + auth)
|
||||||
@@ -162,6 +202,8 @@ public class ErhaAPI {
|
|||||||
// Send request
|
// Send request
|
||||||
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
|
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
|
||||||
|
|
||||||
|
uhr.setStatusCode(response.statusCode());
|
||||||
|
uhr.setBody(response.body());
|
||||||
if (printdebug){
|
if (printdebug){
|
||||||
System.out.println("Upload_File status code : " + response.statusCode());
|
System.out.println("Upload_File status code : " + response.statusCode());
|
||||||
System.out.println("Upload_File HTTP body : ");
|
System.out.println("Upload_File HTTP body : ");
|
||||||
@@ -170,21 +212,20 @@ public class ErhaAPI {
|
|||||||
|
|
||||||
|
|
||||||
if (response.statusCode()==200){
|
if (response.statusCode()==200){
|
||||||
return gson.fromJson(response.body(), UploadResult.class);
|
UploadResult ur = gson.fromJson(response.body(), UploadResult.class);
|
||||||
|
uhr.setResult(ur);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
System.out.println("Upload_File status code : " + response.statusCode());
|
|
||||||
Logger.error("Upload_File file ",filename," failed, status code : " , response.statusCode());
|
Logger.error("Upload_File file ",filename," failed, status code : " , response.statusCode());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
} catch (Exception e){
|
} catch (Exception e){
|
||||||
System.out.println("Upload_File Exception, Msg : " + e.getMessage());
|
|
||||||
Logger.error("Upload_File file ",filename," failed, Exception, Msg : " , e.getMessage());
|
Logger.error("Upload_File file ",filename," failed, Exception, Msg : " , e.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return null;
|
return uhr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
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;
|
||||||
|
}
|
||||||
@@ -3,10 +3,8 @@ package SecureDongle;
|
|||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
import org.tinylog.Logger;
|
import org.tinylog.Logger;
|
||||||
|
|
||||||
import java.util.function.Consumer;
|
|
||||||
|
|
||||||
import static Config.SomeCodes.ToShort;
|
import static Config.SomeCodes.ToShort;
|
||||||
|
import static Config.SomeCodes.Wait;
|
||||||
|
|
||||||
public class SecureDongle {
|
public class SecureDongle {
|
||||||
|
|
||||||
@@ -78,7 +76,6 @@ public class SecureDongle {
|
|||||||
|
|
||||||
if (result== LibSecureDongle.ERR_SUCCESS){
|
if (result== LibSecureDongle.ERR_SUCCESS){
|
||||||
HardwareID = lp1[0];
|
HardwareID = lp1[0];
|
||||||
//System.out.println("SecureDongle found with HardwareID="+HardwareID);
|
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
if (event!=null) event.onDongleError("Find", result);
|
if (event!=null) event.onDongleError("Find", result);
|
||||||
@@ -108,6 +105,7 @@ public class SecureDongle {
|
|||||||
* Close SecureDongle
|
* Close SecureDongle
|
||||||
* @return true if success
|
* @return true if success
|
||||||
*/
|
*/
|
||||||
|
@SuppressWarnings("UnusedReturnValue")
|
||||||
public boolean Close(){
|
public boolean Close(){
|
||||||
handle[0] = Handle;
|
handle[0] = Handle;
|
||||||
short result = SD.SecureDongle(LibSecureDongle.SD_CLOSE, handle, lp1, lp2, p1, p2, p3, p4, buffer);
|
short result = SD.SecureDongle(LibSecureDongle.SD_CLOSE, handle, lp1, lp2, p1, p2, p3, p4, buffer);
|
||||||
@@ -118,31 +116,6 @@ public class SecureDongle {
|
|||||||
return false;
|
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
|
|
||||||
*/
|
|
||||||
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){
|
|
||||||
//System.out.println("SecureDongle HardwareID="+HardwareID+" read success ");
|
|
||||||
byte[] data = new byte[Length];
|
|
||||||
System.arraycopy(buffer, 0, data, 0, Length);
|
|
||||||
return data;
|
|
||||||
} else if (event!=null) event.onDongleError("Read", result);
|
|
||||||
} //else System.out.println("SecureDongle not opened");
|
|
||||||
|
|
||||||
return new byte[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Write to User Data Zone (UDZ)
|
* Write to User Data Zone (UDZ)
|
||||||
* @param StartAddress start address of UDZ, zero based
|
* @param StartAddress start address of UDZ, zero based
|
||||||
@@ -150,6 +123,7 @@ public class SecureDongle {
|
|||||||
* @param data data to write
|
* @param data data to write
|
||||||
* @return true if success
|
* @return true if success
|
||||||
*/
|
*/
|
||||||
|
@SuppressWarnings("unused")
|
||||||
public boolean Write(short StartAddress, short length, byte[] data){
|
public boolean Write(short StartAddress, short length, byte[] data){
|
||||||
if (Opened){
|
if (Opened){
|
||||||
handle[0] = Handle;
|
handle[0] = Handle;
|
||||||
@@ -160,32 +134,57 @@ public class SecureDongle {
|
|||||||
System.arraycopy(data, 0, buffer, 0, length);
|
System.arraycopy(data, 0, buffer, 0, length);
|
||||||
short result = SD.SecureDongle(LibSecureDongle.SD_WRITE, handle, lp1, lp2, p1, p2, p3, p4, buffer);
|
short result = SD.SecureDongle(LibSecureDongle.SD_WRITE, handle, lp1, lp2, p1, p2, p3, p4, buffer);
|
||||||
if (result== LibSecureDongle.ERR_SUCCESS){
|
if (result== LibSecureDongle.ERR_SUCCESS){
|
||||||
//System.out.println("SecureDongle HardwareID="+HardwareID+" write success ");
|
|
||||||
return true;
|
return true;
|
||||||
} else if (event!=null) event.onDongleError("Write", result);
|
} else if (event!=null) event.onDongleError("Write", result);
|
||||||
} //else System.out.println("SecureDongle not opened");
|
}
|
||||||
|
|
||||||
return false;
|
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
|
* Generate Random Number
|
||||||
* @return short array of random number
|
* @return short array of random number
|
||||||
*/
|
*/
|
||||||
|
@SuppressWarnings("unused")
|
||||||
public short[] GenerateRandomNumber(){
|
public short[] GenerateRandomNumber(){
|
||||||
short[] random = new short[4];
|
short[] random = new short[4];
|
||||||
if (Opened){
|
if (Opened){
|
||||||
handle[0] = Handle;
|
handle[0] = Handle;
|
||||||
short result = SD.SecureDongle(LibSecureDongle.SD_RANDOM, handle, lp1, lp2, p1, p2, p3, p4, buffer);
|
short result = SD.SecureDongle(LibSecureDongle.SD_RANDOM, handle, lp1, lp2, p1, p2, p3, p4, buffer);
|
||||||
if (result== LibSecureDongle.ERR_SUCCESS){
|
if (result== LibSecureDongle.ERR_SUCCESS){
|
||||||
//System.out.println("SecureDongle HardwareID="+HardwareID+" generate random success ");
|
|
||||||
random[0] = p1[0];
|
random[0] = p1[0];
|
||||||
random[1] = p2[0];
|
random[1] = p2[0];
|
||||||
random[2] = p3[0];
|
random[2] = p3[0];
|
||||||
random[3] = p4[0];
|
random[3] = p4[0];
|
||||||
return random;
|
return random;
|
||||||
} else if (event!=null) event.onDongleError("GenerateRandomNumber", result);
|
} else if (event!=null) event.onDongleError("GenerateRandomNumber", result);
|
||||||
} //else System.out.println("SecureDongle not opened");
|
}
|
||||||
|
|
||||||
return random;
|
return random;
|
||||||
}
|
}
|
||||||
@@ -195,17 +194,17 @@ public class SecureDongle {
|
|||||||
* @param UserID UserID to write
|
* @param UserID UserID to write
|
||||||
* @return true if success
|
* @return true if success
|
||||||
*/
|
*/
|
||||||
|
@SuppressWarnings("unused")
|
||||||
public boolean WriteUserID(int UserID){
|
public boolean WriteUserID(int UserID){
|
||||||
if (Opened){
|
if (Opened){
|
||||||
handle[0] = Handle;
|
handle[0] = Handle;
|
||||||
lp1[0] = UserID;
|
lp1[0] = UserID;
|
||||||
short result = SD.SecureDongle(LibSecureDongle.SD_WRITE_USERID, handle, lp1, lp2, p1, p2, p3, p4, buffer);
|
short result = SD.SecureDongle(LibSecureDongle.SD_WRITE_USERID, handle, lp1, lp2, p1, p2, p3, p4, buffer);
|
||||||
if (result== LibSecureDongle.ERR_SUCCESS){
|
if (result== LibSecureDongle.ERR_SUCCESS){
|
||||||
//System.out.println("SecureDongle HardwareID="+HardwareID+" set UserID success ");
|
|
||||||
this.UserID = UserID;
|
this.UserID = UserID;
|
||||||
return true;
|
return true;
|
||||||
} else if (event!=null) event.onDongleError("WriteUserID", result);
|
} else if (event!=null) event.onDongleError("WriteUserID", result);
|
||||||
} //else System.out.println("SecureDongle not opened");
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -220,10 +219,9 @@ public class SecureDongle {
|
|||||||
short result = SD.SecureDongle(LibSecureDongle.SD_READ_USERID, handle, lp1, lp2, p1, p2, p3, p4, buffer);
|
short result = SD.SecureDongle(LibSecureDongle.SD_READ_USERID, handle, lp1, lp2, p1, p2, p3, p4, buffer);
|
||||||
if (result== LibSecureDongle.ERR_SUCCESS){
|
if (result== LibSecureDongle.ERR_SUCCESS){
|
||||||
this.UserID = lp1[0];
|
this.UserID = lp1[0];
|
||||||
//System.out.println("SecureDongle HardwareID="+HardwareID+" read UserID success, value = "+UserID);
|
|
||||||
return UserID;
|
return UserID;
|
||||||
} else if (event!=null) event.onDongleError("ReadUserID", result);
|
} else if (event!=null) event.onDongleError("ReadUserID", result);
|
||||||
} //else System.out.println("SecureDongle not opened");
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -242,7 +240,7 @@ public class SecureDongle {
|
|||||||
* if dongle missing, will raise event onDongleMissing
|
* if dongle missing, will raise event onDongleMissing
|
||||||
*/
|
*/
|
||||||
public void StartMonitor(){
|
public void StartMonitor(){
|
||||||
new Thread(()->{
|
Thread tx = new Thread(()->{
|
||||||
if (HardwareID==0) Find();
|
if (HardwareID==0) Find();
|
||||||
Open();
|
Open();
|
||||||
int firstUserID = ReadUserID();
|
int firstUserID = ReadUserID();
|
||||||
@@ -251,11 +249,7 @@ public class SecureDongle {
|
|||||||
ismonitoring = true;
|
ismonitoring = true;
|
||||||
Logger.info("Start Monitoring UserID="+Integer.toHexString(firstUserID));
|
Logger.info("Start Monitoring UserID="+Integer.toHexString(firstUserID));
|
||||||
while (ismonitoring){
|
while (ismonitoring){
|
||||||
try {
|
Wait(5000);
|
||||||
Thread.sleep(5000);
|
|
||||||
} catch (InterruptedException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
Open();
|
Open();
|
||||||
int newUserID = ReadUserID();
|
int newUserID = ReadUserID();
|
||||||
Close();
|
Close();
|
||||||
@@ -267,7 +261,10 @@ public class SecureDongle {
|
|||||||
System.out.println("Stop Monitoring");
|
System.out.println("Stop Monitoring");
|
||||||
} else System.out.println("Canceled Monitoring, UserID not found");
|
} else System.out.println("Canceled Monitoring, UserID not found");
|
||||||
|
|
||||||
}).start();
|
});
|
||||||
|
tx.setName("SecureDongle Monitor Thread");
|
||||||
|
tx.setDaemon(true);
|
||||||
|
tx.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,18 +1,30 @@
|
|||||||
package id.co.gtc.erhacam;
|
package id.co.gtc.erhacam;
|
||||||
|
|
||||||
|
import javafx.animation.KeyFrame;
|
||||||
import javafx.animation.PauseTransition;
|
import javafx.animation.PauseTransition;
|
||||||
|
import javafx.animation.Timeline;
|
||||||
import javafx.application.Platform;
|
import javafx.application.Platform;
|
||||||
|
|
||||||
|
import javafx.geometry.Insets;
|
||||||
import javafx.geometry.Pos;
|
import javafx.geometry.Pos;
|
||||||
|
import javafx.scene.Node;
|
||||||
import javafx.scene.Scene;
|
import javafx.scene.Scene;
|
||||||
import javafx.scene.control.Label;
|
import javafx.scene.control.Label;
|
||||||
import javafx.scene.layout.VBox;
|
import javafx.scene.image.Image;
|
||||||
import javafx.stage.Modality;
|
import javafx.scene.image.ImageView;
|
||||||
import javafx.stage.Screen;
|
import javafx.scene.layout.*;
|
||||||
import javafx.stage.Stage;
|
import javafx.scene.paint.Color;
|
||||||
import javafx.stage.StageStyle;
|
import javafx.scene.shape.Circle;
|
||||||
|
import javafx.stage.*;
|
||||||
import javafx.util.Duration;
|
import javafx.util.Duration;
|
||||||
|
import org.tinylog.Logger;
|
||||||
|
|
||||||
import java.util.Optional;
|
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 {
|
public class AutoCloseAlert {
|
||||||
|
|
||||||
@@ -20,22 +32,72 @@ public class AutoCloseAlert {
|
|||||||
public static String shownTitle = "";
|
public static String shownTitle = "";
|
||||||
public static String shownContent = "";
|
public static String shownContent = "";
|
||||||
public static String shownHeader = "";
|
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;
|
||||||
|
|
||||||
private static void clear(){
|
public static void init(){
|
||||||
shownTitle = "";
|
String f_01 = ExtractResource("/IU photoboth-01.jpg");
|
||||||
shownContent = "";
|
//System.out.println("Banner 01 extracted as file: "+f_01);
|
||||||
shownHeader = "";
|
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);
|
||||||
|
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 -> Cam4;
|
||||||
|
case 5 -> 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
|
* Close the current alert if it is shown
|
||||||
*/
|
*/
|
||||||
public static void close(){
|
public static void close(){
|
||||||
Optional.ofNullable(currentAlertStage).ifPresent(Stage::close);
|
if (currentAlertStage!=null){
|
||||||
|
try {
|
||||||
|
closeStage(currentAlertStage);
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
Logger.error("Error closing alert stage: " + e.getMessage());
|
||||||
|
}
|
||||||
currentAlertStage = null;
|
currentAlertStage = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
clear();
|
clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Show an alert with a title, header, content, and automatically close after a few seconds
|
* 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
|
* If called several times, the previous alert will be closed before showing a new one
|
||||||
@@ -43,11 +105,178 @@ public class AutoCloseAlert {
|
|||||||
* @param header the header of the alert
|
* @param header the header of the alert
|
||||||
* @param content the content 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 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) {
|
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(()->{
|
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 = 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 previous alert before showing a new one
|
||||||
Optional.ofNullable(currentAlertStage).ifPresent(Stage::close);
|
close();
|
||||||
|
|
||||||
Stage alertStage = new Stage();
|
Stage alertStage = new Stage();
|
||||||
alertStage.initModality(Modality.APPLICATION_MODAL);
|
alertStage.initModality(Modality.APPLICATION_MODAL);
|
||||||
@@ -55,45 +284,103 @@ public class AutoCloseAlert {
|
|||||||
alertStage.setAlwaysOnTop(true);
|
alertStage.setAlwaysOnTop(true);
|
||||||
alertStage.setResizable(false);
|
alertStage.setResizable(false);
|
||||||
|
|
||||||
double screenwidth = Screen.getPrimary().getVisualBounds().getWidth();
|
double screenwidth = Screen.getPrimary().getBounds().getWidth();
|
||||||
double width = screenwidth/4;
|
double screenheight = Screen.getPrimary().getBounds().getHeight();
|
||||||
double height = width * 9 / 16;
|
|
||||||
Label headerLabel = new Label(header);
|
|
||||||
headerLabel.setStyle("-fx-font-weight: bold; -fx-font-size: 16px;");
|
|
||||||
headerLabel.setMinHeight(height*0.25);
|
|
||||||
Label contentLabel = new Label(content);
|
|
||||||
contentLabel.setStyle("-fx-font-size: 12px;");
|
|
||||||
contentLabel.setMinHeight(height*0.75);
|
|
||||||
|
|
||||||
VBox root = new VBox(10, headerLabel, contentLabel);
|
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.setPrefSize(width, height);
|
||||||
root.setAlignment(Pos.CENTER);
|
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);
|
Scene scene = new Scene(root);
|
||||||
alertStage.setScene(scene);
|
alertStage.setScene(scene);
|
||||||
|
|
||||||
alertStage.setTitle(title);
|
alertStage.setTitle(title);
|
||||||
currentAlertStage = alertStage;
|
|
||||||
|
double x = screenwidth/2 - width/2;
|
||||||
|
double y = screenheight - height - 10;
|
||||||
|
alertStage.setX(x);
|
||||||
|
alertStage.setY(y);
|
||||||
|
|
||||||
alertStage.show();
|
alertStage.show();
|
||||||
|
currentAlertStage = alertStage;
|
||||||
|
shownHeader = ValidString(header) ? header : "";
|
||||||
|
shownContent = ValidString(content) ? content : "";
|
||||||
|
shownTitle = ValidString(title) ? title : "";
|
||||||
|
shownBanner = null;
|
||||||
|
|
||||||
shownHeader = header;
|
return alertStage;
|
||||||
shownContent = content;
|
}
|
||||||
shownTitle = title;
|
|
||||||
|
/**
|
||||||
|
* 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){
|
if (seconds>0){
|
||||||
PauseTransition delay = new PauseTransition(Duration.seconds(seconds));
|
PauseTransition delay = new PauseTransition(Duration.seconds(seconds));
|
||||||
delay.setOnFinished(e -> {
|
delay.setOnFinished(e -> {
|
||||||
alertStage.close();
|
try {
|
||||||
|
closeStage(alertStage);
|
||||||
|
} catch (InterruptedException err) {
|
||||||
|
Logger.error("Error closing alert stage: " + err.getMessage());
|
||||||
|
}
|
||||||
|
//alertStage.close();
|
||||||
if (currentAlertStage == alertStage) {
|
if (currentAlertStage == alertStage) {
|
||||||
currentAlertStage = null;
|
currentAlertStage = null;
|
||||||
}
|
}
|
||||||
|
if (onClose!=null) onClose.accept(shownTitle);
|
||||||
clear();
|
clear();
|
||||||
} );
|
} );
|
||||||
delay.play();
|
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
@@ -5,6 +5,7 @@ import lombok.Setter;
|
|||||||
import org.bytedeco.opencv.opencv_core.Rect;
|
import org.bytedeco.opencv.opencv_core.Rect;
|
||||||
import org.bytedeco.opencv.opencv_core.Scalar;
|
import org.bytedeco.opencv.opencv_core.Scalar;
|
||||||
import org.bytedeco.opencv.opencv_core.UMat;
|
import org.bytedeco.opencv.opencv_core.UMat;
|
||||||
|
import org.opencv.imgproc.Imgproc;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@@ -14,22 +15,45 @@ import static org.bytedeco.opencv.global.opencv_imgproc.rectangle;
|
|||||||
public class DetectorResult {
|
public class DetectorResult {
|
||||||
private @Setter Rect Face;
|
private @Setter Rect Face;
|
||||||
private List<Rect> Eyes;
|
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){
|
public void AddEye(Rect eye){
|
||||||
if (Eyes == null) Eyes = new java.util.ArrayList<>();
|
if (Eyes == null) Eyes = new java.util.ArrayList<>();
|
||||||
Eyes.add(eye);
|
Eyes.add(eye);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// trouble di sini
|
||||||
public void FaceRectangle(UMat mat){
|
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()){
|
if (haveFace()){
|
||||||
rectangle(mat, Face, Scalar.GREEN);
|
|
||||||
|
try{
|
||||||
|
rectangle(mat, Face, Scalar.GREEN, linethickness, linetype, lineshift);
|
||||||
|
|
||||||
|
} catch (Exception ignored){}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// trouble di sini
|
||||||
public void EyesRectangle(UMat mat){
|
public void EyesRectangle(UMat mat){
|
||||||
|
if (mat == null || mat.empty()) return;
|
||||||
|
|
||||||
if (haveEyes()){
|
if (haveEyes()){
|
||||||
|
|
||||||
for(Rect eye : Eyes){
|
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);
|
rectangle(mat, eye, Scalar.BLUE);
|
||||||
|
|
||||||
|
} catch (Exception ignored){}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -56,4 +80,5 @@ public class DetectorResult {
|
|||||||
if (!haveEyes()) return 0;
|
if (!haveEyes()) return 0;
|
||||||
return Eyes.size();
|
return Eyes.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,173 +9,100 @@ import org.tinylog.Logger;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import static Config.SomeCodes.IsInsideRect;
|
|
||||||
|
|
||||||
public class Detectors {
|
public class Detectors {
|
||||||
public static CascadeClassifier frontalfaceDetector;
|
public CascadeClassifier frontalfaceDetector;
|
||||||
private static CascadeClassifier eyeDetector;
|
private CascadeClassifier eyeDetector;
|
||||||
private static CascadeClassifier profilefaceDetector;
|
private CascadeClassifier profilefaceDetector;
|
||||||
//private static CascadeClassifier palmDetector;
|
|
||||||
//private static CascadeClassifier fistDetector;
|
|
||||||
|
|
||||||
private static double scaleFactor = 1.1;
|
private double scaleFactor = 1.05; // revisi 09/05/2025, dari nilai 1.05
|
||||||
private final static int minNeighbors = 3;
|
private final int minNeighbors = 3; // revisi 09/05/2025, dari nilai 3
|
||||||
private final static int flags = 0;
|
private final int flags = 0;
|
||||||
private static Size FaceminSize;
|
private Size FaceminSize;
|
||||||
private static Size FacemaxSize;
|
private Size FacemaxSize;
|
||||||
|
|
||||||
private static final int EyetoFaceRatio = 6;
|
|
||||||
private static Size EyeminSize;
|
|
||||||
private static Size EyemaxSize;
|
|
||||||
|
|
||||||
public static void LoadAllDetectors(){
|
|
||||||
|
|
||||||
|
public Detectors(){
|
||||||
LoadFrontalFaceDetector();
|
LoadFrontalFaceDetector();
|
||||||
LoadEyeDetector();
|
LoadEyeDetector();
|
||||||
|
|
||||||
LoadProfileFaceDetector();
|
LoadProfileFaceDetector();
|
||||||
|
|
||||||
|
|
||||||
//LoadFistDetector();
|
|
||||||
//LoadRightPalmDetector();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// private static void LoadFistDetector(){
|
private void LoadFrontalFaceDetector(){
|
||||||
// String filename = SomeCodes.ExtractResource("/fist.xml");
|
// revisi 09/05/2025, dari filename = SomeCodes.ExtractResource("/haarcascade_frontalface_default.xml");
|
||||||
// if (filename!=null) {
|
|
||||||
// Logger.info("Fist Detector file : " + filename);
|
|
||||||
// if (fistDetector ==null) {
|
|
||||||
// try{
|
|
||||||
//
|
|
||||||
// fistDetector = new CascadeClassifier(filename);
|
|
||||||
// Logger.info("FistDetector loaded");
|
|
||||||
// } catch (Exception e){
|
|
||||||
// Logger.error("Exception on loading FistDetector : " + e.getMessage());
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// } else Logger.info("FistDetector already loaded");
|
|
||||||
// } else Logger.error("Unable to extract fist detector file");
|
|
||||||
// }
|
|
||||||
|
|
||||||
// private static void LoadRightPalmDetector(){
|
|
||||||
// String filename = SomeCodes.ExtractResource("/rpalm.xml");
|
|
||||||
// if (filename!=null) {
|
|
||||||
// Logger.info("Right Palm Detector file : " + filename);
|
|
||||||
// if (palmDetector ==null) {
|
|
||||||
// try{
|
|
||||||
//
|
|
||||||
// palmDetector = new CascadeClassifier(filename);
|
|
||||||
// Logger.info("RightPalmDetector loaded");
|
|
||||||
// } catch (Exception e){
|
|
||||||
// Logger.error("Exception on loading RightPalmDetector : " + e.getMessage());
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// } else Logger.info("RightPalmDetector already loaded");
|
|
||||||
// } else Logger.error("Unable to extract right palm detector file");
|
|
||||||
// }
|
|
||||||
|
|
||||||
private static void LoadFrontalFaceDetector(){
|
|
||||||
String filename = SomeCodes.ExtractResource("/haarcascade_frontalface_alt.xml");
|
String filename = SomeCodes.ExtractResource("/haarcascade_frontalface_alt.xml");
|
||||||
if (filename!=null) {
|
if (filename!=null) {
|
||||||
Logger.info("Face Detector file : " + filename);
|
|
||||||
if (frontalfaceDetector==null) {
|
|
||||||
try{
|
try{
|
||||||
frontalfaceDetector = new CascadeClassifier(filename);
|
frontalfaceDetector = new CascadeClassifier(filename);
|
||||||
Logger.info("FaceDetector loaded");
|
|
||||||
} catch (Exception e){
|
} catch (Exception e){
|
||||||
Logger.error("Exception on loading FaceDetector : " + e.getMessage());
|
Logger.error("Exception on loading FaceDetector : " + e.getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
} else Logger.info("FaceDetector already loaded");
|
|
||||||
} else Logger.error("Unable to extract face detector file");
|
} else Logger.error("Unable to extract face detector file");
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void LoadProfileFaceDetector(){
|
private void LoadProfileFaceDetector(){
|
||||||
String filename = SomeCodes.ExtractResource("/haarcascade_profileface.xml");
|
String filename = SomeCodes.ExtractResource("/haarcascade_profileface.xml");
|
||||||
if (filename!=null) {
|
if (filename!=null) {
|
||||||
Logger.info("Profile Face Detector file : " + filename);
|
|
||||||
if (profilefaceDetector==null) {
|
|
||||||
try{
|
try{
|
||||||
profilefaceDetector = new CascadeClassifier(filename);
|
profilefaceDetector = new CascadeClassifier(filename);
|
||||||
Logger.info("ProfileFaceDetector loaded");
|
|
||||||
} catch (Exception e){
|
} catch (Exception e){
|
||||||
Logger.error("Exception on loading ProfileFaceDetector : " + e.getMessage());
|
Logger.error("Exception on loading ProfileFaceDetector : " + e.getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
} else Logger.info("ProfileFaceDetector already loaded");
|
|
||||||
} else Logger.error("Unable to extract profile face detector file");
|
} else Logger.error("Unable to extract profile face detector file");
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void LoadEyeDetector(){
|
private void LoadEyeDetector(){
|
||||||
String filename = SomeCodes.ExtractResource("/haarcascade_eye.xml");
|
String filename = SomeCodes.ExtractResource("/haarcascade_eye.xml");
|
||||||
if (filename!=null) {
|
if (filename!=null) {
|
||||||
Logger.info("Eye Detector file : " + filename);
|
|
||||||
if (eyeDetector==null) {
|
|
||||||
try{
|
try{
|
||||||
|
|
||||||
eyeDetector = new CascadeClassifier(filename);
|
eyeDetector = new CascadeClassifier(filename);
|
||||||
Logger.info("EyeDetector loaded");
|
|
||||||
} catch (Exception e){
|
} catch (Exception e){
|
||||||
Logger.error("Exception on loading EyeDetector : " + e.getMessage());
|
Logger.error("Exception on loading EyeDetector : " + e.getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
} else Logger.info("EyeDetector already loaded");
|
|
||||||
} else Logger.error("Unable to extract eye detector file");
|
} else Logger.error("Unable to extract eye detector file");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// public static boolean HavePalm(UMat graymat){
|
|
||||||
// RectVector palms = Detect(graymat, palmDetector);
|
|
||||||
// return palms!=null && palms.size()>0;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// public static boolean HaveFist(UMat graymat){
|
|
||||||
// RectVector fists = Detect(graymat, fistDetector);
|
|
||||||
// return fists!=null && fists.size()>0;
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Detect if there is a frontal face, containing 2 eyes
|
* Detect if there is a frontal face, containing 2 eyes
|
||||||
* @param graymat Mat in Gray Scale
|
* @param graymat Mat in Gray Scale
|
||||||
* @return List of Rect if face detected, otherwise empty list
|
* @return List of Rect if face detected, otherwise empty list
|
||||||
*/
|
*/
|
||||||
public static @NonNull List<DetectorResult> HaveFrontalFace(UMat graymat){
|
public @NonNull List<DetectorResult> HaveFrontalFace(Mat graymat){
|
||||||
List<DetectorResult> result = new ArrayList<>();
|
List<DetectorResult> result = new ArrayList<>();
|
||||||
|
//System.out.println("Detecting frontal from "+ graymat.size().width() + "x" + graymat.size().height());
|
||||||
RectVector faces = DetectFrontalFace(graymat);
|
RectVector faces = DetectFrontalFace(graymat);
|
||||||
if (faces!=null && faces.size()>0){
|
if (faces!=null && faces.size()>0){
|
||||||
|
//System.out.println("faces size = " + faces.size());
|
||||||
for(Rect face : faces.get()){
|
for(Rect face : faces.get()){
|
||||||
RectVector eyes = DetectEye(graymat);
|
RectVector eyes = DetectEye(graymat, face.width());
|
||||||
DetectorResult dr = new DetectorResult();
|
DetectorResult dr = new DetectorResult();
|
||||||
dr.setFace(face);
|
dr.setFace(face);
|
||||||
if (eyes!=null && eyes.size()>=2){
|
//System.out.println("eyes size = " + eyes.size());
|
||||||
|
if (eyes.size()>=2){
|
||||||
for(Rect eye : eyes.get()){
|
for(Rect eye : eyes.get()){
|
||||||
if (IsInsideRect(eye, face)) dr.AddEye(eye);
|
if (SomeCodes.IsInsideRect(eye, face)) {
|
||||||
|
dr.AddEye(eye);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
result.add(dr);
|
result.add(dr);
|
||||||
}
|
}
|
||||||
}
|
} //else System.out.println("faces size = 0");
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static @NonNull List<DetectorResult> HaveLeft45Face(UMat graymat){
|
public @NonNull List<DetectorResult> HaveLeft45Face(Mat graymat){
|
||||||
List<DetectorResult> result = new ArrayList<>();
|
List<DetectorResult> result = new ArrayList<>();
|
||||||
RectVector faces = DetectProfileFace(graymat);
|
RectVector faces = DetectProfileFace(graymat);
|
||||||
if (faces!=null && faces.size()>0){
|
if (faces!=null && faces.size()>0){
|
||||||
|
|
||||||
for(Rect face : faces.get()){
|
for(Rect face : faces.get()){
|
||||||
RectVector eyes = DetectEye(graymat);
|
RectVector eyes = DetectEye(graymat, face.width());
|
||||||
DetectorResult dr = new DetectorResult();
|
DetectorResult dr = new DetectorResult();
|
||||||
dr.setFace(face);
|
dr.setFace(face);
|
||||||
if (eyes!=null && eyes.size()>0){
|
if (eyes.size()>0){
|
||||||
for(Rect eye : eyes.get()){
|
for(Rect eye : eyes.get()){
|
||||||
if (IsInsideRect(eye, face)) dr.AddEye(eye);
|
if (SomeCodes.IsInsideRect(eye, face)) dr.AddEye(eye);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
result.add(dr);
|
result.add(dr);
|
||||||
@@ -187,124 +114,89 @@ public class Detectors {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
public static void setScaleFactor(double value){
|
public void setScaleFactor(double value){
|
||||||
if (scaleFactor!=value) scaleFactor = value;
|
if (scaleFactor!=value) scaleFactor = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setFaceMinSize(int value){
|
public void setFaceMinSize(int value){
|
||||||
if (FaceminSize!=null){
|
if (FaceminSize!=null){
|
||||||
if (FaceminSize.width()!=value || FaceminSize.height()!=value) {
|
if (FaceminSize.width()!=value || FaceminSize.height()!=value) {
|
||||||
FaceminSize = new Size(value, value);
|
FaceminSize = new Size(value, value);
|
||||||
EyeminSize = new Size(value/EyetoFaceRatio, value/EyetoFaceRatio);
|
|
||||||
Logger.info("FaceMinSize changed to : " + FaceminSize.width());
|
Logger.info("FaceMinSize changed to : " + FaceminSize.width());
|
||||||
Logger.info("EyeMinSize changed to : " + EyeminSize.width());
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
FaceminSize = new Size(value, value);
|
FaceminSize = new Size(value, value);
|
||||||
EyeminSize = new Size(value/EyetoFaceRatio, value/EyetoFaceRatio);
|
|
||||||
Logger.info("FaceMinSize created with value : " + FaceminSize.width());
|
Logger.info("FaceMinSize created with value : " + FaceminSize.width());
|
||||||
Logger.info("EyeMinSize created with value : " + EyeminSize.width());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setFaceMaxSize(int value){
|
public void setFaceMaxSize(int value){
|
||||||
if (FacemaxSize!=null){
|
if (FacemaxSize!=null){
|
||||||
if (FacemaxSize.width()!=value || FacemaxSize.height()!=value) {
|
if (FacemaxSize.width()!=value || FacemaxSize.height()!=value) {
|
||||||
FacemaxSize = new Size(value, value);
|
FacemaxSize = new Size(value, value);
|
||||||
EyemaxSize = new Size(value/EyetoFaceRatio, value/EyetoFaceRatio);
|
|
||||||
Logger.info("FaceMaxSize changed to : " + FacemaxSize.width());
|
Logger.info("FaceMaxSize changed to : " + FacemaxSize.width());
|
||||||
Logger.info("EyeMaxSize changed to : " + EyemaxSize.width());
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
FacemaxSize = new Size(value, value);
|
FacemaxSize = new Size(value, value);
|
||||||
EyemaxSize = new Size(value/EyetoFaceRatio, value/EyetoFaceRatio);
|
|
||||||
Logger.info("FaceMaxSize created with value : " + FacemaxSize.width());
|
Logger.info("FaceMaxSize created with value : " + FacemaxSize.width());
|
||||||
Logger.info("EyeMaxSize created with value : " + EyemaxSize.width());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static RectVector DetectProfileFace(UMat graymat){
|
public RectVector DetectProfileFace(Mat graymat){
|
||||||
return Detect(graymat, profilefaceDetector, scaleFactor, minNeighbors, flags, FaceminSize, FacemaxSize);
|
return Detect(graymat, profilefaceDetector, scaleFactor, minNeighbors, flags, FaceminSize, FacemaxSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static RectVector DetectFrontalFace(Mat graymat, int minsize, int maxsize){
|
|
||||||
Size min = new Size(minsize, minsize);
|
|
||||||
Size max = new Size(maxsize, maxsize);
|
|
||||||
RectVector rect = new RectVector();
|
|
||||||
frontalfaceDetector.detectMultiScale(graymat, rect,scaleFactor, minNeighbors, flags, min, max);
|
|
||||||
return rect;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static RectVector DetectProfileFace(Mat graymat, int minsize, int maxsize){
|
|
||||||
Size min = new Size(minsize, minsize);
|
|
||||||
Size max = new Size(maxsize, maxsize);
|
|
||||||
RectVector rect = new RectVector();
|
|
||||||
profilefaceDetector.detectMultiScale(graymat, rect,scaleFactor, minNeighbors, flags, min, max);
|
|
||||||
return rect;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Detect Face from Mat
|
* Detect Face from Mat
|
||||||
* @param graymat Mat in Gray Scale
|
* @param graymat Mat in Gray Scale
|
||||||
* @return RectVector if face detected, otherwise null
|
* @return RectVector if face detected, otherwise null
|
||||||
*/
|
*/
|
||||||
public static RectVector DetectFrontalFace(UMat graymat){
|
public RectVector DetectFrontalFace(Mat graymat){
|
||||||
return Detect(graymat, frontalfaceDetector, scaleFactor, minNeighbors, flags, FaceminSize, FacemaxSize);
|
return Detect(graymat, frontalfaceDetector, scaleFactor, minNeighbors, flags, FaceminSize, FacemaxSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Detect Eye from Mat
|
* Detect Eye from Mat
|
||||||
* If Eye detected, it will return RectVector with size is number of eyes detected
|
* If Eye detected, it will return RectVector with size is number of eyes detected
|
||||||
* @param graymat Mat in Gray Scale
|
* @param graymat Mat in Gray Scale
|
||||||
* @return RectVector if eye detected, otherwise null
|
* @return RectVector if eye detected, otherwise null
|
||||||
*/
|
*/
|
||||||
public static RectVector DetectEye(UMat graymat){
|
public RectVector DetectEye(Mat graymat, int facewidth){
|
||||||
//return Detect(graymat, eyeDetector, scaleFactor, minNeighbors, flags, EyeminSize, EyemaxSize);
|
//return Detect(graymat, eyeDetector);
|
||||||
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("unused")
|
|
||||||
private static RectVector Detect(UMat graymat, CascadeClassifier detector){
|
|
||||||
if (detector!=null){
|
|
||||||
if (graymat!=null){
|
|
||||||
if (!graymat.empty()){
|
|
||||||
RectVector detected = new RectVector();
|
|
||||||
detector.detectMultiScale(graymat, detected);
|
|
||||||
return detected;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("SameParameterValue")
|
@SuppressWarnings("SameParameterValue")
|
||||||
private static RectVector Detect(UMat graymat, CascadeClassifier detector, double scaleFactor, int minNeighbors, int flags, Size minSize, Size maxSize){
|
private RectVector Detect(Mat graymat, CascadeClassifier detector, double scaleFactor, int minNeighbors, int flags, Size minSize, Size maxSize){
|
||||||
if (detector!=null){
|
if (detector!=null && !detector.empty()){
|
||||||
if (graymat!=null){
|
if (graymat!=null && graymat.channels()==1 && !graymat.empty()){
|
||||||
if (!graymat.empty()){
|
if (minSize!=null && maxSize!=null){
|
||||||
if (minSize!=null){
|
if (minSize.width()< maxSize.width() && minSize.height() < maxSize.height()){
|
||||||
if (maxSize!=null){
|
if (graymat.cols()> minSize.width() && graymat.rows() > minSize.height()) {
|
||||||
|
try {
|
||||||
RectVector detected = new RectVector();
|
RectVector detected = new RectVector();
|
||||||
detector.detectMultiScale(graymat, detected, scaleFactor, minNeighbors, flags, minSize, maxSize);
|
// try defaulting minSize and maxSize
|
||||||
|
detector.detectMultiScale(graymat, detected, scaleFactor, minNeighbors, flags, minSize, new Size());
|
||||||
|
|
||||||
return detected;
|
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;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package id.co.gtc.erhacam;
|
package id.co.gtc.erhacam;
|
||||||
|
|
||||||
import Config.SomeCodes;
|
import Config.SomeCodes;
|
||||||
|
import Database.PhotoCleaner;
|
||||||
import SecureDongle.SecureDongle;
|
import SecureDongle.SecureDongle;
|
||||||
import SecureDongle.SecureDongleEvent;
|
import SecureDongle.SecureDongleEvent;
|
||||||
import javafx.application.Application;
|
import javafx.application.Application;
|
||||||
@@ -14,14 +15,33 @@ 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.ShowAlert;
|
import static Config.SomeCodes.ShowAlert;
|
||||||
import static Config.SomeCodes.config;
|
import static Config.SomeCodes.config;
|
||||||
|
|
||||||
|
|
||||||
public class MainApplication extends Application {
|
public class MainApplication extends Application {
|
||||||
|
|
||||||
|
final String version = "27082025-PRODUCTION-1.0.7";
|
||||||
|
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);
|
SecureDongle sd = new SecureDongle((short)0x4B30, (short)0xA66C, (short)0x3109, (short)0x37B1);
|
||||||
if (sd.Find()){
|
if (sd.Find()){
|
||||||
if (sd.Open()){
|
if (sd.Open()){
|
||||||
@@ -32,9 +52,9 @@ public class MainApplication extends Application {
|
|||||||
Logger.info("Secure Dongle UserID valid");
|
Logger.info("Secure Dongle UserID valid");
|
||||||
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 11032025-006");
|
stage.setTitle("MultiCam Capture App for ERHA "+version);
|
||||||
stage.setScene(scene);
|
stage.setScene(scene);
|
||||||
stage.setResizable(true);
|
stage.setResizable(true);
|
||||||
stage.setMaximized(true);
|
stage.setMaximized(true);
|
||||||
@@ -46,11 +66,16 @@ public class MainApplication extends Application {
|
|||||||
Logger.info("Application closed");
|
Logger.info("Application closed");
|
||||||
});
|
});
|
||||||
SomeCodes.LoadQRReader();
|
SomeCodes.LoadQRReader();
|
||||||
Detectors.LoadAllDetectors();
|
// 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() {
|
sd.setEvent(new SecureDongleEvent() {
|
||||||
@Override
|
@Override
|
||||||
public void onDongleMissing() {
|
public void onDongleMissing() {
|
||||||
@@ -68,6 +93,9 @@ public class MainApplication extends Application {
|
|||||||
});
|
});
|
||||||
sd.StartMonitor();
|
sd.StartMonitor();
|
||||||
|
|
||||||
|
photoCleaner = new PhotoCleaner(90);
|
||||||
|
photoCleaner.Start();
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
ShowAlert(Alert.AlertType.ERROR, "Secure Dongle UserID not valid", "Secure Dongle UserID not valid", "Secure Dongle UserID not valid");
|
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");
|
Logger.error("Secure Dongle UserID not valid");
|
||||||
|
|||||||
@@ -15,8 +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.ShowAlert;
|
import static Config.SomeCodes.*;
|
||||||
import static Config.SomeCodes.config;
|
|
||||||
|
|
||||||
public class PhotoRow {
|
public class PhotoRow {
|
||||||
@FXML
|
@FXML
|
||||||
@@ -29,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 +45,8 @@ public class PhotoRow {
|
|||||||
imgview.setStyle(borderstyle);
|
imgview.setStyle(borderstyle);
|
||||||
imgview.setOnMouseClicked(e->{
|
imgview.setOnMouseClicked(e->{
|
||||||
if (e.getClickCount()>=2){
|
if (e.getClickCount()>=2){
|
||||||
//System.out.println("Photo path: "+photopath);
|
|
||||||
File ff = new File(photopath);
|
File ff = new File(photopath);
|
||||||
// System.out.println("Config exists : "+(config!=null));
|
|
||||||
// System.out.println("Photo directory: "+config.getPhotoDirectory());
|
|
||||||
// System.out.println("Full quality directory: "+config.getFullQualityDirectory());
|
|
||||||
// System.out.println("Full Quality Crop directory: "+config.getFullQualityCropDirectory());
|
|
||||||
// System.out.println("Reduced quality directory: "+config.getCompressedDirectory());
|
|
||||||
// System.out.println("Reduced quality crop directory: "+config.getCompressedCropDirectory());
|
|
||||||
//String hires = Path.of(config.getPhotoDirectory(), ff.getName()).toString();
|
|
||||||
String hires = Path.of(config.getFullQualityDirectory(), ff.getName()).toString();
|
String hires = Path.of(config.getFullQualityDirectory(), ff.getName()).toString();
|
||||||
//System.out.println("Hires: "+hires);
|
|
||||||
File hiresfile = new File(hires);
|
File hiresfile = new File(hires);
|
||||||
if (hiresfile.isFile()){
|
if (hiresfile.isFile()){
|
||||||
System.out.println("Opening file: "+hires);
|
System.out.println("Opening file: "+hires);
|
||||||
|
|||||||
@@ -3,17 +3,12 @@ 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.scene.control.TextField;
|
|
||||||
import javafx.stage.DirectoryChooser;
|
import javafx.stage.DirectoryChooser;
|
||||||
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.*;
|
||||||
|
|
||||||
public class SettingView {
|
public class SettingView {
|
||||||
@@ -39,9 +34,170 @@ public class SettingView {
|
|||||||
@FXML
|
@FXML
|
||||||
private TextField FTPPath;
|
private TextField FTPPath;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private TextField Sharpness;
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
private TextField PhotoDirectoryPath;
|
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();
|
||||||
@@ -65,11 +221,23 @@ public class SettingView {
|
|||||||
|
|
||||||
config.SetPhotoDirectory(path);
|
config.SetPhotoDirectory(path);
|
||||||
config.Save();
|
config.Save();
|
||||||
PhotoDirectoryPath.setText(path);
|
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
|
@FXML
|
||||||
private void CascadeSettingApply(){
|
private void CascadeSettingApply(){
|
||||||
|
|
||||||
String minsize = cascadeMinSize.getText();
|
String minsize = cascadeMinSize.getText();
|
||||||
String scalefactor = cascadeScaleFactor.getText();
|
String scalefactor = cascadeScaleFactor.getText();
|
||||||
String maxsize = cascadeMaxSize.getText();
|
String maxsize = cascadeMaxSize.getText();
|
||||||
@@ -89,9 +257,20 @@ public class SettingView {
|
|||||||
config.setCascadeScaleFactor(scale);
|
config.setCascadeScaleFactor(scale);
|
||||||
config.Save();
|
config.Save();
|
||||||
|
|
||||||
Detectors.setFaceMaxSize(max);
|
if (MainApplication.detectorsList!=null){
|
||||||
Detectors.setFaceMinSize(min);
|
MainApplication.detectorsList.forEach((i,d)-> {
|
||||||
Detectors.setScaleFactor(scale);
|
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");
|
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("Max Size must be greater than Min Size");
|
||||||
@@ -104,6 +283,7 @@ public class SettingView {
|
|||||||
} else show_cascade_alert("Max Size must not empty");
|
} else show_cascade_alert("Max Size must not empty");
|
||||||
} else show_cascade_alert("Min Size must not empty");
|
} else show_cascade_alert("Min Size must not empty");
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void show_cascade_alert(String content){
|
private void show_cascade_alert(String content){
|
||||||
@@ -123,7 +303,15 @@ 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(()->{
|
||||||
@@ -155,17 +343,46 @@ public class SettingView {
|
|||||||
CameraRight45.setValue(config.getCameraRight45());
|
CameraRight45.setValue(config.getCameraRight45());
|
||||||
CameraRight90.setValue(config.getCameraRight90());
|
CameraRight90.setValue(config.getCameraRight90());
|
||||||
|
|
||||||
FTPHost.setText(config.getFTPHost());
|
TextFieldSetText(FTPHost,config.getFTPHost());
|
||||||
FTPPort.setText(config.getFTPPort());
|
TextFieldSetText(FTPPort,config.getFTPPort());
|
||||||
FTPUser.setText(config.getFTPUser());
|
TextFieldSetText(FTPUser,config.getFTPUser());
|
||||||
FTPPass.setText(config.getFTPPass());
|
TextFieldSetText(FTPPass,config.getFTPPass());
|
||||||
FTPPath.setText(config.getFTPPath());
|
TextFieldSetText(FTPPath,config.getFTPPath());
|
||||||
|
|
||||||
PhotoDirectoryPath.setText(config.getPhotoDirectory());
|
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()));
|
||||||
|
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()));
|
||||||
|
|
||||||
cascadeScaleFactor.setText(String.valueOf(config.getCascadeScaleFactor()));
|
|
||||||
cascadeMinSize.setText(String.valueOf(config.getCascadeMinSize()));
|
|
||||||
cascadeMaxSize.setText(String.valueOf(config.getCascadeMaxSize()));
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ module id.co.gtc.erhacam {
|
|||||||
requires java.sql;
|
requires java.sql;
|
||||||
requires javafx.graphics;
|
requires javafx.graphics;
|
||||||
requires java.net.http;
|
requires java.net.http;
|
||||||
|
requires org.tinylog.impl;
|
||||||
|
|
||||||
|
|
||||||
opens id.co.gtc.erhacam to javafx.fxml;
|
opens id.co.gtc.erhacam to javafx.fxml;
|
||||||
|
|||||||
@@ -39,7 +39,6 @@ import java.time.LocalDateTime;
|
|||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
|
|
||||||
import static Config.SomeCodes.*;
|
import static Config.SomeCodes.*;
|
||||||
import static id.co.gtc.erhacam.Detectors.frontalfaceDetector;
|
|
||||||
import static org.bytedeco.opencv.global.opencv_core.CV_8UC3;
|
import static org.bytedeco.opencv.global.opencv_core.CV_8UC3;
|
||||||
import static org.bytedeco.opencv.global.opencv_core.mean;
|
import static org.bytedeco.opencv.global.opencv_core.mean;
|
||||||
import static org.bytedeco.opencv.global.opencv_imgcodecs.imwrite;
|
import static org.bytedeco.opencv.global.opencv_imgcodecs.imwrite;
|
||||||
@@ -197,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){
|
||||||
@@ -259,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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -519,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");
|
||||||
@@ -542,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;
|
||||||
@@ -673,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;
|
||||||
@@ -737,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) {
|
||||||
@@ -783,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 (frontalfaceDetector!=null){
|
// if (frontalfaceDetector!=null){
|
||||||
val face = new RectVector();
|
// val face = new RectVector();
|
||||||
frontalfaceDetector.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="720.0" prefWidth="360.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>
|
||||||
@@ -68,9 +94,9 @@
|
|||||||
<Insets />
|
<Insets />
|
||||||
</GridPane.margin>
|
</GridPane.margin>
|
||||||
</AnchorPane>
|
</AnchorPane>
|
||||||
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.rowIndex="1">
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" scaleZ="0.0" GridPane.rowIndex="1">
|
||||||
<children>
|
<children>
|
||||||
<VBox maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="240.0" prefWidth="140.0" visible="false" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
|
<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">
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
<?import javafx.scene.layout.*?>
|
<?import javafx.scene.layout.*?>
|
||||||
<?import javafx.scene.text.*?>
|
<?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="147.0" layoutY="239.0" AnchorPane.bottomAnchor="200.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>
|
||||||
@@ -38,7 +38,14 @@
|
|||||||
<AnchorPane fx:id="controlpane" prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1">
|
<AnchorPane fx:id="controlpane" prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1">
|
||||||
<padding>
|
<padding>
|
||||||
<Insets top="5.0" />
|
<Insets top="5.0" />
|
||||||
</padding></AnchorPane>
|
</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">
|
<AnchorPane prefHeight="200.0" prefWidth="200.0">
|
||||||
<children>
|
<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">
|
<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">
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<?import javafx.scene.control.*?>
|
<?import javafx.scene.control.*?>
|
||||||
<?import javafx.scene.layout.*?>
|
<?import javafx.scene.layout.*?>
|
||||||
|
|
||||||
<AnchorPane maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" minHeight="-Infinity" minWidth="-Infinity" 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.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>
|
||||||
@@ -11,7 +11,7 @@
|
|||||||
</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" />
|
||||||
@@ -30,20 +30,23 @@
|
|||||||
</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 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" />
|
<ColumnConstraints percentWidth="40.0" />
|
||||||
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" percentWidth="40.0" prefWidth="100.0" />
|
<ColumnConstraints percentWidth="40.0" />
|
||||||
|
<ColumnConstraints percentWidth="20.0" />
|
||||||
</columnConstraints>
|
</columnConstraints>
|
||||||
<rowConstraints>
|
<rowConstraints>
|
||||||
<RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
|
<RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
|
||||||
</rowConstraints>
|
</rowConstraints>
|
||||||
<children>
|
<children>
|
||||||
<GridPane>
|
<AnchorPane>
|
||||||
|
<children>
|
||||||
|
<GridPane fx:id="cameraselection" 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="25" />
|
||||||
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
<ColumnConstraints percentWidth="50" />
|
||||||
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" percentWidth="15.0" prefWidth="100.0" />
|
<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" />
|
||||||
@@ -51,88 +54,150 @@
|
|||||||
<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 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 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 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 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 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>
|
</children>
|
||||||
</AnchorPane>
|
</AnchorPane>
|
||||||
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1">
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.rowIndex="5">
|
||||||
<children>
|
<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" />
|
<Label 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>
|
</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>
|
||||||
<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" />
|
<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>
|
</children>
|
||||||
</AnchorPane>
|
</AnchorPane>
|
||||||
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1" GridPane.rowIndex="2">
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1" GridPane.rowIndex="2">
|
||||||
<children>
|
<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" />
|
<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>
|
</children>
|
||||||
</AnchorPane>
|
</AnchorPane>
|
||||||
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1" GridPane.rowIndex="3">
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1" GridPane.rowIndex="3">
|
||||||
<children>
|
<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" />
|
<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>
|
</children>
|
||||||
</AnchorPane>
|
</AnchorPane>
|
||||||
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1" GridPane.rowIndex="4">
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1" GridPane.rowIndex="4">
|
||||||
<children>
|
<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" />
|
<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>
|
</children>
|
||||||
</AnchorPane>
|
</AnchorPane>
|
||||||
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="2">
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1" GridPane.rowIndex="5">
|
||||||
<children>
|
<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" />
|
<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>
|
</children>
|
||||||
</AnchorPane>
|
</AnchorPane>
|
||||||
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="2" GridPane.rowIndex="1">
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="2" GridPane.rowIndex="1">
|
||||||
<children>
|
<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" />
|
<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>
|
</children>
|
||||||
</AnchorPane>
|
</AnchorPane>
|
||||||
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="2" GridPane.rowIndex="2">
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="2" GridPane.rowIndex="2">
|
||||||
<children>
|
<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" />
|
<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>
|
</children>
|
||||||
</AnchorPane>
|
</AnchorPane>
|
||||||
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="2" GridPane.rowIndex="3">
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="2" GridPane.rowIndex="3">
|
||||||
<children>
|
<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" />
|
<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>
|
</children>
|
||||||
</AnchorPane>
|
</AnchorPane>
|
||||||
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="2" GridPane.rowIndex="4">
|
<AnchorPane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="2" GridPane.rowIndex="4">
|
||||||
|
<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="5">
|
||||||
<children>
|
<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" />
|
<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>
|
</children>
|
||||||
</AnchorPane>
|
</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>
|
</children>
|
||||||
</GridPane>
|
</GridPane>
|
||||||
<GridPane GridPane.columnIndex="1">
|
</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>
|
||||||
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
<ColumnConstraints prefWidth="300" />
|
||||||
</columnConstraints>
|
</columnConstraints>
|
||||||
<rowConstraints>
|
<rowConstraints>
|
||||||
<RowConstraints maxHeight="-Infinity" minHeight="-Infinity" prefHeight="30.0" vgrow="SOMETIMES" />
|
<RowConstraints maxHeight="-Infinity" minHeight="-Infinity" prefHeight="30.0" vgrow="SOMETIMES" />
|
||||||
@@ -152,14 +217,10 @@
|
|||||||
</AnchorPane>
|
</AnchorPane>
|
||||||
<AnchorPane GridPane.rowIndex="1">
|
<AnchorPane GridPane.rowIndex="1">
|
||||||
<children>
|
<children>
|
||||||
<ScrollPane layoutY="0.7999992370605469" prefHeight="200.8" prefWidth="410.4" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="5.0" AnchorPane.rightAnchor="5.0" AnchorPane.topAnchor="0.0">
|
<GridPane prefHeight="200.0" prefWidth="300.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="5.0" AnchorPane.rightAnchor="5.0" AnchorPane.topAnchor="0.0">
|
||||||
<content>
|
|
||||||
<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="200.0" minWidth="0.0" prefWidth="350.0">
|
|
||||||
<children>
|
|
||||||
<GridPane prefHeight="200.0" prefWidth="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" prefWidth="100.0" />
|
<ColumnConstraints percentWidth="70.0" />
|
||||||
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
|
<ColumnConstraints percentWidth="30.0" />
|
||||||
</columnConstraints>
|
</columnConstraints>
|
||||||
<rowConstraints>
|
<rowConstraints>
|
||||||
<RowConstraints maxHeight="-Infinity" minHeight="-Infinity" prefHeight="40.0" vgrow="SOMETIMES" />
|
<RowConstraints maxHeight="-Infinity" minHeight="-Infinity" prefHeight="40.0" vgrow="SOMETIMES" />
|
||||||
@@ -169,27 +230,27 @@
|
|||||||
<children>
|
<children>
|
||||||
<AnchorPane>
|
<AnchorPane>
|
||||||
<children>
|
<children>
|
||||||
<Label prefHeight="40.0" prefWidth="175.2" text="Scale Factor" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" />
|
<Label prefHeight="40.0" text="Scale Factor" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" />
|
||||||
</children>
|
</children>
|
||||||
</AnchorPane>
|
</AnchorPane>
|
||||||
<AnchorPane GridPane.rowIndex="1">
|
<AnchorPane GridPane.rowIndex="1">
|
||||||
<children>
|
<children>
|
||||||
<Label prefHeight="40.0" prefWidth="175.2" text="Minimum Size" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" />
|
<Label prefHeight="40.0" text="Minimum Size" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" />
|
||||||
</children>
|
</children>
|
||||||
</AnchorPane>
|
</AnchorPane>
|
||||||
<AnchorPane GridPane.rowIndex="2">
|
<AnchorPane GridPane.rowIndex="2">
|
||||||
<children>
|
<children>
|
||||||
<Label prefHeight="40.0" prefWidth="175.2" text="Maximum Size" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" />
|
<Label prefHeight="40.0" text="Maximum Size" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" />
|
||||||
</children>
|
</children>
|
||||||
</AnchorPane>
|
</AnchorPane>
|
||||||
<AnchorPane GridPane.columnIndex="1">
|
<AnchorPane GridPane.columnIndex="1">
|
||||||
<children>
|
<children>
|
||||||
<TextField fx:id="cascadeScaleFactor" alignment="CENTER" prefHeight="40.0" prefWidth="175.2" text="1.2" AnchorPane.bottomAnchor="5.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" />
|
<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>
|
</children>
|
||||||
</AnchorPane>
|
</AnchorPane>
|
||||||
<AnchorPane GridPane.columnIndex="1" GridPane.rowIndex="1">
|
<AnchorPane GridPane.columnIndex="1" GridPane.rowIndex="1">
|
||||||
<children>
|
<children>
|
||||||
<TextField fx:id="cascadeMinSize" alignment="CENTER" prefHeight="40.0" prefWidth="175.2" text="200" AnchorPane.bottomAnchor="5.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" />
|
<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>
|
</children>
|
||||||
</AnchorPane>
|
</AnchorPane>
|
||||||
<AnchorPane GridPane.columnIndex="1" GridPane.rowIndex="2">
|
<AnchorPane GridPane.columnIndex="1" GridPane.rowIndex="2">
|
||||||
@@ -201,13 +262,252 @@
|
|||||||
</GridPane>
|
</GridPane>
|
||||||
</children>
|
</children>
|
||||||
</AnchorPane>
|
</AnchorPane>
|
||||||
</content>
|
</children>
|
||||||
</ScrollPane>
|
</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>
|
</children>
|
||||||
</AnchorPane>
|
</AnchorPane>
|
||||||
</children>
|
</children>
|
||||||
</GridPane>
|
</GridPane>
|
||||||
</children>
|
</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>
|
</GridPane>
|
||||||
</children>
|
</children>
|
||||||
</AnchorPane>
|
</AnchorPane>
|
||||||
|
|||||||
BIN
voices/camera-shutter-click-01.wav
Normal file
BIN
voices/camera-shutter-click-01.wav
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
voices/hubungistafkami.wav
Normal file
BIN
voices/hubungistafkami.wav
Normal file
Binary file not shown.
Binary file not shown.
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.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user