add java adapter to call faceReg(python version)

This commit is contained in:
DiaosWang 2024-05-21 18:52:47 +08:00
parent 2ad3bd6a63
commit 154f063b58
71 changed files with 2481 additions and 25 deletions

3
.gitignore vendored
View File

@ -3,4 +3,5 @@
!/test2_ort/
!/proj_deepface/
!/.gitignore
!/readme.md
!/readme.md
!/componentdevelopment/

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,3 @@
# 默认忽略的文件
/shelf/
/workspace.xml

View File

@ -0,0 +1,41 @@
<component name="ArtifactManager">
<artifact type="jar" name="OCRTool:jar">
<output-path>$PROJECT_DIR$/out/artifacts/OCRTool_jar</output-path>
<root id="archive" name="OCRTool.jar">
<element id="module-output" name="OCRTool" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot/2.5.15/spring-boot-2.5.15.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/springframework/spring-core/5.3.27/spring-core-5.3.27.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-databind/2.12.7.1/jackson-databind-2.12.7.1.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/yaml/snakeyaml/1.28/snakeyaml-1.28.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/com/fasterxml/jackson/module/jackson-module-parameter-names/2.12.7/jackson-module-parameter-names-2.12.7.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/apache/tomcat/embed/tomcat-embed-websocket/9.0.75/tomcat-embed-websocket-9.0.75.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/springframework/spring-context/5.3.27/spring-context-5.3.27.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/apache/tomcat/embed/tomcat-embed-core/9.0.75/tomcat-embed-core-9.0.75.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/springframework/spring-web/5.3.27/spring-web-5.3.27.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-json/2.5.15/spring-boot-starter-json-2.5.15.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-autoconfigure/2.5.15/spring-boot-autoconfigure-2.5.15.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/apache/logging/log4j/log4j-to-slf4j/2.17.2/log4j-to-slf4j-2.17.2.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/apache/tomcat/embed/tomcat-embed-el/9.0.75/tomcat-embed-el-9.0.75.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/springframework/spring-beans/5.3.27/spring-beans-5.3.27.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/com/bonus/core/OCRTool/1.2-SNAPSHOT/OCRTool-1.2-SNAPSHOT.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/ch/qos/logback/logback-core/1.2.12/logback-core-1.2.12.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/slf4j/jul-to-slf4j/1.7.36/jul-to-slf4j-1.7.36.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-web/2.5.15/spring-boot-starter-web-2.5.15.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-annotations/2.12.7/jackson-annotations-2.12.7.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/ch/qos/logback/logback-classic/1.2.12/logback-classic-1.2.12.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/apache/logging/log4j/log4j-api/2.17.2/log4j-api-2.17.2.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/springframework/spring-expression/5.3.27/spring-expression-5.3.27.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-tomcat/2.5.15/spring-boot-starter-tomcat-2.5.15.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/springframework/spring-jcl/5.3.27/spring-jcl-5.3.27.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter/2.5.15/spring-boot-starter-2.5.15.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-logging/2.5.15/spring-boot-starter-logging-2.5.15.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.12.7/jackson-datatype-jsr310-2.12.7.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-core/2.12.7/jackson-core-2.12.7.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/springframework/spring-aop/5.3.27/spring-aop-5.3.27.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.12.7/jackson-datatype-jdk8-2.12.7.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/springframework/spring-webmvc/5.3.27/spring-webmvc-5.3.27.jar" path-in-jar="/" />
</root>
</artifact>
</component>

View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<annotationProcessing>
<profile name="Maven default annotation processors profile" enabled="true">
<sourceOutputDir name="target/generated-sources/annotations" />
<sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
<outputRelativeToContentRoot value="true" />
<module name="OCRTool" />
<module name="SpringTest" />
</profile>
</annotationProcessing>
</component>
<component name="JavacSettings">
<option name="ADDITIONAL_OPTIONS_OVERRIDE">
<module name="OCRTool" options="-parameters" />
<module name="SpringTest" options="-parameters" />
</option>
</component>
</project>

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Encoding">
<file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" />
</component>
</project>

View File

@ -0,0 +1,66 @@
<component name="InspectionProjectProfileManager">
<profile version="1.0">
<option name="myName" value="Project Default" />
<inspection_tool class="AliAccessStaticViaInstance" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AliArrayNamingShouldHaveBracket" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AliControlFlowStatementWithoutBraces" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AliDeprecation" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AliEqualsAvoidNull" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AliLongLiteralsEndingWithLowercaseL" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AliMissingOverrideAnnotation" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AliWrapperTypeEquality" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaAbstractClassShouldStartWithAbstractNaming" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaAbstractMethodOrInterfaceMethodMustUseJavadoc" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaAvoidApacheBeanUtilsCopy" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaAvoidCallStaticSimpleDateFormat" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaAvoidCommentBehindStatement" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaAvoidComplexCondition" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaAvoidConcurrentCompetitionRandom" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaAvoidDoubleOrFloatEqualCompare" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaAvoidManuallyCreateThread" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaAvoidMissUseOfMathRandom" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaAvoidNegationOperator" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaAvoidNewDateGetTime" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaAvoidPatternCompileInMethod" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaAvoidReturnInFinally" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaAvoidStartWithDollarAndUnderLineNaming" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaAvoidUseTimer" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaBigDecimalAvoidDoubleConstructor" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaBooleanPropertyShouldNotStartWithIs" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaClassCastExceptionWithSubListToArrayList" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaClassCastExceptionWithToArray" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaClassMustHaveAuthor" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaClassNamingShouldBeCamel" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaCollectionInitShouldAssignCapacity" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaCommentsMustBeJavadocFormat" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaConcurrentExceptionWithModifyOriginSubList" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaConstantFieldShouldBeUpperCase" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaCountDownShouldInFinally" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaDontModifyInForeachCircle" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaEnumConstantsMustHaveComment" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaExceptionClassShouldEndWithException" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaIbatisMethodQueryForList" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaLockShouldWithTryFinally" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaLowerCamelCaseVariableNaming" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaMethodReturnWrapperType" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaMethodTooLong" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaPackageNaming" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaPojoMustOverrideToString" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaPojoMustUsePrimitiveField" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaPojoNoDefaultValue" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaRemoveCommentedCode" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaServiceOrDaoClassShouldEndWithImpl" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaStringConcat" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaSwitchStatement" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaTestClassShouldEndWithTestNaming" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaThreadLocalShouldRemove" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaThreadPoolCreation" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaThreadShouldSetName" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaTransactionMustHaveRollback" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaUndefineMagicConstant" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaUnsupportedExceptionWithModifyAsList" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaUseQuietReferenceNotation" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaUseRightCaseForDateFormat" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="MapOrSetKeyShouldOverrideHashCodeEquals" enabled="true" level="WARNING" enabled_by_default="true" />
</profile>
</component>

View File

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="RemoteRepositoriesConfiguration">
<remote-repository>
<option name="id" value="central" />
<option name="name" value="Central Repository" />
<option name="url" value="https://repo.maven.apache.org/maven2" />
</remote-repository>
<remote-repository>
<option name="id" value="central" />
<option name="name" value="Central Repository" />
<option name="url" value="http://192.168.0.56:8081/repository/maven-public/" />
</remote-repository>
<remote-repository>
<option name="id" value="central" />
<option name="name" value="Maven Central repository" />
<option name="url" value="https://repo1.maven.org/maven2" />
</remote-repository>
<remote-repository>
<option name="id" value="jboss.community" />
<option name="name" value="JBoss Community repository" />
<option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
</remote-repository>
</component>
</project>

View File

@ -0,0 +1,11 @@
<project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="MavenProjectsManager">
<option name="originalFiles">
<list>
<option value="$PROJECT_DIR$/pom.xml" />
</list>
</option>
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK" />
</project>

View File

@ -0,0 +1,5 @@
l
java:S2629&"$Invoke method(s) only conditionally.(®»ÕËøÿÿÿÿ8°òÛÀñ1J$08b7d507-5ddc-4e7a-b8f2-f3aa7e34f9d6
¡
java:S2142J"^Either re-interrupt this method or rethrow the "InterruptedException" that can be caught here.(<28>”ý¾8½òÛÀñ1J$6694eaa6-51da-4af5-9271-29eb55295b01

View File

@ -0,0 +1,3 @@
~
java:S6813 "BRemove this field injection and use constructor injection instead.(‘ÇÙÄJ$5cd5a15d-e3e5-444c-b6da-e9273369ee7b

View File

@ -0,0 +1,7 @@
z
java:S1854"7Remove this useless assignment to local variable "app".(¯ù† 8<>³£ñ1J$2867df20-9e6a-4adb-aee8-c9224cf3a2d0
k
java:S1481"(Remove this unused "app" local variable.(¯ù† 8<>³£ñ1J$1df203aa-b9af-4f3d-be46-41952d3b5306
~ java:S125"<This block of commented-out lines of code should be removed.(ô£½¡8<>³£ñ1J$05a8166a-fdb5-43fb-b0d0-76ade2b38155
ƒ java:S125G"<This block of commented-out lines of code should be removed.(ÞÛ€Éþÿÿÿÿ°£ñ1J$28e1f922-7e2c-4915-bb91-7200067b4e6e

View File

@ -0,0 +1,13 @@
7
pom.xml,4/4/442292b8a7efeabbe4cc176709b833b1792140ec
i
9src/main/java/com/bonus/core/MySpringBootApplication.java,8/4/84cd37784f4d386a07d29be93104fbda8cddd566
`
0src/main/java/com/bonus/core/OCRRecognition.java,1/e/1e24bf866dc51c9dad21292d7b33d6d8c8c34cce
g
7src/main/java/com/bonus/core/RecognitionController.java,5/1/51a2122a0d66f3177ddd273d6903a3d6beedca49
k
;src/main/java/com/bonus/core/IdentifyRecognitionParams.java,c/1/c1e7d3b4a8663bd134dfeed115f73ebd8a781d7e
I
logs/recognition-info.log,c/c/cc7189188c46a21e6a21d34e94e0b5f3ce3d44f7

View File

@ -0,0 +1,13 @@
7
pom.xml,4/4/442292b8a7efeabbe4cc176709b833b1792140ec
i
9src/main/java/com/bonus/core/MySpringBootApplication.java,8/4/84cd37784f4d386a07d29be93104fbda8cddd566
`
0src/main/java/com/bonus/core/OCRRecognition.java,1/e/1e24bf866dc51c9dad21292d7b33d6d8c8c34cce
g
7src/main/java/com/bonus/core/RecognitionController.java,5/1/51a2122a0d66f3177ddd273d6903a3d6beedca49
k
;src/main/java/com/bonus/core/IdentifyRecognitionParams.java,c/1/c1e7d3b4a8663bd134dfeed115f73ebd8a781d7e
I
logs/recognition-info.log,c/c/cc7189188c46a21e6a21d34e94e0b5f3ce3d44f7

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
<mapping directory="$PROJECT_DIR$/.." vcs="Git" />
</component>
</project>

View File

@ -0,0 +1,292 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
-->
<module version="4" relativePaths="false" type="JAVA_MODULE">
<component name="NewModuleRootManager">
<exclude-output/>
<orderEntry type="inheritedJdk"/>
<!-- output url="file://$$MODULE_DIR$$/${maven.build.dest}"/ -->
<!-- output-test url="file://$$MODULE_DIR$$/${maven.test.dest}"/ -->
<content url="file://$MODULE_DIR$">
<!-- sourceFolder url="file://$$MODULE_DIR$$/${pom.build.sourceDirectory}" isTestSource="false"/ -->
<!-- sourceFolder url="file://$$MODULE_DIR$$/${pom.build.testSourceDirectory}" isTestSource="true"/ -->
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false"/>
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true"/>
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" isTestSource="false"/>
<excludeFolder url="file://$MODULE_DIR$/target"/>
</content>
<orderEntry type="sourceFolder" forTests="false"/>
<!-- Next include each dependency:
<orderEntry type="module" module-name="${dep.artifactId}"/>
<orderEntry type="module-library">
<library name="${dep.artifactId}">
<CLASSES>
<root url="jar://${lib.path}!/"/>
</CLASSES>
<JAVADOC/>
<SOURCES/>
</library>
</orderEntry>
-->
<output url="file://$MODULE_DIR$/target/classes"/>
<output-test url="file://$MODULE_DIR$/target/test-classes"/>
<orderEntry type="module-library">
<library>
<CLASSES>
<root url="jar:///Users/wangvivi/.m2/repository/org/springframework/boot/spring-boot-starter/2.5.15/spring-boot-starter-2.5.15.jar!/"/>
</CLASSES>
</library>
</orderEntry>
<orderEntry type="module-library">
<library>
<CLASSES>
<root url="jar:///Users/wangvivi/.m2/repository/org/springframework/boot/spring-boot/2.5.15/spring-boot-2.5.15.jar!/"/>
</CLASSES>
</library>
</orderEntry>
<orderEntry type="module-library">
<library>
<CLASSES>
<root url="jar:///Users/wangvivi/.m2/repository/org/springframework/spring-core/5.3.27/spring-core-5.3.27.jar!/"/>
</CLASSES>
</library>
</orderEntry>
<orderEntry type="module-library">
<library>
<CLASSES>
<root url="jar:///Users/wangvivi/.m2/repository/org/springframework/spring-jcl/5.3.27/spring-jcl-5.3.27.jar!/"/>
</CLASSES>
</library>
</orderEntry>
<orderEntry type="module-library">
<library>
<CLASSES>
<root url="jar:///Users/wangvivi/.m2/repository/org/springframework/spring-context/5.3.27/spring-context-5.3.27.jar!/"/>
</CLASSES>
</library>
</orderEntry>
<orderEntry type="module-library">
<library>
<CLASSES>
<root url="jar:///Users/wangvivi/.m2/repository/org/springframework/spring-aop/5.3.27/spring-aop-5.3.27.jar!/"/>
</CLASSES>
</library>
</orderEntry>
<orderEntry type="module-library">
<library>
<CLASSES>
<root url="jar:///Users/wangvivi/.m2/repository/org/springframework/spring-beans/5.3.27/spring-beans-5.3.27.jar!/"/>
</CLASSES>
</library>
</orderEntry>
<orderEntry type="module-library">
<library>
<CLASSES>
<root url="jar:///Users/wangvivi/.m2/repository/org/springframework/spring-expression/5.3.27/spring-expression-5.3.27.jar!/"/>
</CLASSES>
</library>
</orderEntry>
<orderEntry type="module-library">
<library>
<CLASSES>
<root url="jar:///Users/wangvivi/.m2/repository/org/springframework/boot/spring-boot-autoconfigure/2.5.15/spring-boot-autoconfigure-2.5.15.jar!/"/>
</CLASSES>
</library>
</orderEntry>
<orderEntry type="module-library">
<library>
<CLASSES>
<root url="jar:///Users/wangvivi/.m2/repository/org/springframework/boot/spring-boot-starter-logging/2.5.15/spring-boot-starter-logging-2.5.15.jar!/"/>
</CLASSES>
</library>
</orderEntry>
<orderEntry type="module-library">
<library>
<CLASSES>
<root url="jar:///Users/wangvivi/.m2/repository/ch/qos/logback/logback-classic/1.2.12/logback-classic-1.2.12.jar!/"/>
</CLASSES>
</library>
</orderEntry>
<orderEntry type="module-library">
<library>
<CLASSES>
<root url="jar:///Users/wangvivi/.m2/repository/ch/qos/logback/logback-core/1.2.12/logback-core-1.2.12.jar!/"/>
</CLASSES>
</library>
</orderEntry>
<orderEntry type="module-library">
<library>
<CLASSES>
<root url="jar:///Users/wangvivi/.m2/repository/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar!/"/>
</CLASSES>
</library>
</orderEntry>
<orderEntry type="module-library">
<library>
<CLASSES>
<root url="jar:///Users/wangvivi/.m2/repository/org/apache/logging/log4j/log4j-to-slf4j/2.17.2/log4j-to-slf4j-2.17.2.jar!/"/>
</CLASSES>
</library>
</orderEntry>
<orderEntry type="module-library">
<library>
<CLASSES>
<root url="jar:///Users/wangvivi/.m2/repository/org/apache/logging/log4j/log4j-api/2.17.2/log4j-api-2.17.2.jar!/"/>
</CLASSES>
</library>
</orderEntry>
<orderEntry type="module-library">
<library>
<CLASSES>
<root url="jar:///Users/wangvivi/.m2/repository/org/slf4j/jul-to-slf4j/1.7.36/jul-to-slf4j-1.7.36.jar!/"/>
</CLASSES>
</library>
</orderEntry>
<orderEntry type="module-library">
<library>
<CLASSES>
<root url="jar:///Users/wangvivi/.m2/repository/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5.jar!/"/>
</CLASSES>
</library>
</orderEntry>
<orderEntry type="module-library">
<library>
<CLASSES>
<root url="jar:///Users/wangvivi/.m2/repository/org/yaml/snakeyaml/1.28/snakeyaml-1.28.jar!/"/>
</CLASSES>
</library>
</orderEntry>
<orderEntry type="module-library">
<library>
<CLASSES>
<root url="jar:///Users/wangvivi/.m2/repository/org/springframework/boot/spring-boot-starter-web/2.5.15/spring-boot-starter-web-2.5.15.jar!/"/>
</CLASSES>
</library>
</orderEntry>
<orderEntry type="module-library">
<library>
<CLASSES>
<root url="jar:///Users/wangvivi/.m2/repository/org/springframework/boot/spring-boot-starter-json/2.5.15/spring-boot-starter-json-2.5.15.jar!/"/>
</CLASSES>
</library>
</orderEntry>
<orderEntry type="module-library">
<library>
<CLASSES>
<root url="jar:///Users/wangvivi/.m2/repository/org/springframework/spring-web/5.3.27/spring-web-5.3.27.jar!/"/>
</CLASSES>
</library>
</orderEntry>
<orderEntry type="module-library">
<library>
<CLASSES>
<root url="jar:///Users/wangvivi/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.12.7.1/jackson-databind-2.12.7.1.jar!/"/>
</CLASSES>
</library>
</orderEntry>
<orderEntry type="module-library">
<library>
<CLASSES>
<root url="jar:///Users/wangvivi/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.12.7/jackson-annotations-2.12.7.jar!/"/>
</CLASSES>
</library>
</orderEntry>
<orderEntry type="module-library">
<library>
<CLASSES>
<root url="jar:///Users/wangvivi/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.12.7/jackson-core-2.12.7.jar!/"/>
</CLASSES>
</library>
</orderEntry>
<orderEntry type="module-library">
<library>
<CLASSES>
<root url="jar:///Users/wangvivi/.m2/repository/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.12.7/jackson-datatype-jdk8-2.12.7.jar!/"/>
</CLASSES>
</library>
</orderEntry>
<orderEntry type="module-library">
<library>
<CLASSES>
<root url="jar:///Users/wangvivi/.m2/repository/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.12.7/jackson-datatype-jsr310-2.12.7.jar!/"/>
</CLASSES>
</library>
</orderEntry>
<orderEntry type="module-library">
<library>
<CLASSES>
<root url="jar:///Users/wangvivi/.m2/repository/com/fasterxml/jackson/module/jackson-module-parameter-names/2.12.7/jackson-module-parameter-names-2.12.7.jar!/"/>
</CLASSES>
</library>
</orderEntry>
<orderEntry type="module-library">
<library>
<CLASSES>
<root url="jar:///Users/wangvivi/.m2/repository/org/springframework/boot/spring-boot-starter-tomcat/2.5.15/spring-boot-starter-tomcat-2.5.15.jar!/"/>
</CLASSES>
</library>
</orderEntry>
<orderEntry type="module-library">
<library>
<CLASSES>
<root url="jar:///Users/wangvivi/.m2/repository/org/apache/tomcat/embed/tomcat-embed-core/9.0.75/tomcat-embed-core-9.0.75.jar!/"/>
</CLASSES>
</library>
</orderEntry>
<orderEntry type="module-library">
<library>
<CLASSES>
<root url="jar:///Users/wangvivi/.m2/repository/org/apache/tomcat/embed/tomcat-embed-el/9.0.75/tomcat-embed-el-9.0.75.jar!/"/>
</CLASSES>
</library>
</orderEntry>
<orderEntry type="module-library">
<library>
<CLASSES>
<root url="jar:///Users/wangvivi/.m2/repository/org/apache/tomcat/embed/tomcat-embed-websocket/9.0.75/tomcat-embed-websocket-9.0.75.jar!/"/>
</CLASSES>
</library>
</orderEntry>
<orderEntry type="module-library">
<library>
<CLASSES>
<root url="jar:///Users/wangvivi/.m2/repository/org/springframework/spring-webmvc/5.3.27/spring-webmvc-5.3.27.jar!/"/>
</CLASSES>
</library>
</orderEntry>
</component>
<component name="ModuleRootManager"/>
<!-- If it's a war project:
<component name="WebModuleProperties">
<containerElement type="module" name="${dep.artifactId}">
<attribute name="method" value="1" />
<attribute name="URI" value="/WEB-INF/classes" />
</containerElement>
<containerElement type="library" level="module" name="${dep.artifactId}">
<attribute name="method" value="1" />
<attribute name="URI" value="/WEB-INF/lib/${dep.systemPath.name}" />
</containerElement>
<deploymentDescriptor name="web.xml" url="file://$MODULE_DIR$/${pom.build.warSourceDirectory}/WEB-INF/web.xml" version="" />
<webroots>
<root url="file://$MODULE_DIR$/${pom.build.warSourceDirectory}" relative="/" />
</webroots>
</component>
-->
</module>

View File

@ -0,0 +1,107 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
-->
<project version="4" relativePaths="false">
<component name="ProjectRootManager" version="2" assert-keyword="true" project-jdk-name="1.8" jdk-15="true"/>
<component name="CodeStyleManager">
<option name="USE_DEFAULT_CODE_STYLE_SCHEME" value="true"/>
<option name="CODE_STYLE_SCHEME" value=""/>
</component>
<component name="libraryTable"/>
<component name="CompilerConfiguration">
<option name="DEFAULT_COMPILER" value="Javac"/>
<option name="CLEAR_OUTPUT_DIRECTORY" value="false"/>
<!--
<wildcardResourcePatterns>
<entry name="${wildcardResourcePattern}"/>
</wildcardResourcePatterns>
-->
<wildcardResourcePatterns>
<entry name="!?*.java"/>
</wildcardResourcePatterns>
</component>
<component name="JavacSettings">
<option name="DEBUGGING_INFO" value="true"/>
<option name="GENERATE_NO_WARNINGS" value="false"/>
<option name="DEPRECATION" value="true"/>
<option name="ADDITIONAL_OPTIONS_STRING" value=""/>
<option name="MAXIMUM_HEAP_SIZE" value="128"/>
<option name="USE_GENERICS_COMPILER" value="false"/>
</component>
<component name="JikesSettings">
<option name="DEBUGGING_INFO" value="true"/>
<option name="DEPRECATION" value="true"/>
<option name="GENERATE_NO_WARNINGS" value="false"/>
<option name="GENERATE_MAKE_FILE_DEPENDENCIES" value="false"/>
<option name="DO_FULL_DEPENDENCE_CHECK" value="false"/>
<option name="IS_INCREMENTAL_MODE" value="false"/>
<option name="IS_EMACS_ERRORS_MODE" value="true"/>
<option name="ADDITIONAL_OPTIONS_STRING" value=""/>
<option name="MAXIMUM_HEAP_SIZE" value="128"/>
</component>
<component name="AntConfiguration">
<option name="IS_AUTOSCROLL_TO_SOURCE" value="false"/>
<option name="FILTER_TARGETS" value="false"/>
</component>
<component name="JavadocGenerationManager">
<option name="OUTPUT_DIRECTORY"/>
<option name="OPTION_SCOPE" value="protected"/>
<option name="OPTION_HIERARCHY" value="false"/>
<option name="OPTION_NAVIGATOR" value="false"/>
<option name="OPTION_INDEX" value="false"/>
<option name="OPTION_SEPARATE_INDEX" value="false"/>
<option name="OPTION_USE_1_1" value="false"/>
<option name="OPTION_DOCUMENT_TAG_USE" value="false"/>
<option name="OPTION_DOCUMENT_TAG_AUTHOR" value="false"/>
<option name="OPTION_DOCUMENT_TAG_VERSION" value="false"/>
<option name="OPTION_DOCUMENT_TAG_DEPRECATED" value="false"/>
<option name="OPTION_DEPRECATED_LIST" value="false"/>
<option name="OTHER_OPTIONS"/>
<option name="HEAP_SIZE"/>
<option name="OPEN_IN_BROWSER" value="false"/>
</component>
<component name="JUnitProjectSettings">
<option name="TEST_RUNNER" value="UI"/>
</component>
<component name="EntryPointsManager">
<entry_points/>
</component>
<component name="DataSourceManager"/>
<component name="ExportToHTMLSettings">
<option name="PRINT_LINE_NUMBERS" value="false"/>
<option name="OPEN_IN_BROWSER" value="false"/>
<option name="OUTPUT_DIRECTORY"/>
</component>
<component name="ImportConfiguration">
<option name="VENDOR"/>
<option name="RELEASE_TAG"/>
<option name="LOG_MESSAGE"/>
<option name="CHECKOUT_AFTER_IMPORT" value="true"/>
</component>
<component name="ProjectModuleManager">
<modules>
<!-- module filepath="$$PROJECT_DIR$$/${pom.artifactId}.iml"/ -->
<module filepath="$PROJECT_DIR$/OCRTool.iml"/>
</modules>
</component>
<UsedPathMacros>
<!--<macro name="cargo"></macro>-->
</UsedPathMacros>
</project>

View File

@ -0,0 +1,418 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
-->
<project version="4" relativePaths="false">
<component name="LvcsProjectConfiguration">
<option name="ADD_LABEL_ON_PROJECT_OPEN" value="true"/>
<option name="ADD_LABEL_ON_PROJECT_COMPILATION" value="true"/>
<option name="ADD_LABEL_ON_FILE_PACKAGE_COMPILATION" value="true"/>
<option name="ADD_LABEL_ON_PROJECT_MAKE" value="true"/>
<option name="ADD_LABEL_ON_RUNNING" value="true"/>
<option name="ADD_LABEL_ON_DEBUGGING" value="true"/>
<option name="ADD_LABEL_ON_UNIT_TEST_PASSED" value="true"/>
<option name="ADD_LABEL_ON_UNIT_TEST_FAILED" value="true"/>
</component>
<component name="PropertiesComponent">
<property name="MemberChooser.copyJavadoc" value="false"/>
<property name="GoToClass.includeLibraries" value="false"/>
<property name="MemberChooser.showClasses" value="true"/>
<property name="MemberChooser.sorted" value="false"/>
<property name="GoToFile.includeJavaFiles" value="false"/>
<property name="GoToClass.toSaveIncludeLibraries" value="false"/>
</component>
<component name="ToolWindowManager">
<frame x="-4" y="-4" width="1032" height="746" extended-state="6"/>
<editor active="false"/>
<layout>
<window_info id="CVS" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="-1"/>
<window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="7"/>
<window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="0"/>
<window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="1"/>
<window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="1"/>
<window_info id="Messages" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="-1"/>
<window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.4" order="6"/>
<window_info id="Aspects" active="false" anchor="right" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="-1"/>
<window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="1"/>
<window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="2"/>
<window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="2"/>
<window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.4" order="4"/>
<window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="sliding" type="sliding" visible="false" weight="0.4" order="0"/>
<window_info id="Web" active="false" anchor="left" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="2"/>
<window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="0"/>
<window_info id="EJB" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="3"/>
<window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="5"/>
</layout>
</component>
<component name="ErrorTreeViewConfiguration">
<option name="IS_AUTOSCROLL_TO_SOURCE" value="false"/>
<option name="HIDE_WARNINGS" value="false"/>
</component>
<component name="StructureViewFactory">
<option name="SORT_MODE" value="0"/>
<option name="GROUP_INHERITED" value="true"/>
<option name="AUTOSCROLL_MODE" value="true"/>
<option name="SHOW_FIELDS" value="true"/>
<option name="AUTOSCROLL_FROM_SOURCE" value="false"/>
<option name="GROUP_GETTERS_AND_SETTERS" value="true"/>
<option name="SHOW_INHERITED" value="false"/>
<option name="HIDE_NOT_PUBLIC" value="false"/>
</component>
<component name="ProjectViewSettings">
<navigator currentView="ProjectPane" flattenPackages="false" showMembers="false" showStructure="false" autoscrollToSource="false" splitterProportion="0.5"/>
<view id="ProjectPane">
<expanded_node type="directory" url="file://$PROJECT_DIR$"/>
</view>
<view id="SourcepathPane"/>
<view id="ClasspathPane"/>
</component>
<component name="Commander">
<leftPanel view="Project"/>
<rightPanel view="Project"/>
<splitter proportion="0.5"/>
</component>
<component name="AspectsView"/>
<component name="SelectInManager"/>
<component name="HierarchyBrowserManager">
<option name="SHOW_PACKAGES" value="false"/>
<option name="IS_AUTOSCROLL_TO_SOURCE" value="false"/>
<option name="SORT_ALPHABETICALLY" value="false"/>
</component>
<component name="TodoView" selected-index="0">
<todo-panel id="selected-file">
<are-packages-shown value="false"/>
<flatten-packages value="false"/>
<is-autoscroll-to-source value="true"/>
</todo-panel>
<todo-panel id="all">
<are-packages-shown value="true"/>
<flatten-packages value="false"/>
<is-autoscroll-to-source value="true"/>
</todo-panel>
</component>
<component name="editorManager"/>
<component name="editorHistoryManager"/>
<component name="DaemonCodeAnalyzer">
<disable_hints/>
</component>
<component name="InspectionManager">
<option name="AUTOSCROLL_TO_SOURCE" value="false"/>
<option name="SPLITTER_PROPORTION" value="0.5"/>
<profile name="Default"/>
</component>
<component name="BookmarkManager"/>
<component name="DebuggerManager">
<line_breakpoints/>
<exception_breakpoints>
<breakpoint_any>
<option name="NOTIFY_CAUGHT" value="true"/>
<option name="NOTIFY_UNCAUGHT" value="true"/>
<option name="ENABLED" value="false"/>
<option name="SUSPEND_VM" value="true"/>
<option name="COUNT_FILTER_ENABLED" value="false"/>
<option name="COUNT_FILTER" value="0"/>
<option name="CONDITION_ENABLED" value="false"/>
<option name="CONDITION"/>
<option name="LOG_ENABLED" value="false"/>
<option name="LOG_EXPRESSION_ENABLED" value="false"/>
<option name="LOG_MESSAGE"/>
<option name="CLASS_FILTERS_ENABLED" value="false"/>
<option name="INVERSE_CLASS_FILLTERS" value="false"/>
<option name="SUSPEND_POLICY" value="SuspendAll"/>
</breakpoint_any>
</exception_breakpoints>
<field_breakpoints/>
<method_breakpoints/>
</component>
<component name="DebuggerSettings">
<option name="TRACING_FILTERS_ENABLED" value="true"/>
<option name="TOSTRING_CLASSES_ENABLED" value="false"/>
<option name="VALUE_LOOKUP_DELAY" value="700"/>
<option name="DEBUGGER_TRANSPORT" value="0"/>
<option name="FORCE_CLASSIC_VM" value="true"/>
<option name="HIDE_DEBUGGER_ON_PROCESS_TERMINATION" value="false"/>
<option name="SKIP_SYNTHETIC_METHODS" value="true"/>
<option name="SKIP_CONSTRUCTORS" value="false"/>
<option name="STEP_THREAD_SUSPEND_POLICY" value="SuspendThread"/>
<default_breakpoint_settings>
<option name="NOTIFY_CAUGHT" value="true"/>
<option name="NOTIFY_UNCAUGHT" value="true"/>
<option name="WATCH_MODIFICATION" value="true"/>
<option name="WATCH_ACCESS" value="true"/>
<option name="WATCH_ENTRY" value="true"/>
<option name="WATCH_EXIT" value="true"/>
<option name="ENABLED" value="true"/>
<option name="SUSPEND_VM" value="true"/>
<option name="COUNT_FILTER_ENABLED" value="false"/>
<option name="COUNT_FILTER" value="0"/>
<option name="CONDITION_ENABLED" value="false"/>
<option name="CONDITION"/>
<option name="LOG_ENABLED" value="false"/>
<option name="LOG_EXPRESSION_ENABLED" value="false"/>
<option name="LOG_MESSAGE"/>
<option name="CLASS_FILTERS_ENABLED" value="false"/>
<option name="INVERSE_CLASS_FILLTERS" value="false"/>
<option name="SUSPEND_POLICY" value="SuspendAll"/>
</default_breakpoint_settings>
<filter>
<option name="PATTERN" value="com.sun.*"/>
<option name="ENABLED" value="true"/>
</filter>
<filter>
<option name="PATTERN" value="java.*"/>
<option name="ENABLED" value="true"/>
</filter>
<filter>
<option name="PATTERN" value="javax.*"/>
<option name="ENABLED" value="true"/>
</filter>
<filter>
<option name="PATTERN" value="org.omg.*"/>
<option name="ENABLED" value="true"/>
</filter>
<filter>
<option name="PATTERN" value="sun.*"/>
<option name="ENABLED" value="true"/>
</filter>
<filter>
<option name="PATTERN" value="junit.*"/>
<option name="ENABLED" value="true"/>
</filter>
</component>
<component name="CompilerWorkspaceConfiguration">
<option name="COMPILE_IN_BACKGROUND" value="false"/>
<option name="AUTO_SHOW_ERRORS_IN_EDITOR" value="true"/>
</component>
<component name="RunManager">
<activeType name="Application"/>
<configuration selected="false" default="true" type="Applet" factoryName="Applet">
<module name=""/>
<option name="MAIN_CLASS_NAME"/>
<option name="HTML_FILE_NAME"/>
<option name="HTML_USED" value="false"/>
<option name="WIDTH" value="400"/>
<option name="HEIGHT" value="300"/>
<option name="POLICY_FILE" value="$APPLICATION_HOME_DIR$/bin/appletviewer.policy"/>
<option name="VM_PARAMETERS"/>
</configuration>
<configuration selected="false" default="true" type="Remote" factoryName="Remote">
<option name="USE_SOCKET_TRANSPORT" value="true"/>
<option name="SERVER_MODE" value="false"/>
<option name="SHMEM_ADDRESS" value="javadebug"/>
<option name="HOST" value="localhost"/>
<option name="PORT" value="5005"/>
</configuration>
<configuration selected="false" default="true" type="Application" factoryName="Application">
<option name="MAIN_CLASS_NAME"/>
<option name="VM_PARAMETERS"/>
<option name="PROGRAM_PARAMETERS"/>
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$"/>
<module name=""/>
</configuration>
<configuration selected="false" default="true" type="JUnit" factoryName="JUnit">
<module name=""/>
<option name="PACKAGE_NAME"/>
<option name="MAIN_CLASS_NAME"/>
<option name="METHOD_NAME"/>
<option name="TEST_OBJECT" value="class"/>
<option name="VM_PARAMETERS"/>
<option name="PARAMETERS"/>
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$"/>
<option name="ADDITIONAL_CLASS_PATH"/>
<option name="TEST_SEARCH_SCOPE">
<value defaultName="wholeProject"/>
</option>
</configuration>
</component>
<component name="VcsManagerConfiguration">
<option name="ACTIVE_VCS_NAME" value=""/>
<option name="STATE" value="0"/>
</component>
<component name="VssConfiguration">
<CheckoutOptions>
<option name="COMMENT" value=""/>
<option name="DO_NOT_GET_LATEST_VERSION" value="false"/>
<option name="REPLACE_WRITABLE" value="false"/>
<option name="RECURSIVE" value="false"/>
</CheckoutOptions>
<CheckinOptions>
<option name="COMMENT" value=""/>
<option name="KEEP_CHECKED_OUT" value="false"/>
<option name="RECURSIVE" value="false"/>
</CheckinOptions>
<AddOptions>
<option name="COMMENT" value=""/>
<option name="STORE_ONLY_LATEST_VERSION" value="false"/>
<option name="CHECK_OUT_IMMEDIATELY" value="false"/>
<option name="FILE_TYPE" value="0"/>
</AddOptions>
<UndocheckoutOptions>
<option name="MAKE_WRITABLE" value="false"/>
<option name="REPLACE_LOCAL_COPY" value="0"/>
<option name="RECURSIVE" value="false"/>
</UndocheckoutOptions>
<DiffOptions>
<option name="IGNORE_WHITE_SPACE" value="false"/>
<option name="IGNORE_CASE" value="false"/>
</DiffOptions>
<GetOptions>
<option name="REPLACE_WRITABLE" value="0"/>
<option name="MAKE_WRITABLE" value="false"/>
<option name="RECURSIVE" value="false"/>
</GetOptions>
<option name="CLIENT_PATH" value=""/>
<option name="SRCSAFEINI_PATH" value=""/>
<option name="USER_NAME" value=""/>
<option name="PWD" value=""/>
<option name="SHOW_CHECKOUT_OPTIONS" value="true"/>
<option name="SHOW_ADD_OPTIONS" value="true"/>
<option name="SHOW_UNDOCHECKOUT_OPTIONS" value="true"/>
<option name="SHOW_DIFF_OPTIONS" value="true"/>
<option name="SHOW_GET_OPTIONS" value="true"/>
<option name="USE_EXTERNAL_DIFF" value="false"/>
<option name="EXTERNAL_DIFF_PATH" value=""/>
<option name="REUSE_LAST_COMMENT" value="false"/>
<option name="PUT_FOCUS_INTO_COMMENT" value="false"/>
<option name="SHOW_CHECKIN_OPTIONS" value="true"/>
<option name="LAST_COMMIT_MESSAGE" value=""/>
<option name="CHECKIN_DIALOG_SPLITTER_PROPORTION" value="0.8"/>
</component>
<component name="CheckinPanelState"/>
<component name="WebViewSettings">
<webview flattenPackages="false" showMembers="false" autoscrollToSource="false"/>
</component>
<component name="EjbViewSettings">
<EjbView showMembers="false" autoscrollToSource="false"/>
</component>
<component name="AppServerRunManager"/>
<component name="StarteamConfiguration">
<option name="SERVER" value=""/>
<option name="PORT" value="49201"/>
<option name="USER" value=""/>
<option name="PASSWORD" value=""/>
<option name="PROJECT" value=""/>
<option name="VIEW" value=""/>
<option name="ALTERNATIVE_WORKING_PATH" value=""/>
<option name="PUT_FOCUS_INTO_COMMENT" value="false"/>
<option name="SHOW_CHECKIN_OPTIONS" value="true"/>
<option name="LAST_COMMIT_MESSAGE" value=""/>
<option name="CHECKIN_DIALOG_SPLITTER_PROPORTION" value="0.8"/>
</component>
<component name="Cvs2Configuration">
<option name="ON_FILE_ADDING" value="0"/>
<option name="ON_FILE_REMOVING" value="0"/>
<option name="PRUNE_EMPTY_DIRECTORIES" value="true"/>
<option name="SHOW_UPDATE_OPTIONS" value="true"/>
<option name="SHOW_ADD_OPTIONS" value="true"/>
<option name="SHOW_REMOVE_OPTIONS" value="true"/>
<option name="MERGING_MODE" value="0"/>
<option name="MERGE_WITH_BRANCH1_NAME" value="HEAD"/>
<option name="MERGE_WITH_BRANCH2_NAME" value="HEAD"/>
<option name="RESET_STICKY" value="false"/>
<option name="CREATE_NEW_DIRECTORIES" value="true"/>
<option name="DEFAULT_TEXT_FILE_SUBSTITUTION" value="kv"/>
<option name="PROCESS_UNKNOWN_FILES" value="false"/>
<option name="PROCESS_DELETED_FILES" value="false"/>
<option name="SHOW_EDIT_DIALOG" value="true"/>
<option name="RESERVED_EDIT" value="false"/>
<option name="FILE_HISTORY_SPLITTER_PROPORTION" value="0.6"/>
<option name="SHOW_CHECKOUT_OPTIONS" value="true"/>
<option name="CHECKOUT_DATE_OR_REVISION_SETTINGS">
<value>
<option name="BRANCH" value=""/>
<option name="DATE" value=""/>
<option name="USE_BRANCH" value="false"/>
<option name="USE_DATE" value="false"/>
</value>
</option>
<option name="UPDATE_DATE_OR_REVISION_SETTINGS">
<value>
<option name="BRANCH" value=""/>
<option name="DATE" value=""/>
<option name="USE_BRANCH" value="false"/>
<option name="USE_DATE" value="false"/>
</value>
</option>
<option name="SHOW_CHANGES_REVISION_SETTINGS">
<value>
<option name="BRANCH" value=""/>
<option name="DATE" value=""/>
<option name="USE_BRANCH" value="false"/>
<option name="USE_DATE" value="false"/>
</value>
</option>
<option name="SHOW_OUTPUT" value="false"/>
<option name="SHOW_FILE_HISTORY_AS_TREE" value="false"/>
<option name="UPDATE_GROUP_BY_PACKAGES" value="false"/>
<option name="ADD_WATCH_INDEX" value="0"/>
<option name="REMOVE_WATCH_INDEX" value="0"/>
<option name="UPDATE_KEYWORD_SUBSTITUTION"/>
<option name="MAKE_NEW_FILES_READONLY" value="false"/>
<option name="SHOW_CORRUPTED_PROJECT_FILES" value="0"/>
<option name="TAG_AFTER_FILE_COMMIT" value="false"/>
<option name="TAG_AFTER_FILE_COMMIT_NAME" value=""/>
<option name="TAG_AFTER_PROJECT_COMMIT" value="false"/>
<option name="TAG_AFTER_PROJECT_COMMIT_NAME" value=""/>
<option name="PUT_FOCUS_INTO_COMMENT" value="false"/>
<option name="SHOW_CHECKIN_OPTIONS" value="true"/>
<option name="FORCE_NON_EMPTY_COMMENT" value="false"/>
<option name="LAST_COMMIT_MESSAGE" value=""/>
<option name="SAVE_LAST_COMMIT_MESSAGE" value="true"/>
<option name="CHECKIN_DIALOG_SPLITTER_PROPORTION" value="0.8"/>
<option name="OPTIMIZE_IMPORTS_BEFORE_PROJECT_COMMIT" value="false"/>
<option name="OPTIMIZE_IMPORTS_BEFORE_FILE_COMMIT" value="false"/>
<option name="REFORMAT_BEFORE_PROJECT_COMMIT" value="false"/>
<option name="REFORMAT_BEFORE_FILE_COMMIT" value="false"/>
<option name="FILE_HISTORY_DIALOG_COMMENTS_SPLITTER_PROPORTION" value="0.8"/>
<option name="FILE_HISTORY_DIALOG_SPLITTER_PROPORTION" value="0.5"/>
</component>
<component name="CvsTabbedWindow"/>
<component name="SvnConfiguration">
<option name="USER" value=""/>
<option name="PASSWORD" value=""/>
<option name="AUTO_ADD_FILES" value="0"/>
<option name="AUTO_DEL_FILES" value="0"/>
</component>
<component name="PerforceConfiguration">
<option name="PORT" value="magic:1666"/>
<option name="USER" value=""/>
<option name="PASSWORD" value=""/>
<option name="CLIENT" value=""/>
<option name="TRACE" value="false"/>
<option name="PERFORCE_STATUS" value="true"/>
<option name="CHANGELIST_OPTION" value="false"/>
<option name="SYSTEMROOT" value=""/>
<option name="P4_EXECUTABLE" value="p4"/>
<option name="SHOW_BRANCH_HISTORY" value="false"/>
<option name="GENERATE_COMMENT" value="false"/>
<option name="SYNC_OPTION" value="Sync"/>
<option name="PUT_FOCUS_INTO_COMMENT" value="false"/>
<option name="SHOW_CHECKIN_OPTIONS" value="true"/>
<option name="FORCE_NON_EMPTY_COMMENT" value="true"/>
<option name="LAST_COMMIT_MESSAGE" value=""/>
<option name="SAVE_LAST_COMMIT_MESSAGE" value="true"/>
<option name="CHECKIN_DIALOG_SPLITTER_PROPORTION" value="0.8"/>
<option name="OPTIMIZE_IMPORTS_BEFORE_PROJECT_COMMIT" value="false"/>
<option name="OPTIMIZE_IMPORTS_BEFORE_FILE_COMMIT" value="false"/>
<option name="REFORMAT_BEFORE_PROJECT_COMMIT" value="false"/>
<option name="REFORMAT_BEFORE_FILE_COMMIT" value="false"/>
<option name="FILE_HISTORY_DIALOG_COMMENTS_SPLITTER_PROPORTION" value="0.8"/>
<option name="FILE_HISTORY_DIALOG_SPLITTER_PROPORTION" value="0.5"/>
</component>
</project>

Binary file not shown.

View File

@ -0,0 +1 @@
17:34:15.152 [main] ERROR c.b.c.FACERecognition - [extractInfo,84] - 管道正在被关闭。

File diff suppressed because one or more lines are too long

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,69 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.bonus.core</groupId>
<artifactId>OCRTool</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.15</version>
<relativePath/>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<maven-jar-plugin.version>3.1.1</maven-jar-plugin.version>
</properties>
<dependencies>
<!-- SpringBoot 核心包 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!-- SpringBoot Web容器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.6</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<distributionManagement>
<snapshotRepository>
<!-- 和mirror配置x的Nexus的id一致 -->
<id>maven-central</id>
<name>BonusMavenRepo</name>
<url>http://192.168.0.56:8081/repository/maven-central/</url>
</snapshotRepository>
</distributionManagement>
</project>

View File

@ -0,0 +1,6 @@
这个项目继承自王为为的`componentdevelopment/OCRTool`项目只是更改了部分类的设计用来适配我的face recognition(python版本)。
项目的功能是使用java调用python在终端运行并返回在终端上的输出结果(`print`)到java中。

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,39 @@
package com.bonus.core;
/**
* @author wangvivi
*/
import com.google.gson.Gson;
public class ErrorHandler {
public static final int PYTHON_INTERPRETER_NO_EXIST = 30001;
public static final int PYTHON_SCRIPT_NO_EXIST = 30002;
public static final int PYTHON_PROCESS_START_ERROR = 30003;
public static final int PYTHON_SCRIPT_EXECUTE_ERROR = 30004;
public static final int PYTHON_EXECUTE_OTHER_ERROR = 30005;
public static final int JAVA_CALL_PYTHON_UNKWON_ERROR = 30006;
public static String getErrorInfo(int errorCode) {
switch (errorCode) {
case PYTHON_INTERPRETER_NO_EXIST:
return getInternalErrorInfo(errorCode, "python解释器文件不存在");
case PYTHON_SCRIPT_NO_EXIST:
return getInternalErrorInfo(errorCode, "python脚本不存在");
case PYTHON_PROCESS_START_ERROR:
return getInternalErrorInfo(errorCode, "启动python进程报错");
case PYTHON_SCRIPT_EXECUTE_ERROR:
return getInternalErrorInfo(errorCode, "python脚本执行异常");
case PYTHON_EXECUTE_OTHER_ERROR:
return getInternalErrorInfo(errorCode, "python脚本执行其他错误");
default:
return getInternalErrorInfo(JAVA_CALL_PYTHON_UNKWON_ERROR, "未知错误");
}
}
private static String getInternalErrorInfo(int errorCode, String errorMsg){
ErrorInfo errorInfo = new ErrorInfo(errorCode, errorMsg); // 构建error类
Gson gson = new Gson(); // Java 对象转换为 JSON 格式的数据
return gson.toJson(errorInfo); // 转化并返回json数据
}
}

View File

@ -0,0 +1,32 @@
package com.bonus.core;
/**
* @author wangvivi
*/
public class ErrorInfo {
private int code;
private String msg;
public ErrorInfo(int errorCode, String errorMessage) {
this.code = errorCode;
this.msg = errorMessage;
}
public String getMsg() {
return msg;
}
public int getCode() {
return code;
}
public void setMsg(String errormsg) {
this.msg = errormsg;
}
public void setMsg(int code) {
this.code = code;
}
}

View File

@ -0,0 +1,109 @@
package com.bonus.core;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
/**
* @author wangvivi
*/
@Component
public class FACERecognition {
private static final Logger logger = LoggerFactory.getLogger(FACERecognition.class);
@Value("${recognition.pythonEnv}") // 自动从配置文件`src.main.resources.application.yml`中读取变量recognition.pythonEnv 的值并赋予pythonEnv
private String pythonEnv;
@Value("${recognition.scriptEnv}")
private String scriptEnv;
public String extractInfo(FaceRecognitionParams params){
Process proc;
List<String> stringList = new ArrayList<>();
String lastElement = "";
try {
logger.info("开始打印从配置里读取的值:");
logger.info(pythonEnv);
logger.info(scriptEnv);
logger.info("开始打印从请求里带过来的参数:");
logger.info(params.getType());
File file = new File(pythonEnv);
if (!file.exists()) {
logger.info("pythonEnv不存在");
return ErrorHandler.getErrorInfo(ErrorHandler.PYTHON_INTERPRETER_NO_EXIST);
}
file = new File(scriptEnv);
if (!file.exists()) {
logger.info("scriptEnv 不存在");
return ErrorHandler.getErrorInfo(ErrorHandler.PYTHON_SCRIPT_NO_EXIST);
}
String[] str = new String[]{pythonEnv,scriptEnv, params.getType()};
logger.info("this is type:"+str[2]);
Runtime runtime = Runtime.getRuntime();
if (runtime == null) {
logger.info("runtime == null");
return ErrorHandler.getErrorInfo(ErrorHandler.PYTHON_PROCESS_START_ERROR);
}
proc = runtime.exec(str);
logger.info("proc = runtime.exec(str)");
OutputStream outputStream = proc.getOutputStream();
if (!params.getImageData().isEmpty()) {
byte[] input = params.getImageData().getBytes(StandardCharsets.UTF_8);
logger.info("params.getImageData()= " + params.getImageData());
passParameter(outputStream, input);
}
if (!params.getImageName().isEmpty()) {
outputStream.write(System.lineSeparator().getBytes());
byte[] input = params.getImageName().getBytes(StandardCharsets.UTF_8);
logger.info("params.getImageName()= " + params.getImageName());
passParameter(outputStream, input);
}
outputStream.flush();
outputStream.close();
logger.info("outputStream.close()");
BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream(), StandardCharsets.UTF_8));
logger.info("BufferedReader in = new BufferedReade");
String line;
while ((line = in.readLine()) != null) {
logger.info(line);
stringList.add(line);
}
proc.waitFor();
in.close();
} catch (Exception e) {
Thread.currentThread().interrupt();
logger.error(e.getMessage());
return ErrorHandler.getErrorInfo(ErrorHandler.PYTHON_EXECUTE_OTHER_ERROR);
}
if (!stringList.isEmpty()) {
lastElement = stringList.get(stringList.size() - 1);
}
return lastElement;
}
private void passParameter(OutputStream outputStream, byte[] input) throws IOException {
int offset = 0;
// 设置每次写入的批次大小
int batchSize = 8092;
long len = input.length;
while (offset < len) {
int remaining = (int) (len - offset);
int bytesToWrite = Math.min(remaining, batchSize);
outputStream.write(input, offset, bytesToWrite);
offset += bytesToWrite;
}
}
}

View File

@ -0,0 +1,55 @@
package com.bonus.core;
public class FaceRecognitionParams {
private RecognitionType type;
private String imageData = "";
private String imageName = "None";
public String getType() {
// return type.ordinal();
return type.name();
}
public void setType(RecognitionType type) {
this.type = type;
}
public String getImageData() {
return this.imageData;
}
public void setImageData(String imageData) {
this.imageData = imageData;
}
public String getImageName() {
return this.imageName;
}
public void setImageName(String imageName) {
this.imageName = imageName;
}
// Enum for different recognition types
public enum RecognitionType {
// interface_type, img_mode, opt_mode 结合在一起
UPDATEDB_BASE64_ADD,
UPDATEDB_BASE64_DELETE,
UPDATEDB_BASE64_CHANGE,
UPDATEDB_BASE64_SEARCH,
UPDATEDB_URL_ADD,
UPDATEDB_URL_DELETE,
UPDATEDB_URL_CHANGE,
UPDATEDB_URL_SEARCH,
UPDATEDB_PATH_ADD,
UPDATEDB_PATH_DELETE,
UPDATEDB_PATH_CHANGE,
UPDATEDB_PATH_SEARCH,
FACEID_BASE64_SEARCH,
FACEID_URL_SEARCH,
FACEID_PATH_SEARCH,
}
}

View File

@ -0,0 +1,92 @@
package com.bonus.core;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Base64;
/**
* @author wangweiwei
*/
@SpringBootApplication
public class MySpringBootApplication {
private static final Logger logger = LoggerFactory.getLogger(MySpringBootApplication.class);
public static void main(String[] args) {
context = SpringApplication.run(MySpringBootApplication.class, args);
MySpringBootApplication app = new MySpringBootApplication();
//String filePath1 = "/Users/wangvivi/Desktop/Code/ocrtest/images/id_card.JPG";
// String filePath1 = "/Users/wangvivi/Desktop/Code/ocrtest/images/1.jpg";
// String filePath2 = "/Users/wangvivi/Desktop/Code/ocrtest/images/2.jpg";
String imageData = "C:\\Users\\JIALE\\Desktop\\bns_proj\\proj_deepface\\20231022001743.jpg";
String imageName = "None";
FaceRecognitionParams.RecognitionType type = FaceRecognitionParams.RecognitionType.FACEID_PATH_SEARCH;
app.callExtractIdentityInfoByLocalPath(imageData,imageName, type);
// app.callExtractIdentityInfoByBase64Data(filePath1, filePath2);
}
private static ApplicationContext context;
public void callExtractIdentityInfoByLocalPath(String imageData, String imageName, FaceRecognitionParams.RecognitionType type ) {
FACERecognition myComponent = context.getBean(FACERecognition.class);
FaceRecognitionParams params = new FaceRecognitionParams();
params.setType(type);
params.setImageData(imageData);
params.setImageName(imageName);
String javaString = myComponent.extractInfo(params);
logger.info("识别结果为:");
logger.info(javaString);
}
// public String callExtractIdentityInfoByBase64Data(String file1Data, String file2Data ) {
// OCRRecognition myComponent = context.getBean(OCRRecognition.class);
//
// try {
// String base64Image1 = "";
// String base64Image2 = "";
// String javaString;
// if (!file1Data.isEmpty()) {
// byte[] data1 = Files.readAllBytes(Paths.get(file1Data));
// base64Image1 = Base64.getEncoder().encodeToString(data1);
// }
// if (!file2Data.isEmpty()){
// byte[] data = Files.readAllBytes(Paths.get(file2Data));
// base64Image2 = Base64.getEncoder().encodeToString(data);
// }
// IdentifyRecognitionParams params = new IdentifyRecognitionParams();
// params.setType(IdentifyRecognitionParams.RecognitionType.IDENTITY_CARD_BASE64_DATA);
// params.setRecognitionFrontData(base64Image1);
// params.setRecognitionBackData(base64Image2);
//
// javaString = myComponent.extractInfo(params);
// logger.info("身份证信息是:");
// logger.info(javaString);
// return javaString;
// } catch (IOException e) {
// e.printStackTrace();
// }
// return "";
// }
// public String tesseractOCR(){
// // 创建 Tesseract 实例
// Tesseract tesseract = new Tesseract();
//
// try {
// // 设置语言默认为英语
// tesseract.setLanguage("chi_sim");
// // 从图像中提取文本
// String text = tesseract.doOCR(new File("/Users/wangvivi/Desktop/Code/ocrtest/images/id_card.JPG"));
// System.out.println("识别的文本:" + text);
// return text;
// } catch (TesseractException e) {
// // 处理异常
// e.printStackTrace();
// }
// return "";
// }
}

View File

@ -0,0 +1,15 @@
package com.bonus.core;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
public class RecognitionController {
@Autowired FACERecognition faceRecognition;
@PostMapping("/recognition")
public String recognition(@RequestBody FaceRecognitionParams params){
return faceRecognition.extractInfo(params);
}
}

Binary file not shown.

View File

@ -0,0 +1,3 @@
Manifest-Version: 1.0
Main-Class: com.bonus.core.MySpringBootApplication

View File

@ -0,0 +1,3 @@
recognition:
pythonEnv: C:/Users/JIALE/.conda/envs/deepface_v2/python.exe
scriptEnv: C:/Users/JIALE/Desktop/bns_proj/proj_deepface/main.py

View File

@ -0,0 +1,92 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 日志存放路径 -->
<property name="log.path" value="./logs/" />
<!-- 日志输出格式 -->
<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" />
<!-- 控制台输出 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
</appender>
<!-- 系统日志输出 -->
<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/recognition-info.log</file>
<!-- 循环政策:基于时间创建日志文件 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志文件名格式 -->
<fileNamePattern>${log.path}/recognition-info.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 日志最大的历史 60天 -->
<maxHistory>60</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 过滤的级别 -->
<level>INFO</level>
<!-- 匹配时的操作:接收(记录) -->
<onMatch>ACCEPT</onMatch>
<!-- 不匹配时的操作:拒绝(不记录) -->
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/recognition-error.log</file>
<!-- 循环政策:基于时间创建日志文件 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志文件名格式 -->
<fileNamePattern>${log.path}/recognition-error.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 日志最大的历史 60天 -->
<maxHistory>60</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 过滤的级别 -->
<level>ERROR</level>
<!-- 匹配时的操作:接收(记录) -->
<onMatch>ACCEPT</onMatch>
<!-- 不匹配时的操作:拒绝(不记录) -->
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 用户访问日志输出 -->
<appender name="sys-user" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/recognition-user.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 按天回滚 daily -->
<fileNamePattern>${log.path}/recognition-user.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 日志最大的历史 60天 -->
<maxHistory>60</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
</appender>
<!-- 系统模块日志级别控制 -->
<logger name="com.bonus" level="info" />
<!-- Spring日志级别控制 -->
<logger name="org.springframework" level="warn" />
<root level="info">
<appender-ref ref="console" />
</root>
<!--系统操作日志-->
<root level="info">
<appender-ref ref="file_info" />
<appender-ref ref="file_error" />
</root>
<!--系统用户操作日志-->
<logger name="sys-user" level="info">
<appender-ref ref="sys-user"/>
</logger>
</configuration>

View File

@ -0,0 +1,3 @@
Manifest-Version: 1.0
Main-Class: com.bonus.core.MySpringBootApplication

View File

@ -0,0 +1,3 @@
recognition:
pythonEnv: C:/Users/JIALE/.conda/envs/deepface_v2/python.exe
scriptEnv: C:/Users/JIALE/Desktop/bns_proj/proj_deepface/main.py

View File

@ -0,0 +1,92 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 日志存放路径 -->
<property name="log.path" value="./logs/" />
<!-- 日志输出格式 -->
<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" />
<!-- 控制台输出 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
</appender>
<!-- 系统日志输出 -->
<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/recognition-info.log</file>
<!-- 循环政策:基于时间创建日志文件 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志文件名格式 -->
<fileNamePattern>${log.path}/recognition-info.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 日志最大的历史 60天 -->
<maxHistory>60</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 过滤的级别 -->
<level>INFO</level>
<!-- 匹配时的操作:接收(记录) -->
<onMatch>ACCEPT</onMatch>
<!-- 不匹配时的操作:拒绝(不记录) -->
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/recognition-error.log</file>
<!-- 循环政策:基于时间创建日志文件 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志文件名格式 -->
<fileNamePattern>${log.path}/recognition-error.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 日志最大的历史 60天 -->
<maxHistory>60</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 过滤的级别 -->
<level>ERROR</level>
<!-- 匹配时的操作:接收(记录) -->
<onMatch>ACCEPT</onMatch>
<!-- 不匹配时的操作:拒绝(不记录) -->
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 用户访问日志输出 -->
<appender name="sys-user" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/recognition-user.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 按天回滚 daily -->
<fileNamePattern>${log.path}/recognition-user.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 日志最大的历史 60天 -->
<maxHistory>60</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
</appender>
<!-- 系统模块日志级别控制 -->
<logger name="com.bonus" level="info" />
<!-- Spring日志级别控制 -->
<logger name="org.springframework" level="warn" />
<root level="info">
<appender-ref ref="console" />
</root>
<!--系统操作日志-->
<root level="info">
<appender-ref ref="file_info" />
<appender-ref ref="file_error" />
</root>
<!--系统用户操作日志-->
<logger name="sys-user" level="info">
<appender-ref ref="sys-user"/>
</logger>
</configuration>

View File

@ -0,0 +1,4 @@
#Created by Apache Maven 3.9.6
version=1.0-SNAPSHOT
groupId=com.bonus.core
artifactId=OCRTool

View File

@ -0,0 +1,5 @@
com\bonus\core\MySpringBootApplication.class
com\bonus\core\IdentifyRecognitionParams$RecognitionType.class
com\bonus\core\IdentifyRecognitionParams.class
com\bonus\core\RecognitionController.class
com\bonus\core\OCRRecognition.class

View File

@ -0,0 +1,8 @@
C:\Users\JIALE\Desktop\bns_proj\componentdevelopment\OCRTool\src\main\java\com\bonus\core\FaceRecognitionParams.java
C:\Users\JIALE\Desktop\bns_proj\componentdevelopment\OCRTool\src\main\java\com\bonus\core\MySpringBootApplication.java
C:\Users\JIALE\Desktop\bns_proj\componentdevelopment\OCRTool\src\main\java\com\bonus\core\IdentifyRecognitionParams.java
C:\Users\JIALE\Desktop\bns_proj\componentdevelopment\OCRTool\src\main\java\com\bonus\core\RecognitionController.java
C:\Users\JIALE\Desktop\bns_proj\componentdevelopment\OCRTool\src\main\java\com\bonus\core\ErrorInfo.java
C:\Users\JIALE\Desktop\bns_proj\componentdevelopment\OCRTool\src\main\java\com\bonus\core\OCRRecognition.java
C:\Users\JIALE\Desktop\bns_proj\componentdevelopment\OCRTool\src\main\java\com\bonus\core\ErrorHandler.java
C:\Users\JIALE\Desktop\bns_proj\componentdevelopment\OCRTool\src\main\java\com\bonus\core\FACERecognition.java

View File

@ -1,6 +1,8 @@
from deepface import DeepFace
import cv2
import time
# start = time.time()
from deepface import DeepFace
# print("begin time: ", time.time() - start)
import cv2
import os
import sys
import numpy as np
@ -11,20 +13,17 @@ import base64
from enum import Enum
import requests
from deepface.modules.streaming import (
build_demography_models, build_facial_recognition_model,
search_identity, highlight_facial_areas,
grab_facial_areas, extract_facial_areas,
perform_facial_recognition, perform_demography_analysis,
)
from deepface.modules import recognition, verification, detection, representation
from deepface.modules.streaming import search_identity
from deepface.modules import verification, detection
from deepface.models.FacialRecognition import FacialRecognition
from deepface.modules import preprocessing
from deepface.commons.logger import Logger
import pickle
db_path = "./face"
# print("begin2 time: ", time.time() - start)
# start2 = time.time()
db_path = "C:/Users/JIALE/Desktop/bns_proj/proj_deepface/face"
detector_backend = "opencv"
distance_metric = "euclidean_l2"
model_name = "GhostFaceNet"
@ -32,6 +31,9 @@ model: FacialRecognition = DeepFace.build_model(model_name=model_name)
target_size = model.input_shape
threshold = verification.find_threshold(model_name, distance_metric)
# print("begin3 time: ", time.time() - start)
# start3 = time.time()
class Opt(Enum):
ADD = 1
DELETE = 2
@ -53,15 +55,15 @@ class Status(Enum):
ADD_HAS_EXISTED = "when adding, file has existed"
GLOBAL_DICT = {
"Opt.ADD": Opt.ADD,
"Opt.DELETE":Opt.DELETE,
"Opt.CHANGE":Opt.CHANGE,
"Opt.SEARCH":Opt.SEARCH,
"ADD": Opt.ADD,
"DELETE":Opt.DELETE,
"CHANGE":Opt.CHANGE,
"SEARCH":Opt.SEARCH,
"Ftype.NDARRAY": Ftype.NDARRAY,
"Ftype.PATH":Ftype.PATH,
"Ftype.BASE64":Ftype.BASE64,
"Ftype.URL":Ftype.URL
"NDARRAY": Ftype.NDARRAY,
"PATH":Ftype.PATH,
"BASE64":Ftype.BASE64,
"URL":Ftype.URL
}
@ -218,7 +220,7 @@ def updateFaceDB(img: Union[str, np.ndarray], img_name: str, img_mode: Ftype, op
#interface 2: face recognition using embeddings on face_db
def faceRecog(img: Union[str,np.ndarray],img_mode: Ftype):
def faceRecog(img: Union[str,np.ndarray], img_mode: Ftype):
beg = time.time()
# keep the database is the newest
search_identity(
@ -305,7 +307,44 @@ def faceRecog(img: Union[str,np.ndarray],img_mode: Ftype):
if __name__ == "__main__":
input_data = sys.stdin.read()
split_data = input_data.replace('\r\n', '\n').split('\n') # 将 `\r\n` 优先认定为换行符, 而不是认定为 `\r + 换行`
img, img_name = "",""
TYPE = sys.argv[1]
if len(split_data) == 2:
img = split_data[0]
img_name = split_data[1]
elif len(split_data) == 1:
img = split_data[0]
print(TYPE, img, img_name)
interface_type, img_mode, opt_mode = TYPE.split("_")
img_mode = GLOBAL_DICT[img_mode]
if interface_type == "UPDATEDB":
opt_mode = GLOBAL_DICT[opt_mode]
# call updateFaceDB for handling the picture
ret = updateFaceDB(img = img,
img_name = img_name,
img_mode = img_mode,
opt_mode = opt_mode,
)
if isinstance(ret, Status): # means error happened
print(ret.value)
else:
print(f'status: {ret["status"]}, description: {ret["description"]}')
elif interface_type == "FACEID":
ret = faceRecog(
img = img,
img_mode = img_mode,
)
success, encoded_res_img = cv2.imencode('.png', ret[2])
if success:
res_img_base64 = base64.b64encode(encoded_res_img).decode("utf-8")
print(f"name: {ret[0]}, position: {ret[1]}, resImg: {res_img_base64}" )
else:
print(Status.NotImplementedError)
"""
img = sys.argv[1]
img_name = sys.argv[2]
@ -323,7 +362,7 @@ if __name__ == "__main__":
else:
print('ret["status"], ret["description"]: ', ret["status"], ret["description"])
"""
"""
# use func to face recognition
tic = time.time()
img = sys.argv[1]
@ -341,5 +380,4 @@ if __name__ == "__main__":
print("img.size = ", ret[2].shape)
cv2.imshow("res",ret[2])
cv2.waitKey(0)
"""