diff --git a/AndroidOCRTool/.DS_Store b/AndroidOCRTool/.DS_Store new file mode 100644 index 0000000..5139223 Binary files /dev/null and b/AndroidOCRTool/.DS_Store differ diff --git a/AndroidOCRTool/.gradle/6.6.1/executionHistory/executionHistory.bin b/AndroidOCRTool/.gradle/6.6.1/executionHistory/executionHistory.bin new file mode 100644 index 0000000..82249ad Binary files /dev/null and b/AndroidOCRTool/.gradle/6.6.1/executionHistory/executionHistory.bin differ diff --git a/AndroidOCRTool/.gradle/6.6.1/executionHistory/executionHistory.lock b/AndroidOCRTool/.gradle/6.6.1/executionHistory/executionHistory.lock new file mode 100644 index 0000000..6e60612 Binary files /dev/null and b/AndroidOCRTool/.gradle/6.6.1/executionHistory/executionHistory.lock differ diff --git a/AndroidOCRTool/.gradle/6.6.1/fileChanges/last-build.bin b/AndroidOCRTool/.gradle/6.6.1/fileChanges/last-build.bin new file mode 100644 index 0000000..f76dd23 Binary files /dev/null and b/AndroidOCRTool/.gradle/6.6.1/fileChanges/last-build.bin differ diff --git a/AndroidOCRTool/.gradle/6.6.1/fileContent/fileContent.lock b/AndroidOCRTool/.gradle/6.6.1/fileContent/fileContent.lock new file mode 100644 index 0000000..45b967d Binary files /dev/null and b/AndroidOCRTool/.gradle/6.6.1/fileContent/fileContent.lock differ diff --git a/AndroidOCRTool/.gradle/6.6.1/fileHashes/fileHashes.bin b/AndroidOCRTool/.gradle/6.6.1/fileHashes/fileHashes.bin new file mode 100644 index 0000000..b29422b Binary files /dev/null and b/AndroidOCRTool/.gradle/6.6.1/fileHashes/fileHashes.bin differ diff --git a/AndroidOCRTool/.gradle/6.6.1/fileHashes/fileHashes.lock b/AndroidOCRTool/.gradle/6.6.1/fileHashes/fileHashes.lock new file mode 100644 index 0000000..cb5073f Binary files /dev/null and b/AndroidOCRTool/.gradle/6.6.1/fileHashes/fileHashes.lock differ diff --git a/AndroidOCRTool/.gradle/6.6.1/fileHashes/resourceHashesCache.bin b/AndroidOCRTool/.gradle/6.6.1/fileHashes/resourceHashesCache.bin new file mode 100644 index 0000000..13485cd Binary files /dev/null and b/AndroidOCRTool/.gradle/6.6.1/fileHashes/resourceHashesCache.bin differ diff --git a/AndroidOCRTool/.gradle/6.6.1/gc.properties b/AndroidOCRTool/.gradle/6.6.1/gc.properties new file mode 100644 index 0000000..e69de29 diff --git a/AndroidOCRTool/.gradle/6.6.1/javaCompile/classAnalysis.bin b/AndroidOCRTool/.gradle/6.6.1/javaCompile/classAnalysis.bin new file mode 100644 index 0000000..2624b58 Binary files /dev/null and b/AndroidOCRTool/.gradle/6.6.1/javaCompile/classAnalysis.bin differ diff --git a/AndroidOCRTool/.gradle/6.6.1/javaCompile/jarAnalysis.bin b/AndroidOCRTool/.gradle/6.6.1/javaCompile/jarAnalysis.bin new file mode 100644 index 0000000..d6b3bb2 Binary files /dev/null and b/AndroidOCRTool/.gradle/6.6.1/javaCompile/jarAnalysis.bin differ diff --git a/AndroidOCRTool/.gradle/6.6.1/javaCompile/javaCompile.lock b/AndroidOCRTool/.gradle/6.6.1/javaCompile/javaCompile.lock new file mode 100644 index 0000000..dcb0a24 Binary files /dev/null and b/AndroidOCRTool/.gradle/6.6.1/javaCompile/javaCompile.lock differ diff --git a/AndroidOCRTool/.gradle/6.6.1/javaCompile/taskHistory.bin b/AndroidOCRTool/.gradle/6.6.1/javaCompile/taskHistory.bin new file mode 100644 index 0000000..a192e83 Binary files /dev/null and b/AndroidOCRTool/.gradle/6.6.1/javaCompile/taskHistory.bin differ diff --git a/AndroidOCRTool/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/AndroidOCRTool/.gradle/buildOutputCleanup/buildOutputCleanup.lock new file mode 100644 index 0000000..13ed933 Binary files /dev/null and b/AndroidOCRTool/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ diff --git a/AndroidOCRTool/.gradle/buildOutputCleanup/cache.properties b/AndroidOCRTool/.gradle/buildOutputCleanup/cache.properties new file mode 100644 index 0000000..b842ee5 --- /dev/null +++ b/AndroidOCRTool/.gradle/buildOutputCleanup/cache.properties @@ -0,0 +1,2 @@ +#Sun Apr 28 13:16:50 CST 2024 +gradle.version=6.6.1 diff --git a/AndroidOCRTool/.gradle/buildOutputCleanup/outputFiles.bin b/AndroidOCRTool/.gradle/buildOutputCleanup/outputFiles.bin new file mode 100644 index 0000000..6423c96 Binary files /dev/null and b/AndroidOCRTool/.gradle/buildOutputCleanup/outputFiles.bin differ diff --git a/AndroidOCRTool/.gradle/checksums/checksums.lock b/AndroidOCRTool/.gradle/checksums/checksums.lock new file mode 100644 index 0000000..dd7f855 Binary files /dev/null and b/AndroidOCRTool/.gradle/checksums/checksums.lock differ diff --git a/AndroidOCRTool/.gradle/checksums/md5-checksums.bin b/AndroidOCRTool/.gradle/checksums/md5-checksums.bin new file mode 100644 index 0000000..4b106e5 Binary files /dev/null and b/AndroidOCRTool/.gradle/checksums/md5-checksums.bin differ diff --git a/AndroidOCRTool/.gradle/checksums/sha1-checksums.bin b/AndroidOCRTool/.gradle/checksums/sha1-checksums.bin new file mode 100644 index 0000000..92f3f71 Binary files /dev/null and b/AndroidOCRTool/.gradle/checksums/sha1-checksums.bin differ diff --git a/AndroidOCRTool/.gradle/config.properties b/AndroidOCRTool/.gradle/config.properties new file mode 100644 index 0000000..4b82cac --- /dev/null +++ b/AndroidOCRTool/.gradle/config.properties @@ -0,0 +1,2 @@ +#Mon May 06 15:47:22 CST 2024 +java.home=/Applications/Android Studio.app/Contents/jbr/Contents/Home diff --git a/AndroidOCRTool/.gradle/configuration-cache/gc.properties b/AndroidOCRTool/.gradle/configuration-cache/gc.properties new file mode 100644 index 0000000..e69de29 diff --git a/AndroidOCRTool/.gradle/vcs-1/gc.properties b/AndroidOCRTool/.gradle/vcs-1/gc.properties new file mode 100644 index 0000000..e69de29 diff --git a/AndroidOCRTool/.idea/.gitignore b/AndroidOCRTool/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/AndroidOCRTool/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/AndroidOCRTool/.idea/compiler.xml b/AndroidOCRTool/.idea/compiler.xml new file mode 100644 index 0000000..61a9130 --- /dev/null +++ b/AndroidOCRTool/.idea/compiler.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/copyright/profiles_settings.xml b/AndroidOCRTool/.idea/copyright/profiles_settings.xml new file mode 100644 index 0000000..066b255 --- /dev/null +++ b/AndroidOCRTool/.idea/copyright/profiles_settings.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/copyright/xuexiang.xml b/AndroidOCRTool/.idea/copyright/xuexiang.xml new file mode 100644 index 0000000..d785b8e --- /dev/null +++ b/AndroidOCRTool/.idea/copyright/xuexiang.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/deploymentTargetDropDown.xml b/AndroidOCRTool/.idea/deploymentTargetDropDown.xml new file mode 100644 index 0000000..0c0c338 --- /dev/null +++ b/AndroidOCRTool/.idea/deploymentTargetDropDown.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/gradle.xml b/AndroidOCRTool/.idea/gradle.xml new file mode 100644 index 0000000..9553894 --- /dev/null +++ b/AndroidOCRTool/.idea/gradle.xml @@ -0,0 +1,19 @@ + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__androidx_activity_activity_1_2_4_aar.xml b/AndroidOCRTool/.idea/libraries/Gradle__androidx_activity_activity_1_2_4_aar.xml new file mode 100644 index 0000000..774a454 --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__androidx_activity_activity_1_2_4_aar.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__androidx_annotation_annotation_1_2_0.xml b/AndroidOCRTool/.idea/libraries/Gradle__androidx_annotation_annotation_1_2_0.xml new file mode 100644 index 0000000..6cc51d1 --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__androidx_annotation_annotation_1_2_0.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__androidx_annotation_annotation_experimental_1_0_0_aar.xml b/AndroidOCRTool/.idea/libraries/Gradle__androidx_annotation_annotation_experimental_1_0_0_aar.xml new file mode 100644 index 0000000..eb04698 --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__androidx_annotation_annotation_experimental_1_0_0_aar.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__androidx_appcompat_appcompat_1_3_1_aar.xml b/AndroidOCRTool/.idea/libraries/Gradle__androidx_appcompat_appcompat_1_3_1_aar.xml new file mode 100644 index 0000000..d255a77 --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__androidx_appcompat_appcompat_1_3_1_aar.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__androidx_appcompat_appcompat_resources_1_3_1_aar.xml b/AndroidOCRTool/.idea/libraries/Gradle__androidx_appcompat_appcompat_resources_1_3_1_aar.xml new file mode 100644 index 0000000..9165404 --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__androidx_appcompat_appcompat_resources_1_3_1_aar.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__androidx_arch_core_core_common_2_1_0.xml b/AndroidOCRTool/.idea/libraries/Gradle__androidx_arch_core_core_common_2_1_0.xml new file mode 100644 index 0000000..755c5fc --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__androidx_arch_core_core_common_2_1_0.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__androidx_arch_core_core_runtime_2_0_0_aar.xml b/AndroidOCRTool/.idea/libraries/Gradle__androidx_arch_core_core_runtime_2_0_0_aar.xml new file mode 100644 index 0000000..5b808b2 --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__androidx_arch_core_core_runtime_2_0_0_aar.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__androidx_arch_core_core_runtime_2_1_0_aar.xml b/AndroidOCRTool/.idea/libraries/Gradle__androidx_arch_core_core_runtime_2_1_0_aar.xml new file mode 100644 index 0000000..c06b8b0 --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__androidx_arch_core_core_runtime_2_1_0_aar.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__androidx_cardview_cardview_1_0_0_aar.xml b/AndroidOCRTool/.idea/libraries/Gradle__androidx_cardview_cardview_1_0_0_aar.xml new file mode 100644 index 0000000..066c78a --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__androidx_cardview_cardview_1_0_0_aar.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__androidx_collection_collection_1_1_0.xml b/AndroidOCRTool/.idea/libraries/Gradle__androidx_collection_collection_1_1_0.xml new file mode 100644 index 0000000..de055d6 --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__androidx_collection_collection_1_1_0.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__androidx_constraintlayout_constraintlayout_2_0_1_aar.xml b/AndroidOCRTool/.idea/libraries/Gradle__androidx_constraintlayout_constraintlayout_2_0_1_aar.xml new file mode 100644 index 0000000..c9e7a20 --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__androidx_constraintlayout_constraintlayout_2_0_1_aar.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__androidx_constraintlayout_constraintlayout_2_0_4_aar.xml b/AndroidOCRTool/.idea/libraries/Gradle__androidx_constraintlayout_constraintlayout_2_0_4_aar.xml new file mode 100644 index 0000000..7056b3c --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__androidx_constraintlayout_constraintlayout_2_0_4_aar.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__androidx_constraintlayout_constraintlayout_solver_2_0_1.xml b/AndroidOCRTool/.idea/libraries/Gradle__androidx_constraintlayout_constraintlayout_solver_2_0_1.xml new file mode 100644 index 0000000..a31a088 --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__androidx_constraintlayout_constraintlayout_solver_2_0_1.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__androidx_constraintlayout_constraintlayout_solver_2_0_4.xml b/AndroidOCRTool/.idea/libraries/Gradle__androidx_constraintlayout_constraintlayout_solver_2_0_4.xml new file mode 100644 index 0000000..257ee0b --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__androidx_constraintlayout_constraintlayout_solver_2_0_4.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__androidx_coordinatorlayout_coordinatorlayout_1_1_0_aar.xml b/AndroidOCRTool/.idea/libraries/Gradle__androidx_coordinatorlayout_coordinatorlayout_1_1_0_aar.xml new file mode 100644 index 0000000..944a3de --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__androidx_coordinatorlayout_coordinatorlayout_1_1_0_aar.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__androidx_core_core_1_5_0_aar.xml b/AndroidOCRTool/.idea/libraries/Gradle__androidx_core_core_1_5_0_aar.xml new file mode 100644 index 0000000..30f4f69 --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__androidx_core_core_1_5_0_aar.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__androidx_cursoradapter_cursoradapter_1_0_0_aar.xml b/AndroidOCRTool/.idea/libraries/Gradle__androidx_cursoradapter_cursoradapter_1_0_0_aar.xml new file mode 100644 index 0000000..414c63a --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__androidx_cursoradapter_cursoradapter_1_0_0_aar.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__androidx_customview_customview_1_0_0_aar.xml b/AndroidOCRTool/.idea/libraries/Gradle__androidx_customview_customview_1_0_0_aar.xml new file mode 100644 index 0000000..8199530 --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__androidx_customview_customview_1_0_0_aar.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__androidx_databinding_viewbinding_4_1_0_aar.xml b/AndroidOCRTool/.idea/libraries/Gradle__androidx_databinding_viewbinding_4_1_0_aar.xml new file mode 100644 index 0000000..77065cd --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__androidx_databinding_viewbinding_4_1_0_aar.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__androidx_documentfile_documentfile_1_0_0_aar.xml b/AndroidOCRTool/.idea/libraries/Gradle__androidx_documentfile_documentfile_1_0_0_aar.xml new file mode 100644 index 0000000..6795993 --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__androidx_documentfile_documentfile_1_0_0_aar.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__androidx_drawerlayout_drawerlayout_1_0_0_aar.xml b/AndroidOCRTool/.idea/libraries/Gradle__androidx_drawerlayout_drawerlayout_1_0_0_aar.xml new file mode 100644 index 0000000..10bc9a3 --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__androidx_drawerlayout_drawerlayout_1_0_0_aar.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__androidx_dynamicanimation_dynamicanimation_1_0_0_aar.xml b/AndroidOCRTool/.idea/libraries/Gradle__androidx_dynamicanimation_dynamicanimation_1_0_0_aar.xml new file mode 100644 index 0000000..40f7e7d --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__androidx_dynamicanimation_dynamicanimation_1_0_0_aar.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__androidx_exifinterface_exifinterface_1_2_0_aar.xml b/AndroidOCRTool/.idea/libraries/Gradle__androidx_exifinterface_exifinterface_1_2_0_aar.xml new file mode 100644 index 0000000..4ebea76 --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__androidx_exifinterface_exifinterface_1_2_0_aar.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__androidx_fragment_fragment_1_3_6_aar.xml b/AndroidOCRTool/.idea/libraries/Gradle__androidx_fragment_fragment_1_3_6_aar.xml new file mode 100644 index 0000000..781293f --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__androidx_fragment_fragment_1_3_6_aar.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__androidx_interpolator_interpolator_1_0_0_aar.xml b/AndroidOCRTool/.idea/libraries/Gradle__androidx_interpolator_interpolator_1_0_0_aar.xml new file mode 100644 index 0000000..e175789 --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__androidx_interpolator_interpolator_1_0_0_aar.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__androidx_legacy_legacy_support_core_utils_1_0_0_aar.xml b/AndroidOCRTool/.idea/libraries/Gradle__androidx_legacy_legacy_support_core_utils_1_0_0_aar.xml new file mode 100644 index 0000000..49bdf02 --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__androidx_legacy_legacy_support_core_utils_1_0_0_aar.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_common_2_3_1.xml b/AndroidOCRTool/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_common_2_3_1.xml new file mode 100644 index 0000000..6132943 --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_common_2_3_1.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_2_0_0_aar.xml b/AndroidOCRTool/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_2_0_0_aar.xml new file mode 100644 index 0000000..82d255b --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_2_0_0_aar.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_core_2_3_1_aar.xml b/AndroidOCRTool/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_core_2_3_1_aar.xml new file mode 100644 index 0000000..42dbcfb --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_core_2_3_1_aar.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_runtime_2_3_1_aar.xml b/AndroidOCRTool/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_runtime_2_3_1_aar.xml new file mode 100644 index 0000000..c8e4d42 --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_runtime_2_3_1_aar.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_viewmodel_2_3_1_aar.xml b/AndroidOCRTool/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_viewmodel_2_3_1_aar.xml new file mode 100644 index 0000000..42e8463 --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_viewmodel_2_3_1_aar.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_viewmodel_savedstate_2_3_1_aar.xml b/AndroidOCRTool/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_viewmodel_savedstate_2_3_1_aar.xml new file mode 100644 index 0000000..6b05d71 --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_viewmodel_savedstate_2_3_1_aar.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__androidx_loader_loader_1_0_0_aar.xml b/AndroidOCRTool/.idea/libraries/Gradle__androidx_loader_loader_1_0_0_aar.xml new file mode 100644 index 0000000..cb65407 --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__androidx_loader_loader_1_0_0_aar.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__androidx_localbroadcastmanager_localbroadcastmanager_1_0_0_aar.xml b/AndroidOCRTool/.idea/libraries/Gradle__androidx_localbroadcastmanager_localbroadcastmanager_1_0_0_aar.xml new file mode 100644 index 0000000..759a0d6 --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__androidx_localbroadcastmanager_localbroadcastmanager_1_0_0_aar.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__androidx_multidex_multidex_2_0_0_aar.xml b/AndroidOCRTool/.idea/libraries/Gradle__androidx_multidex_multidex_2_0_0_aar.xml new file mode 100644 index 0000000..9f68dca --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__androidx_multidex_multidex_2_0_0_aar.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__androidx_multidex_multidex_instrumentation_2_0_0_aar.xml b/AndroidOCRTool/.idea/libraries/Gradle__androidx_multidex_multidex_instrumentation_2_0_0_aar.xml new file mode 100644 index 0000000..2d345b3 --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__androidx_multidex_multidex_instrumentation_2_0_0_aar.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__androidx_print_print_1_0_0_aar.xml b/AndroidOCRTool/.idea/libraries/Gradle__androidx_print_print_1_0_0_aar.xml new file mode 100644 index 0000000..49f6315 --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__androidx_print_print_1_0_0_aar.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__androidx_recyclerview_recyclerview_1_2_1_aar.xml b/AndroidOCRTool/.idea/libraries/Gradle__androidx_recyclerview_recyclerview_1_2_1_aar.xml new file mode 100644 index 0000000..4356f61 --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__androidx_recyclerview_recyclerview_1_2_1_aar.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__androidx_savedstate_savedstate_1_1_0_aar.xml b/AndroidOCRTool/.idea/libraries/Gradle__androidx_savedstate_savedstate_1_1_0_aar.xml new file mode 100644 index 0000000..6d7642c --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__androidx_savedstate_savedstate_1_1_0_aar.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__androidx_test_espresso_espresso_core_3_2_0_aar.xml b/AndroidOCRTool/.idea/libraries/Gradle__androidx_test_espresso_espresso_core_3_2_0_aar.xml new file mode 100644 index 0000000..03dc600 --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__androidx_test_espresso_espresso_core_3_2_0_aar.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__androidx_test_espresso_espresso_idling_resource_3_2_0_aar.xml b/AndroidOCRTool/.idea/libraries/Gradle__androidx_test_espresso_espresso_idling_resource_3_2_0_aar.xml new file mode 100644 index 0000000..3973135 --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__androidx_test_espresso_espresso_idling_resource_3_2_0_aar.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__androidx_test_monitor_1_2_0_aar.xml b/AndroidOCRTool/.idea/libraries/Gradle__androidx_test_monitor_1_2_0_aar.xml new file mode 100644 index 0000000..895f6a7 --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__androidx_test_monitor_1_2_0_aar.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__androidx_test_runner_1_2_0_aar.xml b/AndroidOCRTool/.idea/libraries/Gradle__androidx_test_runner_1_2_0_aar.xml new file mode 100644 index 0000000..a3077df --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__androidx_test_runner_1_2_0_aar.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__androidx_transition_transition_1_2_0_aar.xml b/AndroidOCRTool/.idea/libraries/Gradle__androidx_transition_transition_1_2_0_aar.xml new file mode 100644 index 0000000..4a89653 --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__androidx_transition_transition_1_2_0_aar.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_1_1_0_aar.xml b/AndroidOCRTool/.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_1_1_0_aar.xml new file mode 100644 index 0000000..a65b319 --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_1_1_0_aar.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_animated_1_1_0_aar.xml b/AndroidOCRTool/.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_animated_1_1_0_aar.xml new file mode 100644 index 0000000..7189212 --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_animated_1_1_0_aar.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__androidx_versionedparcelable_versionedparcelable_1_1_1_aar.xml b/AndroidOCRTool/.idea/libraries/Gradle__androidx_versionedparcelable_versionedparcelable_1_1_1_aar.xml new file mode 100644 index 0000000..3b2bd25 --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__androidx_versionedparcelable_versionedparcelable_1_1_1_aar.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__androidx_viewpager2_viewpager2_1_0_0_aar.xml b/AndroidOCRTool/.idea/libraries/Gradle__androidx_viewpager2_viewpager2_1_0_0_aar.xml new file mode 100644 index 0000000..3af6caf --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__androidx_viewpager2_viewpager2_1_0_0_aar.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__androidx_viewpager_viewpager_1_0_0_aar.xml b/AndroidOCRTool/.idea/libraries/Gradle__androidx_viewpager_viewpager_1_0_0_aar.xml new file mode 100644 index 0000000..7a7da9f --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__androidx_viewpager_viewpager_1_0_0_aar.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__com_github_HuanTanSheng_EasyPhotos_3_1_5_aar.xml b/AndroidOCRTool/.idea/libraries/Gradle__com_github_HuanTanSheng_EasyPhotos_3_1_5_aar.xml new file mode 100644 index 0000000..fb67263 --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__com_github_HuanTanSheng_EasyPhotos_3_1_5_aar.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__com_github_bumptech_glide_annotations_4_12_0.xml b/AndroidOCRTool/.idea/libraries/Gradle__com_github_bumptech_glide_annotations_4_12_0.xml new file mode 100644 index 0000000..10d4678 --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__com_github_bumptech_glide_annotations_4_12_0.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__com_github_bumptech_glide_disklrucache_4_12_0.xml b/AndroidOCRTool/.idea/libraries/Gradle__com_github_bumptech_glide_disklrucache_4_12_0.xml new file mode 100644 index 0000000..4437353 --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__com_github_bumptech_glide_disklrucache_4_12_0.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__com_github_bumptech_glide_gifdecoder_4_12_0_aar.xml b/AndroidOCRTool/.idea/libraries/Gradle__com_github_bumptech_glide_gifdecoder_4_12_0_aar.xml new file mode 100644 index 0000000..5051480 --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__com_github_bumptech_glide_gifdecoder_4_12_0_aar.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__com_github_bumptech_glide_glide_4_12_0_aar.xml b/AndroidOCRTool/.idea/libraries/Gradle__com_github_bumptech_glide_glide_4_12_0_aar.xml new file mode 100644 index 0000000..224a5ca --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__com_github_bumptech_glide_glide_4_12_0_aar.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__com_github_chrisbanes_PhotoView_2_3_0_aar.xml b/AndroidOCRTool/.idea/libraries/Gradle__com_github_chrisbanes_PhotoView_2_3_0_aar.xml new file mode 100644 index 0000000..e374721 --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__com_github_chrisbanes_PhotoView_2_3_0_aar.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__com_github_xuexiangjys_XAOP_xaop_annotation_1_1_0_aar.xml b/AndroidOCRTool/.idea/libraries/Gradle__com_github_xuexiangjys_XAOP_xaop_annotation_1_1_0_aar.xml new file mode 100644 index 0000000..c4f494d --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__com_github_xuexiangjys_XAOP_xaop_annotation_1_1_0_aar.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__com_github_xuexiangjys_XAOP_xaop_runtime_1_1_0_aar.xml b/AndroidOCRTool/.idea/libraries/Gradle__com_github_xuexiangjys_XAOP_xaop_runtime_1_1_0_aar.xml new file mode 100644 index 0000000..fb24315 --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__com_github_xuexiangjys_XAOP_xaop_runtime_1_1_0_aar.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__com_github_xuexiangjys_XHttp2_2_0_4_aar.xml b/AndroidOCRTool/.idea/libraries/Gradle__com_github_xuexiangjys_XHttp2_2_0_4_aar.xml new file mode 100644 index 0000000..dfa3623 --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__com_github_xuexiangjys_XHttp2_2_0_4_aar.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__com_github_xuexiangjys_XPage_xpage_annotation_3_4_0.xml b/AndroidOCRTool/.idea/libraries/Gradle__com_github_xuexiangjys_XPage_xpage_annotation_3_4_0.xml new file mode 100644 index 0000000..c8419ba --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__com_github_xuexiangjys_XPage_xpage_annotation_3_4_0.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__com_github_xuexiangjys_XPage_xpage_lib_3_4_0_aar.xml b/AndroidOCRTool/.idea/libraries/Gradle__com_github_xuexiangjys_XPage_xpage_lib_3_4_0_aar.xml new file mode 100644 index 0000000..5f11806 --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__com_github_xuexiangjys_XPage_xpage_lib_3_4_0_aar.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__com_github_xuexiangjys_XRouter_xrouter_annotation_1_1_0.xml b/AndroidOCRTool/.idea/libraries/Gradle__com_github_xuexiangjys_XRouter_xrouter_annotation_1_1_0.xml new file mode 100644 index 0000000..ca96b8e --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__com_github_xuexiangjys_XRouter_xrouter_annotation_1_1_0.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__com_github_xuexiangjys_XRouter_xrouter_runtime_1_1_0_aar.xml b/AndroidOCRTool/.idea/libraries/Gradle__com_github_xuexiangjys_XRouter_xrouter_runtime_1_1_0_aar.xml new file mode 100644 index 0000000..70a22fc --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__com_github_xuexiangjys_XRouter_xrouter_runtime_1_1_0_aar.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__com_github_xuexiangjys_XUI_1_2_0_aar.xml b/AndroidOCRTool/.idea/libraries/Gradle__com_github_xuexiangjys_XUI_1_2_0_aar.xml new file mode 100644 index 0000000..57a656a --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__com_github_xuexiangjys_XUI_1_2_0_aar.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__com_github_xuexiangjys_XUpdate_2_1_3_aar.xml b/AndroidOCRTool/.idea/libraries/Gradle__com_github_xuexiangjys_XUpdate_2_1_3_aar.xml new file mode 100644 index 0000000..b516c0c --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__com_github_xuexiangjys_XUpdate_2_1_3_aar.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__com_github_xuexiangjys_XUtil_xutil_core_2_0_0_aar.xml b/AndroidOCRTool/.idea/libraries/Gradle__com_github_xuexiangjys_XUtil_xutil_core_2_0_0_aar.xml new file mode 100644 index 0000000..7acfd37 --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__com_github_xuexiangjys_XUtil_xutil_core_2_0_0_aar.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__com_google_android_material_material_1_4_0_aar.xml b/AndroidOCRTool/.idea/libraries/Gradle__com_google_android_material_material_1_4_0_aar.xml new file mode 100644 index 0000000..dcdd469 --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__com_google_android_material_material_1_4_0_aar.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__com_google_code_findbugs_jsr305_2_0_1.xml b/AndroidOCRTool/.idea/libraries/Gradle__com_google_code_findbugs_jsr305_2_0_1.xml new file mode 100644 index 0000000..2b56018 --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__com_google_code_findbugs_jsr305_2_0_1.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__com_google_code_gson_gson_2_8_5.xml b/AndroidOCRTool/.idea/libraries/Gradle__com_google_code_gson_gson_2_8_5.xml new file mode 100644 index 0000000..b12c3ac --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__com_google_code_gson_gson_2_8_5.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__com_squareup_javawriter_2_1_1.xml b/AndroidOCRTool/.idea/libraries/Gradle__com_squareup_javawriter_2_1_1.xml new file mode 100644 index 0000000..7612e94 --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__com_squareup_javawriter_2_1_1.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__com_squareup_leakcanary_leakcanary_android_2_6_aar.xml b/AndroidOCRTool/.idea/libraries/Gradle__com_squareup_leakcanary_leakcanary_android_2_6_aar.xml new file mode 100644 index 0000000..c64eb52 --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__com_squareup_leakcanary_leakcanary_android_2_6_aar.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__com_squareup_leakcanary_leakcanary_android_core_2_6_aar.xml b/AndroidOCRTool/.idea/libraries/Gradle__com_squareup_leakcanary_leakcanary_android_core_2_6_aar.xml new file mode 100644 index 0000000..4f88409 --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__com_squareup_leakcanary_leakcanary_android_core_2_6_aar.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__com_squareup_leakcanary_leakcanary_android_utils_2_6_aar.xml b/AndroidOCRTool/.idea/libraries/Gradle__com_squareup_leakcanary_leakcanary_android_utils_2_6_aar.xml new file mode 100644 index 0000000..a0838dc --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__com_squareup_leakcanary_leakcanary_android_utils_2_6_aar.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__com_squareup_leakcanary_leakcanary_object_watcher_2_6.xml b/AndroidOCRTool/.idea/libraries/Gradle__com_squareup_leakcanary_leakcanary_object_watcher_2_6.xml new file mode 100644 index 0000000..9df50d6 --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__com_squareup_leakcanary_leakcanary_object_watcher_2_6.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__com_squareup_leakcanary_leakcanary_object_watcher_android_2_6_aar.xml b/AndroidOCRTool/.idea/libraries/Gradle__com_squareup_leakcanary_leakcanary_object_watcher_android_2_6_aar.xml new file mode 100644 index 0000000..08138c0 --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__com_squareup_leakcanary_leakcanary_object_watcher_android_2_6_aar.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__com_squareup_leakcanary_leakcanary_object_watcher_android_androidx_2_6_aar.xml b/AndroidOCRTool/.idea/libraries/Gradle__com_squareup_leakcanary_leakcanary_object_watcher_android_androidx_2_6_aar.xml new file mode 100644 index 0000000..a4fd2e3 --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__com_squareup_leakcanary_leakcanary_object_watcher_android_androidx_2_6_aar.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__com_squareup_leakcanary_leakcanary_object_watcher_android_support_fragments_2_6_aar.xml b/AndroidOCRTool/.idea/libraries/Gradle__com_squareup_leakcanary_leakcanary_object_watcher_android_support_fragments_2_6_aar.xml new file mode 100644 index 0000000..004cd7e --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__com_squareup_leakcanary_leakcanary_object_watcher_android_support_fragments_2_6_aar.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__com_squareup_leakcanary_plumber_android_2_6_aar.xml b/AndroidOCRTool/.idea/libraries/Gradle__com_squareup_leakcanary_plumber_android_2_6_aar.xml new file mode 100644 index 0000000..8b33277 --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__com_squareup_leakcanary_plumber_android_2_6_aar.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__com_squareup_leakcanary_shark_2_6.xml b/AndroidOCRTool/.idea/libraries/Gradle__com_squareup_leakcanary_shark_2_6.xml new file mode 100644 index 0000000..ab2b3df --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__com_squareup_leakcanary_shark_2_6.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__com_squareup_leakcanary_shark_android_2_6.xml b/AndroidOCRTool/.idea/libraries/Gradle__com_squareup_leakcanary_shark_android_2_6.xml new file mode 100644 index 0000000..a1be8cd --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__com_squareup_leakcanary_shark_android_2_6.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__com_squareup_leakcanary_shark_graph_2_6.xml b/AndroidOCRTool/.idea/libraries/Gradle__com_squareup_leakcanary_shark_graph_2_6.xml new file mode 100644 index 0000000..2ab4d84 --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__com_squareup_leakcanary_shark_graph_2_6.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__com_squareup_leakcanary_shark_hprof_2_6.xml b/AndroidOCRTool/.idea/libraries/Gradle__com_squareup_leakcanary_shark_hprof_2_6.xml new file mode 100644 index 0000000..1fd5e70 --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__com_squareup_leakcanary_shark_hprof_2_6.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__com_squareup_leakcanary_shark_log_2_6.xml b/AndroidOCRTool/.idea/libraries/Gradle__com_squareup_leakcanary_shark_log_2_6.xml new file mode 100644 index 0000000..9b1237a --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__com_squareup_leakcanary_shark_log_2_6.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__com_squareup_okhttp3_okhttp_3_12_12.xml b/AndroidOCRTool/.idea/libraries/Gradle__com_squareup_okhttp3_okhttp_3_12_12.xml new file mode 100644 index 0000000..4650c09 --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__com_squareup_okhttp3_okhttp_3_12_12.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__com_squareup_okio_okio_1_15_0.xml b/AndroidOCRTool/.idea/libraries/Gradle__com_squareup_okio_okio_1_15_0.xml new file mode 100644 index 0000000..468d7f4 --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__com_squareup_okio_okio_1_15_0.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__com_squareup_okio_okio_2_2_2.xml b/AndroidOCRTool/.idea/libraries/Gradle__com_squareup_okio_okio_2_2_2.xml new file mode 100644 index 0000000..0a86646 --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__com_squareup_okio_okio_2_2_2.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__io_github_inflationx_calligraphy3_3_1_1_aar.xml b/AndroidOCRTool/.idea/libraries/Gradle__io_github_inflationx_calligraphy3_3_1_1_aar.xml new file mode 100644 index 0000000..65a9355 --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__io_github_inflationx_calligraphy3_3_1_1_aar.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__io_github_inflationx_viewpump_2_0_3_aar.xml b/AndroidOCRTool/.idea/libraries/Gradle__io_github_inflationx_viewpump_2_0_3_aar.xml new file mode 100644 index 0000000..c2f5694 --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__io_github_inflationx_viewpump_2_0_3_aar.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__io_reactivex_rxjava2_rxandroid_2_1_1_aar.xml b/AndroidOCRTool/.idea/libraries/Gradle__io_reactivex_rxjava2_rxandroid_2_1_1_aar.xml new file mode 100644 index 0000000..29b9be0 --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__io_reactivex_rxjava2_rxandroid_2_1_1_aar.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__io_reactivex_rxjava2_rxjava_2_2_20.xml b/AndroidOCRTool/.idea/libraries/Gradle__io_reactivex_rxjava2_rxjava_2_2_20.xml new file mode 100644 index 0000000..51660a7 --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__io_reactivex_rxjava2_rxjava_2_2_20.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__javax_inject_javax_inject_1.xml b/AndroidOCRTool/.idea/libraries/Gradle__javax_inject_javax_inject_1.xml new file mode 100644 index 0000000..1c03681 --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__javax_inject_javax_inject_1.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__junit_junit_4_12.xml b/AndroidOCRTool/.idea/libraries/Gradle__junit_junit_4_12.xml new file mode 100644 index 0000000..0aa8195 --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__junit_junit_4_12.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__net_sf_kxml_kxml2_2_3_0.xml b/AndroidOCRTool/.idea/libraries/Gradle__net_sf_kxml_kxml2_2_3_0.xml new file mode 100644 index 0000000..f93499d --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__net_sf_kxml_kxml2_2_3_0.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__org_aspectj_aspectjrt_1_8_9.xml b/AndroidOCRTool/.idea/libraries/Gradle__org_aspectj_aspectjrt_1_8_9.xml new file mode 100644 index 0000000..d546ab3 --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__org_aspectj_aspectjrt_1_8_9.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__org_hamcrest_hamcrest_core_1_3.xml b/AndroidOCRTool/.idea/libraries/Gradle__org_hamcrest_hamcrest_core_1_3.xml new file mode 100644 index 0000000..5312760 --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__org_hamcrest_hamcrest_core_1_3.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__org_hamcrest_hamcrest_integration_1_3.xml b/AndroidOCRTool/.idea/libraries/Gradle__org_hamcrest_hamcrest_integration_1_3.xml new file mode 100644 index 0000000..45ba306 --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__org_hamcrest_hamcrest_integration_1_3.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__org_hamcrest_hamcrest_library_1_3.xml b/AndroidOCRTool/.idea/libraries/Gradle__org_hamcrest_hamcrest_library_1_3.xml new file mode 100644 index 0000000..c3b259a --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__org_hamcrest_hamcrest_library_1_3.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__org_jetbrains_annotations_13_0.xml b/AndroidOCRTool/.idea/libraries/Gradle__org_jetbrains_annotations_13_0.xml new file mode 100644 index 0000000..1045c16 --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__org_jetbrains_annotations_13_0.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_1_3_72.xml b/AndroidOCRTool/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_1_3_72.xml new file mode 100644 index 0000000..7699b69 --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_1_3_72.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_common_1_3_72.xml b/AndroidOCRTool/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_common_1_3_72.xml new file mode 100644 index 0000000..e97b60d --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_common_1_3_72.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/libraries/Gradle__org_reactivestreams_reactive_streams_1_0_3.xml b/AndroidOCRTool/.idea/libraries/Gradle__org_reactivestreams_reactive_streams_1_0_3.xml new file mode 100644 index 0000000..65cddce --- /dev/null +++ b/AndroidOCRTool/.idea/libraries/Gradle__org_reactivestreams_reactive_streams_1_0_3.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/migrations.xml b/AndroidOCRTool/.idea/migrations.xml new file mode 100644 index 0000000..f8051a6 --- /dev/null +++ b/AndroidOCRTool/.idea/migrations.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/misc.xml b/AndroidOCRTool/.idea/misc.xml new file mode 100644 index 0000000..3c2442a --- /dev/null +++ b/AndroidOCRTool/.idea/misc.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/modules.xml b/AndroidOCRTool/.idea/modules.xml new file mode 100644 index 0000000..4459117 --- /dev/null +++ b/AndroidOCRTool/.idea/modules.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/modules/AndroidOCRTool.iml b/AndroidOCRTool/.idea/modules/AndroidOCRTool.iml new file mode 100644 index 0000000..1702a7a --- /dev/null +++ b/AndroidOCRTool/.idea/modules/AndroidOCRTool.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/modules/app/AndroidOCRTool.app.androidTest.iml b/AndroidOCRTool/.idea/modules/app/AndroidOCRTool.app.androidTest.iml new file mode 100644 index 0000000..fda5551 --- /dev/null +++ b/AndroidOCRTool/.idea/modules/app/AndroidOCRTool.app.androidTest.iml @@ -0,0 +1,136 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/modules/app/AndroidOCRTool.app.iml b/AndroidOCRTool/.idea/modules/app/AndroidOCRTool.app.iml new file mode 100644 index 0000000..0cd13f9 --- /dev/null +++ b/AndroidOCRTool/.idea/modules/app/AndroidOCRTool.app.iml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/modules/app/AndroidOCRTool.app.main.iml b/AndroidOCRTool/.idea/modules/app/AndroidOCRTool.app.main.iml new file mode 100644 index 0000000..e93b6e1 --- /dev/null +++ b/AndroidOCRTool/.idea/modules/app/AndroidOCRTool.app.main.iml @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/modules/app/AndroidOCRTool.app.unitTest.iml b/AndroidOCRTool/.idea/modules/app/AndroidOCRTool.app.unitTest.iml new file mode 100644 index 0000000..a716c33 --- /dev/null +++ b/AndroidOCRTool/.idea/modules/app/AndroidOCRTool.app.unitTest.iml @@ -0,0 +1,113 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/.idea/vcs.xml b/AndroidOCRTool/.idea/vcs.xml new file mode 100644 index 0000000..6c0b863 --- /dev/null +++ b/AndroidOCRTool/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/LICENSE b/AndroidOCRTool/LICENSE new file mode 100644 index 0000000..44cc482 --- /dev/null +++ b/AndroidOCRTool/LICENSE @@ -0,0 +1,191 @@ +Apache License +Version 2.0, January 2004 +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, and +distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by the copyright +owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all other entities +that control, are controlled by, or are under common control with that entity. +For the purposes of this definition, "control" means (i) the power, direct or +indirect, to cause the direction or management of such entity, whether by +contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the +outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity exercising +permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, including +but not limited to software source code, documentation source, and configuration +files. + +"Object" form shall mean any form resulting from mechanical transformation or +translation of a Source form, including but not limited to compiled object code, +generated documentation, and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or Object form, made +available under the License, as indicated by a copyright notice that is included +in or attached to the work (an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object form, that +is based on (or derived from) the Work and for which the editorial revisions, +annotations, elaborations, or other modifications represent, as a whole, an +original work of authorship. For the purposes of this License, Derivative Works +shall not include works that remain separable from, or merely link (or bind by +name) to the interfaces of, the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the original version +of the Work and any modifications or additions to that Work or Derivative Works +thereof, that is intentionally submitted to Licensor for inclusion in the Work +by the copyright owner or by an individual or Legal Entity authorized to submit +on behalf of the copyright owner. For the purposes of this definition, +"submitted" means any form of electronic, verbal, or written communication sent +to the Licensor or its representatives, including but not limited to +communication on electronic mailing lists, source code control systems, and +issue tracking systems that are managed by, or on behalf of, the Licensor for +the purpose of discussing and improving the Work, but excluding communication +that is conspicuously marked or otherwise designated in writing by the copyright +owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf +of whom a Contribution has been received by Licensor and subsequently +incorporated within the Work. + +2. Grant of Copyright License. + +Subject to the terms and conditions of this License, each Contributor hereby +grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, +irrevocable copyright license to reproduce, prepare Derivative Works of, +publicly display, publicly perform, sublicense, and distribute the Work and such +Derivative Works in Source or Object form. + +3. Grant of Patent License. + +Subject to the terms and conditions of this License, each Contributor hereby +grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, +irrevocable (except as stated in this section) patent license to make, have +made, use, offer to sell, sell, import, and otherwise transfer the Work, where +such license applies only to those patent claims licensable by such Contributor +that are necessarily infringed by their Contribution(s) alone or by combination +of their Contribution(s) with the Work to which such Contribution(s) was +submitted. If You institute patent litigation against any entity (including a +cross-claim or counterclaim in a lawsuit) alleging that the Work or a +Contribution incorporated within the Work constitutes direct or contributory +patent infringement, then any patent licenses granted to You under this License +for that Work shall terminate as of the date such litigation is filed. + +4. Redistribution. + +You may reproduce and distribute copies of the Work or Derivative Works thereof +in any medium, with or without modifications, and in Source or Object form, +provided that You meet the following conditions: + +You must give any other recipients of the Work or Derivative Works a copy of +this License; and +You must cause any modified files to carry prominent notices stating that You +changed the files; and +You must retain, in the Source form of any Derivative Works that You distribute, +all copyright, patent, trademark, and attribution notices from the Source form +of the Work, excluding those notices that do not pertain to any part of the +Derivative Works; and +If the Work includes a "NOTICE" text file as part of its distribution, then any +Derivative Works that You distribute must include a readable copy of the +attribution notices contained within such NOTICE file, excluding those notices +that do not pertain to any part of the Derivative Works, in at least one of the +following places: within a NOTICE text file distributed as part of the +Derivative Works; within the Source form or documentation, if provided along +with the Derivative Works; or, within a display generated by the Derivative +Works, if and wherever such third-party notices normally appear. The contents of +the NOTICE file are for informational purposes only and do not modify the +License. You may add Your own attribution notices within Derivative Works that +You distribute, alongside or as an addendum to the NOTICE text from the Work, +provided that such additional attribution notices cannot be construed as +modifying the License. +You may add Your own copyright statement to Your modifications and may provide +additional or different license terms and conditions for use, reproduction, or +distribution of Your modifications, or for any such Derivative Works as a whole, +provided Your use, reproduction, and distribution of the Work otherwise complies +with the conditions stated in this License. + +5. Submission of Contributions. + +Unless You explicitly state otherwise, any Contribution intentionally submitted +for inclusion in the Work by You to the Licensor shall be under the terms and +conditions of this License, without any additional terms or conditions. +Notwithstanding the above, nothing herein shall supersede or modify the terms of +any separate license agreement you may have executed with Licensor regarding +such Contributions. + +6. Trademarks. + +This License does not grant permission to use the trade names, trademarks, +service marks, or product names of the Licensor, except as required for +reasonable and customary use in describing the origin of the Work and +reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. + +Unless required by applicable law or agreed to in writing, Licensor provides the +Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, +including, without limitation, any warranties or conditions of TITLE, +NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are +solely responsible for determining the appropriateness of using or +redistributing the Work and assume any risks associated with Your exercise of +permissions under this License. + +8. Limitation of Liability. + +In no event and under no legal theory, whether in tort (including negligence), +contract, or otherwise, unless required by applicable law (such as deliberate +and grossly negligent acts) or agreed to in writing, shall any Contributor be +liable to You for damages, including any direct, indirect, special, incidental, +or consequential damages of any character arising as a result of this License or +out of the use or inability to use the Work (including but not limited to +damages for loss of goodwill, work stoppage, computer failure or malfunction, or +any and all other commercial damages or losses), even if such Contributor has +been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. + +While redistributing the Work or Derivative Works thereof, You may choose to +offer, and charge a fee for, acceptance of support, warranty, indemnity, or +other liability obligations and/or rights consistent with this License. However, +in accepting such obligations, You may act only on Your own behalf and on Your +sole responsibility, not on behalf of any other Contributor, and only if You +agree to indemnify, defend, and hold each Contributor harmless for any liability +incurred by, or claims asserted against, such Contributor by reason of your +accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work + +To apply the Apache License to your work, attach the following boilerplate +notice, with the fields enclosed by brackets "{}" replaced with your own +identifying information. (Don't include the brackets!) The text should be +enclosed in the appropriate comment syntax for the file format. We also +recommend that a file or class name and description of purpose be included on +the same "printed page" as the copyright notice for easier identification within +third-party archives. + + Copyright 2018 xuexiangjys + + Licensed 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. \ No newline at end of file diff --git a/AndroidOCRTool/README.md b/AndroidOCRTool/README.md new file mode 100644 index 0000000..0335630 --- /dev/null +++ b/AndroidOCRTool/README.md @@ -0,0 +1,116 @@ +# TemplateAppProject + +Android空壳模板工程,快速搭建(集成了XUI、XUtil、XAOP、XPage、XUpdate、XHttp2、友盟统计和walle多渠道打包) + +**【注意】** 本模板适用于Android Studio 4.0及以上版本,如果你的Android Studio低于 4.0版本,可使用[butterknife](https://github.com/xuexiangjys/TemplateAppProject/tree/butterknife)分支。 + +**【Kotlin版本】** 如果你想使用Kotlin语言,那么请移步[TemplateAppProject-kotlin](https://github.com/xuexiangjys/TemplateAppProject-kotlin) + +## 关于我 + +| 公众号 | 掘金 | 知乎 | CSDN | 简书 | 思否 | 哔哩哔哩 | 今日头条 +|---------|---------|--------- |---------|---------|---------|---------|---------| +| [我的Android开源之旅](https://t.1yb.co/Irse) | [点我](https://juejin.im/user/598feef55188257d592e56ed/posts) | [点我](https://www.zhihu.com/people/xuexiangjys/posts) | [点我](https://xuexiangjys.blog.csdn.net/) | [点我](https://www.jianshu.com/u/6bf605575337) | [点我](https://segmentfault.com/u/xuexiangjys) | [点我](https://space.bilibili.com/483850585) | [点我](https://img.rruu.net/image/5ff34ff7b02dd) + +## 效果 + +![templateproject_demo.gif](https://raw.githubusercontent.com/xuexiangjys/Resource/master/img/templateproject/demo.gif) + +## Star趋势图 + +[![Stargazers over time](https://starchart.cc/xuexiangjys/TemplateAppProject.svg)](https://starchart.cc/xuexiangjys/TemplateAppProject) + +## 集成介绍(请star支持) + +> 本项目是项目androidx项目。精选了X系列最实用的几个库,可大大提高开发的效率。 + +* [XUI 一个简洁而优雅的Android原生UI框架,解放你的双手!](https://github.com/xuexiangjys/XUI) + +* [XUtil 一个方便实用的Android工具类库!](https://github.com/xuexiangjys/XUtil) + +* [XAOP 一个轻量级的AOP(Android)应用框架。囊括了最实用的AOP应用。](https://github.com/xuexiangjys/XAOP) + +* [XPage 一个非常方便的fragment页面框架。](https://github.com/xuexiangjys/XPage) + +* [XUpdate 一个轻量级、高可用性的Android版本更新框架。](https://github.com/xuexiangjys/XUpdate) + +* [XHttp2 一个功能强悍的网络请求库,使用RxJava2 + Retrofit2 + OKHttp组合进行封装。](https://github.com/xuexiangjys/XHttp2) + +除此之外,还集成了其他优秀的第三方库: + +* [AndroidAutoSize 优秀的屏幕适配方案](https://github.com/JessYanCoding/AndroidAutoSize) + +* [ViewBinding Google推荐的视图绑定工具](https://developer.android.google.cn/topic/libraries/view-binding) + +* [vlayout 阿里巴巴开源淘宝多布局组件](https://github.com/alibaba/vlayout) + +* [MMKV 腾讯开源键值对存储](https://github.com/Tencent/MMKV) + +* [leakcanary 内存泄漏检测](https://github.com/square/leakcanary) + +## 更多资源 + +* [简化版Android空壳模板工程](https://github.com/xuexiangjys/TemplateSimpleProject) + +* [X-Library系列Android应用框架详解](https://github.com/xuexiangjys/AndroidAdvancedLearning/blob/master/framework/X-Library系列Android应用框架详解.md) + +* [Flutter空壳模板工程](https://github.com/xuexiangjys/flutter_template) + +## 使用方式 + +[视频教程-如何使用模板工程](https://www.bilibili.com/video/av92348545) + +1.克隆项目 + +``` +git clone https://github.com/xuexiangjys/TemplateAppProject.git +``` + +2.修改项目名(文件夹名),并删除目录下的.git文件夹(隐藏文件) + +3.使用AS打开项目,然后修改`包名`、`applicationId`和`app_name` + +* 修改包名 + +![templateproject_1.png](https://raw.githubusercontent.com/xuexiangjys/Resource/master/img/templateproject/1.png) + +![templateproject_2.png](https://raw.githubusercontent.com/xuexiangjys/Resource/master/img/templateproject/2.png) + +* 修改applicationId + +![templateproject_3.png](https://raw.githubusercontent.com/xuexiangjys/Resource/master/img/templateproject/3.png) + +* 修改app_name + +![templateproject_5.png](https://raw.githubusercontent.com/xuexiangjys/Resource/master/img/templateproject/5.png) + +## 项目打包 + +1.修改工程根目录的`gradle.properties`中的`isNeedPackage=true`。 + +2.添加并配置keystore,在`versions.gradle`中修改`app_release`相关参数。 + +3.如果考虑使用友盟统计的话,在`local.properties`中设置应用的友盟ID:`APP_ID_UMENG`。 + +4.使用`./gradlew clean assembleReleaseChannels`进行多渠道打包。 + +## 如果觉得项目还不错,可以考虑打赏一波 + +> 你的打赏是我维护的动力,我将会列出所有打赏人员的清单在下方作为凭证,打赏前请留下打赏项目的备注! + +![pay.png](https://raw.githubusercontent.com/xuexiangjys/Resource/master/img/pay/pay.png) + +感谢下面小伙伴的打赏: + +姓名 | 金额 | 方式 +:-|:-|:- +myie9 | 100¥ | 微信 +*鸥 | 10.24¥ | 微信 +**家 | 10.24¥ | 支付宝 +*寻 | 20.48¥ | 微信 + +## 联系方式 + +> 更多资讯内容,欢迎扫描关注我的个人微信公众号:【我的Android开源之旅】 + +![](https://s1.ax1x.com/2022/04/27/LbGMJH.jpg) diff --git a/AndroidOCRTool/app/.DS_Store b/AndroidOCRTool/app/.DS_Store new file mode 100644 index 0000000..4cf063c Binary files /dev/null and b/AndroidOCRTool/app/.DS_Store differ diff --git a/AndroidOCRTool/app/.gitignore b/AndroidOCRTool/app/.gitignore new file mode 100644 index 0000000..796b96d --- /dev/null +++ b/AndroidOCRTool/app/.gitignore @@ -0,0 +1 @@ +/build diff --git a/AndroidOCRTool/app/build.gradle b/AndroidOCRTool/app/build.gradle new file mode 100644 index 0000000..41c596a --- /dev/null +++ b/AndroidOCRTool/app/build.gradle @@ -0,0 +1,109 @@ +apply plugin: 'com.android.application' +apply plugin: 'img-optimizer' +//打包时,记得设置true启用 +if (isNeedPackage.toBoolean() && isUseBooster.toBoolean()) { + apply plugin: 'com.didiglobal.booster' +} + +android { + compileSdkVersion build_versions.target_sdk + buildToolsVersion build_versions.build_tools + + defaultConfig { + applicationId "com.xuexiang.templateproject" + minSdkVersion 17 + targetSdkVersion build_versions.target_sdk + versionCode 1 + versionName "1.0.0" + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + + multiDexEnabled true + vectorDrawables.useSupportLibrary = true + + javaCompileOptions { + annotationProcessorOptions { + arguments = [ moduleName : project.getName() ] + } + } + } + + signingConfigs { + if (isNeedPackage.toBoolean()) { + release { + storeFile file(app_release.storeFile) + storePassword app_release.storePassword + keyAlias app_release.keyAlias + keyPassword app_release.keyPassword + } + } + + debug { + storeFile file("./debug.jks") + storePassword "123456" + keyAlias "debug" + keyPassword "123456" + } + } + + buildTypes { + release { + minifyEnabled true + shrinkResources true + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + if (isNeedPackage.toBoolean()) { + signingConfig signingConfigs.release + + Properties properties = new Properties() + properties.load(project.rootProject.file('local.properties').newDataInputStream()) + def appID = properties.getProperty("APP_ID_UMENG") + if (appID != null) { + buildConfigField "String", "APP_ID_UMENG", appID + } else { + buildConfigField "String", "APP_ID_UMENG", '""' + } + } else { + signingConfig signingConfigs.debug + buildConfigField "String", "APP_ID_UMENG", '""' + } + } + + debug { + debuggable true + minifyEnabled false + + signingConfig signingConfigs.debug + buildConfigField "String", "APP_ID_UMENG", '""' + } + } + + lintOptions { + abortOnError false + } + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + buildFeatures { + viewBinding true + } +} + +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) + testImplementation deps.junit + androidTestImplementation deps.runner + androidTestImplementation deps.espresso.core + implementation 'com.github.chrisbanes:PhotoView:2.3.0' + implementation 'com.github.HuanTanSheng:EasyPhotos:3.1.5' + implementation 'com.github.bumptech.glide:glide:4.11.0' + + implementation 'com.github.bumptech.glide:glide:4.12.0' + annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0' +} +//自动添加X-Library依赖 +apply from: 'x-library.gradle' +//walle多渠道打包 +apply from: 'multiple-channel.gradle' + + diff --git a/AndroidOCRTool/app/channel b/AndroidOCRTool/app/channel new file mode 100644 index 0000000..10c8afd --- /dev/null +++ b/AndroidOCRTool/app/channel @@ -0,0 +1,25 @@ +# 美团 +meituan +# 三星 +samsungapps +# 小米 +xiaomi +# 91助手 +91com +# 魅族 +meizu +# 豌豆荚 +wandou +# Google Play +googleplay +# 百度 +baidu +# 360 +360cn +# 应用宝 +myapp +# 华为 +huawei +# 蒲公英 +pgyer +github \ No newline at end of file diff --git a/AndroidOCRTool/app/debug.jks b/AndroidOCRTool/app/debug.jks new file mode 100644 index 0000000..d49fb2b Binary files /dev/null and b/AndroidOCRTool/app/debug.jks differ diff --git a/AndroidOCRTool/app/multiple-channel.gradle b/AndroidOCRTool/app/multiple-channel.gradle new file mode 100644 index 0000000..5dc6dbf --- /dev/null +++ b/AndroidOCRTool/app/multiple-channel.gradle @@ -0,0 +1,10 @@ +apply plugin: 'walle' + +walle { + // 指定渠道包的输出路径 + apkOutputFolder = new File("${project.buildDir}/outputs/channels") + // 定制渠道包的APK的文件名称 + apkFileNameFormat = '${appName}-${packageName}-${channel}-${buildType}-v${versionName}-${versionCode}-${buildTime}.apk' + // 渠道配置文件 + channelFile = new File("${project.getProjectDir()}/channel") +} \ No newline at end of file diff --git a/AndroidOCRTool/app/proguard-rules.pro b/AndroidOCRTool/app/proguard-rules.pro new file mode 100644 index 0000000..2b565e2 --- /dev/null +++ b/AndroidOCRTool/app/proguard-rules.pro @@ -0,0 +1,269 @@ +#=========================================基础不变的混淆配置=========================================## +#指定代码的压缩级别 +-optimizationpasses 5 +#包名不混合大小写 +-dontusemixedcaseclassnames +#不去忽略非公共的库类 +-dontskipnonpubliclibraryclasses +# 指定不去忽略非公共的库的类的成员 +-dontskipnonpubliclibraryclassmembers +#优化 不优化输入的类文件 +-dontoptimize +#预校验 +-dontpreverify +#混淆时是否记录日志 +-verbose +# 混淆时所采用的算法 +-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* +#保护注解 +-keepattributes *Annotation* +#忽略警告 +-ignorewarnings + +##记录生成的日志数据,gradle build时在本项目根目录输出## +#apk 包内所有 class 的内部结构 +-dump class_files.txt +#未混淆的类和成员 +-printseeds seeds.txt +#列出从 apk 中删除的代码 +-printusage unused.txt +#混淆前后的映射 +-printmapping mapping.txt +# 并保留源文件名为"Proguard"字符串,而非原始的类名 并保留行号 +-keepattributes SourceFile,LineNumberTable +########记录生成的日志数据,gradle build时 在本项目根目录输出-end##### + +#需要保留的东西 +# 保持哪些类不被混淆 +-keep public class * extends android.app.Fragment +-keep public class * extends android.app.Activity +-keep public class * extends android.app.Application +-keep public class * extends android.app.Service +-keep public class * extends android.content.BroadcastReceiver +-keep public class * extends android.content.ContentProvider +-keep public class * extends android.app.backup.BackupAgentHelper +-keep public class * extends android.preference.Preference +-keep public class * extends android.support.v4.** +-keep public class com.android.vending.licensing.ILicensingService + +#如果有引用v4包可以添加下面这行 +-keep public class * extends android.support.v4.app.Fragment + +##########JS接口类不混淆,否则执行不了 +-dontwarn com.android.JsInterface.** +-keep class com.android.JsInterface.** {*; } + +#极光推送和百度lbs android sdk一起使用proguard 混淆的问题#http的类被混淆后,导致apk定位失败,保持apache 的http类不被混淆就好了 +-dontwarn org.apache.** +-keep class org.apache.**{ *; } + +-keep public class * extends android.view.View { + public (android.content.Context); + public (android.content.Context, android.util.AttributeSet); + public (android.content.Context, android.util.AttributeSet, int); + public void set*(...); + } + +#保持 native 方法不被混淆 +-keepclasseswithmembernames class * { + native ; +} + +#保持自定义控件类不被混淆 +-keepclasseswithmembers class * { + public (android.content.Context, android.util.AttributeSet); +} + +#保持自定义控件类不被混淆 +-keepclassmembers class * extends android.app.Activity { + public void *(android.view.View); +} + +#保持 Parcelable 不被混淆 +-keep class * implements android.os.Parcelable { + public static final android.os.Parcelable$Creator *; +} + +#保持 Serializable 不被混淆 +-keepnames class * implements java.io.Serializable + +#保持 Serializable 不被混淆并且enum 类也不被混淆 +-keepclassmembers class * implements java.io.Serializable { + static final long serialVersionUID; + private static final java.io.ObjectStreamField[] serialPersistentFields; + !static !transient ; + !private ; + !private ; + private void writeObject(java.io.ObjectOutputStream); + private void readObject(java.io.ObjectInputStream); + java.lang.Object writeReplace(); + java.lang.Object readResolve(); +} + +#保持枚举 enum 类不被混淆 如果混淆报错,建议直接使用上面的 -keepclassmembers class * implements java.io.Serializable即可 +-keepclassmembers enum * { + public static **[] values(); + public static ** valueOf(java.lang.String); +} + +-keepclassmembers class * { + public void *ButtonClicked(android.view.View); +} + +#不混淆资源类 +-keep class **.R$* {*;} + +#===================================混淆保护自己项目的部分代码以及引用的第三方jar包library=============================####### +#如果引用了v4或者v7包 +-dontwarn android.support.** + + +# AndroidX 防止混淆 +-dontwarn com.google.android.material.** +-dontnote com.google.android.material.** +-dontwarn androidx.** +-keep class com.google.android.material.** {*;} +-keep class androidx.** {*;} +-keep public class * extends androidx.** +-keep interface androidx.** {*;} +-keepclassmembers class * { + @androidx.annotation.Keep *; +} + +# zxing +-dontwarn com.google.zxing.** +-keep class com.google.zxing.**{*;} + +#SignalR推送 +-keep class microsoft.aspnet.signalr.** { *; } + +# 极光推送混淆 +-dontoptimize +-dontpreverify +-dontwarn cn.jpush.** +-keep class cn.jpush.** { *; } +-dontwarn cn.jiguang.** +-keep class cn.jiguang.** { *; } + +# 数据库框架OrmLite +-keepattributes *DatabaseField* +-keepattributes *DatabaseTable* +-keepattributes *SerializedName* +-keep class com.j256.** +-keepclassmembers class com.j256.** { *; } +-keep enum com.j256.** +-keepclassmembers enum com.j256.** { *; } +-keep interface com.j256.** +-keepclassmembers interface com.j256.** { *; } + +#XHttp2 +-keep class com.xuexiang.xhttp2.model.** { *; } +-keep class com.xuexiang.xhttp2.cache.model.** { *; } +-keep class com.xuexiang.xhttp2.cache.stategy.**{*;} +-keep class com.xuexiang.xhttp2.annotation.** { *; } + +#okhttp +-dontwarn com.squareup.okhttp3.** +-keep class com.squareup.okhttp3.** { *;} +-dontwarn okio.** +-dontwarn javax.annotation.Nullable +-dontwarn javax.annotation.ParametersAreNonnullByDefault +-dontwarn javax.annotation.** + +#如果用到Gson解析包的,直接添加下面这几行就能成功混淆,不然会报错 +-keepattributes Signature +-keep class com.google.gson.stream.** { *; } +-keepattributes EnclosingMethod +-keep class org.xz_sale.entity.**{*;} +-keep class com.google.gson.** {*;} +-keep class com.google.**{*;} +-keep class sun.misc.Unsafe { *; } +-keep class com.google.gson.stream.** { *; } +-keep class com.google.gson.examples.android.model.** { *; } + +# Glide +-keep public class * implements com.bumptech.glide.module.GlideModule +-keep public class * extends com.bumptech.glide.module.AppGlideModule +-keep public enum com.bumptech.glide.load.ImageHeaderParser$** { + **[] $VALUES; + public *; +} + +# Retrofit +-dontwarn retrofit2.** +-keep class retrofit2.** { *; } +-keepattributes Exceptions + +# RxJava RxAndroid +-dontwarn sun.misc.** +-keepclassmembers class rx.internal.util.unsafe.*ArrayQueue*Field* { + long producerIndex; + long consumerIndex; +} +-keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueProducerNodeRef { + rx.internal.util.atomic.LinkedQueueNode producerNode; +} +-keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueConsumerNodeRef { + rx.internal.util.atomic.LinkedQueueNode consumerNode; +} + +-dontwarn okio.** +-dontwarn javax.annotation.Nullable +-dontwarn javax.annotation.ParametersAreNonnullByDefault +-dontwarn javax.annotation.** + +# fastjson +-dontwarn com.alibaba.fastjson.** +-keep class com.alibaba.fastjson.** { *; } +-keepattributes Signature + +# xpage +-keep class com.xuexiang.xpage.annotation.** { *; } +-keep class com.xuexiang.xpage.config.** { *; } + +# xaop +-keep @com.xuexiang.xaop.annotation.* class * {*;} +-keep @org.aspectj.lang.annotation.* class * {*;} +-keep class * { + @com.xuexiang.xaop.annotation.* ; + @org.aspectj.lang.annotation.* ; +} +-keepclassmembers class * { + @com.xuexiang.xaop.annotation.* ; + @org.aspectj.lang.annotation.* ; +} + +# xrouter +-keep public class com.xuexiang.xrouter.routes.**{*;} +-keep class * implements com.xuexiang.xrouter.facade.template.ISyringe{*;} +# 如果使用了 byType 的方式获取 Service,需添加下面规则,保护接口 +-keep interface * implements com.xuexiang.xrouter.facade.template.IProvider +# 如果使用了 单类注入,即不定义接口实现 IProvider,需添加下面规则,保护实现 +-keep class * implements com.xuexiang.xrouter.facade.template.IProvider + +# xupdate +-keep class com.xuexiang.xupdate.entity.** { *; } + +# xvideo +-keep class com.xuexiang.xvideo.jniinterface.** { *; } + +# xipc +-keep @com.xuexiang.xipc.annotation.* class * {*;} +-keep class * { + @com.xuexiang.xipc.annotation.* ; +} +-keepclassmembers class * { + @com.xuexiang.xipc.annotation.* ; +} + +# umeng统计 +-keep class com.umeng.** {*;} +-keepclassmembers class * { + public (org.json.JSONObject); +} +-keepclassmembers enum * { + public static **[] values(); + public static ** valueOf(java.lang.String); +} + +-keep class com.xuexiang.xui.widget.edittext.materialedittext.** { *; } diff --git a/AndroidOCRTool/app/src/.DS_Store b/AndroidOCRTool/app/src/.DS_Store new file mode 100644 index 0000000..abbd72e Binary files /dev/null and b/AndroidOCRTool/app/src/.DS_Store differ diff --git a/AndroidOCRTool/app/src/androidTest/java/com/xuexiang/templateproject/ExampleInstrumentedTest.java b/AndroidOCRTool/app/src/androidTest/java/com/xuexiang/templateproject/ExampleInstrumentedTest.java new file mode 100644 index 0000000..c597e61 --- /dev/null +++ b/AndroidOCRTool/app/src/androidTest/java/com/xuexiang/templateproject/ExampleInstrumentedTest.java @@ -0,0 +1,27 @@ +package com.xuexiang.templateproject; + +import android.content.Context; + +import androidx.test.platform.app.InstrumentationRegistry; +import androidx.test.runner.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.*; + +/** + * Instrumented test, which will execute on an Android device. + * + * @see Testing documentation + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); + + assertEquals("com.xuexiang.templateproject", appContext.getPackageName()); + } +} diff --git a/AndroidOCRTool/app/src/main/.DS_Store b/AndroidOCRTool/app/src/main/.DS_Store new file mode 100644 index 0000000..bcb8689 Binary files /dev/null and b/AndroidOCRTool/app/src/main/.DS_Store differ diff --git a/AndroidOCRTool/app/src/main/AndroidManifest.xml b/AndroidOCRTool/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..23b93c4 --- /dev/null +++ b/AndroidOCRTool/app/src/main/AndroidManifest.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/app/src/main/assets/.DS_Store b/AndroidOCRTool/app/src/main/assets/.DS_Store new file mode 100644 index 0000000..3d493e5 Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/.DS_Store differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/.DS_Store b/AndroidOCRTool/app/src/main/assets/OCRPython/.DS_Store new file mode 100644 index 0000000..0bed67d Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/.DS_Store differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/.idea/OCRPython.iml b/AndroidOCRTool/app/src/main/assets/OCRPython/.idea/OCRPython.iml new file mode 100644 index 0000000..82ae1e8 --- /dev/null +++ b/AndroidOCRTool/app/src/main/assets/OCRPython/.idea/OCRPython.iml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/.idea/inspectionProfiles/profiles_settings.xml b/AndroidOCRTool/app/src/main/assets/OCRPython/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000..105ce2d --- /dev/null +++ b/AndroidOCRTool/app/src/main/assets/OCRPython/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/.idea/misc.xml b/AndroidOCRTool/app/src/main/assets/OCRPython/.idea/misc.xml new file mode 100644 index 0000000..d1b825e --- /dev/null +++ b/AndroidOCRTool/app/src/main/assets/OCRPython/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/.idea/modules.xml b/AndroidOCRTool/app/src/main/assets/OCRPython/.idea/modules.xml new file mode 100644 index 0000000..ccb86f8 --- /dev/null +++ b/AndroidOCRTool/app/src/main/assets/OCRPython/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/.idea/vcs.xml b/AndroidOCRTool/app/src/main/assets/OCRPython/.idea/vcs.xml new file mode 100644 index 0000000..6c0b863 --- /dev/null +++ b/AndroidOCRTool/app/src/main/assets/OCRPython/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/.idea/workspace.xml b/AndroidOCRTool/app/src/main/assets/OCRPython/.idea/workspace.xml new file mode 100644 index 0000000..07df508 --- /dev/null +++ b/AndroidOCRTool/app/src/main/assets/OCRPython/.idea/workspace.xml @@ -0,0 +1,128 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1714962249993 + + + + + + + + + + + + + + file://$PROJECT_DIR$/extractor/identitycard_extractor.py + 129 + + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/__pycache__/paddleocr.cpython-39.pyc b/AndroidOCRTool/app/src/main/assets/OCRPython/__pycache__/paddleocr.cpython-39.pyc new file mode 100644 index 0000000..c5c0357 Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/__pycache__/paddleocr.cpython-39.pyc differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/__pycache__/potencent.cpython-312.pyc b/AndroidOCRTool/app/src/main/assets/OCRPython/__pycache__/potencent.cpython-312.pyc new file mode 100644 index 0000000..e9a7ded Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/__pycache__/potencent.cpython-312.pyc differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/backup/IDRecognition b/AndroidOCRTool/app/src/main/assets/OCRPython/backup/IDRecognition new file mode 100644 index 0000000..fcec7a5 --- /dev/null +++ b/AndroidOCRTool/app/src/main/assets/OCRPython/backup/IDRecognition @@ -0,0 +1,32 @@ +from paddleocr import PaddleOCR, draw_ocr +import time + +from extractor.identitycard_extractor import IdentityCardExtractor + +# Paddleocr目前支持的多语言语种可以通过修改lang参数进行切换 +# 例如`ch`, `en`, `fr`, `german`, `korean`, `japan` + +stat_time = time.time() +ocr = PaddleOCR(use_angle_cls=True, lang="ch") # need to run only once to download and load model into memory +img_path = 'D:\project\python\OCR\images\id_card.JPG' +result = ocr.ocr(img_path, cls=True) +for idx in range(len(result)): + res = result[idx] + for line in res: + print(line) + +end_time = time.time() +print(end_time - stat_time) + +# 显示结果 +# 如果本地没有simfang.ttf,可以在doc/fonts目录下下载 +from PIL import Image + +result = result[0] +image = Image.open(img_path).convert('RGB') +boxes = [line[0] for line in result] +txts = [line[1][0] for line in result] +scores = [line[1][1] for line in result] +im_show = draw_ocr(image, boxes, txts, scores, font_path='doc/fonts/simfang.ttf') +im_show = Image.fromarray(im_show) +im_show.save('result.jpg') diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/backup/IDRecognition.py b/AndroidOCRTool/app/src/main/assets/OCRPython/backup/IDRecognition.py new file mode 100644 index 0000000..a595b2a --- /dev/null +++ b/AndroidOCRTool/app/src/main/assets/OCRPython/backup/IDRecognition.py @@ -0,0 +1,16 @@ +#refer to https://www.jianshu.com/p/f57165f34839 + +import cv2 +import pytesseract + +# 读取身份证图像 +image = cv2.imread('/Users/wangvivi/Desktop/Code/ocrtest/images/id_card.JPG') + +# 将图像转换为灰度 +gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) + +# 使用Tesseract进行文字识别 +text = pytesseract.image_to_string(gray, lang='chi_sim') + +# 打印识别的文字 +print(text) diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/backup/ocr.py b/AndroidOCRTool/app/src/main/assets/OCRPython/backup/ocr.py new file mode 100644 index 0000000..8011175 --- /dev/null +++ b/AndroidOCRTool/app/src/main/assets/OCRPython/backup/ocr.py @@ -0,0 +1,151 @@ +# -*- coding: UTF-8 -*- +import cv2 +import matplotlib.pyplot as plt +import numpy as np +import pytesseract +from PIL import Image + +debug = 1 + + +def preprocess(gray): + ret, binary = cv2.threshold(gray, 180, 255, cv2.THRESH_BINARY_INV) + ele = cv2.getStructuringElement(cv2.MORPH_RECT, (15, 10)) + dilation = cv2.dilate(binary, ele, iterations=1) + cv2.imwrite("binary.png", binary) + cv2.imwrite("dilation.png", dilation) + + return dilation + + +def findTextRegion(img): + region = [] + # 1. 查找轮廓 + #image, contours, hierarchy = cv2.findContours(img, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) + contours, hierarchy = cv2.findContours(img, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) + + # 2. 筛选那些面积小的 + for i in range(len(contours)): + cnt = contours[i] + # 计算该轮廓的面积 + area = cv2.contourArea(cnt) + + # 面积小的都筛选掉 + if (area < 300): + continue + + # 轮廓近似,作用很小 + epsilon = 0.001 * cv2.arcLength(cnt, True) + approx = cv2.approxPolyDP(cnt, epsilon, True) + + # 找到最小的矩形,该矩形可能有方向 + rect = cv2.minAreaRect(cnt) + if debug: + print("rect is: ", rect) + + # box是四个点的坐标 + box = cv2.boxPoints(rect) + box = np.int0(box) + + # 计算高和宽 + height = abs(box[0][1] - box[2][1]) + width = abs(box[0][0] - box[2][0]) + + # 筛选那些太细的矩形,留下扁的 + if (height > width * 1.2): + continue + # 太扁的也不要 + if (height * 18 < width): + continue + if (width > img.shape[1] / 2 and height > img.shape[0] / 20): + region.append(box) + + return region + + +def grayImg(img): + # 转化为灰度图 + gray = cv2.resize(img, (img.shape[1] * 3, img.shape[0] * 3), interpolation=cv2.INTER_CUBIC) + gray = cv2.cvtColor(gray, cv2.COLOR_BGR2GRAY) + retval, gray = cv2.threshold(gray, 120, 255, cv2.THRESH_OTSU + cv2.THRESH_BINARY) + return gray + + +def detect(img): + # fastNlMeansDenoisingColored(InputArray src, OutputArray dst, float h=3, float hColor=3, int templateWindowSize=7, int searchWindowSize=21 ) + gray = cv2.fastNlMeansDenoisingColored(img, None, 10, 3, 3, 3) + coefficients = [0, 1, 1] + m = np.array(coefficients).reshape((1, 3)) + gray = cv2.transform(gray, m) + if debug: + cv2.imwrite("gray.png", gray) + + # 2. 形态学变换的预处理,得到可以查找矩形的图片 + dilation = preprocess(gray) + + # 3. 查找和筛选文字区域 + region = findTextRegion(dilation) + + # 4. 用绿线画出这些找到的轮廓 + ii = 0 + + for box in region: + h = abs(box[0][1] - box[2][1]) + w = abs(box[0][0] - box[2][0]) + Xs = [i[0] for i in box] + Ys = [i[1] for i in box] + x1 = min(Xs) + y1 = min(Ys) + cv2.drawContours(img, [box], 0, (0, 255, 0), 2) + if w > 0 and h > 0 and x1 < gray.shape[1] / 2: + idImg = grayImg(img[y1:y1 + h, x1:x1 + w]) + cv2.imwrite(str(ii) + ".png", idImg) + break + ii += 1 + + if debug: + # 带轮廓的图片 + cv2.imwrite("contours.png", img) + return idImg + + +def crop_image(img, tol=0): + mask = img < tol + return img[np.ix_(mask.any(1), mask.any(0))] + + +def ocrIdCard(imgPath, realId=""): + import os + # 获取 TESSDATA_PREFIX 环境变量的值 + tessdata_prefix = os.environ.get('TESSDATA_PREFIX') + # 打印出 TESSDATA_PREFIX 环境变量的值 + print("TESSDATA_PREFIX:", tessdata_prefix) + + img = cv2.imread(imgPath, cv2.IMREAD_COLOR) + img = cv2.resize(img, (428, 270), interpolation=cv2.INTER_CUBIC) + idImg = detect(img) + image = Image.fromarray(idImg) + #tessdata_dir_config = '-c tessedit_char_whitelist=0123456789X --tessdata-dir "./"' + print("checking") + print(realId) + result = pytesseract.image_to_string(img, lang='chi_sim' ) + #result = pytesseract.image_to_string(image, lang='chi_sim' )#ocrb,config=tessdata_dir_config,chi_sim + print(result) + # print(pytesseract.image_to_string(image, lang='eng', config=tessdata_dir_config)) + if debug: + f, axarr = plt.subplots(2, 3) + axarr[0, 0].imshow(cv2.imread(imgPath)) + axarr[0, 1].imshow(cv2.imread("gray.png")) + axarr[0, 2].imshow(cv2.imread("binary.png")) + axarr[1, 0].imshow(cv2.imread("dilation.png")) + axarr[1, 1].imshow(cv2.imread("contours.png")) + axarr[1, 2].set_title("exp:" + realId + "\nocr:" + result) + axarr[1, 2].imshow(cv2.imread("0.png")) + plt.show() + + +ocrIdCard("/Users/wangvivi/Desktop/Code/ocrtest/images/id_card.JPG", "11204416541220243X") +# ocrIdCard("test2.png", "430523197603204314") +# ocrIdCard("test3.png", "37030519820727311X") +# ocrIdCard("test4.png", "431023199205297212") +# ocrIdCard("test0.png", "445281198606095334") diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/backup/opencv.py b/AndroidOCRTool/app/src/main/assets/OCRPython/backup/opencv.py new file mode 100644 index 0000000..f911d00 --- /dev/null +++ b/AndroidOCRTool/app/src/main/assets/OCRPython/backup/opencv.py @@ -0,0 +1,26 @@ +import cv2 +import pytesseract +import base64 +import numpy as np +# 从图片路径进行OCR识别 +def ocr_from_path(image_path): + # 读取图片 + image = cv2.imread(image_path, cv2.COLOR_BGR2GRAY) + # 使用Tesseract进行OCR识别 + ocr_text = pytesseract.image_to_string(image, lang='chi_sim')#chi_sim ocrd + return ocr_text + +# 从Base64编码的图像进行OCR识别 +def ocr_from_base64(base64_string): + # 解码Base64编码的字符串为字节数据 + image_data = base64.b64decode(base64_string) + # 将字节数据转换为OpenCV图像 + nparr = np.frombuffer(image_data, np.uint8) + image = cv2.imdecode(nparr, cv2.IMREAD_COLOR) + # 使用Tesseract进行OCR识别 + ocr_text = pytesseract.image_to_string(image, lang='chi_sim') + return ocr_text + + +string = ocr_from_path("/Users/wangvivi/Desktop/Code/ocrtest/images/id_card.JPG") +print(f"{string}") \ No newline at end of file diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/backup/padderOcrmain.py b/AndroidOCRTool/app/src/main/assets/OCRPython/backup/padderOcrmain.py new file mode 100644 index 0000000..2a602e7 --- /dev/null +++ b/AndroidOCRTool/app/src/main/assets/OCRPython/backup/padderOcrmain.py @@ -0,0 +1,85 @@ +from paddleocr import PaddleOCR, draw_ocr +import time + +from extractor.identitycard_extractor import IdentityCardExtractor + +# Paddleocr目前支持的多语言语种可以通过修改lang参数进行切换 +# 例如`ch`, `en`, `fr`, `german`, `korean`, `japan` + +# stat_time = time.time() +# print("start.....") +# # 加载图片 +# # image = cv2.imread(image_path) +# # print(image.shape) +# # # 旋转图片(如果高度大于宽度) +# # height, width = image.shape[:2] +# # if height < width: +# # # 顺时针旋转图片90度 +# # image = cv2.rotate(image, cv2.ROTATE_90_CLOCKWISE) +# ocr = PaddleOCR(use_angle_cls=True, lang="ch") # need to run only once to download and load model into memory +# print("PaddleOCR end.....") +# img_path = '/Users/wangvivi/Desktop/Code/ocrtest/images/id_card.JPG' +# print(img_path) +# result = ocr.ocr(img_path, cls=False) +# print("ocr.ocr end.....") +# text = "" +# print(f"len(result): {len(result)}") +# for idx in range(len(result)): +# res = result[idx] +# for line in res: +# #tempText = (line[1][0]) +# # tempText = tempText.replace("\n", "") +# # tempText = tempText.replace(" ", "") +# text += (line[1][0] + '\n') +# print(text) + +#text = "" +# for idx in range(len(result)): +# res = result[idx] +# for line in res: +# print(line[0][1][0]) + #text =+ '/n'.join(line) + + +# if result: +# ocr_texts = result[0][0][1][0] + +# end_time = time.time() +# print(end_time - stat_time) + +# 显示结果 +# 如果本地没有simfang.ttf,可以在doc/fonts目录下下载 +# from PIL import Image + +# result = result[0] +# image = Image.open(img_path).convert('RGB') +# boxes = [line[0] for line in result] +# txts = [line[1][0] for line in result] +# scores = [line[1][1] for line in result] +# im_show = draw_ocr(image, boxes, txts, scores, font_path='doc/fonts/simfang.ttf') +# im_show = Image.fromarray(im_show) +# im_show.save('result.jpg') + + +def ocrIdCardInfo(type:int, filePath1: str, filePath2: str)->str: + ocr = PaddleOCR(use_angle_cls=True, lang="ch") # need to run only once to download and load model into memory + print("PaddleOCR end.....") + img_path = '/Users/wangvivi/Desktop/Code/ocrtest/images/id_card.JPG' + print(img_path) + result = ocr.ocr(img_path, cls=False) + print("ocr.ocr end.....") + text = "" + print(f"len(result): {len(result)}") + for idx in range(len(result)): + res = result[idx] + for line in res: + text += (line[1][0] + '\n') + + # extractor = IdentityCardExtractor() + # jsonString = extractor.extract_text(text) + + return jsonString + + +jsonString = ocrIdCardInfo("/Users/wangvivi/Desktop/Code/ocrtest/images/id_card.JPG","/Users/wangvivi/Desktop/Code/ocrtest/images/id_card.JPG") +print(jsonString) \ No newline at end of file diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/backup/potencent.py b/AndroidOCRTool/app/src/main/assets/OCRPython/backup/potencent.py new file mode 100644 index 0000000..719a12d --- /dev/null +++ b/AndroidOCRTool/app/src/main/assets/OCRPython/backup/potencent.py @@ -0,0 +1,10 @@ +import potencent + +# 可以填写本地图片的地址:img_path,也可以填写在线图片的地址:img_url +# 如果2个都填,则只用在线图片 +res = potencent.ocr.IDCardOCR( + img_path=r'/Users/wangvivi/Desktop/Code/ocrtest/images/id_card.JPG', + img_url='', + configPath=r'配置文件的信息,可以不填') + +print(res) diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/configs/__pycache__/basic_config.cpython-312.pyc b/AndroidOCRTool/app/src/main/assets/OCRPython/configs/__pycache__/basic_config.cpython-312.pyc new file mode 100644 index 0000000..4650d1b Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/configs/__pycache__/basic_config.cpython-312.pyc differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/configs/__pycache__/basic_config.cpython-39.pyc b/AndroidOCRTool/app/src/main/assets/OCRPython/configs/__pycache__/basic_config.cpython-39.pyc new file mode 100644 index 0000000..c5ce27b Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/configs/__pycache__/basic_config.cpython-39.pyc differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/configs/basic_config.py b/AndroidOCRTool/app/src/main/assets/OCRPython/configs/basic_config.py new file mode 100644 index 0000000..a3dcd93 --- /dev/null +++ b/AndroidOCRTool/app/src/main/assets/OCRPython/configs/basic_config.py @@ -0,0 +1,34 @@ +import logging +import os +from logging.handlers import RotatingFileHandler + +# 是否显示详细日志 +log_verbose = True +# 通常情况下不需要更改以下内容 + +# 日志格式 +LOG_FORMAT = "%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s" +logger = logging.getLogger() + +LOG_BACKUP_COUNT = 10 # 保留的归档文件数量 +LOG_MAX_FILE_SIZE = 1024 * 1024 # 每个日志文件的最大大小(以字节为单位) + +# 创建日志记录器并设置日志级别 +logging.basicConfig(level=logging.INFO, format=LOG_FORMAT) +logger.setLevel(logging.INFO) +# 日志存储路径 +LOG_PATH = os.path.join(os.path.dirname(os.path.dirname(__file__)), "logs") +if not os.path.exists(LOG_PATH): + os.mkdir(LOG_PATH) + + +# 创建文件处理程序,并设置日志级别和文件名 +file_handler = RotatingFileHandler(LOG_PATH +'/ocr_reconginition.log', maxBytes=LOG_MAX_FILE_SIZE, backupCount=LOG_BACKUP_COUNT) +file_handler.setLevel(logging.INFO) + +# # 设置日志记录格式 +formatter = logging.Formatter(LOG_FORMAT) +file_handler.setFormatter(formatter) + +# 获取日志记录器并添加文件处理程序 +logger.addHandler(file_handler) diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/document_loader/__init__.py b/AndroidOCRTool/app/src/main/assets/OCRPython/document_loader/__init__.py new file mode 100644 index 0000000..4fa421a --- /dev/null +++ b/AndroidOCRTool/app/src/main/assets/OCRPython/document_loader/__init__.py @@ -0,0 +1,4 @@ +from .imgloader import RapidOCRLoader +from .pdfloader import RapidOCRPDFLoader +from .ocr import get_ocr + diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/document_loader/__pycache__/__init__.cpython-312.pyc b/AndroidOCRTool/app/src/main/assets/OCRPython/document_loader/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..bd1f3a4 Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/document_loader/__pycache__/__init__.cpython-312.pyc differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/document_loader/__pycache__/__init__.cpython-39.pyc b/AndroidOCRTool/app/src/main/assets/OCRPython/document_loader/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000..90bc8a6 Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/document_loader/__pycache__/__init__.cpython-39.pyc differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/document_loader/__pycache__/imgloader.cpython-312.pyc b/AndroidOCRTool/app/src/main/assets/OCRPython/document_loader/__pycache__/imgloader.cpython-312.pyc new file mode 100644 index 0000000..81f30f6 Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/document_loader/__pycache__/imgloader.cpython-312.pyc differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/document_loader/__pycache__/imgloader.cpython-39.pyc b/AndroidOCRTool/app/src/main/assets/OCRPython/document_loader/__pycache__/imgloader.cpython-39.pyc new file mode 100644 index 0000000..7441e2c Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/document_loader/__pycache__/imgloader.cpython-39.pyc differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/document_loader/__pycache__/ocr.cpython-312.pyc b/AndroidOCRTool/app/src/main/assets/OCRPython/document_loader/__pycache__/ocr.cpython-312.pyc new file mode 100644 index 0000000..c206461 Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/document_loader/__pycache__/ocr.cpython-312.pyc differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/document_loader/__pycache__/ocr.cpython-39.pyc b/AndroidOCRTool/app/src/main/assets/OCRPython/document_loader/__pycache__/ocr.cpython-39.pyc new file mode 100644 index 0000000..5b92fee Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/document_loader/__pycache__/ocr.cpython-39.pyc differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/document_loader/__pycache__/pdfloader.cpython-312.pyc b/AndroidOCRTool/app/src/main/assets/OCRPython/document_loader/__pycache__/pdfloader.cpython-312.pyc new file mode 100644 index 0000000..d1ac9a9 Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/document_loader/__pycache__/pdfloader.cpython-312.pyc differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/document_loader/__pycache__/pdfloader.cpython-39.pyc b/AndroidOCRTool/app/src/main/assets/OCRPython/document_loader/__pycache__/pdfloader.cpython-39.pyc new file mode 100644 index 0000000..9ac09be Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/document_loader/__pycache__/pdfloader.cpython-39.pyc differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/document_loader/imgloader.py b/AndroidOCRTool/app/src/main/assets/OCRPython/document_loader/imgloader.py new file mode 100644 index 0000000..0bf6986 --- /dev/null +++ b/AndroidOCRTool/app/src/main/assets/OCRPython/document_loader/imgloader.py @@ -0,0 +1,49 @@ +from abc import ABC, abstractmethod +from typing import List +import json +from langchain.document_loaders.unstructured import UnstructuredFileLoader +import re +from document_loader.ocr import get_ocr + + +class RapidOCRLoader(UnstructuredFileLoader): + """图片的OCR识别类""" + def _get_elements(self) -> List: + def img2text(filepath): + resp = "" + ocr = get_ocr() + result, _ = ocr(filepath) + if result: + ocr_result = [line[1] for line in result] + resp += "\n".join(ocr_result) + return resp + + text = img2text(self.file_path) + from unstructured.partition.text import partition_text + return partition_text(text=text, **self.unstructured_kwargs) + + + + +if __name__ == "__main__": + #loader = RapidOCRLoader(file_path="/Users/wangvivi/Desktop/Code/ocrtest/images/id_card.JPG") + #loader = RapidOCRLoader(file_path="/Users/wangvivi/Desktop/Code/ocrtest/images/id_card.JPG") + #loader = RapidOCRLoader(file_path="/Users/wangvivi/Desktop/Code/ocrtest/images/20230726163834.png") + #loader = RapidOCRLoader(file_path="/Users/wangvivi/Desktop/Code/ocrtest/images/QQ截图20230726163813.png") + loader = RapidOCRLoader(file_path="/Users/wangvivi/Desktop/Code/ocrtest/images/id_card.JPG") + #loader = RapidOCRLoader(file_path="/Users/wangvivi/Desktop/Code/ocrtest/images/032002200511-91445598.pdf") + #loader = RapidOCRLoader(file_path="/Users/wangvivi/Desktop/Code/ocrtest/images/fapiao.jpg") + + docs = loader.load() + context = "\n".join([doc.page_content for doc in docs]) + print(context) + + # extractor = IdentityCardExtractor() + # jsonString = extractor.extract_text(context) + # print(jsonString) + # context = remove_blank_lines(context) + # print("*"*20) + # print(context) + # info = extract_id_card_info(context) + # jsonString = json.dumps(info, ensure_ascii=False) + # print(jsonString) \ No newline at end of file diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/document_loader/ocr.py b/AndroidOCRTool/app/src/main/assets/OCRPython/document_loader/ocr.py new file mode 100644 index 0000000..0fadaee --- /dev/null +++ b/AndroidOCRTool/app/src/main/assets/OCRPython/document_loader/ocr.py @@ -0,0 +1,21 @@ +from typing import TYPE_CHECKING + +from configs.basic_config import logger + +# if TYPE_CHECKING: +# try: +# from rapidocr_paddle import RapidOCR +# except ImportError: +# from rapidocr_onnxruntime import RapidOCR + + +def get_ocr(use_cuda: bool = True) -> "RapidOCR": + try: + from rapidocr_paddle import RapidOCR + logger.info(f"from rapidocr_paddle import RapidOCR") + ocr = RapidOCR(det_use_cuda=use_cuda, cls_use_cuda=use_cuda, rec_use_cuda=use_cuda) + except ImportError: + from rapidocr_onnxruntime import RapidOCR + logger.info(f"from rapidocr_onnxruntime import RapidOCR") + ocr = RapidOCR() + return ocr diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/document_loader/paddleOcr.py b/AndroidOCRTool/app/src/main/assets/OCRPython/document_loader/paddleOcr.py new file mode 100644 index 0000000..8d164e0 --- /dev/null +++ b/AndroidOCRTool/app/src/main/assets/OCRPython/document_loader/paddleOcr.py @@ -0,0 +1,61 @@ +from paddleocr import PaddleOCR, draw_ocr +import time + +from extractor.identitycard_extractor import IdentityCardExtractor + +# Paddleocr目前支持的多语言语种可以通过修改lang参数进行切换 +# 例如`ch`, `en`, `fr`, `german`, `korean`, `japan` + +stat_time = time.time() +print("start.....") +# 加载图片 +# image = cv2.imread(image_path) +# print(image.shape) +# # 旋转图片(如果高度大于宽度) +# height, width = image.shape[:2] +# if height < width: +# # 顺时针旋转图片90度 +# image = cv2.rotate(image, cv2.ROTATE_90_CLOCKWISE) +ocr = PaddleOCR(use_angle_cls=True, lang="ch") # need to run only once to download and load model into memory +print("PaddleOCR end.....") +img_path = '/Users/wangvivi/Desktop/Code/ocrtest/images/id_card.JPG' +print(img_path) +result = ocr.ocr(img_path, cls=False) +print("ocr.ocr end.....") +text = "" +print(f"len(result): {len(result)}") +for idx in range(len(result)): + res = result[idx] + for line in res: + #tempText = (line[1][0]) + # tempText = tempText.replace("\n", "") + # tempText = tempText.replace(" ", "") + text += (line[1][0] + '\n') +print(text) + +#text = "" +# for idx in range(len(result)): +# res = result[idx] +# for line in res: +# print(line[0][1][0]) + #text =+ '/n'.join(line) + + +# if result: +# ocr_texts = result[0][0][1][0] + +# end_time = time.time() +# print(end_time - stat_time) + +# 显示结果 +# 如果本地没有simfang.ttf,可以在doc/fonts目录下下载 +# from PIL import Image + +# result = result[0] +# image = Image.open(img_path).convert('RGB') +# boxes = [line[0] for line in result] +# txts = [line[1][0] for line in result] +# scores = [line[1][1] for line in result] +# im_show = draw_ocr(image, boxes, txts, scores, font_path='doc/fonts/simfang.ttf') +# im_show = Image.fromarray(im_show) +# im_show.save('result.jpg') diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/document_loader/pdfloader.py b/AndroidOCRTool/app/src/main/assets/OCRPython/document_loader/pdfloader.py new file mode 100644 index 0000000..4cc3419 --- /dev/null +++ b/AndroidOCRTool/app/src/main/assets/OCRPython/document_loader/pdfloader.py @@ -0,0 +1,75 @@ +from typing import List +from langchain.document_loaders.unstructured import UnstructuredFileLoader +PDF_OCR_THRESHOLD= (0.6,0.6) +import tqdm +import re +from document_loader.ocr import get_ocr + +class RapidOCRPDFLoader(UnstructuredFileLoader): + def _get_elements(self) -> List: + def pdf2text(filepath): + import fitz # pyMuPDF里面的fitz包,不要与pip install fitz混淆 + import numpy as np + ocr = get_ocr() + doc = fitz.open(filepath) + resp = "" + + b_unit = tqdm.tqdm(total=doc.page_count, desc="RapidOCRPDFLoader context page index: 0") + for i, page in enumerate(doc): + b_unit.set_description("RapidOCRPDFLoader context page index: {}".format(i)) + b_unit.refresh() + print(f"****page:{i+1}****") + text = page.get_text("") + text_lines = text.strip().split("\n") + print(f"文字内容:{text_lines}") + #logger.debug(f"文字内容:{text_lines}") + + img_list = page.get_image_info(xrefs=True) + ocr_result = [] + for img in img_list: + if xref := img.get("xref"): + bbox = img["bbox"] + # 检查图片尺寸是否超过设定的阈值 + if ((bbox[2] - bbox[0]) / (page.rect.width) < PDF_OCR_THRESHOLD[0] + or (bbox[3] - bbox[1]) / (page.rect.height) < PDF_OCR_THRESHOLD[1]): + continue + pix = fitz.Pixmap(doc, xref) + img_array = np.frombuffer(pix.samples, dtype=np.uint8).reshape(pix.height, pix.width, -1) + result, _ = ocr(img_array) + if result: + ocr_result = [line[1] for line in result] + print(f"图片内容:{ocr_result}") + #logger.debug(f"图片内容:{ocr_result}") + #resp += "\n".join(ocr_result) + + if (len(ocr_result)>0): + resp += "\n".join(ocr_result) + else: + if text_lines: + # 假设页码在最后一行 + if text_lines[-1].isdigit(): + text = "\n".join(text_lines[:-1]) + #logger.debug(f"******去除了页码") + resp += text + "\n" + + # 更新进度 + b_unit.update(1) + + resp = re.sub(r'((?dict: + """extract IdentityCard or invoice information) into dictionary.""" + @abstractmethod + def extract_textbyPaddle(self, text:str)->dict: + """extract IdentityCard or invoice information) into dictionary by paddle.""" + + def remove_blank_lines(self, text): + # 使用splitlines()方法将字符串按行分割成列表,并去除空行 + lines = [line for line in text.splitlines() if line.strip()] + # 使用join()方法将列表中的行重新连接成字符串 + cleaned_text = '\n'.join(lines) + return cleaned_text + + def extract_birthday_from_id(self, id_number): + # 假设身份证号码为18位 + if len(id_number) == 18: + year = id_number[6:10] + month = id_number[10:12] + day = id_number[12:14] + return f"{year}年{int(month)}月{int(day)}日" + else: + return "" + def get_gender_from_id(self, id_num): + # 假设id_num是一个有效的身份证号码 + gender = '男' if int(id_num[-2]) % 2 == 1 else '女' + return gender + +# def remove_blank_lines(text:str)->str: +# # 使用splitlines()方法将字符串按行分割成列表,并去除空行 +# lines = [line for line in text.splitlines() if line.strip()] +# # 使用join()方法将列表中的行重新连接成字符串 +# cleaned_text = '\n'.join(lines) +# return cleaned_text + +# def extract_id_card_info(text:str)->dict: +# patterns = { +# "issuingAuthority": r"签发机关\n(.+?)\n", +# "validTime": r"有效期限\n(.+?)\n", +# "name": r"(\S+)\n(?:男|女)", +# "gender": r"(\S+)民族", +# "ethnicity": r"民族(\S+)", +# "dateOfBirth": r"(\d+年\d+月\d+日)", +# "address": r"住址\s*(.*?)公民身份号码", +# "idNumber": r"公民身份号码\n(\d+)" +# } +# tempText = remove_blank_lines(text) +# # 提取信息 +# info = {} +# for key, pattern in patterns.items(): +# match = re.search(pattern, tempText,re.DOTALL) +# if match: +# tempStr = match.group(1).strip() +# info[key] = tempStr.replace("\n", "") +# return info + +# def recongize_id_card(filePath:str): +# loader = RapidOCRLoader(file_path="/Users/wangvivi/Desktop/Code/ocrtest/images/id_card.JPG") +# #loader = RapidOCRLoader(file_path="/Users/wangvivi/Desktop/Code/ocrtest/images/032002200511-91445598.pdf") +# #loader = RapidOCRLoader(file_path="/Users/wangvivi/Desktop/Code/ocrtest/images/fapiao.jpg") + +# docs = loader.load() +# context = "\n".join([doc.page_content for doc in docs]) +# print(context) \ No newline at end of file diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/extractor/identitycard_extractor.py b/AndroidOCRTool/app/src/main/assets/OCRPython/extractor/identitycard_extractor.py new file mode 100644 index 0000000..3bba09b --- /dev/null +++ b/AndroidOCRTool/app/src/main/assets/OCRPython/extractor/identitycard_extractor.py @@ -0,0 +1,343 @@ +import re +from extractor import Extractor +from configs.basic_config import logger + +class IdentityCardExtractor(Extractor): + def extract_text(self, text:str)->dict: + try: + patterns = { + "issuingAuthority": r"签发机关\n(.+?)\n", + "validTime": r"有效期限\n(.+?)\n", + "name": r"(\S+)\n(?:男|女)", + "gender": r"(\S+)民族", + "ethnicity": r"民族(\S+)", + "dateOfBirth": r"(\d+年\d+月\d+日)", + "address": r"(住址|佳址)\s*(.*?)公民身份号码", + "idNumber": r"(\d{18}|\d{17}[Xx])" + } + tempText = self.remove_blank_lines(text) + # 提取信息 + info = {} + for key, pattern in patterns.items(): + match = re.search(pattern, tempText,re.DOTALL) + if match: + if "address" == key: + tempStr = match.group(2).strip() + else: + tempStr = match.group(1).strip() + info[key] = tempStr.replace("\n", "") + return info + except Exception as e: + print(e) + logger.error(e) + return {} + + # def extract_textbyPaddle(self, text:str)->dict: + # try: + # patterns = { + # "issuingAuthority": r"签发机关\n*(.+?)\n", + # "validTime": r"有效期限\n*(.+?)\n", + # "name": r"姓名(.*?)\n", ##### + # "gender": r"(\S)民族", + # "ethnicity": r"民族(\S+)", + # "dateOfBirth": r"(\d+年\d+月\d+日)", + # "address": r"(住址|佳址)\s*(.*?)公民身份号码", + # "idNumber": r"(\d{18}|\d{17}[Xx])" + # } + # + # tempText = self.remove_blank_lines(text) + # # 提取信息 + # info = {} + # for key, pattern in patterns.items(): + # match = re.search(pattern, tempText,re.DOTALL) + # if match: + # if "address" == key: + # tempStr = match.group(2).strip() + # else: + # tempStr = match.group(1).strip() + # info[key] = tempStr.replace("\n", "") + # return info + # except Exception as e: + # print(e) + # logger.error(e) + # return {} + + def extract_textbyPaddle(self, text:str)->dict: + try: + result = { + "issuingAuthority": "", + "validTime": "", + "name": "", + "gender": "", + "ethnicity": "", + "dateOfBirth": "", + "address": "", + "idNumber": ""} + # 提取签发机关 + issuing_authority = re.search(r"(签发机关|签发机美)\n*(.+?)\n", text, re.DOTALL) + if issuing_authority: + result["issuingAuthority"] = issuing_authority.group(2).strip() + + # 提取有效期限 + valid_time = re.search(r"有效期限\n*(\d{4}\.\d{2}\.\d{2}-\S+)", text, re.DOTALL) + if valid_time: + result["validTime"] = valid_time.group(1).strip() + + # 提取姓名 + name = re.search(r"姓名\s*(.*?)\n", text,re.DOTALL) + if name: + tempName = name.group(1).strip() + if tempName in "性别男" or tempName in "性别女" or "性别男" in tempName or "性别女" in tempName: + name = re.search(r"(\S+)\s*姓名", text, re.DOTALL) + result["name"] = name.group(1).strip() + else: + result["name"] = name.group(1).strip() + + else: + name = re.search(r"米名(\S*)址\s*(\S+)", text, re.DOTALL) + if name: + result["name"] = name.group(2).strip() + else: + name = re.search(r"名\s*(\S+)\s*姓\s*", text, re.DOTALL) + if name: + result["name"] = name.group(1).strip() + else: + name = re.search(r"(\S+)\s*(男|女|性别)", text, re.DOTALL) + if name: + result["name"] = name.group(1).strip() + + # 提取民族 + ethnicity = re.search(r"民\s*(族|旅)\s*(\S+)", text, re.DOTALL) + if ethnicity: + result["ethnicity"] = ethnicity.group(2).strip() + + # 提取地址 + address = re.search(r"(住址|佳址)(.*?)公民身份号码", text, re.DOTALL) + if address: + result["address"] = address.group(2).strip().replace("\n", "") + else: + address = re.search(r"(\S+省)(.*?)公民身份号码", text, re.DOTALL) + if address: + result["address"] = address.group(1).strip().replace("\n", "") + address.group(2).strip().replace("\n", "") + else: + address = re.search(r"(\S+市)(.*?)公民身份号码", text, re.DOTALL) + if address: + result["address"] = address.group(1).strip().replace("\n", "") + address.group(2).strip().replace("\n", "") + else: + address = re.search(r"(\S+县)(.*?)公民身份号码", text, re.DOTALL) + if address: + result["address"] = address.group(1).strip().replace("\n", "") + address.group(2).strip().replace("\n", "") + if result["address"]: + result["address"] = re.sub(r'[A-Z]', '', result["address"]) + + # 提取身份证号码 + id_number = re.search(r"(\d{18}|\d{17}[Xx])", text, re.DOTALL) + if id_number: + result["idNumber"] = id_number.group(1).strip() + + if result["idNumber"]: + # 提取出生日期 + result["dateOfBirth"] = self.extract_birthday_from_id(result["idNumber"]) + # 提取性别 + result["gender"] = self.get_gender_from_id(result["idNumber"]) + + return result + except Exception as e: + print(e) + logger.error(e) + return {} + + class InvoiceExtractor(Extractor): + def extract_text(self,text:str)->dict: + pass + + +# text = """中华人民共和国 +# 居民身份证 +# 签发机关合肥市公安局庐阳分局 +# 有效期限 +# 2022.07.10-长期 +# 姓名陈玉振 +# 性别男 +# 民族汉 +# 出生1973年6月19日 +# 佳址安徽省合肥市庐阳区固镇 +# 路3150号森林城A6地块1 +# 幢2001室 +# 公民身份号码 +# 440203197306192118""" +# text = """ +# 中华人民共和国 +# 居民身份证 +# oo +# 签发机关宿州市公安局桥分局 +# 有效期限2023.01.18-2043.01.18 +# 姓名郭乾坤 +# 性别男民族汉 +# 出生1994年10月17日 +# 住址 安徽省宿州市场桥区朱仙 +# 庄镇郭庙村郭家组6号 +# 公民身份号码 +# 34220119941017327X +# """ + +# text = """中华人民共和国 +# 居民身份证 +# 签发机关 +# 盐源县公安局 +# 出 +# 有效期限 +# 2013.06.18-2033.06.18 +# 坐姓5性中出住 +# 米名年别到生委址 +# 江六斤 +# 男民族彝 +# 半口 +# 1980 +# 年4月20日 +# 四川省盐源县盖租乡阿石 +# 村6组4号 +# 公民身份号码 +# 513423198004203995 +# """ +# +# text = """姓名韩邀宇 +# 性别男 +# 民族汉 +# 出生 +# 1999年12月15日 +# 住址 +# 安徽省太和县税镇镇十里 +# 沟村委会中韩村16号 +# 公民身份号码 +# 34122219991215183X""" +# +# +# text = """中华人民共和国 +# 居民身份证 +# 签发机关 +# 木里县公安局 +# 有效期限 +# 2016.12.05-2026.12.05 +# 姓性出住 +# 马加加 +# 女 +# 民族彝 +# 1998年1月2日 +# 址 +# 四川省木里藏族自治县博 +# 科乡八科村麻窝地组18号 +# 公民身份号码 +# 513422199801023821""" + +# text = """ +# 毛阿卡 +# 姓名 +# 性别男 +# 民族彝 +# 3 +# 出生 +# 1976年3月3日 +# 住址 +# 四川省木里藏族自治县耗 +# 牛坪乡泥珠村下泥珠组55 +# 号 +# 中国LHINA +# 公民身份号码 +# 513423197603033997 +# 中华人民共和国 +# 居民身份证 +# 签发机关 +# 木里县公安局 +# 有效期限 +# 2017.06.06-2037.06.06 +# """ +# text = """中华人民共和国 +# 居民身份证 +# 国 +# 签发机关 +# 西昌市公安局 +# 有效期限 +# 2008.09.01-2028.09.01 +# 逆姓5性中出日住 +# 米名丰别刺生更址 +# 祝九根惹 +# 心 +# 民 +# 族彝 +# 男 +# E +# 1978 +# 四川省西昌市磨盘乡大厂 +# 村4组27号 +# 公民身份号码 +# 513401197807087411 +# """ +# text = """中华人民共和国 +# 居民身份证 +# 签发机关 +# 木里县公安局 +# 有效期限 +# 2020.03.16-2025.03.16 +# 名 +# 蒋子古 +# 姓 +# 男 +# 民族彝 +# 出生 +# 2005年1月4日 +# 住址 +# 四川省木里藏族自治县耗 +# 牛坪乡泥珠村5组29号 +# 公民身份号码 +# 513422200501044415 +# """ +# +# text = """姓名苏龙格德·胡尔查巴特尔 +# 性别男民族蒙古 +# 出生1973年10支月27日 +# 内蒙古赤峰市巴林右旗沙布 +# 台苏木树中嘎查 +# 中华人民共和国 +# 居民身份证 +# 签发机关巴林右旗公安局 +# 有效期限2004.10.27-2024.10.26""" +# text ="""唐昌梅 +# 姓名 +# 性别女民族苗 +# 出生1975年8月15日 +# 住址 +# 湖南省常德市鼎城区双桥 +# 坪镇全家坪村3组 +# 公民身份号码 +# 433030197508150820""" +# extractor = IdentityCardExtractor() +# jsonstring = extractor.extract_textbyPaddle(text) +# print(jsonstring) + + + + +# text = """ +# 姓名张三 +# 性别男 +# 民族汉 +# # """ +# text = """ +# 江六斤 +# 女民族彝 +# """ +# # 尝试使用 r"性别(\S)" 匹配性别 +# gender_match = re.search(r'性别(\S)|(\S)民族', text) +# if gender_match: +# gender = gender_match.group(0) +# print("性别是:", gender) +# # else: +# # # 如果匹配不到,尝试使用 r"(\S)民族" 匹配 +# # gender_match = re.search(r'(\S)民族', text) +# # if gender_match: +# # gender = gender_match.group(1) +# # print("性别是:", gender) +# else: +# print("未找到性别信息") + diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/images/.DS_Store b/AndroidOCRTool/app/src/main/assets/OCRPython/images/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/images/.DS_Store differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/images/032002200511-91445598.pdf b/AndroidOCRTool/app/src/main/assets/OCRPython/images/032002200511-91445598.pdf new file mode 100644 index 0000000..3aa3fa0 Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/images/032002200511-91445598.pdf differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/images/20230726163823.png b/AndroidOCRTool/app/src/main/assets/OCRPython/images/20230726163823.png new file mode 100644 index 0000000..80f075c Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/images/20230726163823.png differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/images/20230726163834.png b/AndroidOCRTool/app/src/main/assets/OCRPython/images/20230726163834.png new file mode 100644 index 0000000..f7dd93d Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/images/20230726163834.png differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/images/433022198111083134_202311060936_back.jpg b/AndroidOCRTool/app/src/main/assets/OCRPython/images/433022198111083134_202311060936_back.jpg new file mode 100644 index 0000000..9716b9d Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/images/433022198111083134_202311060936_back.jpg differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/images/433022198111083134_202311060936_front.jpg b/AndroidOCRTool/app/src/main/assets/OCRPython/images/433022198111083134_202311060936_front.jpg new file mode 100644 index 0000000..7e9387b Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/images/433022198111083134_202311060936_front.jpg differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/images/43302919641130423X_202311061953_back.jpg b/AndroidOCRTool/app/src/main/assets/OCRPython/images/43302919641130423X_202311061953_back.jpg new file mode 100644 index 0000000..e5c4f29 Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/images/43302919641130423X_202311061953_back.jpg differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/images/43302919641130423X_202311061953_front.jpg b/AndroidOCRTool/app/src/main/assets/OCRPython/images/43302919641130423X_202311061953_front.jpg new file mode 100644 index 0000000..253bee4 Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/images/43302919641130423X_202311061953_front.jpg differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/images/433029197008134212_202311061951_back.jpg b/AndroidOCRTool/app/src/main/assets/OCRPython/images/433029197008134212_202311061951_back.jpg new file mode 100644 index 0000000..356a1f9 Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/images/433029197008134212_202311061951_back.jpg differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/images/433029197008134212_202311061951_front.jpg b/AndroidOCRTool/app/src/main/assets/OCRPython/images/433029197008134212_202311061951_front.jpg new file mode 100644 index 0000000..f6ac555 Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/images/433029197008134212_202311061951_front.jpg differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/images/433029197601154214_202311061857_back.jpg b/AndroidOCRTool/app/src/main/assets/OCRPython/images/433029197601154214_202311061857_back.jpg new file mode 100644 index 0000000..4b1a6d2 Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/images/433029197601154214_202311061857_back.jpg differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/images/433029197601154214_202311061857_front.jpg b/AndroidOCRTool/app/src/main/assets/OCRPython/images/433029197601154214_202311061857_front.jpg new file mode 100644 index 0000000..23e843a Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/images/433029197601154214_202311061857_front.jpg differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/images/433030197508150820_202311061537_back.jpg b/AndroidOCRTool/app/src/main/assets/OCRPython/images/433030197508150820_202311061537_back.jpg new file mode 100644 index 0000000..e439fca Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/images/433030197508150820_202311061537_back.jpg differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/images/433030197508150820_202311061537_front.jpg b/AndroidOCRTool/app/src/main/assets/OCRPython/images/433030197508150820_202311061537_front.jpg new file mode 100644 index 0000000..9cf86b7 Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/images/433030197508150820_202311061537_front.jpg differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/images/433102196909213613_202311060853_back.jpg b/AndroidOCRTool/app/src/main/assets/OCRPython/images/433102196909213613_202311060853_back.jpg new file mode 100644 index 0000000..df3aaf9 Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/images/433102196909213613_202311060853_back.jpg differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/images/433102196909213613_202311060853_front.jpg b/AndroidOCRTool/app/src/main/assets/OCRPython/images/433102196909213613_202311060853_front.jpg new file mode 100644 index 0000000..dbab228 Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/images/433102196909213613_202311060853_front.jpg differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/images/433123199911162419_202311062226_back.jpg b/AndroidOCRTool/app/src/main/assets/OCRPython/images/433123199911162419_202311062226_back.jpg new file mode 100644 index 0000000..9701ca6 Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/images/433123199911162419_202311062226_back.jpg differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/images/433123199911162419_202311062226_front.jpg b/AndroidOCRTool/app/src/main/assets/OCRPython/images/433123199911162419_202311062226_front.jpg new file mode 100644 index 0000000..9891bbf Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/images/433123199911162419_202311062226_front.jpg differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/images/513426197601185515_202311061142_back.jpg b/AndroidOCRTool/app/src/main/assets/OCRPython/images/513426197601185515_202311061142_back.jpg new file mode 100644 index 0000000..04df520 Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/images/513426197601185515_202311061142_back.jpg differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/images/513426197601185515_202311061142_front.jpg b/AndroidOCRTool/app/src/main/assets/OCRPython/images/513426197601185515_202311061142_front.jpg new file mode 100644 index 0000000..db83de8 Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/images/513426197601185515_202311061142_front.jpg differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/images/513426198110225521_202311061200_back.jpg b/AndroidOCRTool/app/src/main/assets/OCRPython/images/513426198110225521_202311061200_back.jpg new file mode 100644 index 0000000..5ef82b0 Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/images/513426198110225521_202311061200_back.jpg differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/images/513426198110225521_202311061200_front.jpg b/AndroidOCRTool/app/src/main/assets/OCRPython/images/513426198110225521_202311061200_front.jpg new file mode 100644 index 0000000..b03ddfb Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/images/513426198110225521_202311061200_front.jpg differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/images/513433197205126816_202311061229_back.jpg b/AndroidOCRTool/app/src/main/assets/OCRPython/images/513433197205126816_202311061229_back.jpg new file mode 100644 index 0000000..acd4fa7 Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/images/513433197205126816_202311061229_back.jpg differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/images/513433197205126816_202311061229_front.jpg b/AndroidOCRTool/app/src/main/assets/OCRPython/images/513433197205126816_202311061229_front.jpg new file mode 100644 index 0000000..99adc25 Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/images/513433197205126816_202311061229_front.jpg differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/images/QQ截图20230726163747.png b/AndroidOCRTool/app/src/main/assets/OCRPython/images/QQ截图20230726163747.png new file mode 100644 index 0000000..ee2d395 Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/images/QQ截图20230726163747.png differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/images/QQ截图20230726163804.png b/AndroidOCRTool/app/src/main/assets/OCRPython/images/QQ截图20230726163804.png new file mode 100644 index 0000000..f4a2bfc Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/images/QQ截图20230726163804.png differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/images/QQ截图20230726163813.png b/AndroidOCRTool/app/src/main/assets/OCRPython/images/QQ截图20230726163813.png new file mode 100644 index 0000000..846a832 Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/images/QQ截图20230726163813.png differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/images/QQ截图20230726163854.png b/AndroidOCRTool/app/src/main/assets/OCRPython/images/QQ截图20230726163854.png new file mode 100644 index 0000000..3bc00e3 Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/images/QQ截图20230726163854.png differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/images/cai.jpg b/AndroidOCRTool/app/src/main/assets/OCRPython/images/cai.jpg new file mode 100644 index 0000000..180a437 Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/images/cai.jpg differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/images/environment.yml b/AndroidOCRTool/app/src/main/assets/OCRPython/images/environment.yml new file mode 100644 index 0000000..b0b9e92 --- /dev/null +++ b/AndroidOCRTool/app/src/main/assets/OCRPython/images/environment.yml @@ -0,0 +1,127 @@ +name: ocr +channels: + - defaults +dependencies: + - ca-certificates=2024.3.11=hca03da5_0 + - libcxx=14.0.6=h848a8c0_0 + - libffi=3.4.4=hca03da5_0 + - ncurses=6.4=h313beb8_0 + - openssl=3.0.13=h1a28f6b_0 + - pip=23.3.1=py39hca03da5_0 + - python=3.9.19=hb885b13_0 + - readline=8.2=h1a28f6b_0 + - setuptools=68.2.2=py39hca03da5_0 + - sqlite=3.41.2=h80987f9_0 + - tk=8.6.12=hb8d0fd4_0 + - wheel=0.41.2=py39hca03da5_0 + - xz=5.4.6=h80987f9_0 + - zlib=1.2.13=h5a0b063_0 + - pip: + - aiohttp==3.9.5 + - aiosignal==1.3.1 + - annotated-types==0.6.0 + - anyio==4.3.0 + - astor==0.8.1 + - async-timeout==4.0.3 + - attrdict==2.0.1 + - attrs==23.2.0 + - babel==2.14.0 + - bce-python-sdk==0.9.6 + - beautifulsoup4==4.12.3 + - blinker==1.7.0 + - cachetools==5.3.3 + - certifi==2024.2.2 + - charset-normalizer==3.3.2 + - click==8.1.7 + - contourpy==1.2.1 + - cssselect==1.2.0 + - cssutils==2.10.2 + - cycler==0.12.1 + - cython==3.0.10 + - dataclasses-json==0.6.4 + - decorator==5.1.1 + - et-xmlfile==1.1.0 + - exceptiongroup==1.2.1 + - fire==0.6.0 + - flask==3.0.3 + - flask-babel==4.0.0 + - fonttools==4.51.0 + - frozenlist==1.4.1 + - future==1.0.0 + - h11==0.14.0 + - httpcore==1.0.5 + - httpx==0.27.0 + - idna==3.7 + - imageio==2.34.0 + - imgaug==0.4.0 + - importlib-metadata==7.1.0 + - importlib-resources==6.4.0 + - itsdangerous==2.2.0 + - jinja2==3.1.3 + - jsonpatch==1.33 + - jsonpointer==2.4 + - kiwisolver==1.4.5 + - langchain==0.1.16 + - langchain-community==0.0.33 + - langchain-core==0.1.44 + - langchain-text-splitters==0.0.1 + - langsmith==0.1.49 + - lazy-loader==0.4 + - lmdb==1.4.1 + - lxml==5.2.1 + - markupsafe==2.1.5 + - marshmallow==3.21.1 + - matplotlib==3.8.4 + - multidict==6.0.5 + - mypy-extensions==1.0.0 + - networkx==3.2.1 + - numpy==1.26.4 + - opencv-contrib-python==4.6.0.66 + - opencv-python==4.6.0.66 + - opencv-python-headless==4.9.0.80 + - openpyxl==3.1.2 + - opt-einsum==3.3.0 + - orjson==3.10.1 + - packaging==23.2 + - paddleocr==2.7.3 + - paddlepaddle==2.6.1 + - pandas==2.2.2 + - pdf2docx==0.5.8 + - pillow==10.3.0 + - premailer==3.10.0 + - protobuf==5.26.1 + - psutil==5.9.8 + - pyclipper==1.3.0.post5 + - pycryptodome==3.20.0 + - pydantic==2.7.0 + - pydantic-core==2.18.1 + - pymupdf==1.24.2 + - pymupdfb==1.24.1 + - pyparsing==3.1.2 + - python-dateutil==2.9.0.post0 + - python-docx==1.1.0 + - pytz==2024.1 + - pyyaml==6.0.1 + - rapidfuzz==3.8.1 + - rarfile==4.2 + - requests==2.31.0 + - scikit-image==0.22.0 + - scipy==1.13.0 + - shapely==2.0.4 + - six==1.16.0 + - sniffio==1.3.1 + - soupsieve==2.5 + - sqlalchemy==2.0.29 + - tenacity==8.2.3 + - termcolor==2.4.0 + - tifffile==2024.4.18 + - tqdm==4.66.2 + - typing-extensions==4.11.0 + - typing-inspect==0.9.0 + - tzdata==2024.1 + - urllib3==2.2.1 + - visualdl==2.5.3 + - werkzeug==3.0.2 + - yarl==1.9.4 + - zipp==3.18.1 +prefix: /Users/wangvivi/miniconda3/envs/ocr diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/images/fapiao.jpg b/AndroidOCRTool/app/src/main/assets/OCRPython/images/fapiao.jpg new file mode 100644 index 0000000..4e951ee Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/images/fapiao.jpg differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/images/han.jpg b/AndroidOCRTool/app/src/main/assets/OCRPython/images/han.jpg new file mode 100644 index 0000000..f703d10 Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/images/han.jpg differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/images/hao.jpg b/AndroidOCRTool/app/src/main/assets/OCRPython/images/hao.jpg new file mode 100644 index 0000000..86a308e Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/images/hao.jpg differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/images/requirement.txt b/AndroidOCRTool/app/src/main/assets/OCRPython/images/requirement.txt new file mode 100644 index 0000000..0250fb1 --- /dev/null +++ b/AndroidOCRTool/app/src/main/assets/OCRPython/images/requirement.txt @@ -0,0 +1,107 @@ +aiohttp==3.9.5 +aiosignal==1.3.1 +annotated-types==0.6.0 +anyio==4.3.0 +astor==0.8.1 +async-timeout==4.0.3 +attrdict==2.0.1 +attrs==23.2.0 +Babel==2.14.0 +bce-python-sdk==0.9.6 +beautifulsoup4==4.12.3 +blinker==1.7.0 +cachetools==5.3.3 +certifi==2024.2.2 +charset-normalizer==3.3.2 +click==8.1.7 +contourpy==1.2.1 +cssselect==1.2.0 +cssutils==2.10.2 +cycler==0.12.1 +Cython==3.0.10 +dataclasses-json==0.6.4 +decorator==5.1.1 +et-xmlfile==1.1.0 +exceptiongroup==1.2.1 +fire==0.6.0 +Flask==3.0.3 +flask-babel==4.0.0 +fonttools==4.51.0 +frozenlist==1.4.1 +future==1.0.0 +h11==0.14.0 +httpcore==1.0.5 +httpx==0.27.0 +idna==3.7 +imageio==2.34.0 +imgaug==0.4.0 +importlib_metadata==7.1.0 +importlib_resources==6.4.0 +itsdangerous==2.2.0 +Jinja2==3.1.3 +jsonpatch==1.33 +jsonpointer==2.4 +kiwisolver==1.4.5 +langchain==0.1.16 +langchain-community==0.0.33 +langchain-core==0.1.44 +langchain-text-splitters==0.0.1 +langsmith==0.1.49 +lazy_loader==0.4 +lmdb==1.4.1 +lxml==5.2.1 +MarkupSafe==2.1.5 +marshmallow==3.21.1 +matplotlib==3.8.4 +multidict==6.0.5 +mypy-extensions==1.0.0 +networkx==3.2.1 +numpy==1.26.4 +opencv-contrib-python==4.6.0.66 +opencv-python==4.6.0.66 +opencv-python-headless==4.9.0.80 +openpyxl==3.1.2 +opt-einsum==3.3.0 +orjson==3.10.1 +packaging==23.2 +paddleocr==2.7.3 +paddlepaddle==2.6.1 +pandas==2.2.2 +pdf2docx==0.5.8 +pillow==10.3.0 +premailer==3.10.0 +protobuf==5.26.1 +psutil==5.9.8 +pyclipper==1.3.0.post5 +pycryptodome==3.20.0 +pydantic==2.7.0 +pydantic_core==2.18.1 +PyMuPDF==1.24.2 +PyMuPDFb==1.24.1 +pyparsing==3.1.2 +python-dateutil==2.9.0.post0 +python-docx==1.1.0 +pytz==2024.1 +PyYAML==6.0.1 +rapidfuzz==3.8.1 +rarfile==4.2 +requests==2.31.0 +scikit-image==0.22.0 +scipy==1.13.0 +shapely==2.0.4 +six==1.16.0 +sniffio==1.3.1 +soupsieve==2.5 +SQLAlchemy==2.0.29 +tenacity==8.2.3 +termcolor==2.4.0 +tifffile==2024.4.18 +tqdm==4.66.2 +typing-inspect==0.9.0 +typing_extensions==4.11.0 +tzdata==2024.1 +urllib3==2.2.1 +visualdl==2.5.3 +Werkzeug==3.0.2 +yarl==1.9.4 +zipp==3.18.1 diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/images/严伟拉反.jpg b/AndroidOCRTool/app/src/main/assets/OCRPython/images/严伟拉反.jpg new file mode 100644 index 0000000..80256d2 Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/images/严伟拉反.jpg differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/images/严伟拉正.jpg b/AndroidOCRTool/app/src/main/assets/OCRPython/images/严伟拉正.jpg new file mode 100644 index 0000000..e225733 Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/images/严伟拉正.jpg differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/images/内蒙古1反.png b/AndroidOCRTool/app/src/main/assets/OCRPython/images/内蒙古1反.png new file mode 100644 index 0000000..b2ab14f Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/images/内蒙古1反.png differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/images/内蒙古1正.png b/AndroidOCRTool/app/src/main/assets/OCRPython/images/内蒙古1正.png new file mode 100644 index 0000000..52eec51 Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/images/内蒙古1正.png differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/images/内蒙古2正.png b/AndroidOCRTool/app/src/main/assets/OCRPython/images/内蒙古2正.png new file mode 100644 index 0000000..e1a4c0b Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/images/内蒙古2正.png differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/images/吉克石尔反.jpg b/AndroidOCRTool/app/src/main/assets/OCRPython/images/吉克石尔反.jpg new file mode 100644 index 0000000..35acb2f Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/images/吉克石尔反.jpg differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/images/吉克石尔正.jpg b/AndroidOCRTool/app/src/main/assets/OCRPython/images/吉克石尔正.jpg new file mode 100644 index 0000000..4cd5ddb Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/images/吉克石尔正.jpg differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/images/壮族1正.png b/AndroidOCRTool/app/src/main/assets/OCRPython/images/壮族1正.png new file mode 100644 index 0000000..218d841 Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/images/壮族1正.png differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/images/壮族2.png b/AndroidOCRTool/app/src/main/assets/OCRPython/images/壮族2.png new file mode 100644 index 0000000..5c0de52 Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/images/壮族2.png differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/images/子哈孜反.jpg b/AndroidOCRTool/app/src/main/assets/OCRPython/images/子哈孜反.jpg new file mode 100644 index 0000000..e3b37bd Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/images/子哈孜反.jpg differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/images/子哈孜正.jpg b/AndroidOCRTool/app/src/main/assets/OCRPython/images/子哈孜正.jpg new file mode 100644 index 0000000..8a191aa Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/images/子哈孜正.jpg differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/images/张亮反.jpg b/AndroidOCRTool/app/src/main/assets/OCRPython/images/张亮反.jpg new file mode 100644 index 0000000..c161355 Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/images/张亮反.jpg differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/images/张亮正.jpg b/AndroidOCRTool/app/src/main/assets/OCRPython/images/张亮正.jpg new file mode 100644 index 0000000..7978eef Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/images/张亮正.jpg differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/images/拉基反.jpg b/AndroidOCRTool/app/src/main/assets/OCRPython/images/拉基反.jpg new file mode 100644 index 0000000..745fe02 Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/images/拉基反.jpg differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/images/拉基正.jpg b/AndroidOCRTool/app/src/main/assets/OCRPython/images/拉基正.jpg new file mode 100644 index 0000000..4e6c642 Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/images/拉基正.jpg differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/images/新疆1正.png b/AndroidOCRTool/app/src/main/assets/OCRPython/images/新疆1正.png new file mode 100644 index 0000000..84bd47e Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/images/新疆1正.png differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/images/毛阿卡反.jpg b/AndroidOCRTool/app/src/main/assets/OCRPython/images/毛阿卡反.jpg new file mode 100644 index 0000000..8d7ecb8 Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/images/毛阿卡反.jpg differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/images/毛阿卡正.jpg b/AndroidOCRTool/app/src/main/assets/OCRPython/images/毛阿卡正.jpg new file mode 100644 index 0000000..c4d9e8b Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/images/毛阿卡正.jpg differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/images/江六斤反.jpg b/AndroidOCRTool/app/src/main/assets/OCRPython/images/江六斤反.jpg new file mode 100644 index 0000000..a625d72 Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/images/江六斤反.jpg differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/images/江六斤正.jpg b/AndroidOCRTool/app/src/main/assets/OCRPython/images/江六斤正.jpg new file mode 100644 index 0000000..1a8f205 Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/images/江六斤正.jpg differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/images/沈拉古反.jpg b/AndroidOCRTool/app/src/main/assets/OCRPython/images/沈拉古反.jpg new file mode 100644 index 0000000..2217d3e Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/images/沈拉古反.jpg differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/images/沈拉古正.jpg b/AndroidOCRTool/app/src/main/assets/OCRPython/images/沈拉古正.jpg new file mode 100644 index 0000000..b653eac Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/images/沈拉古正.jpg differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/images/王美新.jpg b/AndroidOCRTool/app/src/main/assets/OCRPython/images/王美新.jpg new file mode 100644 index 0000000..c90a197 Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/images/王美新.jpg differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/images/王美新正.jpg b/AndroidOCRTool/app/src/main/assets/OCRPython/images/王美新正.jpg new file mode 100644 index 0000000..b9bc530 Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/images/王美新正.jpg differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/images/祝九根惹反.jpg b/AndroidOCRTool/app/src/main/assets/OCRPython/images/祝九根惹反.jpg new file mode 100644 index 0000000..da9fa3d Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/images/祝九根惹反.jpg differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/images/祝九根惹正.jpg b/AndroidOCRTool/app/src/main/assets/OCRPython/images/祝九根惹正.jpg new file mode 100644 index 0000000..6c1e1f5 Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/images/祝九根惹正.jpg differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/images/蒋子古反.jpg b/AndroidOCRTool/app/src/main/assets/OCRPython/images/蒋子古反.jpg new file mode 100644 index 0000000..ac13255 Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/images/蒋子古反.jpg differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/images/蒋子古正.jpg b/AndroidOCRTool/app/src/main/assets/OCRPython/images/蒋子古正.jpg new file mode 100644 index 0000000..394006f Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/images/蒋子古正.jpg differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/images/马加加反.jpg b/AndroidOCRTool/app/src/main/assets/OCRPython/images/马加加反.jpg new file mode 100644 index 0000000..4b1bdbf Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/images/马加加反.jpg differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/images/马加加正.jpg b/AndroidOCRTool/app/src/main/assets/OCRPython/images/马加加正.jpg new file mode 100644 index 0000000..77934c8 Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/images/马加加正.jpg differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/images/龙辉反.jpg b/AndroidOCRTool/app/src/main/assets/OCRPython/images/龙辉反.jpg new file mode 100644 index 0000000..8c891e5 Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/images/龙辉反.jpg differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/images/龙辉正.jpg b/AndroidOCRTool/app/src/main/assets/OCRPython/images/龙辉正.jpg new file mode 100644 index 0000000..11995d9 Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/images/龙辉正.jpg differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/logs/.DS_Store b/AndroidOCRTool/app/src/main/assets/OCRPython/logs/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/logs/.DS_Store differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/logs/ocr_reconginition.log b/AndroidOCRTool/app/src/main/assets/OCRPython/logs/ocr_reconginition.log new file mode 100644 index 0000000..111df13 --- /dev/null +++ b/AndroidOCRTool/app/src/main/assets/OCRPython/logs/ocr_reconginition.log @@ -0,0 +1,3681 @@ +2024-04-24 10:02:01,123 - basic_config.py[line:32] - INFO: 程序启动的第一条日志记录 +2024-04-24 10:11:23,898 - basic_config.py[line:32] - INFO: 程序启动的第一条日志记录 +2024-04-24 10:18:34,418 - basic_config.py[line:30] - INFO: 程序启动的第一条日志记录 +2024-04-24 10:30:07,344 - basic_config.py[line:30] - INFO: 程序启动的第一条日志记录 +2024-04-24 10:37:48,351 - basic_config.py[line:38] - INFO: 程序启动的第一条日志记录 +2024-04-24 10:43:17,988 - basic_config.py[line:38] - INFO: 程序启动的第一条日志记录 +2024-04-24 10:43:17,988 - identitycard_extractor.py[line:103] - INFO: extractor.extract_textbyPaddle(text) +2024-04-24 10:45:00,888 - basic_config.py[line:38] - INFO: 程序启动的第一条日志记录 +2024-04-24 10:45:00,888 - identitycard_extractor.py[line:103] - INFO: extractor.extract_textbyPaddle(text) +2024-04-24 10:45:00,888 - identitycard_extractor.py[line:104] - INFO: {'issuingAuthority': '宿州市公安局桥分局', 'validTime': '2023.01.18-2043.01.18', 'name': '郭乾坤', 'gender': '男', 'ethnicity': '汉', 'dateOfBirth': '1994年10月17日', 'address': '安徽省宿州市场桥区朱仙庄镇郭庙村郭家组6号', 'idNumber': '34220119941017327X'} +2024-04-24 10:50:07,654 - basic_config.py[line:38] - INFO: 程序启动的第一条日志记录 +2024-04-24 10:50:07,654 - identitycard_extractor.py[line:103] - INFO: extractor.extract_textbyPaddle(text) +2024-04-24 10:50:07,654 - identitycard_extractor.py[line:104] - INFO: {'issuingAuthority': '宿州市公安局桥分局', 'validTime': '2023.01.18-2043.01.18', 'name': '郭乾坤', 'gender': '男', 'ethnicity': '汉', 'dateOfBirth': '1994年10月17日', 'address': '安徽省宿州市场桥区朱仙庄镇郭庙村郭家组6号', 'idNumber': '34220119941017327X'} +2024-04-24 10:50:28,041 - basic_config.py[line:38] - INFO: 程序启动的第一条日志记录 +2024-04-24 10:50:28,042 - identitycard_extractor.py[line:103] - INFO: extractor.extract_textbyPaddle(text) +2024-04-24 10:50:28,043 - identitycard_extractor.py[line:104] - INFO: {'issuingAuthority': '宿州市公安局桥分局', 'validTime': '2023.01.18-2043.01.18', 'name': '郭乾坤', 'gender': '男', 'ethnicity': '汉', 'dateOfBirth': '1994年10月17日', 'address': '安徽省宿州市场桥区朱仙庄镇郭庙村郭家组6号', 'idNumber': '34220119941017327X'} +2024-04-24 10:50:48,461 - basic_config.py[line:38] - INFO: 程序启动的第一条日志记录 +2024-04-24 10:50:48,461 - identitycard_extractor.py[line:103] - INFO: extractor.extract_textbyPaddle(text) +2024-04-24 10:50:48,461 - identitycard_extractor.py[line:104] - INFO: {'issuingAuthority': '宿州市公安局桥分局', 'validTime': '2023.01.18-2043.01.18', 'name': '郭乾坤', 'gender': '男', 'ethnicity': '汉', 'dateOfBirth': '1994年10月17日', 'address': '安徽省宿州市场桥区朱仙庄镇郭庙村郭家组6号', 'idNumber': '34220119941017327X'} +2024-04-24 11:18:49,511 - basic_config.py[line:38] - INFO: 程序启动的第一条日志记录 +2024-04-24 11:18:49,511 - main1.py[line:3] - INFO: starting main.py +2024-04-24 11:19:54,686 - basic_config.py[line:38] - INFO: 程序启动的第一条日志记录 +2024-04-24 11:19:54,686 - main1.py[line:6] - INFO: starting main.py +2024-04-24 11:19:58,784 - basic_config.py[line:38] - INFO: 程序启动的第一条日志记录 +2024-04-24 11:19:58,784 - main1.py[line:6] - INFO: starting main.py +2024-04-24 11:23:41,198 - basic_config.py[line:38] - INFO: 程序启动的第一条日志记录 +2024-04-24 11:23:41,198 - main1.py[line:7] - INFO: starting main.py +2024-04-24 11:24:51,155 - basic_config.py[line:38] - INFO: 程序启动的第一条日志记录 +2024-04-24 11:24:51,156 - main1.py[line:7] - INFO: starting main.py +2024-04-24 11:25:19,470 - basic_config.py[line:38] - INFO: 程序启动的第一条日志记录 +2024-04-24 11:25:19,470 - main1.py[line:7] - INFO: starting main.py +2024-04-24 11:28:22,107 - basic_config.py[line:38] - INFO: 程序启动的第一条日志记录 +2024-04-24 11:28:22,107 - main1.py[line:7] - INFO: starting main.py +2024-04-24 11:31:00,351 - basic_config.py[line:38] - INFO: 程序启动的第一条日志记录 +2024-04-24 11:31:00,352 - paddleocr.py[line:7] - INFO: starting maincopy.py +2024-04-24 11:43:22,726 - basic_config.py[line:38] - INFO: 程序启动的第一条日志记录 +2024-04-24 11:43:22,728 - paddleocr.py[line:107] - INFO: starting maincopy.py +2024-04-24 11:51:26,898 - basic_config.py[line:38] - INFO: 程序启动的第一条日志记录 +2024-04-24 11:51:26,901 - paddleocr.py[line:107] - INFO: starting maincopy.py +2024-04-24 11:57:55,131 - basic_config.py[line:38] - INFO: 程序启动的第一条日志记录 +2024-04-24 11:57:55,131 - main1.py[line:7] - INFO: starting main.py +2024-04-24 12:03:25,146 - basic_config.py[line:38] - INFO: 程序启动的第一条日志记录 +2024-04-24 12:03:25,146 - main1.py[line:7] - INFO: starting main.py +2024-04-24 12:04:03,309 - basic_config.py[line:38] - INFO: 程序启动的第一条日志记录 +2024-04-24 12:04:36,921 - main1.py[line:7] - INFO: starting main.py +2024-04-24 12:06:45,022 - basic_config.py[line:38] - INFO: 程序启动的第一条日志记录 +2024-04-24 12:06:45,025 - main1.py[line:7] - INFO: starting main.py +2024-04-24 12:06:58,895 - main1.py[line:8] - INFO: end main.py +2024-04-24 12:08:20,174 - maincopy.py[line:107] - ERROR: starting maincopy.py +2024-04-24 12:08:20,174 - maincopy.py[line:108] - ERROR: end maincopy.py +2024-04-24 12:09:24,702 - maincopy.py[line:108] - ERROR: starting maincopy.py error +2024-04-24 12:09:24,702 - maincopy.py[line:109] - ERROR: end maincopy.py error +2024-04-24 12:10:12,693 - basic_config.py[line:38] - INFO: 程序启动的第一条日志记录 +2024-04-24 12:10:12,694 - main1.py[line:7] - INFO: starting main.py +2024-04-24 12:14:02,310 - basic_config.py[line:38] - INFO: 程序启动的第一条日志记录 +2024-04-24 12:14:02,316 - maincopy.py[line:107] - INFO: start maincopy.py info +2024-04-24 12:14:02,316 - maincopy.py[line:108] - ERROR: starting maincopy.py error +2024-04-24 12:14:03,348 - maincopy.py[line:109] - ERROR: end maincopy.py error +2024-04-24 12:15:20,928 - maincopy.py[line:25] - INFO: extractIdCardInfoByPath.... +2024-04-24 12:15:22,734 - maincopy.py[line:49] - INFO: text:姓名韩邀宇 +性别男 +民族汉 +出生 +1999年12月15日 +住址 +安徽省太和县税镇镇十里 +沟村委会中韩村16号 +公民身份号码 +34122219991215183X + +2024-04-24 12:15:22,735 - maincopy.py[line:55] - INFO: extractIdCardInfoByBase64Data 耗时1.3482990264892578秒 +2024-04-24 12:15:22,749 - maincopy.py[line:106] - INFO: test +2024-04-24 12:19:00,855 - maincopy.py[line:113] - INFO: main.py len of parameter: 1 +2024-04-24 12:50:39,609 - maincopy.py[line:106] - INFO: main.py len of parameter: 2 +2024-04-24 12:50:39,609 - maincopy.py[line:114] - INFO: python 脚本里的接收到的参数是: +2024-04-24 12:50:39,609 - maincopy.py[line:115] - INFO: 1 +2024-04-24 12:50:39,609 - maincopy.py[line:116] - INFO: 开始执行sys.stdin.read +2024-04-24 12:50:39,611 - maincopy.py[line:118] - INFO: +2024-04-24 12:50:39,611 - maincopy.py[line:119] - INFO: len(input_data):1090696 +2024-04-24 12:52:18,233 - maincopy.py[line:134] - ERROR: KeyboardInterrupt +2024-04-24 12:52:36,321 - maincopy.py[line:106] - INFO: main.py len of parameter: 2 +2024-04-24 12:52:36,322 - maincopy.py[line:114] - INFO: python 脚本里的接收到的参数是: +2024-04-24 12:52:36,322 - maincopy.py[line:115] - INFO: 0 +2024-04-24 12:52:36,322 - maincopy.py[line:116] - INFO: 开始执行sys.stdin.read +2024-04-24 12:52:36,322 - maincopy.py[line:118] - INFO: +2024-04-24 12:52:36,322 - maincopy.py[line:119] - INFO: len(input_data):98 +2024-04-24 12:52:36,322 - maincopy.py[line:128] - INFO: /Users/wangvivi/Desktop/Code/ocrtest/images/1.jpg/Users/wangvivi/Desktop/Code/ocrtest/images/1.jpg +2024-04-24 12:52:36,322 - maincopy.py[line:129] - INFO: +2024-04-24 12:54:33,395 - maincopy.py[line:106] - INFO: main.py len of parameter: 2 +2024-04-24 12:54:33,395 - maincopy.py[line:114] - INFO: python 脚本里的接收到的参数是: +2024-04-24 12:54:33,395 - maincopy.py[line:115] - INFO: 0 +2024-04-24 12:54:33,395 - maincopy.py[line:116] - INFO: 开始执行sys.stdin.read +2024-04-24 12:54:33,395 - maincopy.py[line:118] - INFO: +2024-04-24 12:54:33,395 - maincopy.py[line:119] - INFO: len(input_data):98 +2024-04-24 12:55:15,073 - maincopy.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时2.2911689281463623秒 +2024-04-24 12:56:18,976 - maincopy.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时2.287321090698242秒 +2024-04-24 12:56:59,150 - maincopy.py[line:106] - INFO: main.py len of parameter: 2 +2024-04-24 12:56:59,150 - maincopy.py[line:114] - INFO: python 脚本里的接收到的参数是: +2024-04-24 12:56:59,150 - maincopy.py[line:115] - INFO: 0 +2024-04-24 12:56:59,150 - maincopy.py[line:116] - INFO: 开始执行sys.stdin.read +2024-04-24 12:56:59,150 - maincopy.py[line:118] - INFO: +2024-04-24 12:56:59,150 - maincopy.py[line:119] - INFO: len(input_data):98 +2024-04-24 12:58:35,960 - maincopy.py[line:106] - INFO: main.py len of parameter: 2 +2024-04-24 12:58:35,960 - maincopy.py[line:114] - INFO: python 脚本里的接收到的参数是: +2024-04-24 12:58:35,960 - maincopy.py[line:115] - INFO: 0 +2024-04-24 12:58:35,960 - maincopy.py[line:116] - INFO: 开始执行sys.stdin.read +2024-04-24 12:58:35,960 - maincopy.py[line:118] - INFO: +2024-04-24 12:58:35,960 - maincopy.py[line:119] - INFO: len(input_data):98 +2024-04-24 13:00:40,873 - maincopy.py[line:106] - INFO: main.py len of parameter: 2 +2024-04-24 13:00:40,873 - maincopy.py[line:114] - INFO: python 脚本里的接收到的参数是: +2024-04-24 13:00:40,873 - maincopy.py[line:115] - INFO: 0 +2024-04-24 13:00:40,873 - maincopy.py[line:116] - INFO: 开始执行sys.stdin.read +2024-04-24 13:00:40,873 - maincopy.py[line:118] - INFO: +2024-04-24 13:00:40,873 - maincopy.py[line:119] - INFO: len(input_data):98 +2024-04-24 13:00:40,873 - maincopy.py[line:128] - INFO: /Users/wangvivi/Desktop/Code/ocrtest/images/1.jpg/Users/wangvivi/Desktop/Code/ocrtest/images/1.jpg +2024-04-24 13:00:40,873 - maincopy.py[line:129] - INFO: +2024-04-24 13:04:09,765 - maincopy.py[line:106] - INFO: main.py len of parameter: 2 +2024-04-24 13:04:09,766 - maincopy.py[line:114] - INFO: python 脚本里的接收到的参数是: +2024-04-24 13:04:09,766 - maincopy.py[line:115] - INFO: 0 +2024-04-24 13:04:09,766 - maincopy.py[line:116] - INFO: 开始执行sys.stdin.read +2024-04-24 13:04:09,766 - maincopy.py[line:118] - INFO: +2024-04-24 13:04:09,766 - maincopy.py[line:119] - INFO: len(input_data):99 +2024-04-24 13:04:09,766 - maincopy.py[line:128] - INFO: /Users/wangvivi/Desktop/Code/ocrtest/images/1.jpg +2024-04-24 13:04:09,766 - maincopy.py[line:129] - INFO: /Users/wangvivi/Desktop/Code/ocrtest/images/1.jpg +2024-04-24 13:04:12,662 - maincopy.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时2.4848101139068604秒 +2024-04-24 13:06:03,078 - maincopy.py[line:106] - INFO: main.py len of parameter: 2 +2024-04-24 13:06:03,078 - maincopy.py[line:114] - INFO: python 脚本里的接收到的参数是: +2024-04-24 13:06:03,078 - maincopy.py[line:115] - INFO: 0 +2024-04-24 13:06:03,078 - maincopy.py[line:116] - INFO: 开始执行sys.stdin.read +2024-04-24 13:06:03,078 - maincopy.py[line:118] - INFO: +2024-04-24 13:06:03,078 - maincopy.py[line:119] - INFO: len(input_data):99 +2024-04-24 13:06:03,078 - maincopy.py[line:128] - INFO: /Users/wangvivi/Desktop/Code/ocrtest/images/1.jpg +2024-04-24 13:06:03,078 - maincopy.py[line:129] - INFO: /Users/wangvivi/Desktop/Code/ocrtest/images/1.jpg +2024-04-24 13:06:05,927 - maincopy.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时2.4602651596069336秒 +2024-04-24 13:06:23,064 - maincopy.py[line:106] - INFO: main.py len of parameter: 2 +2024-04-24 13:06:23,064 - maincopy.py[line:114] - INFO: python 脚本里的接收到的参数是: +2024-04-24 13:06:23,064 - maincopy.py[line:115] - INFO: 0 +2024-04-24 13:06:23,064 - maincopy.py[line:116] - INFO: 开始执行sys.stdin.read +2024-04-24 13:06:23,064 - maincopy.py[line:118] - INFO: +2024-04-24 13:06:23,064 - maincopy.py[line:119] - INFO: len(input_data):60 +2024-04-24 13:06:23,064 - maincopy.py[line:128] - INFO: /Users/wangvivi/Desktop/OCRTool/OCRPython/images/id_card.JPG +2024-04-24 13:06:23,064 - maincopy.py[line:129] - INFO: +2024-04-24 13:06:25,439 - maincopy.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时1.9844698905944824秒 +2024-04-24 13:07:09,732 - maincopy.py[line:106] - INFO: main.py len of parameter: 2 +2024-04-24 13:07:09,732 - maincopy.py[line:114] - INFO: python 脚本里的接收到的参数是: +2024-04-24 13:07:09,732 - maincopy.py[line:115] - INFO: 0 +2024-04-24 13:07:09,732 - maincopy.py[line:116] - INFO: 开始执行sys.stdin.read +2024-04-24 13:07:09,732 - maincopy.py[line:118] - INFO: +2024-04-24 13:07:09,732 - maincopy.py[line:119] - INFO: len(input_data):109 +2024-04-24 13:07:09,732 - maincopy.py[line:128] - INFO: /Users/wangvivi/Desktop/OCRTool/OCRPython/images/1.jpg +2024-04-24 13:07:09,732 - maincopy.py[line:129] - INFO: /Users/wangvivi/Desktop/OCRTool/OCRPython/images/1.jpg +2024-04-24 13:07:12,535 - maincopy.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时2.43983793258667秒 +2024-04-24 13:17:49,833 - maincopy.py[line:106] - INFO: main.py len of parameter: 2 +2024-04-24 13:17:49,833 - maincopy.py[line:114] - INFO: python 脚本里的接收到的参数是: +2024-04-24 13:17:49,833 - maincopy.py[line:115] - INFO: 0 +2024-04-24 13:17:49,833 - maincopy.py[line:116] - INFO: 开始执行sys.stdin.read +2024-04-24 13:17:49,833 - maincopy.py[line:118] - INFO: +2024-04-24 13:17:49,833 - maincopy.py[line:119] - INFO: len(input_data):99 +2024-04-24 13:17:49,833 - maincopy.py[line:128] - INFO: /Users/wangvivi/Desktop/Code/ocrtest/images/2.jpg +2024-04-24 13:17:49,833 - maincopy.py[line:129] - INFO: /Users/wangvivi/Desktop/Code/ocrtest/images/2.jpg +2024-04-24 13:17:52,317 - maincopy.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时2.094881057739258秒 +2024-04-24 13:19:57,212 - maincopy.py[line:106] - INFO: main.py len of parameter: 2 +2024-04-24 13:19:57,212 - maincopy.py[line:114] - INFO: python 脚本里的接收到的参数是: +2024-04-24 13:19:57,212 - maincopy.py[line:115] - INFO: 0 +2024-04-24 13:19:57,212 - maincopy.py[line:116] - INFO: 开始执行sys.stdin.read +2024-04-24 13:19:57,212 - maincopy.py[line:118] - INFO: +2024-04-24 13:19:57,212 - maincopy.py[line:119] - INFO: len(input_data):99 +2024-04-24 13:19:57,212 - maincopy.py[line:128] - INFO: /Users/wangvivi/Desktop/Code/ocrtest/images/1.jpg +2024-04-24 13:19:57,212 - maincopy.py[line:129] - INFO: /Users/wangvivi/Desktop/Code/ocrtest/images/1.jpg +2024-04-24 13:20:00,076 - maincopy.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时2.4822380542755127秒 +2024-04-24 13:21:38,575 - maincopy.py[line:106] - INFO: main.py len of parameter: 2 +2024-04-24 13:21:38,575 - maincopy.py[line:114] - INFO: python 脚本里的接收到的参数是: +2024-04-24 13:21:38,575 - maincopy.py[line:115] - INFO: 0 +2024-04-24 13:21:38,575 - maincopy.py[line:116] - INFO: 开始执行sys.stdin.read +2024-04-24 13:21:38,575 - maincopy.py[line:118] - INFO: +2024-04-24 13:21:38,575 - maincopy.py[line:119] - INFO: len(input_data):99 +2024-04-24 13:21:38,575 - maincopy.py[line:128] - INFO: /Users/wangvivi/Desktop/Code/ocrtest/images/2.jpg +2024-04-24 13:21:38,575 - maincopy.py[line:129] - INFO: /Users/wangvivi/Desktop/Code/ocrtest/images/2.jpg +2024-04-24 13:21:41,080 - maincopy.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时2.110614776611328秒 +2024-04-24 13:22:34,001 - maincopy.py[line:55] - INFO: extractIdCardInfoByBase64Data +2024-04-24 13:22:34,002 - maincopy.py[line:60] - INFO: not base64data1.empty() +2024-04-24 13:22:34,002 - maincopy.py[line:66] - INFO: not base64Data2.empty() +2024-04-24 13:22:34,002 - maincopy.py[line:72] - INFO: file1.png and file2.png exist +2024-04-24 13:22:34,477 - maincopy.py[line:41] - ERROR: 'NoneType' object has no attribute 'shape' +2024-04-24 13:22:34,485 - maincopy.py[line:89] - INFO: extractIdCardInfoByBase64Data 耗时0.4831879138946533秒 +2024-04-24 13:23:30,252 - maincopy.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时2.2979841232299805秒 +2024-04-24 13:25:38,472 - maincopy.py[line:106] - INFO: main.py len of parameter: 2 +2024-04-24 13:25:38,473 - maincopy.py[line:114] - INFO: python 脚本里的接收到的参数是: +2024-04-24 13:25:38,473 - maincopy.py[line:115] - INFO: 0 +2024-04-24 13:25:38,473 - maincopy.py[line:116] - INFO: 开始执行sys.stdin.read +2024-04-24 13:25:38,473 - maincopy.py[line:118] - INFO: +2024-04-24 13:25:38,473 - maincopy.py[line:119] - INFO: len(input_data):99 +2024-04-24 13:25:38,473 - maincopy.py[line:128] - INFO: /Users/wangvivi/Desktop/Code/ocrtest/images/1.jpg +2024-04-24 13:25:38,473 - maincopy.py[line:129] - INFO: /Users/wangvivi/Desktop/Code/ocrtest/images/1.jpg +2024-04-24 13:25:41,395 - maincopy.py[line:45] - INFO: text:姓名郭乾坤 +性别男民族汉 +出生1994年10月17日 +住址 安徽省宿州市场桥区朱仙 +庄镇郭庙村郭家组6号 +公民身份号码 +34220119941017327X +姓名郭乾坤 +性别男民族汉 +出生1994年10月17日 +住址 安徽省宿州市场桥区朱仙 +庄镇郭庙村郭家组6号 +公民身份号码 +34220119941017327X + +2024-04-24 13:25:41,396 - maincopy.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时2.538060188293457秒 +2024-04-24 13:25:50,144 - maincopy.py[line:106] - INFO: main.py len of parameter: 2 +2024-04-24 13:25:50,144 - maincopy.py[line:114] - INFO: python 脚本里的接收到的参数是: +2024-04-24 13:25:50,144 - maincopy.py[line:115] - INFO: 0 +2024-04-24 13:25:50,144 - maincopy.py[line:116] - INFO: 开始执行sys.stdin.read +2024-04-24 13:25:50,144 - maincopy.py[line:118] - INFO: +2024-04-24 13:25:50,144 - maincopy.py[line:119] - INFO: len(input_data):99 +2024-04-24 13:25:50,144 - maincopy.py[line:128] - INFO: /Users/wangvivi/Desktop/Code/ocrtest/images/2.jpg +2024-04-24 13:25:50,144 - maincopy.py[line:129] - INFO: /Users/wangvivi/Desktop/Code/ocrtest/images/2.jpg +2024-04-24 13:25:52,608 - maincopy.py[line:45] - INFO: text:中华人民共和国 +居民身份证 +oo +签发机关宿州市公安局桥分局 +有效期限2023.01.18-2043.01.18 +中华人民共和国 +居民身份证 +oo +签发机关宿州市公安局桥分局 +有效期限2023.01.18-2043.01.18 + +2024-04-24 13:25:52,609 - maincopy.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时2.10273814201355秒 +2024-04-24 13:31:25,829 - maincopy.py[line:106] - INFO: main.py len of parameter: 2 +2024-04-24 13:31:25,829 - maincopy.py[line:114] - INFO: python 脚本里的接收到的参数是: +2024-04-24 13:31:25,829 - maincopy.py[line:115] - INFO: 0 +2024-04-24 13:31:25,829 - maincopy.py[line:116] - INFO: 开始执行sys.stdin.read +2024-04-24 13:31:25,829 - maincopy.py[line:118] - INFO: +2024-04-24 13:31:25,829 - maincopy.py[line:119] - INFO: len(input_data):99 +2024-04-24 13:31:25,829 - maincopy.py[line:124] - INFO: 2 == len(split_data) +2024-04-24 13:31:25,829 - maincopy.py[line:129] - INFO: /Users/wangvivi/Desktop/Code/ocrtest/images/1.jpg +2024-04-24 13:31:25,829 - maincopy.py[line:130] - INFO: /Users/wangvivi/Desktop/Code/ocrtest/images/1.jpg +2024-04-24 13:31:28,724 - maincopy.py[line:45] - INFO: text:姓名郭乾坤 +性别男民族汉 +出生1994年10月17日 +住址 安徽省宿州市场桥区朱仙 +庄镇郭庙村郭家组6号 +公民身份号码 +34220119941017327X +姓名郭乾坤 +性别男民族汉 +出生1994年10月17日 +住址 安徽省宿州市场桥区朱仙 +庄镇郭庙村郭家组6号 +公民身份号码 +34220119941017327X + +2024-04-24 13:31:28,725 - maincopy.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时2.4937820434570312秒 +2024-04-24 13:32:25,078 - maincopy.py[line:106] - INFO: main.py len of parameter: 2 +2024-04-24 13:32:25,078 - maincopy.py[line:114] - INFO: python 脚本里的接收到的参数是: +2024-04-24 13:32:25,078 - maincopy.py[line:115] - INFO: 0 +2024-04-24 13:32:25,078 - maincopy.py[line:116] - INFO: 开始执行sys.stdin.read +2024-04-24 13:32:25,078 - maincopy.py[line:118] - INFO: +2024-04-24 13:32:25,078 - maincopy.py[line:119] - INFO: len(input_data):99 +2024-04-24 13:32:25,078 - maincopy.py[line:124] - INFO: 2 == len(split_data) +2024-04-24 13:32:25,078 - maincopy.py[line:129] - INFO: /Users/wangvivi/Desktop/Code/ocrtest/images/2.jpg +2024-04-24 13:32:25,078 - maincopy.py[line:130] - INFO: /Users/wangvivi/Desktop/Code/ocrtest/images/2.jpg +2024-04-24 13:32:27,626 - maincopy.py[line:45] - INFO: text:中华人民共和国 +居民身份证 +oo +签发机关宿州市公安局桥分局 +有效期限2023.01.18-2043.01.18 +中华人民共和国 +居民身份证 +oo +签发机关宿州市公安局桥分局 +有效期限2023.01.18-2043.01.18 + +2024-04-24 13:32:27,628 - maincopy.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时2.1099438667297363秒 +2024-04-24 13:35:17,800 - maincopy.py[line:106] - INFO: main.py len of parameter: 2 +2024-04-24 13:35:17,800 - maincopy.py[line:114] - INFO: python 脚本里的接收到的参数是: +2024-04-24 13:35:17,801 - maincopy.py[line:115] - INFO: 0 +2024-04-24 13:35:17,801 - maincopy.py[line:116] - INFO: 开始执行sys.stdin.read +2024-04-24 13:35:17,801 - maincopy.py[line:118] - INFO: +2024-04-24 13:35:17,801 - maincopy.py[line:119] - INFO: len(input_data):99 +2024-04-24 13:35:17,801 - maincopy.py[line:120] - INFO: input_data:/Users/wangvivi/Desktop/Code/ocrtest/images/1.jpg +/Users/wangvivi/Desktop/Code/ocrtest/images/1.jpg +2024-04-24 13:35:17,801 - maincopy.py[line:125] - INFO: 2 == len(split_data) +2024-04-24 13:35:17,801 - maincopy.py[line:130] - INFO: /Users/wangvivi/Desktop/Code/ocrtest/images/1.jpg +2024-04-24 13:35:17,801 - maincopy.py[line:131] - INFO: /Users/wangvivi/Desktop/Code/ocrtest/images/1.jpg +2024-04-24 13:35:20,653 - maincopy.py[line:45] - INFO: text:姓名郭乾坤 +性别男民族汉 +出生1994年10月17日 +住址 安徽省宿州市场桥区朱仙 +庄镇郭庙村郭家组6号 +公民身份号码 +34220119941017327X +姓名郭乾坤 +性别男民族汉 +出生1994年10月17日 +住址 安徽省宿州市场桥区朱仙 +庄镇郭庙村郭家组6号 +公民身份号码 +34220119941017327X + +2024-04-24 13:35:20,654 - maincopy.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时2.457205057144165秒 +2024-04-24 13:35:27,911 - maincopy.py[line:106] - INFO: main.py len of parameter: 2 +2024-04-24 13:35:27,912 - maincopy.py[line:114] - INFO: python 脚本里的接收到的参数是: +2024-04-24 13:35:27,912 - maincopy.py[line:115] - INFO: 0 +2024-04-24 13:35:27,912 - maincopy.py[line:116] - INFO: 开始执行sys.stdin.read +2024-04-24 13:35:27,912 - maincopy.py[line:118] - INFO: +2024-04-24 13:35:27,912 - maincopy.py[line:119] - INFO: len(input_data):99 +2024-04-24 13:35:27,912 - maincopy.py[line:120] - INFO: input_data:/Users/wangvivi/Desktop/Code/ocrtest/images/2.jpg +/Users/wangvivi/Desktop/Code/ocrtest/images/2.jpg +2024-04-24 13:35:27,912 - maincopy.py[line:125] - INFO: 2 == len(split_data) +2024-04-24 13:35:27,912 - maincopy.py[line:130] - INFO: /Users/wangvivi/Desktop/Code/ocrtest/images/2.jpg +2024-04-24 13:35:27,912 - maincopy.py[line:131] - INFO: /Users/wangvivi/Desktop/Code/ocrtest/images/2.jpg +2024-04-24 13:35:30,420 - maincopy.py[line:45] - INFO: text:中华人民共和国 +居民身份证 +oo +签发机关宿州市公安局桥分局 +有效期限2023.01.18-2043.01.18 +中华人民共和国 +居民身份证 +oo +签发机关宿州市公安局桥分局 +有效期限2023.01.18-2043.01.18 + +2024-04-24 13:35:30,421 - maincopy.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时2.1062068939208984秒 +2024-04-24 14:21:53,421 - maincopy.py[line:106] - INFO: main.py len of parameter: 2 +2024-04-24 14:21:53,422 - maincopy.py[line:114] - INFO: python 脚本里的接收到的参数是: +2024-04-24 14:21:53,422 - maincopy.py[line:115] - INFO: 0 +2024-04-24 14:21:53,422 - maincopy.py[line:116] - INFO: 开始执行sys.stdin.read +2024-04-24 14:21:53,422 - maincopy.py[line:118] - INFO: +2024-04-24 14:21:53,422 - maincopy.py[line:119] - INFO: len(input_data):99 +2024-04-24 14:21:53,422 - maincopy.py[line:121] - INFO: image_data1:b'\xfdK\x1e\xae\xcf\xf0jx/\x8a\xf8\xbf\r\xeb$\xb6\x8a\x7f\n\x87^\xfe\x87+\xb5\xeb-\xfe)\x9a\x81\xeb?\xd6:`\xfdK\x1e\xae\xcf\xf0jx/\x8a\xf8\xbf\r\xeb$\xb6\x8a\x7f\n\x87^\xfe\x87+\xb5\xeb-\xfe)\x9a\x81\xeb?\xda:`' +2024-04-24 14:21:53,422 - maincopy.py[line:122] - INFO: input_data:/Users/wangvivi/Desktop/Code/ocrtest/images/1.jpg +/Users/wangvivi/Desktop/Code/ocrtest/images/2.jpg +2024-04-24 14:21:53,422 - maincopy.py[line:127] - INFO: 2 == len(split_data) +2024-04-24 14:21:53,422 - maincopy.py[line:132] - INFO: /Users/wangvivi/Desktop/Code/ocrtest/images/1.jpg +2024-04-24 14:21:53,422 - maincopy.py[line:133] - INFO: /Users/wangvivi/Desktop/Code/ocrtest/images/2.jpg +2024-04-24 14:21:56,177 - maincopy.py[line:45] - INFO: text:姓名郭乾坤 +性别男民族汉 +出生1994年10月17日 +住址 安徽省宿州市场桥区朱仙 +庄镇郭庙村郭家组6号 +公民身份号码 +34220119941017327X +中华人民共和国 +居民身份证 +oo +签发机关宿州市公安局桥分局 +有效期限2023.01.18-2043.01.18 + +2024-04-24 14:21:56,178 - maincopy.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时2.390254020690918秒 +2024-04-24 14:21:58,837 - maincopy.py[line:106] - INFO: main.py len of parameter: 2 +2024-04-24 14:21:58,837 - maincopy.py[line:114] - INFO: python 脚本里的接收到的参数是: +2024-04-24 14:21:58,837 - maincopy.py[line:115] - INFO: 0 +2024-04-24 14:21:58,837 - maincopy.py[line:116] - INFO: 开始执行sys.stdin.read +2024-04-24 14:21:58,837 - maincopy.py[line:118] - INFO: +2024-04-24 14:21:58,837 - maincopy.py[line:119] - INFO: len(input_data):99 +2024-04-24 14:21:58,837 - maincopy.py[line:121] - INFO: image_data1:b'\xfdK\x1e\xae\xcf\xf0jx/\x8a\xf8\xbf\r\xeb$\xb6\x8a\x7f\n\x87^\xfe\x87+\xb5\xeb-\xfe)\x9a\x81\xeb?\xda:`\xfdK\x1e\xae\xcf\xf0jx/\x8a\xf8\xbf\r\xeb$\xb6\x8a\x7f\n\x87^\xfe\x87+\xb5\xeb-\xfe)\x9a\x81\xeb?\xd6:`' +2024-04-24 14:21:58,837 - maincopy.py[line:122] - INFO: input_data:/Users/wangvivi/Desktop/Code/ocrtest/images/2.jpg +/Users/wangvivi/Desktop/Code/ocrtest/images/1.jpg +2024-04-24 14:21:58,837 - maincopy.py[line:127] - INFO: 2 == len(split_data) +2024-04-24 14:21:58,837 - maincopy.py[line:132] - INFO: /Users/wangvivi/Desktop/Code/ocrtest/images/2.jpg +2024-04-24 14:21:58,837 - maincopy.py[line:133] - INFO: /Users/wangvivi/Desktop/Code/ocrtest/images/1.jpg +2024-04-24 14:22:01,439 - maincopy.py[line:45] - INFO: text:中华人民共和国 +居民身份证 +oo +签发机关宿州市公安局桥分局 +有效期限2023.01.18-2043.01.18 +姓名郭乾坤 +性别男民族汉 +出生1994年10月17日 +住址 安徽省宿州市场桥区朱仙 +庄镇郭庙村郭家组6号 +公民身份号码 +34220119941017327X + +2024-04-24 14:22:01,441 - maincopy.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时2.2861130237579346秒 +2024-04-24 14:24:13,103 - maincopy.py[line:106] - INFO: main.py len of parameter: 2 +2024-04-24 14:24:13,103 - maincopy.py[line:114] - INFO: python 脚本里的接收到的参数是: +2024-04-24 14:24:13,103 - maincopy.py[line:115] - INFO: 0 +2024-04-24 14:24:13,103 - maincopy.py[line:116] - INFO: 开始执行sys.stdin.read +2024-04-24 14:24:13,103 - maincopy.py[line:118] - INFO: +2024-04-24 14:24:13,103 - maincopy.py[line:119] - INFO: len(input_data):99 +2024-04-24 14:24:13,103 - maincopy.py[line:122] - INFO: input_data:/Users/wangvivi/Desktop/Code/ocrtest/images/2.jpg +/Users/wangvivi/Desktop/Code/ocrtest/images/1.jpg +2024-04-24 14:24:13,103 - maincopy.py[line:127] - INFO: 2 == len(split_data) +2024-04-24 14:24:13,103 - maincopy.py[line:132] - INFO: /Users/wangvivi/Desktop/Code/ocrtest/images/2.jpg +2024-04-24 14:24:13,103 - maincopy.py[line:133] - INFO: /Users/wangvivi/Desktop/Code/ocrtest/images/1.jpg +2024-04-24 14:24:15,787 - maincopy.py[line:45] - INFO: text:中华人民共和国 +居民身份证 +oo +签发机关宿州市公安局桥分局 +有效期限2023.01.18-2043.01.18 +姓名郭乾坤 +性别男民族汉 +出生1994年10月17日 +住址 安徽省宿州市场桥区朱仙 +庄镇郭庙村郭家组6号 +公民身份号码 +34220119941017327X + +2024-04-24 14:24:15,787 - maincopy.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时2.3229517936706543秒 +2024-04-24 14:24:31,801 - maincopy.py[line:106] - INFO: main.py len of parameter: 2 +2024-04-24 14:24:31,801 - maincopy.py[line:114] - INFO: python 脚本里的接收到的参数是: +2024-04-24 14:24:31,801 - maincopy.py[line:115] - INFO: 0 +2024-04-24 14:24:31,801 - maincopy.py[line:116] - INFO: 开始执行sys.stdin.read +2024-04-24 14:24:31,801 - maincopy.py[line:118] - INFO: +2024-04-24 14:24:31,802 - maincopy.py[line:119] - INFO: len(input_data):99 +2024-04-24 14:24:31,802 - maincopy.py[line:122] - INFO: input_data:/Users/wangvivi/Desktop/Code/ocrtest/images/1.jpg +/Users/wangvivi/Desktop/Code/ocrtest/images/2.jpg +2024-04-24 14:24:31,802 - maincopy.py[line:127] - INFO: 2 == len(split_data) +2024-04-24 14:24:31,802 - maincopy.py[line:132] - INFO: /Users/wangvivi/Desktop/Code/ocrtest/images/1.jpg +2024-04-24 14:24:31,802 - maincopy.py[line:133] - INFO: /Users/wangvivi/Desktop/Code/ocrtest/images/2.jpg +2024-04-24 14:24:34,417 - maincopy.py[line:45] - INFO: text:姓名郭乾坤 +性别男民族汉 +出生1994年10月17日 +住址 安徽省宿州市场桥区朱仙 +庄镇郭庙村郭家组6号 +公民身份号码 +34220119941017327X +中华人民共和国 +居民身份证 +oo +签发机关宿州市公安局桥分局 +有效期限2023.01.18-2043.01.18 + +2024-04-24 14:24:34,417 - maincopy.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时2.268589973449707秒 +2024-04-24 16:34:14,936 - maincopy.py[line:106] - INFO: main.py len of parameter: 2 +2024-04-24 16:34:14,936 - maincopy.py[line:114] - INFO: python 脚本里的接收到的参数是: +2024-04-24 16:34:14,936 - maincopy.py[line:115] - INFO: 0 +2024-04-24 16:34:14,936 - maincopy.py[line:116] - INFO: 开始执行sys.stdin.read +2024-04-24 16:34:14,936 - maincopy.py[line:118] - INFO: +2024-04-24 16:34:14,936 - maincopy.py[line:119] - INFO: len(input_data):99 +2024-04-24 16:34:14,936 - maincopy.py[line:127] - INFO: 2 == len(split_data) +2024-04-24 16:34:17,554 - maincopy.py[line:45] - INFO: text:姓名郭乾坤 +性别男民族汉 +出生1994年10月17日 +住址 安徽省宿州市场桥区朱仙 +庄镇郭庙村郭家组6号 +公民身份号码 +34220119941017327X +中华人民共和国 +居民身份证 +oo +签发机关宿州市公安局桥分局 +有效期限2023.01.18-2043.01.18 + +2024-04-24 16:34:17,555 - maincopy.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时2.2527689933776855秒 +2024-04-24 16:34:26,543 - maincopy.py[line:106] - INFO: main.py len of parameter: 2 +2024-04-24 16:34:26,543 - maincopy.py[line:114] - INFO: python 脚本里的接收到的参数是: +2024-04-24 16:34:26,543 - maincopy.py[line:115] - INFO: 0 +2024-04-24 16:34:26,543 - maincopy.py[line:116] - INFO: 开始执行sys.stdin.read +2024-04-24 16:34:26,543 - maincopy.py[line:118] - INFO: +2024-04-24 16:34:26,543 - maincopy.py[line:119] - INFO: len(input_data):99 +2024-04-24 16:34:26,543 - maincopy.py[line:127] - INFO: 2 == len(split_data) +2024-04-24 16:34:29,425 - maincopy.py[line:45] - INFO: text:姓名郭乾坤 +性别男民族汉 +出生1994年10月17日 +住址 安徽省宿州市场桥区朱仙 +庄镇郭庙村郭家组6号 +公民身份号码 +34220119941017327X +中华人民共和国 +居民身份证 +oo +签发机关宿州市公安局桥分局 +有效期限2023.01.18-2043.01.18 + +2024-04-24 16:34:29,426 - maincopy.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时2.289462089538574秒 +2024-04-24 16:34:43,928 - maincopy.py[line:106] - INFO: main.py len of parameter: 2 +2024-04-24 16:34:43,928 - maincopy.py[line:114] - INFO: python 脚本里的接收到的参数是: +2024-04-24 16:34:43,928 - maincopy.py[line:115] - INFO: 0 +2024-04-24 16:34:43,928 - maincopy.py[line:116] - INFO: 开始执行sys.stdin.read +2024-04-24 16:34:43,928 - maincopy.py[line:118] - INFO: +2024-04-24 16:34:43,928 - maincopy.py[line:119] - INFO: len(input_data):99 +2024-04-24 16:34:43,928 - maincopy.py[line:127] - INFO: 2 == len(split_data) +2024-04-24 16:34:46,634 - maincopy.py[line:45] - INFO: text:中华人民共和国 +居民身份证 +oo +签发机关宿州市公安局桥分局 +有效期限2023.01.18-2043.01.18 +姓名郭乾坤 +性别男民族汉 +出生1994年10月17日 +住址 安徽省宿州市场桥区朱仙 +庄镇郭庙村郭家组6号 +公民身份号码 +34220119941017327X + +2024-04-24 16:34:46,635 - maincopy.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时2.301076889038086秒 +2024-04-24 16:41:55,875 - maincopy.py[line:106] - INFO: main.py len of parameter: 2 +2024-04-24 16:41:55,875 - maincopy.py[line:114] - INFO: python 脚本里的接收到的参数是: +2024-04-24 16:41:55,875 - maincopy.py[line:115] - INFO: 0 +2024-04-24 16:41:55,875 - maincopy.py[line:116] - INFO: 开始执行sys.stdin.read +2024-04-24 16:41:55,875 - maincopy.py[line:118] - INFO: len(input_data):99 +2024-04-24 16:41:55,875 - maincopy.py[line:125] - INFO: 2 == len(split_data) +2024-04-24 16:41:58,803 - maincopy.py[line:45] - INFO: text:姓名郭乾坤 +性别男民族汉 +出生1994年10月17日 +住址 安徽省宿州市场桥区朱仙 +庄镇郭庙村郭家组6号 +公民身份号码 +34220119941017327X +姓名郭乾坤 +性别男民族汉 +出生1994年10月17日 +住址 安徽省宿州市场桥区朱仙 +庄镇郭庙村郭家组6号 +公民身份号码 +34220119941017327X + +2024-04-24 16:41:58,804 - maincopy.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时2.5516269207000732秒 +2024-04-24 16:42:14,313 - maincopy.py[line:106] - INFO: main.py len of parameter: 2 +2024-04-24 16:42:14,313 - maincopy.py[line:114] - INFO: python 脚本里的接收到的参数是: +2024-04-24 16:42:14,313 - maincopy.py[line:115] - INFO: 0 +2024-04-24 16:42:14,313 - maincopy.py[line:116] - INFO: 开始执行sys.stdin.read +2024-04-24 16:42:14,313 - maincopy.py[line:118] - INFO: len(input_data):99 +2024-04-24 16:42:14,313 - maincopy.py[line:125] - INFO: 2 == len(split_data) +2024-04-24 16:42:16,783 - maincopy.py[line:45] - INFO: text:中华人民共和国 +居民身份证 +oo +签发机关宿州市公安局桥分局 +有效期限2023.01.18-2043.01.18 +中华人民共和国 +居民身份证 +oo +签发机关宿州市公安局桥分局 +有效期限2023.01.18-2043.01.18 + +2024-04-24 16:42:16,784 - maincopy.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时2.0969903469085693秒 +2024-04-24 16:44:01,327 - maincopy.py[line:106] - INFO: main.py len of parameter: 2 +2024-04-24 16:44:01,328 - maincopy.py[line:114] - INFO: python 脚本里的接收到的参数是: +2024-04-24 16:44:01,328 - maincopy.py[line:115] - INFO: 0 +2024-04-24 16:44:01,328 - maincopy.py[line:116] - INFO: 开始执行sys.stdin.read +2024-04-24 16:44:01,328 - maincopy.py[line:118] - INFO: len(input_data):99 +2024-04-24 16:44:01,328 - maincopy.py[line:126] - INFO: 2 == len(split_data) +2024-04-24 16:44:04,160 - maincopy.py[line:45] - INFO: text:姓名郭乾坤 +性别男民族汉 +出生1994年10月17日 +住址 安徽省宿州市场桥区朱仙 +庄镇郭庙村郭家组6号 +公民身份号码 +34220119941017327X +姓名郭乾坤 +性别男民族汉 +出生1994年10月17日 +住址 安徽省宿州市场桥区朱仙 +庄镇郭庙村郭家组6号 +公民身份号码 +34220119941017327X + +2024-04-24 16:44:04,161 - maincopy.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时2.4609580039978027秒 +2024-04-24 16:44:14,034 - maincopy.py[line:106] - INFO: main.py len of parameter: 2 +2024-04-24 16:44:14,034 - maincopy.py[line:114] - INFO: python 脚本里的接收到的参数是: +2024-04-24 16:44:14,034 - maincopy.py[line:115] - INFO: 0 +2024-04-24 16:44:14,034 - maincopy.py[line:116] - INFO: 开始执行sys.stdin.read +2024-04-24 16:44:14,034 - maincopy.py[line:118] - INFO: len(input_data):99 +2024-04-24 16:44:14,034 - maincopy.py[line:126] - INFO: 2 == len(split_data) +2024-04-24 16:44:16,498 - maincopy.py[line:45] - INFO: text:中华人民共和国 +居民身份证 +oo +签发机关宿州市公安局桥分局 +有效期限2023.01.18-2043.01.18 +中华人民共和国 +居民身份证 +oo +签发机关宿州市公安局桥分局 +有效期限2023.01.18-2043.01.18 + +2024-04-24 16:44:16,499 - maincopy.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时2.0832271575927734秒 +2024-04-24 16:45:18,302 - maincopy.py[line:106] - INFO: main.py len of parameter: 2 +2024-04-24 16:45:18,302 - maincopy.py[line:114] - INFO: python 脚本里的接收到的参数是: +2024-04-24 16:45:18,302 - maincopy.py[line:115] - INFO: 0 +2024-04-24 16:45:18,302 - maincopy.py[line:116] - INFO: 开始执行sys.stdin.read +2024-04-24 16:45:18,303 - maincopy.py[line:118] - INFO: len(input_data):99 +2024-04-24 16:45:18,303 - maincopy.py[line:121] - INFO: input_data:/Users/wangvivi/Desktop/Code/ocrtest/images/2.jpg +/Users/wangvivi/Desktop/Code/ocrtest/images/2.jpg +2024-04-24 16:45:18,303 - maincopy.py[line:126] - INFO: 2 == len(split_data) +2024-04-24 16:45:20,757 - maincopy.py[line:45] - INFO: text:中华人民共和国 +居民身份证 +oo +签发机关宿州市公安局桥分局 +有效期限2023.01.18-2043.01.18 +中华人民共和国 +居民身份证 +oo +签发机关宿州市公安局桥分局 +有效期限2023.01.18-2043.01.18 + +2024-04-24 16:45:20,757 - maincopy.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时2.085618019104004秒 +2024-04-24 16:46:29,353 - maincopy.py[line:106] - INFO: main.py len of parameter: 2 +2024-04-24 16:46:29,353 - maincopy.py[line:114] - INFO: python 脚本里的接收到的参数是: +2024-04-24 16:46:29,353 - maincopy.py[line:115] - INFO: 0 +2024-04-24 16:46:29,354 - maincopy.py[line:116] - INFO: 开始执行sys.stdin.read +2024-04-24 16:46:29,354 - maincopy.py[line:118] - INFO: len(input_data):99 +2024-04-24 16:46:29,354 - maincopy.py[line:121] - INFO: input_data:/Users/wangvivi/Desktop/Code/ocrtest/images/2.jpg +/Users/wangvivi/Desktop/Code/ocrtest/images/2.jpg +2024-04-24 16:48:28,039 - maincopy.py[line:106] - INFO: main.py len of parameter: 2 +2024-04-24 16:48:28,039 - maincopy.py[line:114] - INFO: python 脚本里的接收到的参数是: +2024-04-24 16:48:28,039 - maincopy.py[line:115] - INFO: 0 +2024-04-24 16:48:28,039 - maincopy.py[line:116] - INFO: 开始执行sys.stdin.read +2024-04-24 16:48:28,039 - maincopy.py[line:118] - INFO: len(input_data):99 +2024-04-24 16:48:28,039 - maincopy.py[line:126] - INFO: 2 == len(split_data) +2024-04-24 16:48:30,686 - maincopy.py[line:45] - INFO: text:姓名郭乾坤 +性别男民族汉 +出生1994年10月17日 +住址 安徽省宿州市场桥区朱仙 +庄镇郭庙村郭家组6号 +公民身份号码 +34220119941017327X +中华人民共和国 +居民身份证 +oo +签发机关宿州市公安局桥分局 +有效期限2023.01.18-2043.01.18 + +2024-04-24 16:48:30,686 - maincopy.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时2.2807259559631348秒 +2024-04-24 16:48:53,919 - maincopy.py[line:106] - INFO: main.py len of parameter: 2 +2024-04-24 16:48:53,919 - maincopy.py[line:114] - INFO: python 脚本里的接收到的参数是: +2024-04-24 16:48:53,919 - maincopy.py[line:115] - INFO: 0 +2024-04-24 16:48:53,919 - maincopy.py[line:116] - INFO: 开始执行sys.stdin.read +2024-04-24 16:48:53,919 - maincopy.py[line:118] - INFO: len(input_data):99 +2024-04-24 16:48:53,919 - maincopy.py[line:126] - INFO: 2 == len(split_data) +2024-04-24 16:48:56,601 - maincopy.py[line:45] - INFO: text:中华人民共和国 +居民身份证 +oo +签发机关宿州市公安局桥分局 +有效期限2023.01.18-2043.01.18 +姓名郭乾坤 +性别男民族汉 +出生1994年10月17日 +住址 安徽省宿州市场桥区朱仙 +庄镇郭庙村郭家组6号 +公民身份号码 +34220119941017327X + +2024-04-24 16:48:56,602 - maincopy.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时2.3053040504455566秒 +2024-04-24 16:52:24,731 - maincopy.py[line:106] - INFO: main.py len of parameter: 2 +2024-04-24 16:52:24,731 - maincopy.py[line:114] - INFO: python 脚本里的接收到的参数是: +2024-04-24 16:52:24,731 - maincopy.py[line:115] - INFO: 0 +2024-04-24 16:52:24,731 - maincopy.py[line:116] - INFO: 开始执行sys.stdin.read +2024-04-24 16:52:24,731 - maincopy.py[line:118] - INFO: len(input_data):99 +2024-04-24 16:52:24,731 - maincopy.py[line:126] - INFO: 2 == len(split_data) +2024-04-24 16:52:27,439 - maincopy.py[line:45] - INFO: text:中华人民共和国 +居民身份证 +oo +签发机关宿州市公安局桥分局 +有效期限2023.01.18-2043.01.18 +姓名郭乾坤 +性别男民族汉 +出生1994年10月17日 +住址 安徽省宿州市场桥区朱仙 +庄镇郭庙村郭家组6号 +公民身份号码 +34220119941017327X + +2024-04-24 16:52:27,440 - maincopy.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时2.3043291568756104秒 +2024-04-24 16:53:46,508 - maincopy.py[line:106] - INFO: main.py len of parameter: 2 +2024-04-24 16:53:46,508 - maincopy.py[line:114] - INFO: python 脚本里的接收到的参数是: +2024-04-24 16:53:46,508 - maincopy.py[line:115] - INFO: 1 +2024-04-24 16:53:46,508 - maincopy.py[line:116] - INFO: 开始执行sys.stdin.read +2024-04-24 16:53:46,508 - maincopy.py[line:118] - INFO: len(input_data):316279 +2024-04-24 16:53:46,508 - maincopy.py[line:55] - INFO: extractIdCardInfoByBase64Data +2024-04-24 16:53:46,508 - maincopy.py[line:60] - INFO: not base64data1.empty() +2024-04-24 16:53:46,509 - maincopy.py[line:77] - INFO: file1.png exist +2024-04-24 16:53:46,997 - maincopy.py[line:41] - ERROR: 'NoneType' object has no attribute 'shape' +2024-04-24 16:53:47,007 - maincopy.py[line:89] - INFO: extractIdCardInfoByBase64Data 耗时0.4982128143310547秒 +2024-04-24 16:54:36,164 - maincopy.py[line:55] - INFO: extractIdCardInfoByBase64Data +2024-04-24 16:54:36,164 - maincopy.py[line:60] - INFO: not base64data1.empty() +2024-04-24 16:54:36,165 - maincopy.py[line:66] - INFO: not base64Data2.empty() +2024-04-24 16:54:36,165 - maincopy.py[line:72] - INFO: file1.png and file2.png exist +2024-04-24 16:54:36,597 - maincopy.py[line:41] - ERROR: 'NoneType' object has no attribute 'shape' +2024-04-24 16:54:36,604 - maincopy.py[line:89] - INFO: extractIdCardInfoByBase64Data 耗时0.43999266624450684秒 +2024-04-24 16:54:36,604 - maincopy.py[line:106] - INFO: main.py len of parameter: 1 +2024-04-24 16:55:02,947 - maincopy.py[line:55] - INFO: extractIdCardInfoByBase64Data +2024-04-24 16:55:02,947 - maincopy.py[line:60] - INFO: not base64data1.empty() +2024-04-24 16:55:02,947 - maincopy.py[line:66] - INFO: not base64Data2.empty() +2024-04-24 16:55:02,947 - maincopy.py[line:72] - INFO: file1.png and file2.png exist +2024-04-24 16:56:16,405 - maincopy.py[line:55] - INFO: extractIdCardInfoByBase64Data +2024-04-24 16:56:16,405 - maincopy.py[line:60] - INFO: not base64data1.empty() +2024-04-24 16:56:16,406 - maincopy.py[line:67] - INFO: not base64Data2.empty() +2024-04-24 16:56:16,406 - maincopy.py[line:74] - INFO: file1.png and file2.png exist +2024-04-24 16:56:16,776 - maincopy.py[line:41] - ERROR: 'NoneType' object has no attribute 'shape' +2024-04-24 16:56:16,782 - maincopy.py[line:91] - INFO: extractIdCardInfoByBase64Data 耗时0.37679600715637207秒 +2024-04-24 16:56:16,782 - maincopy.py[line:108] - INFO: main.py len of parameter: 1 +2024-04-24 16:56:44,304 - maincopy.py[line:55] - INFO: extractIdCardInfoByBase64Data +2024-04-24 16:56:47,253 - maincopy.py[line:60] - INFO: not base64data1.empty() +2024-04-24 16:58:47,644 - maincopy.py[line:55] - INFO: extractIdCardInfoByBase64Data +2024-04-24 16:58:47,644 - maincopy.py[line:60] - INFO: not base64data1.empty() +2024-04-24 16:58:47,645 - maincopy.py[line:79] - INFO: file1.png exist +2024-04-24 16:58:50,087 - maincopy.py[line:45] - INFO: text:中华人民共和国 +居民身份证 +签发机关合肥市公安局庐阳分局 +有效期限 +2022.07.10-长期 +姓名陈玉振 +性别男 +民族汉 +出生1973年6月19日 +佳址安徽省合肥市庐阳区固镇 +路3150号森林城A6地块1 +幢2001室 +公民身份号码 +440203197306192118 + +2024-04-24 16:58:50,087 - maincopy.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时2.0295498371124268秒 +2024-04-24 16:58:50,094 - maincopy.py[line:91] - INFO: extractIdCardInfoByBase64Data 耗时2.4497039318084717秒 +2024-04-24 17:00:51,550 - maincopy.py[line:55] - INFO: extractIdCardInfoByBase64Data +2024-04-24 17:00:51,550 - maincopy.py[line:60] - INFO: not base64data1.empty() +2024-04-24 17:00:51,550 - maincopy.py[line:79] - INFO: file1.png exist +2024-04-24 17:00:51,994 - maincopy.py[line:41] - ERROR: 'NoneType' object has no attribute 'shape' +2024-04-24 17:00:52,001 - maincopy.py[line:91] - INFO: extractIdCardInfoByBase64Data 耗时0.4513239860534668秒 +2024-04-24 17:01:55,465 - maincopy.py[line:55] - INFO: extractIdCardInfoByBase64Data +2024-04-24 17:01:55,465 - maincopy.py[line:60] - INFO: not base64data1.empty() +2024-04-24 17:01:55,466 - maincopy.py[line:79] - INFO: file1.png exist +2024-04-24 17:01:57,868 - maincopy.py[line:45] - INFO: text:中华人民共和国 +居民身份证 +签发机关合肥市公安局庐阳分局 +有效期限 +2022.07.10-长期 +姓名陈玉振 +性别男 +民族汉 +出生1973年6月19日 +佳址安徽省合肥市庐阳区固镇 +路3150号森林城A6地块1 +幢2001室 +公民身份号码 +440203197306192118 + +2024-04-24 17:01:57,868 - maincopy.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时2.0035829544067383秒 +2024-04-24 17:01:57,875 - maincopy.py[line:91] - INFO: extractIdCardInfoByBase64Data 耗时2.409701108932495秒 +2024-04-24 17:03:32,330 - maincopy.py[line:107] - INFO: main.py len of parameter: 2 +2024-04-24 17:03:32,331 - maincopy.py[line:115] - INFO: python 脚本里的接收到的参数是: +2024-04-24 17:03:32,331 - maincopy.py[line:116] - INFO: 1 +2024-04-24 17:03:32,331 - maincopy.py[line:117] - INFO: 开始执行sys.stdin.read +2024-04-24 17:03:32,331 - maincopy.py[line:119] - INFO: len(input_data):316256 +2024-04-24 17:03:32,331 - maincopy.py[line:55] - INFO: extractIdCardInfoByBase64Data +2024-04-24 17:03:32,331 - maincopy.py[line:60] - INFO: not base64data1.empty() +2024-04-24 17:03:32,332 - maincopy.py[line:79] - INFO: file1.png exist +2024-04-24 17:03:34,799 - maincopy.py[line:45] - INFO: text:中华人民共和国 +居民身份证 +签发机关合肥市公安局庐阳分局 +有效期限 +2022.07.10-长期 +姓名陈玉振 +性别男 +民族汉 +出生1973年6月19日 +佳址安徽省合肥市庐阳区固镇 +路3150号森林城A6地块1 +幢2001室 +公民身份号码 +440203197306192118 + +2024-04-24 17:03:34,800 - maincopy.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时2.0278139114379883秒 +2024-04-24 17:03:34,807 - maincopy.py[line:91] - INFO: extractIdCardInfoByBase64Data 耗时2.475409984588623秒 +2024-04-24 17:08:32,075 - maincopy.py[line:108] - INFO: main.py len of parameter: 2 +2024-04-24 17:08:32,075 - maincopy.py[line:116] - INFO: python 脚本里的接收到的参数是: +2024-04-24 17:08:32,075 - maincopy.py[line:117] - INFO: 1 +2024-04-24 17:08:32,075 - maincopy.py[line:118] - INFO: 开始执行sys.stdin.read +2024-04-24 17:08:32,075 - maincopy.py[line:120] - INFO: len(input_data):316256 +2024-04-24 17:08:32,076 - maincopy.py[line:55] - INFO: extractIdCardInfoByBase64Data +2024-04-24 17:08:32,076 - maincopy.py[line:60] - INFO: not base64data1.empty() +2024-04-24 17:08:32,077 - maincopy.py[line:79] - INFO: file1.png exist +2024-04-24 17:08:34,632 - maincopy.py[line:45] - INFO: text:中华人民共和国 +居民身份证 +签发机关合肥市公安局庐阳分局 +有效期限 +2022.07.10-长期 +姓名陈玉振 +性别男 +民族汉 +出生1973年6月19日 +佳址安徽省合肥市庐阳区固镇 +路3150号森林城A6地块1 +幢2001室 +公民身份号码 +440203197306192118 + +2024-04-24 17:08:34,632 - maincopy.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时2.1306958198547363秒 +2024-04-24 17:08:34,641 - maincopy.py[line:91] - INFO: extractIdCardInfoByBase64Data 耗时2.5655581951141357秒 +2024-04-24 17:12:28,880 - maincopy.py[line:45] - INFO: text:中华人民共和国 +居民身份证 +oo +签发机关宿州市公安局桥分局 +有效期限2023.01.18-2043.01.18 +姓名郭乾坤 +性别男民族汉 +出生1994年10月17日 +住址 安徽省宿州市场桥区朱仙 +庄镇郭庙村郭家组6号 +公民身份号码 +34220119941017327X + +2024-04-24 17:12:28,881 - maincopy.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时2.2826931476593018秒 +2024-04-24 17:12:28,888 - maincopy.py[line:108] - INFO: main.py len of parameter: 1 +2024-04-24 17:12:47,426 - maincopy.py[line:45] - INFO: text:中华人民共和国 +居民身份证 +oo +签发机关宿州市公安局桥分局 +有效期限2023.01.18-2043.01.18 +姓名郭乾坤 +性别男民族汉 +出生1994年10月17日 +住址 安徽省宿州市场桥区朱仙 +庄镇郭庙村郭家组6号 +公民身份号码 +34220119941017327X + +2024-04-24 17:12:47,427 - maincopy.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时2.2849931716918945秒 +2024-04-24 17:12:47,434 - maincopy.py[line:108] - INFO: main.py len of parameter: 1 +2024-04-24 18:50:03,755 - maincopy.py[line:45] - INFO: text:中华人民共和国 +居民身份证 +oo +签发机关宿州市公安局桥分局 +有效期限2023.01.18-2043.01.18 +姓名郭乾坤 +性别男民族汉 +出生1994年10月17日 +住址 安徽省宿州市场桥区朱仙 +庄镇郭庙村郭家组6号 +公民身份号码 +34220119941017327X + +2024-04-24 18:50:03,757 - maincopy.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时2.3384199142456055秒 +2024-04-24 18:50:03,764 - maincopy.py[line:108] - INFO: main.py len of parameter: 2 +2024-04-24 18:50:03,764 - maincopy.py[line:116] - INFO: python 脚本里的接收到的参数是: +2024-04-24 18:50:03,764 - maincopy.py[line:117] - INFO: 0 +2024-04-24 18:50:03,764 - maincopy.py[line:118] - INFO: 开始执行sys.stdin.read +2024-04-24 18:50:03,764 - maincopy.py[line:120] - INFO: len(input_data):39 +2024-04-24 18:50:39,648 - maincopy.py[line:108] - INFO: main.py len of parameter: 2 +2024-04-24 18:50:39,648 - maincopy.py[line:116] - INFO: python 脚本里的接收到的参数是: +2024-04-24 18:50:39,649 - maincopy.py[line:117] - INFO: 0 +2024-04-24 18:50:39,649 - maincopy.py[line:118] - INFO: 开始执行sys.stdin.read +2024-04-24 18:50:39,649 - maincopy.py[line:120] - INFO: len(input_data):39 +2024-04-24 18:51:19,486 - maincopy.py[line:108] - INFO: main.py len of parameter: 2 +2024-04-24 18:51:19,486 - maincopy.py[line:116] - INFO: python 脚本里的接收到的参数是: +2024-04-24 18:51:19,486 - maincopy.py[line:117] - INFO: 0 +2024-04-24 18:51:19,486 - maincopy.py[line:118] - INFO: 开始执行sys.stdin.read +2024-04-24 18:51:19,486 - maincopy.py[line:120] - INFO: len(input_data):99 +2024-04-24 18:51:19,486 - maincopy.py[line:128] - INFO: 2 == len(split_data) +2024-04-24 18:51:22,217 - maincopy.py[line:45] - INFO: text:姓名郭乾坤 +性别男民族汉 +出生1994年10月17日 +住址 安徽省宿州市场桥区朱仙 +庄镇郭庙村郭家组6号 +公民身份号码 +34220119941017327X +中华人民共和国 +居民身份证 +oo +签发机关宿州市公安局桥分局 +有效期限2023.01.18-2043.01.18 + +2024-04-24 18:51:22,217 - maincopy.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时2.3626279830932617秒 +2024-04-24 19:11:40,613 - maincopy.py[line:108] - INFO: main.py len of parameter: 2 +2024-04-24 19:11:40,613 - maincopy.py[line:116] - INFO: python 脚本里的接收到的参数是: +2024-04-24 19:11:40,613 - maincopy.py[line:117] - INFO: 0 +2024-04-24 19:11:40,613 - maincopy.py[line:118] - INFO: 开始执行sys.stdin.read +2024-04-24 19:11:40,613 - maincopy.py[line:120] - INFO: len(input_data):111 +2024-04-24 19:11:40,613 - maincopy.py[line:128] - INFO: 2 == len(split_data) +2024-04-24 19:11:44,930 - maincopy.py[line:45] - INFO: text:中华人民共和国 +居民身份证 +签发机关合肥市公安局庐阳分局 +有效期限 +2022.07.10-长期 +姓名陈玉振 +性别男 +民族汉 +出生1973年6月19日 +佳址安徽省合肥市庐阳区固镇 +路3150号森林城A6地块1 +幢2001室 +公民身份号码 +440203197306192118 +中华人民共和国 +居民身份证 +签发机关合肥市公安局庐阳分局 +有效期限 +2022.07.10-长期 +姓名陈玉振 +性别男 +民族汉 +出生1973年6月19日 +佳址安徽省合肥市庐阳区固镇 +路3150号森林城A6地块1 +幢2001室 +公民身份号码 +440203197306192118 + +2024-04-24 19:11:44,932 - maincopy.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时3.9430880546569824秒 +2024-04-25 09:05:35,438 - maincopy.py[line:106] - INFO: main.py len of parameter: 2 +2024-04-25 09:05:35,438 - maincopy.py[line:114] - INFO: python 脚本里的接收到的参数是: +2024-04-25 09:05:35,438 - maincopy.py[line:115] - INFO: 0 +2024-04-25 09:05:35,438 - maincopy.py[line:116] - INFO: 开始执行sys.stdin.read +2024-04-25 09:05:35,438 - maincopy.py[line:118] - INFO: len(input_data):99 +2024-04-25 09:05:35,438 - maincopy.py[line:126] - INFO: 2 == len(split_data) +2024-04-25 09:05:38,052 - maincopy.py[line:45] - INFO: text:姓名郭乾坤 +性别男民族汉 +出生1994年10月17日 +住址 安徽省宿州市场桥区朱仙 +庄镇郭庙村郭家组6号 +公民身份号码 +34220119941017327X +中华人民共和国 +居民身份证 +oo +签发机关宿州市公安局桥分局 +有效期限2023.01.18-2043.01.18 + +2024-04-25 09:05:38,052 - maincopy.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时2.25118088722229秒 +2024-04-25 09:05:59,600 - maincopy.py[line:106] - INFO: main.py len of parameter: 2 +2024-04-25 09:05:59,601 - maincopy.py[line:114] - INFO: python 脚本里的接收到的参数是: +2024-04-25 09:05:59,601 - maincopy.py[line:115] - INFO: 0 +2024-04-25 09:05:59,601 - maincopy.py[line:116] - INFO: 开始执行sys.stdin.read +2024-04-25 09:05:59,601 - maincopy.py[line:118] - INFO: len(input_data):109 +2024-04-25 09:05:59,601 - maincopy.py[line:126] - INFO: 2 == len(split_data) +2024-04-25 09:06:02,249 - maincopy.py[line:45] - INFO: text:姓名郭乾坤 +性别男民族汉 +出生1994年10月17日 +住址 安徽省宿州市场桥区朱仙 +庄镇郭庙村郭家组6号 +公民身份号码 +34220119941017327X +中华人民共和国 +居民身份证 +oo +签发机关宿州市公安局桥分局 +有效期限2023.01.18-2043.01.18 + +2024-04-25 09:06:02,250 - maincopy.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时2.2846062183380127秒 +2024-04-25 09:25:59,627 - maincopy.py[line:106] - INFO: main.py len of parameter: 2 +2024-04-25 09:25:59,628 - maincopy.py[line:114] - INFO: python 脚本里的接收到的参数是: +2024-04-25 09:25:59,628 - maincopy.py[line:115] - INFO: 0 +2024-04-25 09:25:59,628 - maincopy.py[line:116] - INFO: 开始执行sys.stdin.read +2024-04-25 09:25:59,628 - maincopy.py[line:118] - INFO: len(input_data):99 +2024-04-25 09:25:59,628 - maincopy.py[line:126] - INFO: 2 == len(split_data) +2024-04-25 09:26:02,245 - maincopy.py[line:45] - INFO: text:姓名郭乾坤 +性别男民族汉 +出生1994年10月17日 +住址 安徽省宿州市场桥区朱仙 +庄镇郭庙村郭家组6号 +公民身份号码 +34220119941017327X +中华人民共和国 +居民身份证 +oo +签发机关宿州市公安局桥分局 +有效期限2023.01.18-2043.01.18 + +2024-04-25 09:26:02,245 - maincopy.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时2.2795121669769287秒 +2024-04-25 09:33:59,163 - maincopy.py[line:106] - INFO: main.py len of parameter: 2 +2024-04-25 09:33:59,163 - maincopy.py[line:114] - INFO: python 脚本里的接收到的参数是: +2024-04-25 09:33:59,163 - maincopy.py[line:115] - INFO: 0 +2024-04-25 09:33:59,163 - maincopy.py[line:116] - INFO: 开始执行sys.stdin.read +2024-04-25 09:33:59,163 - maincopy.py[line:118] - INFO: len(input_data):99 +2024-04-25 09:33:59,163 - maincopy.py[line:126] - INFO: 2 == len(split_data) +2024-04-25 09:34:01,873 - maincopy.py[line:45] - INFO: text:姓名郭乾坤 +性别男民族汉 +出生1994年10月17日 +住址 安徽省宿州市场桥区朱仙 +庄镇郭庙村郭家组6号 +公民身份号码 +34220119941017327X +中华人民共和国 +居民身份证 +oo +签发机关宿州市公安局桥分局 +有效期限2023.01.18-2043.01.18 + +2024-04-25 09:34:01,874 - maincopy.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时2.3100359439849854秒 +2024-04-25 09:34:26,608 - maincopy.py[line:106] - INFO: main.py len of parameter: 2 +2024-04-25 09:34:26,608 - maincopy.py[line:114] - INFO: python 脚本里的接收到的参数是: +2024-04-25 09:34:26,608 - maincopy.py[line:115] - INFO: 0 +2024-04-25 09:34:26,608 - maincopy.py[line:116] - INFO: 开始执行sys.stdin.read +2024-04-25 09:34:26,608 - maincopy.py[line:118] - INFO: len(input_data):99 +2024-04-25 09:34:26,608 - maincopy.py[line:126] - INFO: 2 == len(split_data) +2024-04-25 09:34:29,259 - maincopy.py[line:45] - INFO: text:姓名郭乾坤 +性别男民族汉 +出生1994年10月17日 +住址 安徽省宿州市场桥区朱仙 +庄镇郭庙村郭家组6号 +公民身份号码 +34220119941017327X +中华人民共和国 +居民身份证 +oo +签发机关宿州市公安局桥分局 +有效期限2023.01.18-2043.01.18 + +2024-04-25 09:34:29,259 - maincopy.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时2.270638942718506秒 +2024-04-25 09:34:47,631 - maincopy.py[line:106] - INFO: main.py len of parameter: 2 +2024-04-25 09:34:47,631 - maincopy.py[line:114] - INFO: python 脚本里的接收到的参数是: +2024-04-25 09:34:47,631 - maincopy.py[line:115] - INFO: 0 +2024-04-25 09:34:47,631 - maincopy.py[line:116] - INFO: 开始执行sys.stdin.read +2024-04-25 09:34:47,631 - maincopy.py[line:118] - INFO: len(input_data):99 +2024-04-25 09:34:47,631 - maincopy.py[line:126] - INFO: 2 == len(split_data) +2024-04-25 09:34:48,968 - maincopy.py[line:136] - ERROR: KeyboardInterrupt +2024-04-25 09:36:49,870 - maincopy.py[line:106] - INFO: main.py len of parameter: 2 +2024-04-25 09:36:49,871 - maincopy.py[line:114] - INFO: python 脚本里的接收到的参数是: +2024-04-25 09:36:49,871 - maincopy.py[line:115] - INFO: 0 +2024-04-25 09:36:49,871 - maincopy.py[line:116] - INFO: 开始执行sys.stdin.read +2024-04-25 09:36:49,871 - maincopy.py[line:118] - INFO: len(input_data):99 +2024-04-25 09:36:49,871 - maincopy.py[line:126] - INFO: 2 == len(split_data) +2024-04-25 09:36:52,538 - maincopy.py[line:45] - INFO: text:姓名郭乾坤 +性别男民族汉 +出生1994年10月17日 +住址 安徽省宿州市场桥区朱仙 +庄镇郭庙村郭家组6号 +公民身份号码 +34220119941017327X +中华人民共和国 +居民身份证 +oo +签发机关宿州市公安局桥分局 +有效期限2023.01.18-2043.01.18 + +2024-04-25 09:36:52,538 - maincopy.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时2.272094249725342秒 +2024-04-25 10:21:45,946 - validate.py[line:45] - INFO: text:姓名韩邀宇 +性别男 +民族汉 +出生 +1999年12月15日 +住址 +安徽省太和县税镇镇十里 +沟村委会中韩村16号 +公民身份号码 +34122219991215183X + +2024-04-25 10:21:45,947 - validate.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时1.355086088180542秒 +2024-04-25 10:23:31,742 - validate.py[line:45] - INFO: text:姓名韩邀宇 +性别男 +民族汉 +出生 +1999年12月15日 +住址 +安徽省太和县税镇镇十里 +沟村委会中韩村16号 +公民身份号码 +34122219991215183X + +2024-04-25 10:23:31,743 - validate.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时1.3404450416564941秒 +2024-04-25 12:31:19,281 - maincopy.py[line:106] - INFO: main.py len of parameter: 2 +2024-04-25 12:31:19,282 - maincopy.py[line:114] - INFO: python 脚本里的接收到的参数是: +2024-04-25 12:31:19,282 - maincopy.py[line:115] - INFO: 0 +2024-04-25 12:31:19,282 - maincopy.py[line:116] - INFO: 开始执行sys.stdin.read +2024-04-25 12:31:19,282 - maincopy.py[line:118] - INFO: len(input_data):55 +2024-04-25 12:31:21,612 - maincopy.py[line:45] - INFO: text:中华人民共和国 +居民身份证 +签发机关合肥市公安局庐阳分局 +有效期限 +2022.07.10-长期 +姓名陈玉振 +性别男 +民族汉 +出生1973年6月19日 +佳址安徽省合肥市庐阳区固镇 +路3150号森林城A6地块1 +幢2001室 +公民身份号码 +440203197306192118 + +2024-04-25 12:31:21,613 - maincopy.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时1.9899022579193115秒 +2024-04-25 15:15:46,920 - maincopy.py[line:106] - INFO: main.py len of parameter: 2 +2024-04-25 15:15:46,924 - maincopy.py[line:114] - INFO: python 脚本里的接收到的参数是: +2024-04-25 15:15:46,924 - maincopy.py[line:115] - INFO: 0 +2024-04-25 15:15:46,924 - maincopy.py[line:116] - INFO: 开始执行sys.stdin.read +2024-04-25 15:15:46,924 - maincopy.py[line:118] - INFO: len(input_data):55 +2024-04-25 15:15:49,304 - maincopy.py[line:45] - INFO: text:中华人民共和国 +居民身份证 +签发机关合肥市公安局庐阳分局 +有效期限 +2022.07.10-长期 +姓名陈玉振 +性别男 +民族汉 +出生1973年6月19日 +佳址安徽省合肥市庐阳区固镇 +路3150号森林城A6地块1 +幢2001室 +公民身份号码 +440203197306192118 + +2024-04-25 15:15:49,306 - maincopy.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时2.0223748683929443秒 +2024-04-25 15:16:23,441 - maincopy.py[line:106] - INFO: main.py len of parameter: 2 +2024-04-25 15:16:23,442 - maincopy.py[line:114] - INFO: python 脚本里的接收到的参数是: +2024-04-25 15:16:23,442 - maincopy.py[line:115] - INFO: 0 +2024-04-25 15:16:23,442 - maincopy.py[line:116] - INFO: 开始执行sys.stdin.read +2024-04-25 15:16:23,442 - maincopy.py[line:118] - INFO: len(input_data):55 +2024-04-25 15:16:25,842 - maincopy.py[line:45] - INFO: text:中华人民共和国 +居民身份证 +签发机关合肥市公安局庐阳分局 +有效期限 +2022.07.10-长期 +姓名陈玉振 +性别男 +民族汉 +出生1973年6月19日 +佳址安徽省合肥市庐阳区固镇 +路3150号森林城A6地块1 +幢2001室 +公民身份号码 +440203197306192118 + +2024-04-25 15:16:25,843 - maincopy.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时2.028999090194702秒 +2024-04-25 15:26:15,550 - maincopy.py[line:106] - INFO: main.py len of parameter: 2 +2024-04-25 15:26:15,550 - maincopy.py[line:114] - INFO: python 脚本里的接收到的参数是: +2024-04-25 15:26:15,550 - maincopy.py[line:115] - INFO: 0 +2024-04-25 15:26:15,551 - maincopy.py[line:116] - INFO: 开始执行sys.stdin.read +2024-04-25 15:26:15,551 - maincopy.py[line:118] - INFO: len(input_data):55 +2024-04-25 15:26:17,895 - maincopy.py[line:45] - INFO: text:中华人民共和国 +居民身份证 +签发机关合肥市公安局庐阳分局 +有效期限 +2022.07.10-长期 +姓名陈玉振 +性别男 +民族汉 +出生1973年6月19日 +佳址安徽省合肥市庐阳区固镇 +路3150号森林城A6地块1 +幢2001室 +公民身份号码 +440203197306192118 + +2024-04-25 15:26:17,895 - maincopy.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时1.9707691669464111秒 +2024-04-25 15:28:43,743 - maincopy.py[line:106] - INFO: main.py len of parameter: 2 +2024-04-25 15:28:43,743 - maincopy.py[line:114] - INFO: python 脚本里的接收到的参数是: +2024-04-25 15:28:43,743 - maincopy.py[line:115] - INFO: 0 +2024-04-25 15:28:43,744 - maincopy.py[line:116] - INFO: 开始执行sys.stdin.read +2024-04-25 15:28:43,744 - maincopy.py[line:118] - INFO: len(input_data):55 +2024-04-25 15:28:46,151 - maincopy.py[line:45] - INFO: text:中华人民共和国 +居民身份证 +签发机关合肥市公安局庐阳分局 +有效期限 +2022.07.10-长期 +姓名陈玉振 +性别男 +民族汉 +出生1973年6月19日 +佳址安徽省合肥市庐阳区固镇 +路3150号森林城A6地块1 +幢2001室 +公民身份号码 +440203197306192118 + +2024-04-25 15:28:46,151 - maincopy.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时2.0131330490112305秒 +2024-04-25 15:30:30,316 - maincopy.py[line:106] - INFO: main.py len of parameter: 2 +2024-04-25 15:30:30,317 - maincopy.py[line:114] - INFO: python 脚本里的接收到的参数是: +2024-04-25 15:30:30,317 - maincopy.py[line:115] - INFO: 0 +2024-04-25 15:30:30,317 - maincopy.py[line:116] - INFO: 开始执行sys.stdin.read +2024-04-25 15:30:30,317 - maincopy.py[line:118] - INFO: len(input_data):55 +2024-04-25 15:30:32,743 - maincopy.py[line:45] - INFO: text:中华人民共和国 +居民身份证 +签发机关合肥市公安局庐阳分局 +有效期限 +2022.07.10-长期 +姓名陈玉振 +性别男 +民族汉 +出生1973年6月19日 +佳址安徽省合肥市庐阳区固镇 +路3150号森林城A6地块1 +幢2001室 +公民身份号码 +440203197306192118 + +2024-04-25 15:30:32,744 - maincopy.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时2.023374080657959秒 +2024-04-25 15:31:29,741 - maincopy.py[line:106] - INFO: main.py len of parameter: 2 +2024-04-25 15:31:29,741 - maincopy.py[line:114] - INFO: python 脚本里的接收到的参数是: +2024-04-25 15:31:29,741 - maincopy.py[line:115] - INFO: 0 +2024-04-25 15:31:29,741 - maincopy.py[line:116] - INFO: 开始执行sys.stdin.read +2024-04-25 15:31:29,741 - maincopy.py[line:118] - INFO: len(input_data):55 +2024-04-25 15:31:32,127 - maincopy.py[line:45] - INFO: text:中华人民共和国 +居民身份证 +签发机关合肥市公安局庐阳分局 +有效期限 +2022.07.10-长期 +姓名陈玉振 +性别男 +民族汉 +出生1973年6月19日 +佳址安徽省合肥市庐阳区固镇 +路3150号森林城A6地块1 +幢2001室 +公民身份号码 +440203197306192118 + +2024-04-25 15:31:32,127 - maincopy.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时2.0084288120269775秒 +2024-04-25 15:37:37,289 - maincopy.py[line:106] - INFO: main.py len of parameter: 2 +2024-04-25 15:37:37,290 - maincopy.py[line:114] - INFO: python 脚本里的接收到的参数是: +2024-04-25 15:37:37,290 - maincopy.py[line:115] - INFO: 0 +2024-04-25 15:37:37,290 - maincopy.py[line:116] - INFO: 开始执行sys.stdin.read +2024-04-25 15:37:37,290 - maincopy.py[line:118] - INFO: len(input_data):55 +2024-04-25 15:37:39,700 - maincopy.py[line:45] - INFO: text:中华人民共和国 +居民身份证 +签发机关合肥市公安局庐阳分局 +有效期限 +2022.07.10-长期 +姓名陈玉振 +性别男 +民族汉 +出生1973年6月19日 +佳址安徽省合肥市庐阳区固镇 +路3150号森林城A6地块1 +幢2001室 +公民身份号码 +440203197306192118 + +2024-04-25 15:37:39,701 - maincopy.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时2.0224149227142334秒 +2024-04-25 15:38:32,988 - maincopy.py[line:106] - INFO: main.py len of parameter: 2 +2024-04-25 15:38:32,988 - maincopy.py[line:114] - INFO: python 脚本里的接收到的参数是: +2024-04-25 15:38:32,988 - maincopy.py[line:115] - INFO: 0 +2024-04-25 15:38:32,988 - maincopy.py[line:116] - INFO: 开始执行sys.stdin.read +2024-04-25 15:38:32,988 - maincopy.py[line:118] - INFO: len(input_data):55 +2024-04-25 15:38:35,378 - maincopy.py[line:45] - INFO: text:中华人民共和国 +居民身份证 +签发机关合肥市公安局庐阳分局 +有效期限 +2022.07.10-长期 +姓名陈玉振 +性别男 +民族汉 +出生1973年6月19日 +佳址安徽省合肥市庐阳区固镇 +路3150号森林城A6地块1 +幢2001室 +公民身份号码 +440203197306192118 + +2024-04-25 15:38:35,379 - maincopy.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时2.000577688217163秒 +2024-04-25 15:42:53,503 - maincopy.py[line:106] - INFO: main.py len of parameter: 2 +2024-04-25 15:42:53,503 - maincopy.py[line:114] - INFO: python 脚本里的接收到的参数是: +2024-04-25 15:42:53,503 - maincopy.py[line:115] - INFO: 0 +2024-04-25 15:42:53,503 - maincopy.py[line:116] - INFO: 开始执行sys.stdin.read +2024-04-25 15:42:53,503 - maincopy.py[line:118] - INFO: len(input_data):55 +2024-04-25 15:42:55,874 - maincopy.py[line:45] - INFO: text:中华人民共和国 +居民身份证 +签发机关合肥市公安局庐阳分局 +有效期限 +2022.07.10-长期 +姓名陈玉振 +性别男 +民族汉 +出生1973年6月19日 +佳址安徽省合肥市庐阳区固镇 +路3150号森林城A6地块1 +幢2001室 +公民身份号码 +440203197306192118 + +2024-04-25 15:42:55,874 - maincopy.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时1.9994618892669678秒 +2024-04-25 15:44:22,128 - maincopy.py[line:106] - INFO: main.py len of parameter: 2 +2024-04-25 15:44:22,128 - maincopy.py[line:114] - INFO: python 脚本里的接收到的参数是: +2024-04-25 15:44:22,128 - maincopy.py[line:115] - INFO: 0 +2024-04-25 15:44:22,128 - maincopy.py[line:116] - INFO: 开始执行sys.stdin.read +2024-04-25 15:44:22,128 - maincopy.py[line:118] - INFO: len(input_data):55 +2024-04-25 15:44:24,615 - maincopy.py[line:45] - INFO: text:中华人民共和国 +居民身份证 +签发机关合肥市公安局庐阳分局 +有效期限 +2022.07.10-长期 +姓名陈玉振 +性别男 +民族汉 +出生1973年6月19日 +佳址安徽省合肥市庐阳区固镇 +路3150号森林城A6地块1 +幢2001室 +公民身份号码 +440203197306192118 + +2024-04-25 15:44:24,616 - maincopy.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时2.1074512004852295秒 +2024-04-25 15:46:05,139 - maincopy.py[line:106] - INFO: main.py len of parameter: 2 +2024-04-25 15:46:05,139 - maincopy.py[line:114] - INFO: python 脚本里的接收到的参数是: +2024-04-25 15:46:05,139 - maincopy.py[line:115] - INFO: 0 +2024-04-25 15:46:05,139 - maincopy.py[line:116] - INFO: 开始执行sys.stdin.read +2024-04-25 15:46:05,139 - maincopy.py[line:118] - INFO: len(input_data):55 +2024-04-25 15:46:07,537 - maincopy.py[line:45] - INFO: text:中华人民共和国 +居民身份证 +签发机关合肥市公安局庐阳分局 +有效期限 +2022.07.10-长期 +姓名陈玉振 +性别男 +民族汉 +出生1973年6月19日 +佳址安徽省合肥市庐阳区固镇 +路3150号森林城A6地块1 +幢2001室 +公民身份号码 +440203197306192118 + +2024-04-25 15:46:07,538 - maincopy.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时2.033017158508301秒 +2024-04-25 15:49:26,907 - maincopy.py[line:106] - INFO: main.py len of parameter: 2 +2024-04-25 15:49:26,907 - maincopy.py[line:114] - INFO: python 脚本里的接收到的参数是: +2024-04-25 15:49:26,907 - maincopy.py[line:115] - INFO: 0 +2024-04-25 15:49:26,907 - maincopy.py[line:116] - INFO: 开始执行sys.stdin.read +2024-04-25 15:49:26,907 - maincopy.py[line:118] - INFO: len(input_data):55 +2024-04-25 15:49:29,320 - maincopy.py[line:45] - INFO: text:中华人民共和国 +居民身份证 +签发机关合肥市公安局庐阳分局 +有效期限 +2022.07.10-长期 +姓名陈玉振 +性别男 +民族汉 +出生1973年6月19日 +佳址安徽省合肥市庐阳区固镇 +路3150号森林城A6地块1 +幢2001室 +公民身份号码 +440203197306192118 + +2024-04-25 15:49:29,322 - maincopy.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时2.029571771621704秒 +2024-04-25 15:49:41,347 - maincopy.py[line:106] - INFO: main.py len of parameter: 2 +2024-04-25 15:49:41,347 - maincopy.py[line:114] - INFO: python 脚本里的接收到的参数是: +2024-04-25 15:49:41,347 - maincopy.py[line:115] - INFO: 0 +2024-04-25 15:49:41,347 - maincopy.py[line:116] - INFO: 开始执行sys.stdin.read +2024-04-25 15:49:41,347 - maincopy.py[line:118] - INFO: len(input_data):55 +2024-04-25 15:49:43,775 - maincopy.py[line:45] - INFO: text:中华人民共和国 +居民身份证 +签发机关合肥市公安局庐阳分局 +有效期限 +2022.07.10-长期 +姓名陈玉振 +性别男 +民族汉 +出生1973年6月19日 +佳址安徽省合肥市庐阳区固镇 +路3150号森林城A6地块1 +幢2001室 +公民身份号码 +440203197306192118 + +2024-04-25 15:49:43,775 - maincopy.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时2.0538418292999268秒 +2024-04-25 15:52:45,255 - maincopy.py[line:106] - INFO: main.py len of parameter: 2 +2024-04-25 15:52:45,256 - maincopy.py[line:114] - INFO: python 脚本里的接收到的参数是: +2024-04-25 15:52:45,256 - maincopy.py[line:115] - INFO: 0 +2024-04-25 15:52:45,256 - maincopy.py[line:116] - INFO: 开始执行sys.stdin.read +2024-04-25 15:52:45,256 - maincopy.py[line:118] - INFO: len(input_data):55 +2024-04-25 15:52:47,731 - maincopy.py[line:45] - INFO: text:中华人民共和国 +居民身份证 +签发机关合肥市公安局庐阳分局 +有效期限 +2022.07.10-长期 +姓名陈玉振 +性别男 +民族汉 +出生1973年6月19日 +佳址安徽省合肥市庐阳区固镇 +路3150号森林城A6地块1 +幢2001室 +公民身份号码 +440203197306192118 + +2024-04-25 15:52:47,732 - maincopy.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时2.039022207260132秒 +2024-04-25 15:55:59,335 - maincopy.py[line:106] - INFO: main.py len of parameter: 2 +2024-04-25 15:55:59,335 - maincopy.py[line:114] - INFO: python 脚本里的接收到的参数是: +2024-04-25 15:55:59,335 - maincopy.py[line:115] - INFO: 0 +2024-04-25 15:55:59,335 - maincopy.py[line:116] - INFO: 开始执行sys.stdin.read +2024-04-25 15:55:59,335 - maincopy.py[line:118] - INFO: len(input_data):55 +2024-04-25 15:56:01,750 - maincopy.py[line:45] - INFO: text:中华人民共和国 +居民身份证 +签发机关合肥市公安局庐阳分局 +有效期限 +2022.07.10-长期 +姓名陈玉振 +性别男 +民族汉 +出生1973年6月19日 +佳址安徽省合肥市庐阳区固镇 +路3150号森林城A6地块1 +幢2001室 +公民身份号码 +440203197306192118 + +2024-04-25 15:56:01,750 - maincopy.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时2.0254902839660645秒 +2024-04-25 16:04:06,658 - maincopy.py[line:106] - INFO: main.py len of parameter: 2 +2024-04-25 16:04:06,658 - maincopy.py[line:114] - INFO: python 脚本里的接收到的参数是: +2024-04-25 16:04:06,658 - maincopy.py[line:115] - INFO: 0 +2024-04-25 16:04:06,658 - maincopy.py[line:116] - INFO: 开始执行sys.stdin.read +2024-04-25 16:04:06,658 - maincopy.py[line:118] - INFO: len(input_data):55 +2024-04-25 16:04:09,023 - maincopy.py[line:45] - INFO: text:中华人民共和国 +居民身份证 +签发机关合肥市公安局庐阳分局 +有效期限 +2022.07.10-长期 +姓名陈玉振 +性别男 +民族汉 +出生1973年6月19日 +佳址安徽省合肥市庐阳区固镇 +路3150号森林城A6地块1 +幢2001室 +公民身份号码 +440203197306192118 + +2024-04-25 16:04:09,025 - maincopy.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时2.0022668838500977秒 +2024-04-25 16:06:02,722 - maincopy.py[line:106] - INFO: main.py len of parameter: 2 +2024-04-25 16:06:02,723 - maincopy.py[line:114] - INFO: python 脚本里的接收到的参数是: +2024-04-25 16:06:02,723 - maincopy.py[line:115] - INFO: 0 +2024-04-25 16:06:02,723 - maincopy.py[line:116] - INFO: 开始执行sys.stdin.read +2024-04-25 16:06:02,723 - maincopy.py[line:118] - INFO: len(input_data):55 +2024-04-25 16:06:05,196 - maincopy.py[line:45] - INFO: text:中华人民共和国 +居民身份证 +签发机关合肥市公安局庐阳分局 +有效期限 +2022.07.10-长期 +姓名陈玉振 +性别男 +民族汉 +出生1973年6月19日 +佳址安徽省合肥市庐阳区固镇 +路3150号森林城A6地块1 +幢2001室 +公民身份号码 +440203197306192118 + +2024-04-25 16:06:05,199 - maincopy.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时2.09515380859375秒 +2024-04-25 16:08:43,227 - maincopy.py[line:106] - INFO: main.py len of parameter: 2 +2024-04-25 16:08:43,227 - maincopy.py[line:114] - INFO: python 脚本里的接收到的参数是: +2024-04-25 16:08:43,227 - maincopy.py[line:115] - INFO: 0 +2024-04-25 16:08:43,227 - maincopy.py[line:116] - INFO: 开始执行sys.stdin.read +2024-04-25 16:08:43,227 - maincopy.py[line:118] - INFO: len(input_data):55 +2024-04-25 16:08:45,620 - maincopy.py[line:45] - INFO: text:中华人民共和国 +居民身份证 +签发机关合肥市公安局庐阳分局 +有效期限 +2022.07.10-长期 +姓名陈玉振 +性别男 +民族汉 +出生1973年6月19日 +佳址安徽省合肥市庐阳区固镇 +路3150号森林城A6地块1 +幢2001室 +公民身份号码 +440203197306192118 + +2024-04-25 16:08:45,621 - maincopy.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时2.039339065551758秒 +2024-04-25 16:11:13,618 - maincopy.py[line:106] - INFO: main.py len of parameter: 2 +2024-04-25 16:11:13,618 - maincopy.py[line:114] - INFO: python 脚本里的接收到的参数是: +2024-04-25 16:11:13,618 - maincopy.py[line:115] - INFO: 0 +2024-04-25 16:11:13,618 - maincopy.py[line:116] - INFO: 开始执行sys.stdin.read +2024-04-25 16:11:13,618 - maincopy.py[line:118] - INFO: len(input_data):55 +2024-04-25 16:11:15,990 - maincopy.py[line:45] - INFO: text:中华人民共和国 +居民身份证 +签发机关合肥市公安局庐阳分局 +有效期限 +2022.07.10-长期 +姓名陈玉振 +性别男 +民族汉 +出生1973年6月19日 +佳址安徽省合肥市庐阳区固镇 +路3150号森林城A6地块1 +幢2001室 +公民身份号码 +440203197306192118 + +2024-04-25 16:11:15,990 - maincopy.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时2.0076231956481934秒 +2024-04-25 16:12:01,703 - maincopy.py[line:106] - INFO: main.py len of parameter: 2 +2024-04-25 16:12:01,703 - maincopy.py[line:114] - INFO: python 脚本里的接收到的参数是: +2024-04-25 16:12:01,703 - maincopy.py[line:115] - INFO: 0 +2024-04-25 16:12:01,703 - maincopy.py[line:116] - INFO: 开始执行sys.stdin.read +2024-04-25 16:12:01,703 - maincopy.py[line:118] - INFO: len(input_data):55 +2024-04-25 16:12:04,076 - maincopy.py[line:45] - INFO: text:中华人民共和国 +居民身份证 +签发机关合肥市公安局庐阳分局 +有效期限 +2022.07.10-长期 +姓名陈玉振 +性别男 +民族汉 +出生1973年6月19日 +佳址安徽省合肥市庐阳区固镇 +路3150号森林城A6地块1 +幢2001室 +公民身份号码 +440203197306192118 + +2024-04-25 16:12:04,077 - maincopy.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时2.013495683670044秒 +2024-04-25 16:20:10,118 - maincopy.py[line:106] - INFO: main.py len of parameter: 2 +2024-04-25 16:20:10,118 - maincopy.py[line:114] - INFO: python 脚本里的接收到的参数是: +2024-04-25 16:20:10,118 - maincopy.py[line:115] - INFO: 0 +2024-04-25 16:20:10,118 - maincopy.py[line:116] - INFO: 开始执行sys.stdin.read +2024-04-25 16:20:10,118 - maincopy.py[line:118] - INFO: len(input_data):111 +2024-04-25 16:20:10,118 - maincopy.py[line:126] - INFO: 2 == len(split_data) +2024-04-25 16:20:14,530 - maincopy.py[line:45] - INFO: text:中华人民共和国 +居民身份证 +签发机关合肥市公安局庐阳分局 +有效期限 +2022.07.10-长期 +姓名陈玉振 +性别男 +民族汉 +出生1973年6月19日 +佳址安徽省合肥市庐阳区固镇 +路3150号森林城A6地块1 +幢2001室 +公民身份号码 +440203197306192118 +中华人民共和国 +居民身份证 +签发机关合肥市公安局庐阳分局 +有效期限 +2022.07.10-长期 +姓名陈玉振 +性别男 +民族汉 +出生1973年6月19日 +佳址安徽省合肥市庐阳区固镇 +路3150号森林城A6地块1 +幢2001室 +公民身份号码 +440203197306192118 + +2024-04-25 16:20:14,531 - maincopy.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时4.055077075958252秒 +2024-04-25 16:48:10,214 - maincopy.py[line:106] - INFO: main.py len of parameter: 2 +2024-04-25 16:48:10,214 - maincopy.py[line:114] - INFO: python 脚本里的接收到的参数是: +2024-04-25 16:48:10,214 - maincopy.py[line:115] - INFO: 0 +2024-04-25 16:48:10,214 - maincopy.py[line:116] - INFO: 开始执行sys.stdin.read +2024-04-25 16:48:10,214 - maincopy.py[line:118] - INFO: len(input_data):109 +2024-04-25 16:48:10,215 - maincopy.py[line:126] - INFO: 2 == len(split_data) +2024-04-25 16:48:12,871 - maincopy.py[line:45] - INFO: text:姓名郭乾坤 +性别男民族汉 +出生1994年10月17日 +住址 安徽省宿州市场桥区朱仙 +庄镇郭庙村郭家组6号 +公民身份号码 +34220119941017327X +中华人民共和国 +居民身份证 +oo +签发机关宿州市公安局桥分局 +有效期限2023.01.18-2043.01.18 + +2024-04-25 16:48:12,871 - maincopy.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时2.303511142730713秒 +2024-04-28 17:09:48,306 - maincopy.py[line:45] - INFO: text:中华人民共和国 +居民身份证 +签发机关 +西昌市公安局 +有效期限 +2007.11.05-2027.11.05 +圣姓下性李出日住 +米名丰别生址 +吉克石尔 +师 +男 +民族彝 +单 +1980 +年4月18日 +四川省西昌市磨盘乡巴山 +村4组61号 +公民身份号码 +513401198004187413 + +2024-04-28 17:09:48,306 - maincopy.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时3.3076059818267822秒 +2024-04-28 17:09:48,313 - maincopy.py[line:100] - INFO: test +2024-04-28 17:54:14,886 - ocr.py[line:19] - INFO: from rapidocr_onnxruntime import RapidOCR +2024-04-28 17:54:20,328 - ocr.py[line:19] - INFO: from rapidocr_onnxruntime import RapidOCR +2024-04-28 17:54:20,750 - main.py[line:44] - INFO: extractIdCardInfo 耗时8.576517343521118秒 +2024-04-28 18:30:53,069 - ocr.py[line:19] - INFO: from rapidocr_onnxruntime import RapidOCR +2024-04-28 18:30:57,204 - ocr.py[line:19] - INFO: from rapidocr_onnxruntime import RapidOCR +2024-04-28 18:30:57,619 - main.py[line:44] - INFO: extractIdCardInfo 耗时6.611654996871948秒 +2024-04-28 18:31:20,476 - ocr.py[line:19] - INFO: from rapidocr_onnxruntime import RapidOCR +2024-04-28 18:31:23,395 - ocr.py[line:19] - INFO: from rapidocr_onnxruntime import RapidOCR +2024-04-28 18:31:23,839 - main.py[line:44] - INFO: extractIdCardInfo 耗时3.5571298599243164秒 +2024-04-28 18:33:48,183 - ocr.py[line:19] - INFO: from rapidocr_onnxruntime import RapidOCR +2024-04-28 18:33:51,716 - ocr.py[line:19] - INFO: from rapidocr_onnxruntime import RapidOCR +2024-04-28 18:33:52,240 - main.py[line:44] - INFO: extractIdCardInfo 耗时4.242157936096191秒 +2024-04-28 18:34:38,862 - ocr.py[line:19] - INFO: from rapidocr_onnxruntime import RapidOCR +2024-04-28 18:34:41,898 - ocr.py[line:19] - INFO: from rapidocr_onnxruntime import RapidOCR +2024-04-28 18:34:42,430 - main.py[line:45] - INFO: extractIdCardInfo 耗时3.766383171081543秒 +2024-04-29 12:29:50,723 - maincopy.py[line:45] - INFO: text:中华人民共和国 +居民身份证 +签发机关 +西昌市公安局 +有效期限 +2007.11.05-2027.11.05 +圣姓下性李出日住 +米名丰别生址 +吉克石尔 +师 +男 +民族彝 +单 +1980 +年4月18日 +四川省西昌市磨盘乡巴山 +村4组61号 +公民身份号码 +513401198004187413 + +2024-04-29 12:29:50,724 - maincopy.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时3.2488858699798584秒 +2024-04-29 12:29:50,727 - maincopy.py[line:100] - INFO: test +2024-04-29 12:31:23,117 - maincopy.py[line:45] - INFO: text:中华人民共和国 +居民身份证 +签发机关 +西昌市公安局 +有效期限 +2007.11.05-2027.11.05 +圣姓下性李出日住 +米名丰别生址 +吉克石尔 +师 +男 +民族彝 +单 +1980 +年4月18日 +四川省西昌市磨盘乡巴山 +村4组61号 +公民身份号码 +513401198004187413 + +2024-04-29 12:31:23,118 - maincopy.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时3.264376163482666秒 +2024-04-29 12:31:23,121 - maincopy.py[line:100] - INFO: test +2024-04-29 13:37:12,839 - maincopydet.py[line:106] - INFO: main.py len of parameter: 1 +2024-04-29 13:39:11,328 - maincopydet.py[line:50] - INFO: text:量姓性出 性 +米名丰别图生更址 +江六斤 +男 +民族舞 +半 +1980 +年4月20日 +四川省盐源县盖租乡阿石 +村6组4号 +公民身份号码 +513423198004203995 +中华人民共和国 +居民身份证 +签发机关 +盐源县公安局 +有效期限 +2013.06.18-2033.06.18 + +2024-04-29 13:39:11,329 - maincopydet.py[line:56] - INFO: extractIdCardInfoByBase64Data 耗时2.003669023513794秒 +2024-04-29 13:40:52,514 - maincopydet.py[line:51] - INFO: text:坐姓5性中出住 +米名年别到生委址 +江六斤 +男民族彝 +半口 +1980 +年4月20日 +四川省盐源县盖租乡阿石 +村6组4号 +公民身份号码 +513423198004203995 +中华人民共和国 +居民身份证 +签发机关 +盐源县公安局 +出 +有效期限 +2013.06.18-2033.06.18 + +2024-04-29 13:40:52,515 - maincopydet.py[line:57] - INFO: extractIdCardInfoByBase64Data 耗时3.0794527530670166秒 +2024-04-29 13:43:16,671 - maincopydet.py[line:51] - INFO: text:姓名 +严伟拉 +性别 +男 +民族彝 +出生 +1984年5月1日 +住址 +四川省九龙县子耳乡麻窝 +村马海火山组 +公民身份号码 +513324198405012234 +中华人民共和国 +居民身份证 +签发机关 +九龙县公安局 +有效期限 +2015.03.26-2035.03.26 + +2024-04-29 13:43:16,672 - maincopydet.py[line:57] - INFO: extractIdCardInfoByBase64Data 耗时3.4696779251098633秒 +2024-04-29 13:46:16,999 - maincopydet.py[line:51] - INFO: text:沈拉古 +民 +男 +1972 +10 +0月13日 +四州省西昌市开元乡瓦菊 +村1组5号 +民务价号码 +513401197210134510 +中华人民共和国 +★ +★ +羊★ +居民身份证 +签发机关 +西昌市公安局 +有效期限 +2007.05.15-2027.05.15 + +2024-04-29 13:46:17,000 - maincopydet.py[line:57] - INFO: extractIdCardInfoByBase64Data 耗时3.524902820587158秒 +2024-04-29 13:49:04,520 - maincopydet.py[line:51] - INFO: text:沈拉古 +民 +男 +1972 +10 +0月13日 +四州省西昌市开元乡瓦菊 +村1组5号 +民务价号码 +513401197210134510 +中华人民共和国 +★ +★ +羊★ +居民身份证 +签发机关 +西昌市公安局 +有效期限 +2007.05.15-2027.05.15 + +2024-04-29 13:49:04,521 - maincopydet.py[line:57] - INFO: extractIdCardInfoByBase64Data 耗时3.5409700870513916秒 +2024-04-29 13:49:40,676 - maincopydet.py[line:51] - INFO: text:沈拉古 +民 +男 +1972 +10 +0月13日 +四州省西昌市开元乡瓦菊 +村1组5号 +民务价号码 +513401197210134510 +中华人民共和国 +★ +★ +羊★ +居民身份证 +签发机关 +西昌市公安局 +有效期限 +2007.05.15-2027.05.15 + +2024-04-29 13:49:40,677 - maincopydet.py[line:57] - INFO: extractIdCardInfoByBase64Data 耗时3.5075321197509766秒 +2024-04-29 13:51:27,081 - maincopydet.py[line:51] - INFO: text:沈拉古 +男 +1972 +车10月3日 +西川省西昌市开元乡面额 +村1组5号 +民身售号码 +513401197210134510 +中华人民共和国 +★女 +居民身份证 +签发机关 +西昌市公安局 +有效期限 +2007.05.15-2027.05.15 + +2024-04-29 13:51:27,082 - maincopydet.py[line:57] - INFO: extractIdCardInfoByBase64Data 耗时1.9718589782714844秒 +2024-04-29 13:56:29,281 - maincopydet.py[line:54] - INFO: text:沈拉古 +男 +1972 +三 +10月13E +西省西昌市开元乡面 +村1组5号 +民身售号码 +513401197210134510 +中华人民共和国 +居民身份证 +签发机关 +西昌市公安局 +有效期限 +2007.05.15-2027.05.15 + +2024-04-29 13:56:29,282 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时2.013967990875244秒 +2024-04-29 14:00:07,034 - maincopydet.py[line:54] - INFO: text:圣姓不性孕出打住 +米名牛别超生百址 +吉克石尔 +天 +男 +民族家 +鑫 +1980 +年4月18日 +四川省西昌市磨盘乡巴山 +村4组61号 +公民身份号码 +513401198004187413 +中华人民共和国 +居民身份证 +签发机关 +西昌市公安局 +有效期限 +2007.11.05-2027.11.05 + +2024-04-29 14:00:07,035 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时2.271013021469116秒 +2024-04-29 14:01:34,653 - maincopydet.py[line:54] - INFO: text:米名手别图生更址 +江六斤 +心 +州 +民 +族舞 +1980 +年4月20日 +四川省盐源县盖租乡阿石 +村6组4号 +公民身份号码 +513423198004203995 +中华人民共和国 +居民身份证 +签发机关 +盐源县公安局 +有效期限 +2013.06.18-2033.06.18 + +2024-04-29 14:01:34,655 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时2.1200430393218994秒 +2024-04-29 14:02:20,243 - maincopydet.py[line:54] - INFO: text:坐姓5性中出住 +米名年别到生委址 +江六斤 +男民族彝 +半口 +1980 +年4月20日 +四川省盐源县盖租乡阿石 +村6组4号 +公民身份号码 +513423198004203995 +中华人民共和国 +居民身份证 +签发机关 +盐源县公安局 +出 +有效期限 +2013.06.18-2033.06.18 + +2024-04-29 14:02:20,244 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时3.1233160495758057秒 +2024-04-29 14:07:00,201 - maincopydet.py[line:54] - INFO: text:坐姓5性中出住 +米名年别到生委址 +江六斤 +男民族彝 +半口 +1980 +年4月20日 +四川省盐源县盖租乡阿石 +村6组4号 +公民身份号码 +513423198004203995 +中华人民共和国 +居民身份证 +签发机关 +盐源县公安局 +出 +有效期限 +2013.06.18-2033.06.18 + +2024-04-29 14:07:07,025 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时9.881494998931885秒 +2024-04-29 14:07:41,408 - maincopydet.py[line:54] - INFO: text:坐姓5性中出住 +米名年别到生委址 +江六斤 +男民族彝 +半口 +1980 +年4月20日 +四川省盐源县盖租乡阿石 +村6组4号 +公民身份号码 +513423198004203995 +中华人民共和国 +居民身份证 +签发机关 +盐源县公安局 +出 +有效期限 +2013.06.18-2033.06.18 + +2024-04-29 14:07:41,410 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时3.0430808067321777秒 +2024-04-29 14:10:12,774 - maincopydet.py[line:54] - INFO: text:坐姓5性中出住 +米名年别到生委址 +江六斤 +男民族彝 +半口 +1980 +年4月20日 +四川省盐源县盖租乡阿石 +村6组4号 +公民身份号码 +513423198004203995 +中华人民共和国 +居民身份证 +签发机关 +盐源县公安局 +出 +有效期限 +2013.06.18-2033.06.18 + +2024-04-29 14:10:12,774 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时3.1007239818573秒 +2024-04-29 14:11:51,327 - maincopydet.py[line:54] - INFO: text:坐姓5性中出住 +米名年别到生委址 +江六斤 +男民族彝 +半口 +1980 +年4月20日 +四川省盐源县盖租乡阿石 +村6组4号 +公民身份号码 +513423198004203995 +中华人民共和国 +居民身份证 +签发机关 +盐源县公安局 +出 +有效期限 +2013.06.18-2033.06.18 + +2024-04-29 14:11:51,328 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时3.1092112064361572秒 +2024-04-29 14:17:34,231 - maincopydet.py[line:54] - INFO: text:坐姓5性中出住 +米名年别到生委址 +江六斤 +男民族彝 +半口 +1980 +年4月20日 +四川省盐源县盖租乡阿石 +村6组4号 +公民身份号码 +513423198004203995 +中华人民共和国 +居民身份证 +签发机关 +盐源县公安局 +出 +有效期限 +2013.06.18-2033.06.18 + +2024-04-29 14:17:34,232 - identitycard_extractor.py[line:93] - ERROR: no such group +2024-04-29 14:17:34,232 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时3.3055670261383057秒 +2024-04-29 14:19:02,035 - maincopydet.py[line:54] - INFO: text:坐姓5性中出住 +米名年别到生委址 +江六斤 +男民族彝 +半口 +1980 +年4月20日 +四川省盐源县盖租乡阿石 +村6组4号 +公民身份号码 +513423198004203995 +中华人民共和国 +居民身份证 +签发机关 +盐源县公安局 +出 +有效期限 +2013.06.18-2033.06.18 + +2024-04-29 14:19:02,036 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时3.1094021797180176秒 +2024-04-29 14:24:39,761 - maincopydet.py[line:54] - INFO: text:坐姓5性中出住 +米名年别到生委址 +江六斤 +男民族彝 +半口 +1980 +年4月20日 +四川省盐源县盖租乡阿石 +村6组4号 +公民身份号码 +513423198004203995 +中华人民共和国 +居民身份证 +签发机关 +盐源县公安局 +出 +有效期限 +2013.06.18-2033.06.18 + +2024-04-29 14:24:39,763 - identitycard_extractor.py[line:93] - ERROR: 'NoneType' object has no attribute 'strip' +2024-04-29 14:24:39,763 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时3.051536798477173秒 +2024-04-29 14:26:56,709 - maincopydet.py[line:54] - INFO: text:坐姓5性中出住 +米名年别到生委址 +江六斤 +男民族彝 +半口 +1980 +年4月20日 +四川省盐源县盖租乡阿石 +村6组4号 +公民身份号码 +513423198004203995 +中华人民共和国 +居民身份证 +签发机关 +盐源县公安局 +出 +有效期限 +2013.06.18-2033.06.18 + +2024-04-29 14:31:26,346 - maincopydet.py[line:54] - INFO: text:坐姓5性中出住 +米名年别到生委址 +江六斤 +男民族彝 +半口 +1980 +年4月20日 +四川省盐源县盖租乡阿石 +村6组4号 +公民身份号码 +513423198004203995 +中华人民共和国 +居民身份证 +签发机关 +盐源县公安局 +出 +有效期限 +2013.06.18-2033.06.18 + +2024-04-29 14:31:26,348 - identitycard_extractor.py[line:93] - ERROR: 'NoneType' object has no attribute 'strip' +2024-04-29 14:31:26,348 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时3.108880043029785秒 +2024-04-29 14:32:21,966 - maincopydet.py[line:54] - INFO: text:坐姓5性中出住 +米名年别到生委址 +江六斤 +男民族彝 +半口 +1980 +年4月20日 +四川省盐源县盖租乡阿石 +村6组4号 +公民身份号码 +513423198004203995 +中华人民共和国 +居民身份证 +签发机关 +盐源县公安局 +出 +有效期限 +2013.06.18-2033.06.18 + +2024-04-29 14:35:43,788 - maincopydet.py[line:54] - INFO: text:坐姓5性中出住 +米名年别到生委址 +江六斤 +男民族彝 +半口 +1980 +年4月20日 +四川省盐源县盖租乡阿石 +村6组4号 +公民身份号码 +513423198004203995 +中华人民共和国 +居民身份证 +签发机关 +盐源县公安局 +出 +有效期限 +2013.06.18-2033.06.18 + +2024-04-29 14:35:43,789 - identitycard_extractor.py[line:93] - ERROR: 'NoneType' object has no attribute 'strip' +2024-04-29 14:35:43,789 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时3.108384132385254秒 +2024-04-29 14:36:45,697 - maincopydet.py[line:54] - INFO: text:坐姓5性中出住 +米名年别到生委址 +江六斤 +男民族彝 +半口 +1980 +年4月20日 +四川省盐源县盖租乡阿石 +村6组4号 +公民身份号码 +513423198004203995 +中华人民共和国 +居民身份证 +签发机关 +盐源县公安局 +出 +有效期限 +2013.06.18-2033.06.18 + +2024-04-29 14:36:45,698 - identitycard_extractor.py[line:93] - ERROR: 'NoneType' object has no attribute 'strip' +2024-04-29 14:36:45,698 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时3.046753168106079秒 +2024-04-29 14:46:28,091 - maincopydet.py[line:54] - INFO: text:姓名韩邀宇 +性别男 +民族汉 +出生 +1999年12月15日 +住址 +安徽省太和县税镇镇十里 +沟村委会中韩村16号 +公民身份号码 +34122219991215183X + +2024-04-29 14:46:28,092 - identitycard_extractor.py[line:93] - ERROR: 'NoneType' object has no attribute 'strip' +2024-04-29 14:46:28,093 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时1.361983299255371秒 +2024-04-29 14:46:53,214 - maincopydet.py[line:54] - INFO: text:姓名韩邀宇 +性别男 +民族汉 +出生 +1999年12月15日 +住址 +安徽省太和县税镇镇十里 +沟村委会中韩村16号 +公民身份号码 +34122219991215183X + +2024-04-29 14:46:53,216 - identitycard_extractor.py[line:93] - ERROR: 'NoneType' object has no attribute 'strip' +2024-04-29 14:46:53,216 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时1.4582409858703613秒 +2024-04-29 14:47:10,863 - maincopydet.py[line:54] - INFO: text:姓名韩邀宇 +性别男 +民族汉 +出生 +1999年12月15日 +住址 +安徽省太和县税镇镇十里 +沟村委会中韩村16号 +公民身份号码 +34122219991215183X + +2024-04-29 14:47:10,864 - identitycard_extractor.py[line:93] - ERROR: 'NoneType' object has no attribute 'strip' +2024-04-29 14:47:10,865 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时1.441951036453247秒 +2024-04-29 14:47:45,756 - maincopydet.py[line:54] - INFO: text:姓名韩邀宇 +性别男 +民族汉 +出生 +1999年12月15日 +住址 +安徽省太和县税镇镇十里 +沟村委会中韩村16号 +公民身份号码 +34122219991215183X + +2024-04-29 14:51:34,249 - maincopydet.py[line:54] - INFO: text:姓名韩邀宇 +性别男 +民族汉 +出生 +1999年12月15日 +住址 +安徽省太和县税镇镇十里 +沟村委会中韩村16号 +公民身份号码 +34122219991215183X + +2024-04-29 14:51:34,252 - identitycard_extractor.py[line:93] - ERROR: 'NoneType' object has no attribute 'strip' +2024-04-29 14:51:34,253 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时1.3190720081329346秒 +2024-04-29 14:52:23,324 - maincopydet.py[line:54] - INFO: text:姓名韩邀宇 +性别男 +民族汉 +出生 +1999年12月15日 +住址 +安徽省太和县税镇镇十里 +沟村委会中韩村16号 +公民身份号码 +34122219991215183X + +2024-04-29 14:55:11,538 - maincopydet.py[line:54] - INFO: text:姓名韩邀宇 +性别男 +民族汉 +出生 +1999年12月15日 +住址 +安徽省太和县税镇镇十里 +沟村委会中韩村16号 +公民身份号码 +34122219991215183X + +2024-04-29 14:55:11,538 - identitycard_extractor.py[line:93] - ERROR: 'NoneType' object has no attribute 'strip' +2024-04-29 14:55:11,539 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时1.3528060913085938秒 +2024-04-29 14:59:01,124 - maincopydet.py[line:54] - INFO: text:姓名韩邀宇 +性别男 +民族汉 +出生 +1999年12月15日 +住址 +安徽省太和县税镇镇十里 +沟村委会中韩村16号 +公民身份号码 +34122219991215183X + +2024-04-29 14:59:01,125 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时1.3156509399414062秒 +2024-04-29 15:13:28,501 - maincopydet.py[line:54] - INFO: text:姓名韩邀宇 +性别男 +民族汉 +出生 +1999年12月15日 +住址 +安徽省太和县税镇镇十里 +沟村委会中韩村16号 +公民身份号码 +34122219991215183X + +2024-04-29 15:13:28,502 - identitycard_extractor.py[line:93] - ERROR: 'NoneType' object has no attribute 'strip' +2024-04-29 15:13:28,503 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时1.435436725616455秒 +2024-04-29 15:14:12,277 - maincopydet.py[line:54] - INFO: text:姓名韩邀宇 +性别男 +民族汉 +出生 +1999年12月15日 +住址 +安徽省太和县税镇镇十里 +沟村委会中韩村16号 +公民身份号码 +34122219991215183X + +2024-04-29 15:20:31,635 - maincopydet.py[line:54] - INFO: text:姓名韩邀宇 +性别男 +民族汉 +出生 +1999年12月15日 +住址 +安徽省太和县税镇镇十里 +沟村委会中韩村16号 +公民身份号码 +34122219991215183X + +2024-04-29 15:20:31,635 - identitycard_extractor.py[line:93] - ERROR: 'NoneType' object has no attribute 'strip' +2024-04-29 15:20:31,635 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时1.3430421352386475秒 +2024-04-29 15:22:06,313 - maincopydet.py[line:54] - INFO: text:姓名韩邀宇 +性别男 +民族汉 +出生 +1999年12月15日 +住址 +安徽省太和县税镇镇十里 +沟村委会中韩村16号 +公民身份号码 +34122219991215183X + +2024-04-29 15:22:06,315 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时1.3920197486877441秒 +2024-04-29 15:23:15,577 - maincopydet.py[line:54] - INFO: text:中华人民共和国 +居民身份证 +签发机关 +盐源县公安局 +出 +有效期限 +2013.06.18-2033.06.18 +坐姓5性中出住 +米名年别到生委址 +江六斤 +男民族彝 +半口 +1980 +年4月20日 +四川省盐源县盖租乡阿石 +村6组4号 +公民身份号码 +513423198004203995 + +2024-04-29 15:23:15,578 - identitycard_extractor.py[line:93] - ERROR: 'NoneType' object has no attribute 'strip' +2024-04-29 15:23:15,578 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时3.0693399906158447秒 +2024-04-29 15:24:25,570 - maincopydet.py[line:54] - INFO: text:中华人民共和国 +居民身份证 +签发机关 +盐源县公安局 +出 +有效期限 +2013.06.18-2033.06.18 +坐姓5性中出住 +米名年别到生委址 +江六斤 +男民族彝 +半口 +1980 +年4月20日 +四川省盐源县盖租乡阿石 +村6组4号 +公民身份号码 +513423198004203995 + +2024-04-29 15:25:16,878 - identitycard_extractor.py[line:93] - ERROR: 'NoneType' object has no attribute 'strip' +2024-04-29 15:25:16,881 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时54.37154197692871秒 +2024-04-29 15:26:24,470 - maincopydet.py[line:54] - INFO: text:中华人民共和国 +居民身份证 +签发机关 +盐源县公安局 +出 +有效期限 +2013.06.18-2033.06.18 +坐姓5性中出住 +米名年别到生委址 +江六斤 +男民族彝 +半口 +1980 +年4月20日 +四川省盐源县盖租乡阿石 +村6组4号 +公民身份号码 +513423198004203995 + +2024-04-29 15:28:38,119 - maincopydet.py[line:54] - INFO: text:中华人民共和国 +居民身份证 +签发机关 +盐源县公安局 +出 +有效期限 +2013.06.18-2033.06.18 +坐姓5性中出住 +米名年别到生委址 +江六斤 +男民族彝 +半口 +1980 +年4月20日 +四川省盐源县盖租乡阿石 +村6组4号 +公民身份号码 +513423198004203995 + +2024-04-29 15:30:08,813 - maincopydet.py[line:54] - INFO: text:中华人民共和国 +居民身份证 +签发机关 +盐源县公安局 +出 +有效期限 +2013.06.18-2033.06.18 +坐姓5性中出住 +米名年别到生委址 +江六斤 +男民族彝 +半口 +1980 +年4月20日 +四川省盐源县盖租乡阿石 +村6组4号 +公民身份号码 +513423198004203995 + +2024-04-29 15:31:57,586 - maincopydet.py[line:54] - INFO: text:中华人民共和国 +居民身份证 +签发机关 +盐源县公安局 +出 +有效期限 +2013.06.18-2033.06.18 +坐姓5性中出住 +米名年别到生委址 +江六斤 +男民族彝 +半口 +1980 +年4月20日 +四川省盐源县盖租乡阿石 +村6组4号 +公民身份号码 +513423198004203995 + +2024-04-29 15:59:26,383 - identitycard_extractor.py[line:156] - ERROR: 'NoneType' object has no attribute 'group' +2024-04-29 16:39:30,550 - identitycard_extractor.py[line:159] - ERROR: 'NoneType' object has no attribute 'strip' +2024-04-29 16:41:05,527 - identitycard_extractor.py[line:159] - ERROR: 'NoneType' object has no attribute 'strip' +2024-04-29 16:44:06,145 - maincopydet.py[line:54] - INFO: text:中华人民共和国 +居民身份证 +签发机关 +盐源县公安局 +出 +有效期限 +2013.06.18-2033.06.18 +坐姓5性中出住 +米名年别到生委址 +江六斤 +男民族彝 +半口 +1980 +年4月20日 +四川省盐源县盖租乡阿石 +村6组4号 +公民身份号码 +513423198004203995 + +2024-04-29 16:44:43,791 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时39.819267988204956秒 +2024-04-29 17:00:13,785 - identitycard_extractor.py[line:158] - ERROR: 'NoneType' object has no attribute 'group' +2024-04-29 17:00:27,617 - identitycard_extractor.py[line:158] - ERROR: 'NoneType' object has no attribute 'group' +2024-04-29 17:00:42,606 - identitycard_extractor.py[line:158] - ERROR: 'NoneType' object has no attribute 'group' +2024-04-29 17:02:22,903 - maincopydet.py[line:54] - INFO: text:中华人民共和国 +居民身份证 +签发机关 +木里县公安局 +有效期限 +2016.12.05-2026.12.05 +姓性出住 +马加加 +女 +民族彝 +1998年1月2日 +址 +四川省木里藏族自治县博 +科乡八科村麻窝地组18号 +公民身份号码 +513422199801023821 + +2024-04-29 17:02:22,904 - identitycard_extractor.py[line:159] - ERROR: 'NoneType' object has no attribute 'strip' +2024-04-29 17:02:22,904 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时2.986088991165161秒 +2024-04-29 17:03:52,851 - identitycard_extractor.py[line:159] - ERROR: 'NoneType' object has no attribute 'strip' +2024-04-29 17:09:12,633 - maincopydet.py[line:54] - INFO: text:中华人民共和国 +居民身份证 +签发机关 +木里县公安局 +有效期限 +2020.03.16-2025.03.16 +名 +蒋子古 +姓 +男 +民族彝 +出生 +2005年1月4日 +住址 +四川省木里藏族自治县耗 +牛坪乡泥珠村5组29号 +公民身份号码 +513422200501044415 + +2024-04-29 17:09:12,634 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时2.704793930053711秒 +2024-04-29 17:12:20,619 - maincopydet.py[line:54] - INFO: text:中华人民共和国 +居民身份证 +国 +签发机关 +西昌市公安局 +有效期限 +2008.09.01-2028.09.01 +逆姓5性中出日住 +米名丰别刺生更址 +祝九根惹 +心 +民 +族彝 +男 +E +1978 +四川省西昌市磨盘乡大厂 +村4组27号 +公民身份号码 +513401197807087411 + +2024-04-29 17:12:20,620 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时3.2530269622802734秒 +2024-04-29 17:13:35,922 - maincopydet.py[line:54] - INFO: text:中华人民共和国 +居民身份证 +国 +签发机关 +西昌市公安局 +有效期限 +2008.09.01-2028.09.01 +逆姓5性中出日住 +米名丰别刺生更址 +祝九根惹 +心 +民 +族彝 +男 +E +1978 +四川省西昌市磨盘乡大厂 +村4组27号 +公民身份号码 +513401197807087411 + +2024-04-29 17:13:35,923 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时3.2104380130767822秒 +2024-04-29 17:17:04,360 - maincopydet.py[line:54] - INFO: text:SINGQMINGZ +姓名 +王美新 +SINGOBIED +MINZCUZ +性别 +女 +民族彝 +SENG +NIENZNYIED +HAUH +出生1967年4月5日 +DIEGYOUO +住址广西隆林各族自治县德峨 +乡那地村那地屯一队21号 +GUNGHMINZ +SINHFWN HAUMAJ +公民身份号码 +452631196704053160 +中华人民共和国 +居民身份证 + +2024-04-29 17:17:04,363 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时3.2305209636688232秒 +2024-04-29 17:18:57,515 - maincopydet.py[line:54] - INFO: text:SINGQMINGZ +姓名 +王美新 +SINGOBIED +MINZCUZ +性别 +女 +民族彝 +SENG +NIENZNYIED +HAUH +出生1967年4月5日 +DIEGYOUO +住址广西隆林各族自治县德峨 +乡那地村那地屯一队21号 +GUNGHMINZ +SINHFWN HAUMAJ +公民身份号码 +452631196704053160 +中华人民共和国 +居民身份证 + +2024-04-29 17:18:57,516 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时3.220757246017456秒 +2024-04-29 17:19:45,794 - maincopydet.py[line:54] - INFO: text:沈拉古 +民 +男 +1972 +10 +0月13日 +四州省西昌市开元乡瓦菊 +村1组5号 +民务价号码 +513401197210134510 +中华人民共和国 +★ +★ +羊★ +居民身份证 +签发机关 +西昌市公安局 +有效期限 +2007.05.15-2027.05.15 + +2024-04-29 17:19:45,796 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时3.4734389781951904秒 +2024-04-29 17:21:17,897 - maincopydet.py[line:54] - INFO: text:毛阿卡 +姓名 +性别男 +民族彝 +3 +出生 +1976年3月3日 +住址 +四川省木里藏族自治县耗 +牛坪乡泥珠村下泥珠组55 +号 +中国LHINA +公民身份号码 +513423197603033997 +中华人民共和国 +居民身份证 +签发机关 +木里县公安局 +有效期限 +2017.06.06-2037.06.06 + +2024-04-29 17:21:17,899 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时3.525155782699585秒 +2024-04-29 17:28:56,710 - maincopydet.py[line:54] - INFO: text:毛阿卡 +姓名 +性别男 +民族彝 +3 +出生 +1976年3月3日 +住址 +四川省木里藏族自治县耗 +牛坪乡泥珠村下泥珠组55 +号 +中国LHINA +公民身份号码 +513423197603033997 +中华人民共和国 +居民身份证 +签发机关 +木里县公安局 +有效期限 +2017.06.06-2037.06.06 + +2024-04-29 17:28:56,711 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时3.5107998847961426秒 +2024-04-29 17:31:22,293 - maincopydet.py[line:54] - INFO: text:姓名韩邀宇 +性别男 +民族汉 +出生 +1999年12月15日 +住址 +安徽省太和县税镇镇十里 +沟村委会中韩村16号 +公民身份号码 +34122219991215183X + +2024-04-29 17:31:22,295 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时1.3465311527252197秒 +2024-04-29 17:32:52,987 - maincopydet.py[line:54] - INFO: text:姓名罗玉龙 +性别 +男 +民族回 +出 +生 +1997年12月30日 +住 +址 +新疆特克斯县乔拉克铁热 +克镇迎宾路20号 +999 +公民身份号码 +654127199712301516 + +2024-04-29 17:32:52,988 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时1.8104181289672852秒 +2024-04-29 17:35:34,412 - maincopydet.py[line:54] - INFO: text:姓名罗玉龙 +性别 +男 +民族回 +出 +生 +1997年12月30日 +住 +址 +新疆特克斯县乔拉克铁热 +克镇迎宾路20号 +999 +公民身份号码 +654127199712301516 + +2024-04-29 17:35:34,413 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时1.7894082069396973秒 +2024-04-29 17:36:48,059 - maincopydet.py[line:54] - INFO: text:中华人民共和国 +居民身份证 +2 +签发机关 +木里县公安局 +有效期限 +2023.03.16-2043.03.16 +姓名 +拉基 +性别 +民族彝 +2 +出生 +1993年2月26日 +住址 +四川省木里藏族自治县耗 +牛坪乡叶村村1组122号 +公民身份号码 +51342219930226441X + +2024-04-29 17:36:48,061 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时3.2636008262634277秒 +2024-04-29 17:38:05,445 - maincopydet.py[line:54] - INFO: text:子哈孜 +姓名 +性别 +男 +民族彝 +出生 +1994年8月12日 +住址 +四川省木里藏族自治县耗 +牛坪乡叶村普尔地组50号 +四八八2四日日月2八142一 +513422199408124415 +公民身份号码 +中华人民共和国 +居民身份证 +签发机关 +木里县公安局 +有效期限 +2019.08.27-2029.08.27 + +2024-04-29 17:38:05,448 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时3.4513099193573秒 +2024-04-29 17:42:32,817 - maincopydet.py[line:54] - INFO: text:子哈孜 +姓名 +性别 +男 +民族彝 +出生 +1994年8月12日 +住址 +四川省木里藏族自治县耗 +牛坪乡叶村普尔地组50号 +四八八2四日日月2八142一 +513422199408124415 +公民身份号码 +中华人民共和国 +居民身份证 +签发机关 +木里县公安局 +有效期限 +2019.08.27-2029.08.27 + +2024-04-29 17:42:32,818 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时3.4706408977508545秒 +2024-04-29 17:43:29,181 - maincopydet.py[line:54] - INFO: text:SINGQMINGZ +姓名黄惠颖 +SINGQBIED +MINZCUZ +性别女 +民族壮 +SENG +NIENZNYIED +HAUH +出生 +1988年6月7日 +DIEGYOUO +住址 +南宁市青秀区伶俐镇王京 +村汶水坡2队43-2号 +GUNGHMINZ +SINHFWNHAUMAJ +公民身份号码 +450121198806073127 +SINGOMINGZ +姓名 +肖祖明 +SINGQBIED +MINZCUZ +性别 +男 +民族壮 +SENG +NIENZNYIED +HAUH +出生 +1988年6月1日 +DIEGYOUQ +住址广西融安县大将镇大华村 +华山屯9号 +GUNGHMINZ +SINHFWN HAUMAU +公民身份号码 +452227198806014210 + +2024-04-29 17:43:29,182 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时3.731555938720703秒 +2024-04-29 17:44:49,857 - maincopydet.py[line:54] - INFO: text:SINGQMINGZ +姓名黄惠颖 +SINGQBIED +MINZCUZ +性别女 +民族壮 +SENG +NIENZNYIED +HAUH +出生 +1988年6月7日 +DIEGYOUO +住址 +南宁市青秀区伶俐镇王京 +村汶水坡2队43-2号 +GUNGHMINZ +SINHFWNHAUMAJ +公民身份号码 +450121198806073127 + +2024-04-29 17:44:49,859 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时1.8662490844726562秒 +2024-04-29 17:48:11,019 - maincopydet.py[line:54] - INFO: text:SINGQMINGZ +姓名黄惠颖 +SINGQBIED +MINZCUZ +性别女 +民族壮 +SENG +NIENZNYIED +HAUH +出生 +1988年6月7日 +DIEGYOUO +住址 +南宁市青秀区伶俐镇王京 +村汶水坡2队43-2号 +GUNGHMINZ +SINHFWNHAUMAJ +公民身份号码 +450121198806073127 + +2024-04-29 17:48:11,020 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时1.874298095703125秒 +2024-04-29 17:50:17,970 - maincopydet.py[line:54] - INFO: text:SINGQMINGZ +姓名黄惠颖 +SINGQBIED +MINZCUZ +性别女 +民族壮 +SENG +NIENZNYIED +HAUH +出生 +1988年6月7日 +DIEGYOUO +住址 +南宁市青秀区伶俐镇王京 +村汶水坡2队43-2号 +GUNGHMINZ +SINHFWNHAUMAJ +公民身份号码 +450121198806073127 + +2024-04-29 17:50:17,971 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时1.8488209247589111秒 +2024-04-29 17:50:54,695 - maincopydet.py[line:54] - INFO: text:SINGOMINGZ +姓名 +肖祖明 +SINGQBIED +MINZCUZ +性别 +男 +民族壮 +SENG +NIENZNYIED +HAUH +出生 +1988年6月1日 +DIEGYOUQ +住址广西融安县大将镇大华村 +华山屯9号 +GUNGHMINZ +SINHFWN HAUMAU +公民身份号码 +452227198806014210 + +2024-04-29 17:50:54,696 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时1.8941278457641602秒 +2024-04-29 17:51:42,763 - maincopydet.py[line:54] - INFO: text:圣姓下性李出日住 +米名丰别生址 +吉克石尔 +师 +男 +民族彝 +单 +1980 +年4月18日 +四川省西昌市磨盘乡巴山 +村4组61号 +公民身份号码 +513401198004187413 +中华人民共和国 +居民身份证 +签发机关 +西昌市公安局 +有效期限 +2007.11.05-2027.11.05 + +2024-04-29 17:51:42,764 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时3.2315900325775146秒 +2024-04-29 17:54:14,454 - maincopydet.py[line:54] - INFO: text:包文明 +1性到 +男 +民旅蒙古 +#出生 +19831年74月24[日 +【员住址 +内蒙古通辽市科尔沁左具 +后旗海力吐镇东协日 +查0061 +公民身份号码152323198307243018 + +2024-04-29 17:54:14,456 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时1.5007679462432861秒 +2024-04-29 17:56:01,594 - maincopydet.py[line:54] - INFO: text:姓名 +严伟拉 +性别 +男 +民族彝 +出生 +1984年5月1日 +住址 +四川省九龙县子耳乡麻窝 +村马海火山组 +公民身份号码 +513324198405012234 +中华人民共和国 +居民身份证 +签发机关 +九龙县公安局 +有效期限 +2015.03.26-2035.03.26 + +2024-04-29 17:56:01,595 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时3.391220808029175秒 +2024-04-29 17:57:50,317 - maincopydet.py[line:54] - INFO: text:名 +蒋子古 +姓 +男 +民族彝 +出生 +2005年1月4日 +住址 +四川省木里藏族自治县耗 +牛坪乡泥珠村5组29号 +公民身份号码 +513422200501044415 +中华人民共和国 +居民身份证 +签发机关 +木里县公安局 +有效期限 +2020.03.16-2025.03.16 + +2024-04-29 17:57:50,319 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时2.786212921142578秒 +2024-04-29 17:58:24,078 - maincopydet.py[line:54] - INFO: text:中华人民共和国 +居民身份证 +签发机关 +木里县公安局 +有效期限 +2020.03.16-2025.03.16 +名 +蒋子古 +姓 +男 +民族彝 +出生 +2005年1月4日 +住址 +四川省木里藏族自治县耗 +牛坪乡泥珠村5组29号 +公民身份号码 +513422200501044415 + +2024-04-29 17:58:24,078 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时2.6809768676757812秒 +2024-04-29 18:01:59,567 - maincopydet.py[line:54] - INFO: text:中华人民共和国 +居民身份证 +国 +签发机关 +西昌市公安局 +有效期限 +2008.09.01-2028.09.01 +逆姓5性中出日住 +米名丰别刺生更址 +祝九根惹 +心 +民 +族彝 +男 +E +1978 +四川省西昌市磨盘乡大厂 +村4组27号 +公民身份号码 +513401197807087411 + +2024-04-29 18:01:59,568 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时3.2323508262634277秒 +2024-04-29 18:02:59,766 - maincopydet.py[line:54] - INFO: text:中华人民共和国 +★ +★ +羊★ +居民身份证 +签发机关 +西昌市公安局 +有效期限 +2007.05.15-2027.05.15 +沈拉古 +民 +男 +1972 +10 +0月13日 +四州省西昌市开元乡瓦菊 +村1组5号 +民务价号码 +513401197210134510 + +2024-04-29 18:02:59,767 - identitycard_extractor.py[line:174] - ERROR: 'address' +2024-04-29 18:02:59,768 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时3.4932940006256104秒 +2024-04-29 18:05:00,538 - maincopydet.py[line:54] - INFO: text:中华人民共和国 +★ +★ +羊★ +居民身份证 +签发机关 +西昌市公安局 +有效期限 +2007.05.15-2027.05.15 +沈拉古 +民 +男 +1972 +10 +0月13日 +四州省西昌市开元乡瓦菊 +村1组5号 +民务价号码 +513401197210134510 + +2024-04-29 18:05:00,539 - identitycard_extractor.py[line:174] - ERROR: 'address' +2024-04-29 18:05:00,539 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时3.5308218002319336秒 +2024-04-29 18:24:18,092 - maincopydet.py[line:54] - INFO: text:圣姓下性李出日住 +米名丰别生址 +吉克石尔 +师 +男 +民族彝 +单 +1980 +年4月18日 +四川省西昌市磨盘乡巴山 +村4组61号 +公民身份号码 +513401198004187413 +中华人民共和国 +居民身份证 +签发机关 +西昌市公安局 +有效期限 +2007.11.05-2027.11.05 + +2024-04-29 18:24:18,093 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时3.2540249824523926秒 +2024-04-30 08:39:03,456 - maincopydet.py[line:54] - INFO: text:圣姓下性李出日住 +米名丰别生址 +吉克石尔 +师 +男 +民族彝 +单 +1980 +年4月18日 +四川省西昌市磨盘乡巴山 +村4组61号 +公民身份号码 +513401198004187413 +中华人民共和国 +居民身份证 +签发机关 +西昌市公安局 +有效期限 +2007.11.05-2027.11.05 + +2024-04-30 08:39:03,457 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时3.2556028366088867秒 +2024-04-30 08:39:27,042 - maincopydet.py[line:54] - INFO: text:圣姓下性李出日住 +米名丰别生址 +吉克石尔 +师 +男 +民族彝 +单 +1980 +年4月18日 +四川省西昌市磨盘乡巴山 +村4组61号 +公民身份号码 +513401198004187413 +中华人民共和国 +居民身份证 +签发机关 +西昌市公安局 +有效期限 +2007.11.05-2027.11.05 + +2024-04-30 08:39:27,043 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时3.319981098175049秒 +2024-04-30 08:40:36,978 - maincopydet.py[line:54] - INFO: text:名 +蒋子古 +姓 +男 +民族彝 +出生 +2005年1月4日 +住址 +四川省木里藏族自治县耗 +牛坪乡泥珠村5组29号 +公民身份号码 +513422200501044415 +中华人民共和国 +居民身份证 +签发机关 +木里县公安局 +有效期限 +2020.03.16-2025.03.16 + +2024-04-30 08:40:36,979 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时2.7075040340423584秒 +2024-04-30 08:41:21,178 - maincopydet.py[line:54] - INFO: text:毛阿卡 +姓名 +性别男 +民族彝 +3 +出生 +1976年3月3日 +住址 +四川省木里藏族自治县耗 +牛坪乡泥珠村下泥珠组55 +号 +中国LHINA +公民身份号码 +513423197603033997 +中华人民共和国 +居民身份证 +签发机关 +木里县公安局 +有效期限 +2017.06.06-2037.06.06 + +2024-04-30 08:41:21,179 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时3.509481906890869秒 +2024-04-30 08:42:53,883 - maincopydet.py[line:54] - INFO: text:姓名龙辉 +性别男民族汉 +出生 +1997年1月4日 +住址 +四川省广安市广安区彭家 +乡白阳村12组59号 +公民身份号码 +511602199701045592 +中华人民共和国 +居民身份证 +签发机关 +关广安市公安局广安分局 +有效期限2023.07.24-2043.07.24 + +2024-04-30 08:42:53,884 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时2.6458160877227783秒 +2024-04-30 09:33:45,719 - validate.py[line:45] - INFO: text:中华人民共和国 +★ +★ +羊★ +居民身份证 +签发机关 +西昌市公安局 +有效期限 +2007.05.15-2027.05.15 +沈拉古 +民 +男 +1972 +10 +0月13日 +四州省西昌市开元乡瓦菊 +村1组5号 +民务价号码 +513401197210134510 + +2024-04-30 09:33:45,720 - identitycard_extractor.py[line:139] - ERROR: 'address' +2024-04-30 09:33:45,720 - validate.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时3.4895689487457275秒 +2024-04-30 09:34:39,186 - maincopydet.py[line:54] - INFO: text:中华人民共和国 +★ +★ +羊★ +居民身份证 +签发机关 +西昌市公安局 +有效期限 +2007.05.15-2027.05.15 +沈拉古 +民 +男 +1972 +10 +0月13日 +四州省西昌市开元乡瓦菊 +村1组5号 +民务价号码 +513401197210134510 + +2024-04-30 09:34:39,187 - identitycard_extractor.py[line:139] - ERROR: 'address' +2024-04-30 09:34:39,187 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时3.5017969608306885秒 +2024-04-30 09:41:21,048 - validate.py[line:45] - INFO: text:姓名苏龙格德·胡尔查巴特尔 +性别男民族蒙古 +出生1973年10支月27日 +内蒙古赤峰市巴林右旗沙布 +台苏木树中嘎查 +中华人民共和国 +居民身份证 +签发机关巴林右旗公安局 +有效期限2004.10.27-2024.10.26 + +2024-04-30 09:41:21,049 - identitycard_extractor.py[line:139] - ERROR: 'address' +2024-04-30 09:41:21,049 - validate.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时1.3080666065216064秒 +2024-04-30 09:45:59,114 - identitycard_extractor.py[line:139] - ERROR: 'address' +2024-04-30 09:46:00,757 - validate.py[line:45] - INFO: text:姓名苏龙格德·胡尔查巴特尔 +性别男民族蒙古 +出生1973年10支月27日 +内蒙古赤峰市巴林右旗沙布 +台苏木树中嘎查 +中华人民共和国 +居民身份证 +签发机关巴林右旗公安局 +有效期限2004.10.27-2024.10.26 + +2024-04-30 09:46:00,757 - identitycard_extractor.py[line:139] - ERROR: 'address' +2024-04-30 09:46:00,757 - validate.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时1.281376838684082秒 +2024-04-30 09:48:38,607 - identitycard_extractor.py[line:139] - ERROR: 'address' +2024-04-30 09:48:40,289 - maincopydet.py[line:54] - INFO: text:姓名苏龙格德·胡尔查巴特尔 +性别男民族蒙古 +出生1973年10支月27日 +内蒙古赤峰市巴林右旗沙布 +台苏木树中嘎查 +中华人民共和国 +居民身份证 +签发机关巴林右旗公安局 +有效期限2004.10.27-2024.10.26 + +2024-04-30 09:48:40,290 - identitycard_extractor.py[line:139] - ERROR: 'address' +2024-04-30 09:48:40,290 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时1.3130998611450195秒 +2024-04-30 09:50:07,388 - identitycard_extractor.py[line:139] - ERROR: 'address' +2024-04-30 09:50:09,037 - maincopydet.py[line:54] - INFO: text:姓名苏龙格德·胡尔查巴特尔 +性别男民族蒙古 +出生1973年10支月27日 +内蒙古赤峰市巴林右旗沙布 +台苏木树中嘎查 +中华人民共和国 +居民身份证 +签发机关巴林右旗公安局 +有效期限2004.10.27-2024.10.26 + +2024-04-30 09:50:09,037 - identitycard_extractor.py[line:139] - ERROR: 'address' +2024-04-30 09:50:09,037 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时1.2827239036560059秒 +2024-04-30 09:53:45,449 - maincopydet.py[line:54] - INFO: text:姓名苏龙格德·胡尔查巴特尔 +性别男民族蒙古 +出生1973年10支月27日 +内蒙古赤峰市巴林右旗沙布 +台苏木树中嘎查 +中华人民共和国 +居民身份证 +签发机关巴林右旗公安局 +有效期限2004.10.27-2024.10.26 + +2024-04-30 09:53:48,410 - identitycard_extractor.py[line:139] - ERROR: 'address' +2024-04-30 09:53:48,411 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时119.77328777313232秒 +2024-04-30 10:18:53,018 - validate.py[line:45] - INFO: text:姓5性乎出日住 +米名丰别生更址 +张亮 +男 +民族彝 +1975 +年11月27日 +四川省西昌市樟木箐乡中 +安村1组29号附1号 +公民身份号码 +513401197511274218 +中华人民共和国 +居民身份证 +国水 +西昌市公安局 +签发机关 +有效期限 +2017.08.21-2037.08.21 + +2024-04-30 10:18:53,019 - validate.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时2.6994340419769287秒 +2024-04-30 10:24:57,780 - validate.py[line:45] - INFO: text:中华人民共和国 +居民身份证 +签发机关 +木里县公安局 +有效期限 +2019.08.27-2029.08.27 +子哈孜 +姓名 +性别 +男 +民族彝 +出生 +1994年8月12日 +住址 +四川省木里藏族自治县耗 +牛坪乡叶村普尔地组50号 +四八八2四日日月2八142一 +513422199408124415 +公民身份号码 + +2024-04-30 10:24:57,782 - validate.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时3.4463770389556885秒 +2024-04-30 10:26:58,904 - validate.py[line:45] - INFO: text:中华人民共和国 +居民身份证 +签发机关 +木里县公安局 +有效期限 +2019.08.27-2029.08.27 +子哈孜 +姓名 +性别 +男 +民族彝 +出生 +1994年8月12日 +住址 +四川省木里藏族自治县耗 +牛坪乡叶村普尔地组50号 +四八八2四日日月2八142一 +513422199408124415 +公民身份号码 + +2024-04-30 10:26:58,906 - validate.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时3.4658050537109375秒 +2024-05-06 09:42:49,045 - maincopydet.py[line:54] - INFO: text:#杨先德 +性#男民旅 +出生1964年11月30日 +住地湖南省会同县广评镇西楼 +村三组6号 +公民身份号码 +43302919641130423X + +2024-05-06 09:42:49,049 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时1.3214528560638428秒 +2024-05-06 09:43:46,859 - maincopydet.py[line:54] - INFO: text:姓名刘邦校 +性别男民族土家 +出生1981年11月8日 +住址 +湖南省陵县凉水井镇六 +都坪村湘厂组003号 +公民身份号码 +433022198111083134 + +2024-05-06 09:43:46,861 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时1.5627398490905762秒 +2024-05-06 09:44:49,477 - maincopydet.py[line:54] - INFO: text:中华人民共和国 +居民身份证 +签发机关陵县公安局 +有效期限 +2008.04.02-2028.04.02 +姓名刘邦校 +性别男民族土家 +出生1981年11月8日 +住址 +湖南省陵县凉水井镇六 +都坪村湘厂组003号 +公民身份号码 +433022198111083134 + +2024-05-06 09:44:49,479 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时2.6415250301361084秒 +2024-05-06 09:45:41,558 - maincopydet.py[line:54] - INFO: text:中华人民共和国 +居民身份证 +签发机美会同县公安局 +有效期限2016.02.29-2036.02.29 + +2024-05-06 09:45:41,559 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时1.1852128505706787秒 +2024-05-06 09:47:39,143 - maincopydet.py[line:54] - INFO: text:中华人民共和国 +居民身份证 +签发机美会同县公安局 +有效期限2016.02.29-2036.02.29 +王 +姓名杨云凯 +性别男 +民旅侗 +出生1970年8月13日 +住址湖南省会同县广坪镇羊角 +坪村五组36号 +公民身份号码433029197008134212 + +2024-05-06 09:47:39,144 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时2.7177369594573975秒 +2024-05-06 09:48:19,337 - maincopydet.py[line:54] - INFO: text:中华人民共和国 +居民身份证 +签发机关会同县公安局 +有效期限 +2007.02.28-2027.02.28 +姓名杨中建 +性别男民族侗 +出生1976年1月15日 +住址湖南省会同县广坪镇羊角 +坪村六组26号 +公民身份号码 +433029197601154214 + +2024-05-06 09:48:19,337 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时2.3664188385009766秒 +2024-05-06 09:49:05,576 - maincopydet.py[line:54] - INFO: text:中华人民共和国 +居民身份证 +签发机关常德市公安局鼎城分局 +有效期限 + +2024-05-06 09:49:05,577 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时0.9321112632751465秒 +2024-05-06 09:49:30,772 - maincopydet.py[line:54] - INFO: text:中华人民共和国 +居民身份证 +签发机关常德市公安局鼎城分局 +有效期限 + +2024-05-06 09:49:30,773 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时0.9136347770690918秒 +2024-05-06 09:49:57,899 - maincopydet.py[line:54] - INFO: text:唐昌梅 +姓名 +性别女民族苗 +出生1975年8月15日 +住址 +湖南省常德市鼎城区双桥 +坪镇全家坪村3组 +公民身份号码 +433030197508150820 + +2024-05-06 09:49:57,899 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时1.4781200885772705秒 +2024-05-06 09:52:05,101 - maincopydet.py[line:54] - INFO: text:唐昌梅 +姓名 +性别女民族苗 +出生1975年8月15日 +住址 +湖南省常德市鼎城区双桥 +坪镇全家坪村3组 +公民身份号码 +433030197508150820 + +2024-05-06 09:52:05,101 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时1.5164251327514648秒 +2024-05-06 09:56:06,674 - maincopydet.py[line:54] - INFO: text:唐昌梅 +姓名 +性别女民族苗 +出生1975年8月15日 +住址 +湖南省常德市鼎城区双桥 +坪镇全家坪村3组 +公民身份号码 +433030197508150820 + +2024-05-06 09:56:06,676 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时1.511564016342163秒 +2024-05-06 09:57:14,399 - maincopydet.py[line:54] - INFO: text:唐昌梅 +姓名 +性别女民族苗 +出生1975年8月15日 +住址 +湖南省常德市鼎城区双桥 +坪镇全家坪村3组 +公民身份号码 +433030197508150820 + +2024-05-06 10:01:06,566 - maincopydet.py[line:54] - INFO: text:唐昌梅 +姓名 +性别女民族苗 +出生1975年8月15日 +住址 +湖南省常德市鼎城区双桥 +坪镇全家坪村3组 +公民身份号码 +433030197508150820 +中华人民共和国 +居民身份证 +签发机关号 +张家界市公安局永定分局 +有效期限2 +2013.05.06-2033.05.06 + +2024-05-06 10:01:06,567 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时2.655003070831299秒 +2024-05-06 10:03:38,968 - maincopydet.py[line:54] - INFO: text:唐昌梅 +姓名 +性别女民族苗 +出生1975年8月15日 +住址 +湖南省常德市鼎城区双桥 +坪镇全家坪村3组 +公民身份号码 +433030197508150820 +中华人民共和国 +居民身份证 +签发机关常德市公安局鼎城分局 +有效期限 + +2024-05-06 10:03:38,970 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时2.455435037612915秒 +2024-05-06 10:04:24,325 - maincopydet.py[line:54] - INFO: text:姓万性中出日住 +米名丰别判生址 +裴礼祥 +男 +民族汉 +半 +1972年5月12日 +四川省冕宁县青纳乡青丝 +塘村4组16号 +公民身份号码 +513433197205126816 +中华人民共和国 +居民身份证 +签发机关 +冕宁县公安局 +有效期限 +2008.07.13-2028.07.13 + +2024-05-06 10:04:24,328 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时2.947305917739868秒 +2024-05-06 10:05:48,859 - maincopydet.py[line:54] - INFO: text:中华人民共和国 +居民身份证 +签发机关 +会东县公安局 +出 +有效期限 +2018.08.20-2038.08.20 +单姓小性中出日住 +米名丰别生更址 +崔荣美 +女民族汉 +1981年10月22日 +四川省会东县鲁吉镇姜家 +火山村6组60号 +公民身份号码 +513426198110225521 + +2024-05-06 10:05:48,861 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时2.7576136589050293秒 +2024-05-06 10:11:00,041 - maincopydet.py[line:54] - INFO: text:中华人民共和国 +居民身份证 +签发机关 +会东县公安局 +出 +有效期限 +2018.08.20-2038.08.20 +坐姓上性中出日住 +米名丰别到生更址 +江祥雄 +州 +男 +民族汉 +日 +1976 +年1月18日 +四川省会东县鲁吉镇姜家 +火山村6组60号 +公民身份号码 +513426197601185515 + +2024-05-06 10:11:00,042 - maincopydet.py[line:60] - INFO: extractIdCardInfoByBase64Data 耗时2.9669947624206543秒 +2024-05-06 10:12:51,056 - maincopydet.py[line:37] - ERROR: ./images/513426198110225521_202311061200_back.jpg doesn't exist +2024-05-06 10:12:54,006 - maincopydet.py[line:59] - INFO: text:中华人民共和国 +居民身份证 +签发机关 +会东县公安局 +出 +有效期限 +2018.08.20-2038.08.20 +坐姓上性中出日住 +米名丰别到生更址 +江祥雄 +州 +男 +民族汉 +日 +1976 +年1月18日 +四川省会东县鲁吉镇姜家 +火山村6组60号 +公民身份号码 +513426197601185515 + +2024-05-06 10:12:54,006 - maincopydet.py[line:65] - INFO: extractIdCardInfoByBase64Data 耗时2.9500768184661865秒 +2024-05-06 10:15:05,226 - maincopydet.py[line:58] - INFO: text:中华人民共和国 +居民身份证 +签发机关 +会东县公安局 +出 +有效期限 +2018.08.20-2038.08.20 +坐姓上性中出日住 +米名丰别到生更址 +江祥雄 +州 +男 +民族汉 +日 +1976 +年1月18日 +四川省会东县鲁吉镇姜家 +火山村6组60号 +公民身份号码 +513426197601185515 + +2024-05-06 10:15:05,228 - maincopydet.py[line:64] - INFO: extractIdCardInfoByBase64Data 耗时2.962109088897705秒 +2024-05-06 10:15:58,950 - maincopydet.py[line:58] - INFO: text:中华人民共和国 +居民身份证 +签发机关 +会东县公安局 +出 +有效期限 +2018.08.20-2038.08.20 +坐姓上性中出日住 +米名丰别到生更址 +江祥雄 +州 +男 +民族汉 +日 +1976 +年1月18日 +四川省会东县鲁吉镇姜家 +火山村6组60号 +公民身份号码 +513426197601185515 + +2024-05-06 10:15:58,950 - identitycard_extractor.py[line:147] - ERROR: 'NoneType' object has no attribute 'strip' +2024-05-06 10:15:58,950 - maincopydet.py[line:64] - INFO: extractIdCardInfoByBase64Data 耗时2.986100912094116秒 +2024-05-06 10:16:47,868 - maincopydet.py[line:58] - INFO: text:中华人民共和国 +居民身份证 +签发机关 +会东县公安局 +出 +有效期限 +2018.08.20-2038.08.20 +坐姓上性中出日住 +米名丰别到生更址 +江祥雄 +州 +男 +民族汉 +日 +1976 +年1月18日 +四川省会东县鲁吉镇姜家 +火山村6组60号 +公民身份号码 +513426197601185515 + +2024-05-06 10:16:47,869 - maincopydet.py[line:64] - INFO: extractIdCardInfoByBase64Data 耗时2.982879877090454秒 +2024-05-06 10:17:56,756 - maincopydet.py[line:58] - INFO: text:中华人民共和国 +居民身份证 +签发机美会同县公安局 +有效期限2016.02.29-2036.02.29 +王 +姓名杨云凯 +性别男 +民旅侗 +出生1970年8月13日 +住址湖南省会同县广坪镇羊角 +坪村五组36号 +公民身份号码433029197008134212 + +2024-05-06 10:17:56,757 - maincopydet.py[line:64] - INFO: extractIdCardInfoByBase64Data 耗时2.6630430221557617秒 +2024-05-06 10:19:21,636 - maincopydet.py[line:58] - INFO: text:中华人民共和国 +居民身份证 +签发机美会同县公安局 +有效期限2016.02.29-2036.02.29 +王 +姓名杨云凯 +性别男 +民旅侗 +出生1970年8月13日 +住址湖南省会同县广坪镇羊角 +坪村五组36号 +公民身份号码433029197008134212 + +2024-05-06 10:19:21,638 - maincopydet.py[line:64] - INFO: extractIdCardInfoByBase64Data 耗时2.653780937194824秒 +2024-05-06 10:20:30,849 - maincopydet.py[line:58] - INFO: text:#杨先德 +性#男民旅 +出生1964年11月30日 +住地湖南省会同县广评镇西楼 +村三组6号 +公民身份号码 +43302919641130423X +中华人民共和国 +居民身份证 +签发机关会同县公安局 +有效期限2019.01.03-长期 + +2024-05-06 10:20:30,851 - maincopydet.py[line:64] - INFO: extractIdCardInfoByBase64Data 耗时2.0990798473358154秒 +2024-05-06 10:24:22,485 - maincopydet.py[line:58] - INFO: text:#杨先德 +性#男民旅 +出生1964年11月30日 +住地湖南省会同县广评镇西楼 +村三组6号 +公民身份号码 +43302919641130423X +中华人民共和国 +居民身份证 +签发机关会同县公安局 +有效期限2019.01.03-长期 + +2024-05-06 10:24:22,485 - maincopydet.py[line:64] - INFO: extractIdCardInfoByBase64Data 耗时2.095709800720215秒 +2024-05-06 10:24:44,417 - maincopydet.py[line:58] - INFO: text:#杨先德 +性#男民旅 +出生1964年11月30日 +住地湖南省会同县广评镇西楼 +村三组6号 +公民身份号码 +43302919641130423X +中华人民共和国 +居民身份证 +签发机关会同县公安局 +有效期限2019.01.03-长期 + +2024-05-06 10:24:44,418 - maincopydet.py[line:64] - INFO: extractIdCardInfoByBase64Data 耗时2.055554151535034秒 +2024-05-06 10:25:17,186 - validate.py[line:45] - INFO: text:中华人民共和国 +居民身份证 +签发机关 +木里县公安局 +有效期限 +2019.08.27-2029.08.27 +子哈孜 +姓名 +性别 +男 +民族彝 +出生 +1994年8月12日 +住址 +四川省木里藏族自治县耗 +牛坪乡叶村普尔地组50号 +四八八2四日日月2八142一 +513422199408124415 +公民身份号码 + +2024-05-06 10:25:17,187 - validate.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时3.412315845489502秒 +2024-05-06 10:41:33,270 - maincopy.py[line:50] - INFO: text:#杨先德 +性#男民旅 +出生1964年11月30日 +住地湖南省会同县广评镇西楼 +村三组6号 +公民身份号码 +43302919641130423X +中华人民共和国 +居民身份证 +签发机关会同县公安局 +有效期限2019.01.03-长期 + +2024-05-06 10:41:33,272 - maincopy.py[line:56] - INFO: extractIdCardInfoByBase64Data 耗时2.109567880630493秒 +2024-05-06 13:55:08,719 - validate.py[line:45] - INFO: text:中华人民共和国 +居民身份证 +签发机关 +木里县公安局 +有效期限 +2019.08.27-2029.08.27 +子哈孜 +姓名 +性别 +男 +民族彝 +出生 +1994年8月12日 +住址 +四川省木里藏族自治县耗 +牛坪乡叶村普尔地组50号 +四八八2四日日月2八142一 +513422199408124415 +公民身份号码 + +2024-05-06 13:55:08,721 - validate.py[line:51] - INFO: extractIdCardInfoByBase64Data 耗时3.4400839805603027秒 +2024-05-06 14:06:30,701 - identitycard_extractor.py[line:151] - ERROR: 'NoneType' object has no attribute 'strip' diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/main.py b/AndroidOCRTool/app/src/main/assets/OCRPython/main.py new file mode 100644 index 0000000..a818562 --- /dev/null +++ b/AndroidOCRTool/app/src/main/assets/OCRPython/main.py @@ -0,0 +1,173 @@ +# -*- coding: utf-8 -*- +import sys +import io +from extractor.identitycard_extractor import IdentityCardExtractor +from document_loader.imgloader import RapidOCRLoader +from configs.basic_config import logger +import base64 +import time +import os +import json + +sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8') + +def extractIdCardInfo(type:int, filePath1: str, filePath2: str)->str: + if (0 == type): + return extractIdCardInfoByPath(filePath1, filePath2) + elif (1 == type): + return extractIdCardInfoByBase64Data(filePath1,filePath2) + else: + pass + +def extractIdCardInfoByPath(filePath1: str, filePath2: str)->str: + start_time = time.time() # 记录结束时间 + context = "" + jsonString = "" + try: + if 0 != len(filePath1) and os.path.exists(filePath1): + loader = RapidOCRLoader(filePath1) + docs = loader.load() + context = "\n".join([doc.page_content for doc in docs]) + if 0 != len(filePath2) and os.path.exists(filePath2): + loader = RapidOCRLoader(filePath2) + docs = loader.load() + context += "\n".join([doc.page_content for doc in docs]) + + extractor = IdentityCardExtractor() + tempdict = extractor.extract_text(context) + json_string = json.dumps(tempdict, ensure_ascii=False) + except Exception as e: + logger.error(e) + + end_time = time.time() # 记录结束时间 + execution_time = end_time - start_time # 计算执行时间 + logger.info(f"extractIdCardInfo 耗时{execution_time}秒") + return jsonString + +def extractIdCardInfoByBase64Data(base64data1:str, base64Data2: str)->str: + image_data1 = "" + image_data2 = "" + logger.info(f"extractIdCardInfoByBase64Data") + start_time = time.time() # 记录结束时间 + jsonString = "" + try: + if 0!=len(base64data1): + logger.info(f"not base64data1.empty()") + image_data1 = base64.b64decode(base64data1) + with open("file1.png", "wb") as file: + file.write(image_data1) + + if 0!=len(base64Data2): + logger.info(f"not base64Data2.empty()") + image_data2 = base64.b64decode(base64Data2) + with open("file2.png", "wb") as file: + file.write(image_data2) + + if os.path.exists("file1.png") and os.path.exists("file2.png"): + logger.info(f"file1.png and file2.png exist") + jsonString = extractIdCardInfoByPath("file1.png","file2.png") + os.remove("file1.png") + os.remove("file2.png") + elif os.path.exists("file1.png"): + logger.info(f"file1.png exist") + jsonString = extractIdCardInfoByPath("file1.png","") + os.remove("file1.png") + elif os.path.exists("file2.png"): + logger.info(f"file2.png exist") + jsonString = extractIdCardInfoByPath("file2.png","") + os.remove("file2.png") + except Exception as e: + logger.error(e) + + end_time = time.time() # 记录结束时间 + execution_time = end_time - start_time # 计算执行时间 + logger.info(f"extractIdCardInfoByBase64Data 耗时{execution_time}秒") + return jsonString + +# with open('/Users/wangvivi/Desktop/Code/ocrtest/images/id_card.JPG', 'rb') as image_file: +# base64_image_string = base64.b64encode(image_file.read()).decode('utf-8') + +# jsonString = extractIdCardInfoByBase64Data(base64_image_string,"") +# print(jsonString) + +# jsonString = extractIdCardInfoByPath("/Users/wangvivi/Desktop/Code/ocrtest/images/id_card.JPG","") +# print(jsonString) + +if __name__ == "__main__": + try: + logger.info(f"main.py len of parameter: {len(sys.argv)}") + jsonString = "" + if len(sys.argv) > 3: + logger.info(f"{sys.argv[1]}") + logger.info(f"{sys.argv[2]}") + logger.info(f"{sys.argv[3]}") + jsonString = extractIdCardInfo(int(sys.argv[1]), sys.argv[2], sys.argv[3]) + elif len(sys.argv) > 1: + logger.info(f"python 脚本里的接收到的参数是:") + logger.info(f"{sys.argv[1]}") + logger.info(f"开始执行sys.stdin.read") + input_data = sys.stdin.read() + logger.info("") + logger.info(f"{len(input_data)}") + split_data = input_data.split(os.linesep) + data1 = "" + data2 = "" + if 2 == len(split_data): + data1 = split_data[0] + data2 = split_data[1] + elif 1 == len(split_data): + data1 = split_data[0] + logger.info(f"{len(data1)}") + logger.info(f"{len(data2)}") + + jsonString = extractIdCardInfo(int(sys.argv[1]), data1, data2) + + print(jsonString) + + except KeyboardInterrupt: + logger.error("KeyboardInterrupt") + + except IndexError: + # 如果参数过长,捕获 IndexError 异常并进行处理 + logger.error("参数过长,未指定足够的参数") + + except OverflowError: + # 如果发生了 OverflowError 异常,捕获并进行相应的处理 + logger.error("命令行参数过长,导致溢出错误") + + except EOFError: + # 如果达到输入流的末尾,捕获 EOFError 异常并进行处理 + logger.error("已经到达输入流的末尾") + + except Exception as e: + # 如果发生了其他异常,捕获并进行相应的处理 + logger.error("发生了异常:", e) + + + + +# if __name__ == "__main__": +# #loader = RapidOCRLoader(file_path="/Users/wangvivi/Desktop/Code/ocrtest/images/id_card.JPG") +# #loader = RapidOCRLoader(file_path="/Users/wangvivi/Desktop/Code/ocrtest/images/id_card.JPG") +# #loader = RapidOCRLoader(file_path="/Users/wangvivi/Desktop/Code/ocrtest/images/20230726163834.png") +# #loader = RapidOCRLoader(file_path="/Users/wangvivi/Desktop/Code/ocrtest/images/QQ截图20230726163813.png") +# # loader = RapidOCRLoader(file_path="/Users/wangvivi/Desktop/Code/ocrtest/images/id_card.JPG") +# # #loader = RapidOCRLoader(file_path="/Users/wangvivi/Desktop/Code/ocrtest/images/032002200511-91445598.pdf") +# # #loader = RapidOCRLoader(file_path="/Users/wangvivi/Desktop/Code/ocrtest/images/fapiao.jpg") + +# # docs = loader.load() +# # context = "\n".join([doc.page_content for doc in docs]) +# # print(context) + +# # extractor = IdentityCardExtractor() +# # jsonString = extractor.extract_text(context) +# # print(jsonString) +# # context = remove_blank_lines(context) +# # print("*"*20) +# # print(context) +# # info = extract_id_card_info(context) +# # jsonString = json.dumps(info, ensure_ascii=False) +# # print(jsonString) + + # result = extractIdCardInfo("/Users/wangvivi/Desktop/Code/ocrtest/images/id_card.JPG") + # print(result) diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/maincopy.py b/AndroidOCRTool/app/src/main/assets/OCRPython/maincopy.py new file mode 100644 index 0000000..b7dd4cf --- /dev/null +++ b/AndroidOCRTool/app/src/main/assets/OCRPython/maincopy.py @@ -0,0 +1,155 @@ +# -*- coding: utf-8 -*- +import sys +import io +import os +from paddleocr import PaddleOCR +import time +from configs.basic_config import logger +from extractor.identitycard_extractor import IdentityCardExtractor +import base64 +import json + +sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8') +def extractIdCardInfo(type:int, filePath1: str, filePath2: str)->str: + if (0 == type): + return extractIdCardInfoByPath(filePath1, filePath2) + elif (1 == type): + return extractIdCardInfoByBase64Data(filePath1,filePath2) + else: + pass + +def extractIdCardInfoByPath(filePath1: str, filePath2: str)->str: + ocr = PaddleOCR(use_angle_cls=True, lang="ch") # need to run only once to download and load model into memory + text = "" + start_time = time.time() # 记录结束时间 + jsonString = "" + try: + if os.path.exists(filePath1): + result = ocr.ocr(filePath1, cls=False) + for idx in range(len(result)): + res = result[idx] + for line in res: + text += (line[1][0] + '\n') + else: + logger.error(f"{filePath1} doesn't exist") + + if os.path.exists(filePath2): + result = ocr.ocr(filePath2, cls=False) + for idx in range(len(result)): + res = result[idx] + for line in res: + text += (line[1][0] + '\n') + else: + logger.error(f"{filePath2} doesn't exist") + + except Exception as e: + logger.error(e) + print(e) + + if 0 != len(text): + logger.info(f"text:{text}") + extractor = IdentityCardExtractor() + tempdict = extractor.extract_textbyPaddle(text) + jsonString = json.dumps(tempdict, ensure_ascii=False) + end_time = time.time() # 记录结束时间 + execution_time = end_time - start_time # 计算执行时间 + logger.info(f"extractIdCardInfoByBase64Data 耗时{execution_time}秒") + else: + logger.error(f"{filePath1},{filePath2} can't be recognized") + return jsonString + +def extractIdCardInfoByBase64Data(base64data1:str, base64Data2: str)->str: + logger.info(f"extractIdCardInfoByBase64Data") + start_time = time.time() # 记录结束时间 + jsonString = "" + try: + if 0!=len(base64data1): + logger.info(f"not base64data1.empty()") + image_data1 = base64.b64decode(base64data1) + with open("file1.png", "wb") as file: + file.write(image_data1) + + if 0!=len(base64Data2): + logger.info(f"not base64Data2.empty()") + image_data2 = base64.b64decode(base64Data2) + with open("file2.png", "wb") as file: + file.write(image_data2) + + if os.path.exists("file1.png") and os.path.exists("file2.png"): + logger.info(f"file1.png and file2.png exist") + jsonString = extractIdCardInfoByPath("file1.png","file2.png") + os.remove("file1.png") + os.remove("file2.png") + elif os.path.exists("file1.png"): + logger.info(f"file1.png exist") + jsonString = extractIdCardInfoByPath("file1.png","") + os.remove("file1.png") + elif os.path.exists("file2.png"): + logger.info(f"file2.png exist") + jsonString = extractIdCardInfoByPath("file2.png","") + os.remove("file2.png") + except Exception as e: + logger.error(e) + + end_time = time.time() # 记录结束时间 + execution_time = end_time - start_time # 计算执行时间 + logger.info(f"extractIdCardInfoByBase64Data 耗时{execution_time}秒") + return jsonString + +# with open('/Users/wangvivi/Desktop/Code/ocrtest/images/id_card.JPG', 'rb') as image_file: +# base64_image_string = base64.b64encode(image_file.read()).decode('utf-8') +# +# jsonString = extractIdCardInfoByBase64Data(base64_image_string,"") +# jsonString = extractIdCardInfoByBase64Data("/Users/wangvivi/Desktop/Code/ocrtest/images/2.jpg","/Users/wangvivi/Desktop/Code/ocrtest/images/1.jpg") +# print(jsonString) +# # +# jsonString = extractIdCardInfoByPath("./images/han.jpg","") +# logger.info(f"test") +# jsonString = extractIdCardInfoByPath("./images/43302919641130423X_202311061953_front.jpg","./images/43302919641130423X_202311061953_back.jpg")#, "./images/江六斤反.jpg,./images/han.jpg +# print(jsonString) + +if __name__ == "__main__": + try: + logger.info(f"main.py len of parameter: {len(sys.argv)}") + jsonString = "" + if len(sys.argv) > 3: + logger.info(f"{sys.argv[1]}") + logger.info(f"{sys.argv[2]}") + logger.info(f"{sys.argv[3]}") + jsonString = extractIdCardInfo(int(sys.argv[1]), sys.argv[2], sys.argv[3]) + elif len(sys.argv) > 1: + logger.info(f"python 脚本里的接收到的参数是:") + logger.info(f"{sys.argv[1]}") + logger.info(f"开始执行sys.stdin.read") + input_data = sys.stdin.read() + logger.info(f"len(input_data):{len(input_data)}") + split_data = input_data.split(os.linesep) + data1 = "" + data2 = "" + if 2 == len(split_data): + logger.info("2 == len(split_data)") + data1 = split_data[0] + data2 = split_data[1] + elif 1 == len(split_data): + data1 = split_data[0] + jsonString = extractIdCardInfo(int(sys.argv[1]), data1, data2) + print(jsonString) + except KeyboardInterrupt: + logger.error("KeyboardInterrupt") + + except IndexError: + # 如果参数过长,捕获 IndexError 异常并进行处理 + logger.error("参数过长,未指定足够的参数") + + except OverflowError: + # 如果发生了 OverflowError 异常,捕获并进行相应的处理 + logger.error("命令行参数过长,导致溢出错误") + + except EOFError: + # 如果达到输入流的末尾,捕获 EOFError 异常并进行处理 + logger.error("已经到达输入流的末尾") + + except Exception as e: + # 如果发生了其他异常,捕获并进行相应的处理 + logger.error("发生了异常:", e) + diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/maincopydet.py b/AndroidOCRTool/app/src/main/assets/OCRPython/maincopydet.py new file mode 100644 index 0000000..4824140 --- /dev/null +++ b/AndroidOCRTool/app/src/main/assets/OCRPython/maincopydet.py @@ -0,0 +1,169 @@ +# -*- coding: utf-8 -*- +import sys +import io +import os +from paddleocr import PaddleOCR +import time +from configs.basic_config import logger +from extractor.identitycard_extractor import IdentityCardExtractor +import base64 +import json + +sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8') + + +def extractIdCardInfo(type: int, filePath1: str, filePath2: str) -> str: + if (0 == type): + return extractIdCardInfoByPath(filePath1, filePath2) + elif (1 == type): + return extractIdCardInfoByBase64Data(filePath1, filePath2) + else: + pass + + +def extractIdCardInfoByPath(filePath1: str, filePath2: str) -> str: + # ocr = PaddleOCR(use_angle_cls=True, lang="ch", det_model_dir="./models/ch_PP-OCRv3_det_slim_infer", + # rec_model_dir="./models/ch_PP-OCRv3_rec_slim_infer", + # cls_model_dir="./models/ch_ppocr_mobile_v2.0_cls_slim_infer") # need to run only once to download and load model into memory + # ocr = PaddleOCR(use_angle_cls=True, lang="ch", det_model_dir="./models/infer/ch_PP-OCRv3_det_infer", + # rec_model_dir="./models/infer/ch_PP-OCRv3_rec_infer", + # cls_model_dir="./models/infer/ch_ppocr_mobile_v2.0_cls_infer") + ocr = PaddleOCR(use_angle_cls=True, lang="ch") + text = "" + start_time = time.time() # 记录结束时间 + jsonString = "" + try: + if os.path.exists(filePath1): + result = ocr.ocr(filePath1, cls=False) + for idx in range(len(result)): + res = result[idx] + for line in res: + text += (line[1][0] + '\n') + else: + logger.error(f"{filePath1} doesn't exist") + + if os.path.exists(filePath2): + result = ocr.ocr(filePath2, cls=False) + for idx in range(len(result)): + res = result[idx] + for line in res: + text += (line[1][0] + '\n') + else: + logger.error(f"{filePath2} doesn't exist") + except Exception as e: + logger.error(e) + print(e) + + if 0 != len(text): + logger.info(f"text:{text}") + extractor = IdentityCardExtractor() + tempdict = extractor.extract_textbyPaddle(text) + jsonString = json.dumps(tempdict, ensure_ascii=False) + end_time = time.time() # 记录结束时间 + execution_time = end_time - start_time # 计算执行时间 + logger.info(f"extractIdCardInfoByBase64Data 耗时{execution_time}秒") + else: + logger.error(f"{filePath1},{filePath2} can't be recognized") + return jsonString + + +def extractIdCardInfoByBase64Data(base64data1: str, base64Data2: str) -> str: + logger.info(f"extractIdCardInfoByBase64Data") + start_time = time.time() # 记录结束时间 + jsonString = "" + try: + if 0 != len(base64data1): + logger.info(f"not base64data1.empty()") + image_data1 = base64.b64decode(base64data1) + with open("file1.png", "wb") as file: + file.write(image_data1) + + if 0 != len(base64Data2): + logger.info(f"not base64Data2.empty()") + image_data2 = base64.b64decode(base64Data2) + with open("file2.png", "wb") as file: + file.write(image_data2) + + if os.path.exists("file1.png") and os.path.exists("file2.png"): + logger.info(f"file1.png and file2.png exist") + jsonString = extractIdCardInfoByPath("file1.png", "file2.png") + os.remove("file1.png") + os.remove("file2.png") + elif os.path.exists("file1.png"): + logger.info(f"file1.png exist") + jsonString = extractIdCardInfoByPath("file1.png", "") + os.remove("file1.png") + elif os.path.exists("file2.png"): + logger.info(f"file2.png exist") + jsonString = extractIdCardInfoByPath("file2.png", "") + os.remove("file2.png") + except Exception as e: + logger.error(e) + + end_time = time.time() # 记录结束时间 + execution_time = end_time - start_time # 计算执行时间 + logger.info(f"extractIdCardInfoByBase64Data 耗时{execution_time}秒") + return jsonString + + +# with open('/Users/wangvivi/Desktop/Code/ocrtest/images/id_card.JPG', 'rb') as image_file: +# base64_image_string = base64.b64encode(image_file.read()).decode('utf-8') +# +# jsonString = extractIdCardInfoByBase64Data(base64_image_string,"") +# jsonString = extractIdCardInfoByBase64Data("/Users/wangvivi/Desktop/Code/ocrtest/images/2.jpg","/Users/wangvivi/Desktop/Code/ocrtest/images/1.jpg") +# print(jsonString) +# # +# jsonString = extractIdCardInfoByPath("./images/han.jpg","") +# logger.info(f"test") +jsonString = extractIdCardInfoByPath("./images/43302919641130423X_202311061953_front.jpg","./images/43302919641130423X_202311061953_back.jpg")#, "./images/江六斤反.jpg,./images/han.jpg +print(jsonString) +# +# if __name__ == "__main__": +# try: +# logger.info(f"main.py len of parameter: {len(sys.argv)}") +# jsonString = "" +# if len(sys.argv) > 3: +# logger.info(f"{sys.argv[1]}") +# logger.info(f"{sys.argv[2]}") +# logger.info(f"{sys.argv[3]}") +# jsonString = extractIdCardInfo(int(sys.argv[1]), sys.argv[2], sys.argv[3]) +# elif len(sys.argv) > 1: +# logger.info(f"python 脚本里的接收到的参数是:") +# logger.info(f"{sys.argv[1]}") +# logger.info(f"开始执行sys.stdin.read") +# input_data = sys.stdin.read() +# logger.info(f"len(input_data):{len(input_data)}") +# # imageData = base64.b64decode(input_data) +# # logger.info(f"image_data1:{image_data1}") +# #logger.info(f"input_data:{input_data}") +# split_data = input_data.split(os.linesep) +# data1 = "" +# data2 = "" +# if 2 == len(split_data): +# logger.info("2 == len(split_data)") +# data1 = split_data[0] +# data2 = split_data[1] +# elif 1 == len(split_data): +# data1 = split_data[0] +# # logger.info(data1) +# # logger.info(data2) +# jsonString = extractIdCardInfo(int(sys.argv[1]), data1, data2) +# print(jsonString) +# except KeyboardInterrupt: +# logger.error("KeyboardInterrupt") +# +# except IndexError: +# # 如果参数过长,捕获 IndexError 异常并进行处理 +# logger.error("参数过长,未指定足够的参数") +# +# except OverflowError: +# # 如果发生了 OverflowError 异常,捕获并进行相应的处理 +# logger.error("命令行参数过长,导致溢出错误") +# +# except EOFError: +# # 如果达到输入流的末尾,捕获 EOFError 异常并进行处理 +# logger.error("已经到达输入流的末尾") +# +# except Exception as e: +# # 如果发生了其他异常,捕获并进行相应的处理 +# logger.error("发生了异常:", e) diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/models/.DS_Store b/AndroidOCRTool/app/src/main/assets/OCRPython/models/.DS_Store new file mode 100644 index 0000000..fbad372 Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/models/.DS_Store differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/models/ch_PP-OCRv3_det_infer.tar b/AndroidOCRTool/app/src/main/assets/OCRPython/models/ch_PP-OCRv3_det_infer.tar new file mode 100644 index 0000000..0d740a6 Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/models/ch_PP-OCRv3_det_infer.tar differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/models/ch_PP-OCRv3_det_infer/inference.pdiparams b/AndroidOCRTool/app/src/main/assets/OCRPython/models/ch_PP-OCRv3_det_infer/inference.pdiparams new file mode 100644 index 0000000..b33c3b0 Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/models/ch_PP-OCRv3_det_infer/inference.pdiparams differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/models/ch_PP-OCRv3_det_infer/inference.pdiparams.info b/AndroidOCRTool/app/src/main/assets/OCRPython/models/ch_PP-OCRv3_det_infer/inference.pdiparams.info new file mode 100644 index 0000000..622d87b Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/models/ch_PP-OCRv3_det_infer/inference.pdiparams.info differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/models/ch_PP-OCRv3_det_infer/inference.pdmodel b/AndroidOCRTool/app/src/main/assets/OCRPython/models/ch_PP-OCRv3_det_infer/inference.pdmodel new file mode 100644 index 0000000..d09eb79 Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/models/ch_PP-OCRv3_det_infer/inference.pdmodel differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/models/ch_PP-OCRv3_det_slim_infer/inference.pdiparams b/AndroidOCRTool/app/src/main/assets/OCRPython/models/ch_PP-OCRv3_det_slim_infer/inference.pdiparams new file mode 100644 index 0000000..64a4c4e Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/models/ch_PP-OCRv3_det_slim_infer/inference.pdiparams differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/models/ch_PP-OCRv3_det_slim_infer/inference.pdiparams.info b/AndroidOCRTool/app/src/main/assets/OCRPython/models/ch_PP-OCRv3_det_slim_infer/inference.pdiparams.info new file mode 100644 index 0000000..d4f37b1 Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/models/ch_PP-OCRv3_det_slim_infer/inference.pdiparams.info differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/models/ch_PP-OCRv3_det_slim_infer/inference.pdmodel b/AndroidOCRTool/app/src/main/assets/OCRPython/models/ch_PP-OCRv3_det_slim_infer/inference.pdmodel new file mode 100644 index 0000000..f1add9e Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/models/ch_PP-OCRv3_det_slim_infer/inference.pdmodel differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/models/ch_PP-OCRv3_rec_slim_infer.tar b/AndroidOCRTool/app/src/main/assets/OCRPython/models/ch_PP-OCRv3_rec_slim_infer.tar new file mode 100644 index 0000000..0fabf14 Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/models/ch_PP-OCRv3_rec_slim_infer.tar differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/models/ch_PP-OCRv3_rec_slim_infer/inference.pdiparams b/AndroidOCRTool/app/src/main/assets/OCRPython/models/ch_PP-OCRv3_rec_slim_infer/inference.pdiparams new file mode 100644 index 0000000..aa6fc16 Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/models/ch_PP-OCRv3_rec_slim_infer/inference.pdiparams differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/models/ch_PP-OCRv3_rec_slim_infer/inference.pdiparams.info b/AndroidOCRTool/app/src/main/assets/OCRPython/models/ch_PP-OCRv3_rec_slim_infer/inference.pdiparams.info new file mode 100644 index 0000000..c86a0b2 Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/models/ch_PP-OCRv3_rec_slim_infer/inference.pdiparams.info differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/models/ch_PP-OCRv3_rec_slim_infer/inference.pdmodel b/AndroidOCRTool/app/src/main/assets/OCRPython/models/ch_PP-OCRv3_rec_slim_infer/inference.pdmodel new file mode 100644 index 0000000..cf19a4a Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/models/ch_PP-OCRv3_rec_slim_infer/inference.pdmodel differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/models/ch_ppocr_mobile_v2.0_cls_slim_infer.tar b/AndroidOCRTool/app/src/main/assets/OCRPython/models/ch_ppocr_mobile_v2.0_cls_slim_infer.tar new file mode 100644 index 0000000..b526436 Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/models/ch_ppocr_mobile_v2.0_cls_slim_infer.tar differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/models/ch_ppocr_mobile_v2.0_cls_slim_infer/inference.pdiparams b/AndroidOCRTool/app/src/main/assets/OCRPython/models/ch_ppocr_mobile_v2.0_cls_slim_infer/inference.pdiparams new file mode 100644 index 0000000..e3b3215 Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/models/ch_ppocr_mobile_v2.0_cls_slim_infer/inference.pdiparams differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/models/ch_ppocr_mobile_v2.0_cls_slim_infer/inference.pdiparams.info b/AndroidOCRTool/app/src/main/assets/OCRPython/models/ch_ppocr_mobile_v2.0_cls_slim_infer/inference.pdiparams.info new file mode 100644 index 0000000..341c265 Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/models/ch_ppocr_mobile_v2.0_cls_slim_infer/inference.pdiparams.info differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/models/ch_ppocr_mobile_v2.0_cls_slim_infer/inference.pdmodel b/AndroidOCRTool/app/src/main/assets/OCRPython/models/ch_ppocr_mobile_v2.0_cls_slim_infer/inference.pdmodel new file mode 100644 index 0000000..7e0540f Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/models/ch_ppocr_mobile_v2.0_cls_slim_infer/inference.pdmodel differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/models/ch_ppocr_mobile_v2.0_cls_slim_infer/paddle_infer.log b/AndroidOCRTool/app/src/main/assets/OCRPython/models/ch_ppocr_mobile_v2.0_cls_slim_infer/paddle_infer.log new file mode 100644 index 0000000..7c95120 --- /dev/null +++ b/AndroidOCRTool/app/src/main/assets/OCRPython/models/ch_ppocr_mobile_v2.0_cls_slim_infer/paddle_infer.log @@ -0,0 +1,97 @@ +➜ PaddleOCR git:(dygraph) ✗ python deploy/slim/quantization/export_model.py -c configs/cls/cls_mv3.yml -o Global.checkpoints=cls_qat/best_accuracy Global.save_model_dir=./cls_qat_inference_model +[2021/01/13 21:11:21] root INFO: Architecture : +[2021/01/13 21:11:21] root INFO: Backbone : +[2021/01/13 21:11:21] root INFO: model_name : small +[2021/01/13 21:11:21] root INFO: name : MobileNetV3 +[2021/01/13 21:11:21] root INFO: scale : 0.35 +[2021/01/13 21:11:21] root INFO: Head : +[2021/01/13 21:11:21] root INFO: class_dim : 2 +[2021/01/13 21:11:21] root INFO: name : ClsHead +[2021/01/13 21:11:21] root INFO: Neck : None +[2021/01/13 21:11:21] root INFO: Transform : None +[2021/01/13 21:11:21] root INFO: algorithm : CLS +[2021/01/13 21:11:21] root INFO: model_type : cls +[2021/01/13 21:11:21] root INFO: Eval : +[2021/01/13 21:11:21] root INFO: dataset : +[2021/01/13 21:11:21] root INFO: data_dir : ./train_data/cls +[2021/01/13 21:11:21] root INFO: label_file_list : ['./train_data/cls/test.txt'] +[2021/01/13 21:11:21] root INFO: name : SimpleDataSet +[2021/01/13 21:11:21] root INFO: transforms : +[2021/01/13 21:11:21] root INFO: DecodeImage : +[2021/01/13 21:11:21] root INFO: channel_first : False +[2021/01/13 21:11:21] root INFO: img_mode : BGR +[2021/01/13 21:11:21] root INFO: ClsLabelEncode : None +[2021/01/13 21:11:21] root INFO: ClsResizeImg : +[2021/01/13 21:11:21] root INFO: image_shape : [3, 48, 192] +[2021/01/13 21:11:21] root INFO: KeepKeys : +[2021/01/13 21:11:21] root INFO: keep_keys : ['image', 'label'] +[2021/01/13 21:11:21] root INFO: loader : +[2021/01/13 21:11:21] root INFO: batch_size_per_card : 512 +[2021/01/13 21:11:21] root INFO: drop_last : False +[2021/01/13 21:11:21] root INFO: num_workers : 4 +[2021/01/13 21:11:21] root INFO: shuffle : False +[2021/01/13 21:11:21] root INFO: Global : +[2021/01/13 21:11:21] root INFO: cal_metric_during_train : True +[2021/01/13 21:11:21] root INFO: checkpoints : cls_qat/best_accuracy +[2021/01/13 21:11:21] root INFO: debug : False +[2021/01/13 21:11:21] root INFO: distributed : False +[2021/01/13 21:11:21] root INFO: epoch_num : 100 +[2021/01/13 21:11:21] root INFO: eval_batch_step : [0, 1000] +[2021/01/13 21:11:21] root INFO: infer_img : doc/imgs_words_en/word_10.png +[2021/01/13 21:11:21] root INFO: label_list : ['0', '180'] +[2021/01/13 21:11:21] root INFO: log_smooth_window : 20 +[2021/01/13 21:11:21] root INFO: pretrained_model : None +[2021/01/13 21:11:21] root INFO: print_batch_step : 10 +[2021/01/13 21:11:21] root INFO: save_epoch_step : 3 +[2021/01/13 21:11:21] root INFO: save_inference_dir : None +[2021/01/13 21:11:21] root INFO: save_model_dir : ./cls_qat_inference_model +[2021/01/13 21:11:21] root INFO: use_gpu : True +[2021/01/13 21:11:21] root INFO: use_visualdl : False +[2021/01/13 21:11:21] root INFO: Loss : +[2021/01/13 21:11:21] root INFO: name : ClsLoss +[2021/01/13 21:11:21] root INFO: Metric : +[2021/01/13 21:11:21] root INFO: main_indicator : acc +[2021/01/13 21:11:21] root INFO: name : ClsMetric +[2021/01/13 21:11:21] root INFO: Optimizer : +[2021/01/13 21:11:21] root INFO: beta1 : 0.9 +[2021/01/13 21:11:21] root INFO: beta2 : 0.999 +[2021/01/13 21:11:21] root INFO: lr : +[2021/01/13 21:11:21] root INFO: learning_rate : 0.001 +[2021/01/13 21:11:21] root INFO: name : Cosine +[2021/01/13 21:11:21] root INFO: name : Adam +[2021/01/13 21:11:21] root INFO: regularizer : +[2021/01/13 21:11:21] root INFO: factor : 0 +[2021/01/13 21:11:21] root INFO: name : L2 +[2021/01/13 21:11:21] root INFO: PostProcess : +[2021/01/13 21:11:21] root INFO: name : ClsPostProcess +[2021/01/13 21:11:21] root INFO: Train : +[2021/01/13 21:11:21] root INFO: dataset : +[2021/01/13 21:11:21] root INFO: data_dir : ./train_data/cls +[2021/01/13 21:11:21] root INFO: label_file_list : ['./train_data/cls/train.txt'] +[2021/01/13 21:11:21] root INFO: name : SimpleDataSet +[2021/01/13 21:11:21] root INFO: transforms : +[2021/01/13 21:11:21] root INFO: DecodeImage : +[2021/01/13 21:11:21] root INFO: channel_first : False +[2021/01/13 21:11:21] root INFO: img_mode : BGR +[2021/01/13 21:11:21] root INFO: ClsLabelEncode : None +[2021/01/13 21:11:21] root INFO: RecAug : +[2021/01/13 21:11:21] root INFO: use_tia : False +[2021/01/13 21:11:21] root INFO: RandAugment : None +[2021/01/13 21:11:21] root INFO: ClsResizeImg : +[2021/01/13 21:11:21] root INFO: image_shape : [3, 48, 192] +[2021/01/13 21:11:21] root INFO: KeepKeys : +[2021/01/13 21:11:21] root INFO: keep_keys : ['image', 'label'] +[2021/01/13 21:11:21] root INFO: loader : +[2021/01/13 21:11:21] root INFO: batch_size_per_card : 512 +[2021/01/13 21:11:21] root INFO: drop_last : True +[2021/01/13 21:11:21] root INFO: num_workers : 8 +[2021/01/13 21:11:21] root INFO: shuffle : True +[2021/01/13 21:11:21] root INFO: train with paddle 0.0.0 and device CUDAPlace(0) +W0113 21:11:21.374989 83577 device_context.cc:320] Please NOTE: device: 0, GPU Compute Capability: 7.0, Driver API Version: 11.0, Runtime API Version: 10.0 +W0113 21:11:21.399595 83577 device_context.cc:330] device: 0, cuDNN Version: 7.6. +[2021/01/13 21:11:32] root INFO: resume from cls_qat/best_accuracy +[2021/01/13 21:11:32] root INFO: Initialize indexs of datasets:['./train_data/cls/test.txt'] +eval model:: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 803/803 [04:26<00:00, 3.02it/s] +[2021/01/13 21:16:00] root INFO: metric eval *************** +[2021/01/13 21:16:00] root INFO: acc:0.9449500187460135 +[2021/01/13 21:16:00] root INFO: fps:1979.0335715470349 diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/models/infer/.DS_Store b/AndroidOCRTool/app/src/main/assets/OCRPython/models/infer/.DS_Store new file mode 100644 index 0000000..719e5c7 Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/models/infer/.DS_Store differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/models/infer/ch_PP-OCRv3_det_infer.tar b/AndroidOCRTool/app/src/main/assets/OCRPython/models/infer/ch_PP-OCRv3_det_infer.tar new file mode 100644 index 0000000..0d740a6 Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/models/infer/ch_PP-OCRv3_det_infer.tar differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/models/infer/ch_PP-OCRv3_det_infer/inference.pdiparams b/AndroidOCRTool/app/src/main/assets/OCRPython/models/infer/ch_PP-OCRv3_det_infer/inference.pdiparams new file mode 100644 index 0000000..b33c3b0 Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/models/infer/ch_PP-OCRv3_det_infer/inference.pdiparams differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/models/infer/ch_PP-OCRv3_det_infer/inference.pdiparams.info b/AndroidOCRTool/app/src/main/assets/OCRPython/models/infer/ch_PP-OCRv3_det_infer/inference.pdiparams.info new file mode 100644 index 0000000..622d87b Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/models/infer/ch_PP-OCRv3_det_infer/inference.pdiparams.info differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/models/infer/ch_PP-OCRv3_det_infer/inference.pdmodel b/AndroidOCRTool/app/src/main/assets/OCRPython/models/infer/ch_PP-OCRv3_det_infer/inference.pdmodel new file mode 100644 index 0000000..d09eb79 Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/models/infer/ch_PP-OCRv3_det_infer/inference.pdmodel differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/models/infer/ch_PP-OCRv3_rec_infer.tar b/AndroidOCRTool/app/src/main/assets/OCRPython/models/infer/ch_PP-OCRv3_rec_infer.tar new file mode 100644 index 0000000..2382063 Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/models/infer/ch_PP-OCRv3_rec_infer.tar differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/models/infer/ch_PP-OCRv3_rec_infer/inference.pdiparams b/AndroidOCRTool/app/src/main/assets/OCRPython/models/infer/ch_PP-OCRv3_rec_infer/inference.pdiparams new file mode 100644 index 0000000..5eff539 Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/models/infer/ch_PP-OCRv3_rec_infer/inference.pdiparams differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/models/infer/ch_PP-OCRv3_rec_infer/inference.pdiparams.info b/AndroidOCRTool/app/src/main/assets/OCRPython/models/infer/ch_PP-OCRv3_rec_infer/inference.pdiparams.info new file mode 100644 index 0000000..9e133bf Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/models/infer/ch_PP-OCRv3_rec_infer/inference.pdiparams.info differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/models/infer/ch_PP-OCRv3_rec_infer/inference.pdmodel b/AndroidOCRTool/app/src/main/assets/OCRPython/models/infer/ch_PP-OCRv3_rec_infer/inference.pdmodel new file mode 100644 index 0000000..585fcdc Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/models/infer/ch_PP-OCRv3_rec_infer/inference.pdmodel differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/models/infer/ch_ppocr_mobile_v2.0_cls_infer.tar b/AndroidOCRTool/app/src/main/assets/OCRPython/models/infer/ch_ppocr_mobile_v2.0_cls_infer.tar new file mode 100644 index 0000000..e85372f Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/models/infer/ch_ppocr_mobile_v2.0_cls_infer.tar differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/models/infer/ch_ppocr_mobile_v2.0_cls_infer/inference.pdiparams b/AndroidOCRTool/app/src/main/assets/OCRPython/models/infer/ch_ppocr_mobile_v2.0_cls_infer/inference.pdiparams new file mode 100644 index 0000000..3449efb Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/models/infer/ch_ppocr_mobile_v2.0_cls_infer/inference.pdiparams differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/models/infer/ch_ppocr_mobile_v2.0_cls_infer/inference.pdiparams.info b/AndroidOCRTool/app/src/main/assets/OCRPython/models/infer/ch_ppocr_mobile_v2.0_cls_infer/inference.pdiparams.info new file mode 100644 index 0000000..f31a157 Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/models/infer/ch_ppocr_mobile_v2.0_cls_infer/inference.pdiparams.info differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/models/infer/ch_ppocr_mobile_v2.0_cls_infer/inference.pdmodel b/AndroidOCRTool/app/src/main/assets/OCRPython/models/infer/ch_ppocr_mobile_v2.0_cls_infer/inference.pdmodel new file mode 100644 index 0000000..b90c155 Binary files /dev/null and b/AndroidOCRTool/app/src/main/assets/OCRPython/models/infer/ch_ppocr_mobile_v2.0_cls_infer/inference.pdmodel differ diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/paddleOcrTest.py b/AndroidOCRTool/app/src/main/assets/OCRPython/paddleOcrTest.py new file mode 100644 index 0000000..5f9a437 --- /dev/null +++ b/AndroidOCRTool/app/src/main/assets/OCRPython/paddleOcrTest.py @@ -0,0 +1,32 @@ +from paddleocr import PaddleOCR, draw_ocr +import time + +from extractor.identitycard_extractor import IdentityCardExtractor + +# Paddleocr目前支持的多语言语种可以通过修改lang参数进行切换 +# 例如`ch`, `en`, `fr`, `german`, `korean`, `japan` + +stat_time = time.time() +ocr = PaddleOCR(use_angle_cls=True, lang="ch") # need to run only once to download and load model into memory +img_path = './images/内蒙古1正.png' +result = ocr.ocr(img_path, cls=True) +for idx in range(len(result)): + res = result[idx] + for line in res: + print(line) + +end_time = time.time() +print(end_time - stat_time) + +# 显示结果 +# 如果本地没有simfang.ttf,可以在doc/fonts目录下下载 +from PIL import Image + +result = result[0] +image = Image.open(img_path).convert('RGB') +boxes = [line[0] for line in result] +txts = [line[1][0] for line in result] +scores = [line[1][1] for line in result] +im_show = draw_ocr(image, boxes, txts, scores, font_path='doc/fonts/simfang.ttf') +im_show = Image.fromarray(im_show) +im_show.save('result.jpg') diff --git a/AndroidOCRTool/app/src/main/assets/OCRPython/validate.py b/AndroidOCRTool/app/src/main/assets/OCRPython/validate.py new file mode 100644 index 0000000..c543f49 --- /dev/null +++ b/AndroidOCRTool/app/src/main/assets/OCRPython/validate.py @@ -0,0 +1,103 @@ +# -*- coding: utf-8 -*- +import sys +import io +import os +from paddleocr import PaddleOCR +import time +from configs.basic_config import logger +from extractor.identitycard_extractor import IdentityCardExtractor +import base64 +import json + +sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8') +def extractIdCardInfo(type:int, filePath1: str, filePath2: str)->str: + if (0 == type): + return extractIdCardInfoByPath(filePath1, filePath2) + elif (1 == type): + return extractIdCardInfoByBase64Data(filePath1,filePath2) + else: + pass + +def extractIdCardInfoByPath(filePath1: str, filePath2: str)->str: + ocr = PaddleOCR(use_angle_cls=True, lang="ch") # need to run only once to download and load model into memory + text = "" + start_time = time.time() # 记录结束时间 + jsonString = "" + try: + if os.path.exists(filePath1): + result = ocr.ocr(filePath1, cls=False) + for idx in range(len(result)): + res = result[idx] + for line in res: + text += (line[1][0] + '\n') + + if os.path.exists(filePath2): + result = ocr.ocr(filePath2, cls=False) + for idx in range(len(result)): + res = result[idx] + for line in res: + text += (line[1][0] + '\n') + except Exception as e: + logger.error(e) + print(e) + + if 0 != len(text): + logger.info(f"text:{text}") + extractor = IdentityCardExtractor() + tempdict = extractor.extract_textbyPaddle(text) + jsonString = json.dumps(tempdict, ensure_ascii=False) + end_time = time.time() # 记录结束时间 + execution_time = end_time - start_time # 计算执行时间 + logger.info(f"extractIdCardInfoByBase64Data 耗时{execution_time}秒") + return jsonString + +def extractIdCardInfoByBase64Data(base64data1:str, base64Data2: str)->str: + logger.info(f"extractIdCardInfoByBase64Data") + start_time = time.time() # 记录结束时间 + jsonString = "" + try: + if 0!=len(base64data1): + logger.info(f"not base64data1.empty()") + image_data1 = base64.b64decode(base64data1) + with open("file1.png", "wb") as file: + file.write(image_data1) + + if 0!=len(base64Data2): + logger.info(f"not base64Data2.empty()") + image_data2 = base64.b64decode(base64Data2) + with open("file2.png", "wb") as file: + file.write(image_data2) + + if os.path.exists("file1.png") and os.path.exists("file2.png"): + logger.info(f"file1.png and file2.png exist") + jsonString = extractIdCardInfoByPath("file1.png","file2.png") + os.remove("file1.png") + os.remove("file2.png") + elif os.path.exists("file1.png"): + logger.info(f"file1.png exist") + jsonString = extractIdCardInfoByPath("file1.png","") + os.remove("file1.png") + elif os.path.exists("file2.png"): + logger.info(f"file2.png exist") + jsonString = extractIdCardInfoByPath("file2.png","") + os.remove("file2.png") + except Exception as e: + logger.error(e) + + end_time = time.time() # 记录结束时间 + execution_time = end_time - start_time # 计算执行时间 + logger.info(f"extractIdCardInfoByBase64Data 耗时{execution_time}秒") + return jsonString + +# with open('/Users/wangvivi/Desktop/Code/ocrtest/images/id_card.JPG', 'rb') as image_file: +# base64_image_string = base64.b64encode(image_file.read()).decode('utf-8') +# +# jsonString = extractIdCardInfoByBase64Data(base64_image_string,"") +# jsonString = extractIdCardInfoByBase64Data("/Users/wangvivi/Desktop/Code/ocrtest/images/2.jpg","/Users/wangvivi/Desktop/Code/ocrtest/images/1.jpg") +# print(jsonString) +# # +jsonString = extractIdCardInfoByPath("./images/子哈孜反.jpg","./images/子哈孜正.jpg") +print(jsonString) +# jsonString = extractIdCardInfoByPath("/Users/wangvivi/Desktop/Code/ocrtest/images/2.jpg","/Users/wangvivi/Desktop/Code/ocrtest/images/1.jpg") +# print(jsonString) + diff --git a/AndroidOCRTool/app/src/main/assets/protocol/account_protocol.txt b/AndroidOCRTool/app/src/main/assets/protocol/account_protocol.txt new file mode 100644 index 0000000..93bb60c --- /dev/null +++ b/AndroidOCRTool/app/src/main/assets/protocol/account_protocol.txt @@ -0,0 +1,107 @@ +软件许可及服务协议 +【重要须知】 +  +【XXXX有限公司】(如下简称“####”)在此特别提醒用户认真阅读、充分理解本《软件许可及服务协议》(下称“本协议”)。用户应认真阅读、充分理解本协议中各条款,特别涉及免除或者限制####责任、争议解决和法律适用的条款。免除或者限制责任的条款将以粗体标识,您需要重点阅读。请您审慎阅读并选择接受或不接受本协议(未成年人应在法定监护人陪同下阅读)。您的下载、安装、使用本软件以及账号获取和登录等行为将视为对本协议的接受,并同意接受本协议各项条款的约束。 +  +####有权修订本协议,更新后的协议条款将公布于官网或软件,自公布之日起生效。用户可重新下载安装本软件或网站查阅最新版协议条款。在####修改本协议条款后,如果用户不接受修改后的条款,请立即停止使用####提供的“####”软件和服务,用户继续使用####提供的“####”软件和服务将被视为已接受了修改后的协议。 +  +一、总则 +  +1.1. 本协议是您(如下也称“用户”)与####及其运营合作单位(如下简称“合作单位”)之间关于用户下载、安装、使用####“####”软件(下称“本软件”)以及使用####相关服务所订立的协议。 +  +1.2. 本软件及服务是####提供的安装在包括但不限于移动智能终端设备上的软件和服务,为使用该智能终端的用户提供绑定、操作智能产品等服务等。 +  +1.3. 本软件及服务的所有权和运营权均归####所有。 +  +二、软件授权范围 +  +2.1. ####就本软件给予用户一项个人的、不可转让、不可转授权以及非独占性的许可。 +  +2.2. 用户可以为非商业目的在单一台移动终端设备上安装、使用、显示、运行本软件。但用户不得为商业运营目的安装、使用、运行本软件,不可以对本软件或者本软件运行过程中释放到任何终端设备内存中的数据及本软件运行过程中客户端与服务器端的交互数据进行复制、更改、修改、挂接运行或创作任何衍生作品,形式包括但不限于使用插件、外挂或非经授权的第三方工具/服务接入本软件和相关系统。如果需要进行商业性的销售、复制和散发,例如软件预装和捆绑,必须获得####的书面授权和许可。 +  +2.3. 用户不得未经####许可,将本软件安装在未经####明示许可的其他终端设备上,包括但不限于机顶盒、游戏机、电视机、DVD机等。 +  +2.4. 用户可以为使用本软件及服务的目的复制本软件的一个副本,仅用作备份。备份副本必须包含原软件中含有的所有著作权信息。 +  +2.5. 除本《协议》明示授权外,####未授权给用户其他权利,若用户使用其他权利时须另外取得####的书面同意。 +  +三、软件的获取、安装、升级 +  +3.1. 用户应当按照####的指定网站或指定方式下载安装本软件产品。谨防在非指定网站下载本软件,以免移动终端设备感染能破坏用户数据和获取用户隐私信息的恶意程序。如果用户从未经####授权的第三方获取本软件或与本软件名称相同的安装程序,####无法保证该软件能够正常使用,并对因此给您造成的损失不予负责。 +  +3.2. 用户必须选择与所安装终端设备相匹配的本软件版本,否则,由于软件与设备型号不相匹配所导致的任何软件问题、设备问题或损害,均由用户自行承担。 +  +3.3. 为了改善用户体验、完善服务内容,####有权不时地为您提供本软件替换、修改、升级版本,也有权为替换、修改或升级收取费用,但将收费提前征得您的同意。本软件为用户默认开通“升级提示”功能,视用户使用的软件版本差异,####提供给用户自行选择是否需要开通此功能。软件新版本发布后,####不保证旧版本软件的继续可用。 +  +四、使用规范 +  +4.1. 用户在遵守法律及本《协议》的前提下可依本《协议》使用本软件及服务,用户不得实施如下行为: +  +4.1.1. 删除本软件及其他副本上一切关于版权的信息,以及修改、删除或避开本软件为保护知识产权而设置的技术措施; +4.1.2. 对本软件进行反向工程,如反汇编、反编译或者其他试图获得本软件的源代码; +4.1.3. 通过修改或伪造软件运行中的指令、数据,增加、删减、变动软件的功能或运行效果,或者将用于上述用途的软件、方法进行运营或向公众传播,无论这些行为是否为商业目的; +4.1.4. 使用本软件进行任何危害网络安全的行为,包括但不限于:使用未经许可的数据或进入未经许可的服务器/账户;未经允许进入公众网络或者他人操作系统并删除、修改、增加存储信息;未经许可企图探查、扫描、测试本软件的系统或网络的弱点或其它实施破坏网络安全的行为; 企图干涉、破坏本软件系统或网站的正常运行,故意传播恶意程序或病毒以及其他破坏干扰正常网络信息服务的行为;伪造TCP/IP数据包名称或部分名称; +4.1.5. 用户通过非####公司开发、授权或认可的第三方兼容软件、系统登录或使用本软件及服务,或制作、发布、传播上述工具; +4.1.6. 未经####书面同意,用户对软件及其中的信息擅自实施包括但不限于下列行为:使用、出租、出借、复制、修改、链接、转载、汇编、发表、出版,建立镜像站点、擅自借助本软件发展与之有关的衍生产品、作品、服务、插件、外挂、兼容、互联等; +4.1.7. 利用本软件发表、传送、传播、储存违反当地法律法规的内容; +4.1.8. 利用本软件发表、传送、传播、储存侵害他人知识产权、商业秘密等合法权利的内容; +4.1.9. 利用本软件批量发表、传送、传播广告信息及垃圾信息; +4.1.10. 其他以任何不合法的方式、为任何不合法的目的、或以任何与本协议许可使用不一致的方式使用本软件和####提供的其他服务; +4.2. 信息发布规范 +  +4.2.1.您可使用本软件发表属于您原创或您有权发表的观点看法、数据、文字、信息、用户名、图片、照片、个人信息、音频、视频文件、链接等信息内容。您必须保证,您拥有您所上传信息内容的知识产权或已获得合法授权,您使用本软件及服务的任何行为未侵犯任何第三方之合法权益。 +4.2.2.您在使用本软件时需遵守当地法律法规要求。 +4.2.3.您在使用本软件时不得利用本软件从事以下行为,包括但不限于: +  +4.2.3.1.制作、复制、发布、传播、储存违反当地法律法规的内容; +  +4.2.3.2.发布、传送、传播、储存侵害他人名誉权、肖像权、知识产权、商业秘密等合法权利的内容; +  +4.2.3.3.虚构事实、隐瞒真相以误导、欺骗他人; +  +4.2.3.4.发表、传送、传播广告信息及垃圾信息; +  +4.2.3.5.从事其他违反当地法律法规的行为。 +  +4.2.4. 未经####许可,您不得在本软件中进行任何诸如发布广告、销售商品的商业行为。 +  +4.3.您理解并同意: +  +4.3.1. ####会对用户是否涉嫌违反上述使用规范做出认定,并根据认定结果中止、终止对您的使用许可或采取其他依本约定可采取的限制措施; +4.3.2. 对于用户使用许可软件时发布的涉嫌违法或涉嫌侵犯他人合法权利或违反本协议的信息,####会直接删除; +4.3.3. 对于用户违反上述使用规范的行为对第三方造成损害的,您需要以自己的名义独立承担法律责任,并应确保####免于因此产生损失或增加费用; +4.3.4.若用户违反有关法律规定或协议约定,使####遭受损失,或受到第三方的索赔,或受到行政管理机关的处罚,用户应当赔偿####因此造成的损失和(或)发生的费用,包括合理的律师费、调查取证费用。 +五、服务风险及免责声明 +  +5.1. 用户必须自行配备移动终端设备上网和使用电信增值业务所需的设备,自行负担个人移动终端设备上网或第三方(包括但不限于电信或移动通信提供商)收取的通讯费、信息费等有关费用。如涉及电信增值服务的,我们建议您与您的电信增值服务提供商确认相关的费用问题。 +  +5.2. 用户因第三方如通讯线路故障、技术问题、网络、移动终端设备故障、系统不稳定性及其他各种不可抗力原因而遭受的一切损失,####及合作单位不承担责任。 +  +5.3. 本软件同大多数互联网软件一样,受包括但不限于用户原因、网络服务质量、社会环境等因素的差异影响,可能受到各种安全问题的侵扰,如他人利用用户的资料,造成现实生活中的骚扰;用户下载安装的其它软件或访问的其他网站中含有“特洛伊木马”等病毒,威胁到用户的终端设备信息和数据的安全,继而影响本软件的正常使用等等。用户应加强信息安全及使用者资料的保护意识,要注意加强密码保护,以免遭致损失和骚扰。 +  +5.4. 因用户使用本软件或要求####提供特定服务时,本软件可能会调用第三方系统或第三方软件支持用户的使用或访问,使用或访问的结果由该第三方提供,####不保证通过第三方系统或第三方软件支持实现的结果的安全性、准确性、有效性及其他不确定的风险,由此若引发的任何争议及损害,####不承担任何责任。 +  +5.5. ####特别提请用户注意,####为了保障公司业务发展和调整的自主权,####公司拥有随时修改或中断服务而不需通知用户的权利,####行使修改或中断服务的权利不需对用户或任何第三方负责。 +  +5.6. 除法律法规有明确规定外,我们将尽最大努力确保软件及其所涉及的技术及信息安全、有效、准确、可靠,但受限于现有技术,用户理解####不能对此进行担保。 +  +5.7. 由于用户因下述任一情况所引起或与此有关的人身伤害或附带的、间接的经济损害赔偿,包括但不限于利润损失、资料损失、业务中断的损害赔偿或其他商业损害赔偿或损失,需由用户自行承担: +  +5.7.1.使用或未能使用许可软件; +5.7.2.第三方未经许可的使用软件或更改用户的数据; +5.7.3.用户使用软件进行的行为产生的费用及损失; +5.7.4.用户对软件的误解; +5.7.5.非因####的原因引起的与软件有关的其他损失。 +5.8. 用户与其他使用软件的用户之间通过软件进行的行为,因您受误导或欺骗而导致或可能导致的任何人身或经济上的伤害或损失,均由过错方依法承担所有责任。 +  +六、知识产权声明 +  +6.1. ####是本软件的知识产权权利人。本软件的一切著作权、商标权、专利权、商业秘密等知识产权,以及与本软件相关的所有信息内容(包括但不限于文字、图片、音 频、视频、图表、界面设计、版面框架、有关数据或电子文档等)均受您所在当地法律法规和相应的国际条约保护,####享有上述知识产权。 +  +6.2 未经####书面同意,用户不得为任何商业或非商业目的自行或许可任何第三方实施、利用、转让上述知识产权,####保留追究上述行为法律责任的权利。 +  +七、协议变更 +  +7.1. ####有权在必要时修改本协议条款,协议条款一旦发生变动,将会在相关页面上公布修改后的协议条款。如果不同意所改动的内容,用户应主动取消此项服务。如果用户继续使用服务,则视为接受协议条款的变动。 +  +7.2. ####和合作公司有权按需要修改或变更所提供的收费服务、收费标准、收费方式、服务费及服务条款。####在提供服务时,可能现在或日后对部分服务的用户开始收取一定的费用如用户拒绝支付该等费用,则不能在收费开始后继续使用相关的服务。####和合作公司将尽最大努力通过电邮或其他方式通知用户有关的修改或变更。 diff --git a/AndroidOCRTool/app/src/main/assets/protocol/privacy_protocol.txt b/AndroidOCRTool/app/src/main/assets/protocol/privacy_protocol.txt new file mode 100644 index 0000000..a9681b4 --- /dev/null +++ b/AndroidOCRTool/app/src/main/assets/protocol/privacy_protocol.txt @@ -0,0 +1,70 @@ +####尊重并保护所有使用服务用户的个人隐私权。为了给您提供更准确、更有个性化的 服务,####会按照本隐私权政策的规定使用和披露您的个人信息。但####将以高 度的勤勉、审慎义务对待这些信息。除本隐私权政策另有规定外,在未征得您事先许可的情况下 ,####不会将这些信息对外披露或向第三方提供。####会不时更新本隐私权政策 。 您在同意####服务使用协议之时,即视为您已经同意本隐私权政策全部内容。本隐私 权政策属于####服务使用协议不可分割的一部分。 + + +1. 适用范围 + +a) 在您注册####帐号时,您根据####要求提供的个人注册信息; + +b) 在您使用####网络服务,或访问####平台网页时,####自动接收并记 录的您的浏览器和计算机上的信息,包括但不限于您的IP地址、浏览器的类型、使用的语言、访 问日期和时间、软硬件特征信息及您需求的网页记录等数据; + +c) ####通过合法途径从商业伙伴处取得的用户个人数据。 + +您了解并同意,以下信息不适用本隐私权政策: + +a) 您在使用####平台提供的搜索服务时输入的关键字信息; + +b) ####收集到的您在####发布的有关信息数据,包括但不限于参与活动、成交 信息及评价详情; + +c) 违反法律规定或违反####规则行为及####已对您采取的措施。 + +2. 信息使用 + +a) ####不会向任何无关第三方提供、出售、出租、分享或交易您的个人信息,除非事先 得到您的许可,或该第三方和####(含####关联公司)单独或共同为您提供服务 ,且在该服务结束后,其将被禁止访问包括其以前能够访问的所有这些资料。 + +b) ####亦不允许任何第三方以任何手段收集、编辑、出售或者无偿传播您的个人信息。 任何####平台用户如从事上述活动,一经发现,####有权立即终止与该用户的服 务协议。 + +c) 为服务用户的目的,####可能通过使用您的个人信息,向您提供您感兴趣的信息,包 括但不限于向您发出产品和服务信息,或者与####合作伙伴共享信息以便他们向您发送 有关其产品和服务的信息(后者需要您的事先同意)。 + +3. 信息披露 在如下情况下,####将依据您的个人意愿或法律的规定全部或部分的披露您的个人信息 : + +a) 经您事先同意,向第三方披露; + +b) 为提供您所要求的产品和服务,而必须和第三方分享您的个人信息; + +c) 根据法律的有关规定,或者行政或司法机构的要求,向第三方或者行政、司法机构披露; + +d) 如您出现违反中国有关法律、法规或者####服务协议或相关规则的情况,需要向第三 方披露; + +e) 如您是适格的知识产权投诉人并已提起投诉,应被投诉人要求,向被投诉人披露,以便双方 处理可能的权利纠纷; + +f) 在####平台上创建的某一交易中,如交易任何一方履行或部分履行了交易义务并提出 信息披露请求的,####有权决定向该用户提供其交易对方的联络方式等必要信息,以促 成交易的完成或纠纷的解决。 + +g) 其它####根据法律、法规或者网站政策认为合适的披露。 + +4. 信息存储和交换 ####收集的有关您的信息和资料将保存在####及(或)其关联公司的服务器上, 这些信息和资料可能传送至您所在国家、地区或####收集信息和资料所在地的境外并在 境外被访问、存储和展示。 + +5. Cookie的使用 + +a) 在您未拒绝接受cookies的情况下,####会在您的计算机上设定或取用cookies ,以便您能登录或使用依赖于cookies的####平台服务或功能。####使用cookies 可为您提供更加周到的个性化服务,包括推广服务。 + +b) 您有权选择接受或拒绝接受cookies。 您可以通过修改浏览器设置的方式拒绝接受cookies。但如果您选择拒绝接受cookies,则您可能 无法登录或使用依赖于cookies的####网络服务或功能。 + +c) 通过####所设cookies所取得的有关信息,将适用本政策。 + +6. 信息安全 + +a) ####帐号均有安全保护功能,请妥善保管您的用户名及密码信息。####将通 过对用户密码进行加密等安全措施确保您的信息不丢失,不被滥用和变造。尽管有前述安全措施 ,但同时也请您注意在信息网络上不存在“完善的安全措施”。 + +b) 在使用####网络服务进行网上交易时,您不可避免的要向交易对方或潜在的交易对方 披露自己的个人信息,如联络方式或者邮政地址。请您妥善保护自己的个人信息,仅在必要的情 形下向他人提供。如您发现自己的个人信息泄密,尤其是####用户名及密码发生泄露, 请您立即联络####客服,以便####采取相应措施。 + +7. 接入的第三方SDK说明 + +a) 友盟统计SDK(com.umeng) + 使用目的: 统计应用运营数据 + 使用范围: 应用运营数据统计 + +8. 敏感信息收集说明 + 我们的产品集成友盟+SDK,友盟+SDK需要收集您的设备Mac地址、唯一设备识别码(IMEI/android ID/IDFA/OPENUDID/GUID、SIM 卡 IMSI 信息)以提供统计分析服务,并通过地理位置校准报表数据准确性,提供基础反作弊能力。 + + + diff --git a/AndroidOCRTool/app/src/main/assets/tips.json b/AndroidOCRTool/app/src/main/assets/tips.json new file mode 100644 index 0000000..969a4c4 --- /dev/null +++ b/AndroidOCRTool/app/src/main/assets/tips.json @@ -0,0 +1,21 @@ +{ + "Code": 0, + "Data": [ + { + "title": "微信公众号", + "content": "获取更多资讯内容,欢迎微信搜索公众号:「我的Android开源之旅」" + }, + { + "title": "关于作者", + "content": "点击关注作者,了解最新动态!
Github
\n知乎
\n掘金
简书
\n思否
\n哔哩哔哩
\n今日头条" + }, + { + "title": "赞助作者", + "content": "你的打赏是我维护的动力,点击此处支持我吧!" + }, + { + "title": "QQ交流群", + "content": "XUI开源交流1号群
XUI开源交流2号群
AndroidGitHub开源交流群
XUpdate官方交流群" + } + ] +} diff --git a/AndroidOCRTool/app/src/main/java/com/xuexiang/templateproject/IdentifyRecognitionParams.java b/AndroidOCRTool/app/src/main/java/com/xuexiang/templateproject/IdentifyRecognitionParams.java new file mode 100644 index 0000000..27eb0f8 --- /dev/null +++ b/AndroidOCRTool/app/src/main/java/com/xuexiang/templateproject/IdentifyRecognitionParams.java @@ -0,0 +1,41 @@ +package com.xuexiang.templateproject; + +public class IdentifyRecognitionParams { + private RecognitionType type; + private String recognitionData1=""; + private String recognitionData2=""; + + public String getRecognitionData1() { + return recognitionData1; + } + + public void setRecognitionData1(String recognitionData1) { + this.recognitionData1 = recognitionData1; + } + + public String getRecognitionData2() { + return recognitionData2; + } + + public void setRecognitionData2(String recognitionData2) { + this.recognitionData2 = recognitionData2; + } + + public int getType() { + return type.ordinal(); + } + + public void setType(RecognitionType type) { + this.type = type; + } + + // Enum for different recognition types + public enum RecognitionType { + //参数带入的是图片路径 + IDENTITY_CARD_PATH , + //参数传入的是图片的base64编码 + IDENTITY_CARD_BASE64_DATA, + INVOICE_PATH, + } + +} diff --git a/AndroidOCRTool/app/src/main/java/com/xuexiang/templateproject/MyApp.java b/AndroidOCRTool/app/src/main/java/com/xuexiang/templateproject/MyApp.java new file mode 100644 index 0000000..b215885 --- /dev/null +++ b/AndroidOCRTool/app/src/main/java/com/xuexiang/templateproject/MyApp.java @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2019 xuexiangjys(xuexiangjys@163.com) + * + * Licensed 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. + * + */ + +package com.xuexiang.templateproject; + +import android.app.Application; +import android.content.Context; + +import androidx.multidex.MultiDex; + +import com.huantansheng.easyphotos.EasyPhotos; + +/** + * @author xuexiang + * @since 2018/11/7 下午1:12 + */ +public class MyApp extends Application { + + @Override + protected void attachBaseContext(Context base) { + super.attachBaseContext(base); + //解决4.x运行崩溃的问题 + + MultiDex.install(this); + } + + @Override + public void onCreate() { + super.onCreate(); + initLibs(); + } + + /** + * 初始化基础库 + */ + private void initLibs() { + EasyPhotos.preLoad(this); + } + + + +} diff --git a/AndroidOCRTool/app/src/main/java/com/xuexiang/templateproject/OCRRecognition.java b/AndroidOCRTool/app/src/main/java/com/xuexiang/templateproject/OCRRecognition.java new file mode 100644 index 0000000..ceb94ca --- /dev/null +++ b/AndroidOCRTool/app/src/main/java/com/xuexiang/templateproject/OCRRecognition.java @@ -0,0 +1,98 @@ +package com.xuexiang.templateproject; + +import android.os.Build; + +import androidx.annotation.RequiresApi; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.List; + +/** + * @author wangvivi + */ +//@Component +public class OCRRecognition { +// private static final Logger logger = LoggerFactory.getLogger(OCRRecognition.class); +// @Value("${recognition.pythonEnv}") + private final String pythonEnv = "/Users/wangvivi/Desktop/MySelf/myenv/bin/python"; +// @Value("${recognition.scriptEnv}") + private final String scriptEnv = "./assets/OCRPython/maincopy.py"; + + @RequiresApi(api = Build.VERSION_CODES.KITKAT) + public String extractInfo(IdentifyRecognitionParams recognitionParams){ + Process proc; + List stringList = new ArrayList<>(); + String lastElement = ""; + try { + System.out.println("开始打印从配置里读取的值:"); + System.out.println(pythonEnv); + System.out.println(scriptEnv); + System.out.println("开始打印从请求里带过来的参数:"); + System.out.println(String.valueOf(recognitionParams.getType())); + System.out.println("参数1的string 是:"); + System.out.println(recognitionParams.getRecognitionData1()); + System.out.println("参数2的string 是:"); + System.out.println(recognitionParams.getRecognitionData2()); + //*, recognitionParams.getRecognitionData1(), recognitionParams.getRecognitionData2()*/ + String[] str = new String[]{pythonEnv,scriptEnv, String.valueOf(recognitionParams.getType())}; + Runtime runtime = Runtime.getRuntime(); + if (runtime == null) { + System.out.println("runtime == null"); + return ""; + } + proc = runtime.exec(str); + System.out.println("proc = runtime.exec(str)"); + OutputStream outputStream = proc.getOutputStream(); + if (!recognitionParams.getRecognitionData1().isEmpty()) { + byte[] input; + input = recognitionParams.getRecognitionData1().getBytes(StandardCharsets.UTF_8); + passParameter(outputStream, input); + } + if (!recognitionParams.getRecognitionData2().isEmpty()) { + outputStream.write(System.lineSeparator().getBytes()); + byte[] input = recognitionParams.getRecognitionData2().getBytes(StandardCharsets.UTF_8); + passParameter(outputStream, input); + } + outputStream.flush(); + outputStream.close(); + System.out.println("outputStream.close()"); + BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream(), StandardCharsets.UTF_8)); + System.out.println("BufferedReader in = new BufferedReade"); + String line; + while ((line = in.readLine()) != null) { + System.out.println(line); + stringList.add(line); + } + proc.waitFor(); + in.close(); + } catch (Exception e) { + System.out.println(e.getMessage()); + } + 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; + } + } + +} + + diff --git a/AndroidOCRTool/app/src/main/java/com/xuexiang/templateproject/activity/MainActivity.java b/AndroidOCRTool/app/src/main/java/com/xuexiang/templateproject/activity/MainActivity.java new file mode 100644 index 0000000..c87ec8a --- /dev/null +++ b/AndroidOCRTool/app/src/main/java/com/xuexiang/templateproject/activity/MainActivity.java @@ -0,0 +1,159 @@ +/* + * Copyright (C) 2019 xuexiangjys(xuexiangjys@163.com) + * + * Licensed 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. + * + */ + +package com.xuexiang.templateproject.activity; + +import android.os.Build; +import android.os.Bundle; +import android.view.KeyEvent; +import android.view.LayoutInflater; +import android.view.View; + +import androidx.annotation.RequiresApi; + +import com.huantansheng.easyphotos.models.album.entity.Photo; +import com.xuexiang.templateproject.IdentifyRecognitionParams; +import com.xuexiang.templateproject.OCRRecognition; +import com.xuexiang.templateproject.R; +import com.xuexiang.templateproject.core.BaseActivity; +import com.xuexiang.templateproject.databinding.ActivityMainBinding; +import com.xuexiang.templateproject.utils.service.OcrCallback; +import com.xuexiang.templateproject.utils.service.OcrPhotos; +import com.xuexiang.xaop.annotation.SingleClick; +import com.xuexiang.xui.utils.XToastUtils; +import com.xuexiang.xutil.XUtil; +import com.xuexiang.xutil.common.ClickUtils; + +import java.util.ArrayList; + +/** + * 程序主页面,只是一个简单的Tab例子 + * + * @author xuexiang + * @since 2019-07-07 23:53 + */ +public class MainActivity extends BaseActivity implements View.OnClickListener, ClickUtils.OnClick2ExitListener { + private OCRRecognition recognitionObj; + @Override + protected ActivityMainBinding viewBindingInflate(LayoutInflater inflater) { + return ActivityMainBinding.inflate(inflater); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + recognitionObj = new OCRRecognition(); + initViews(); + + initData(); + + initListeners(); + } + + + @Override + protected boolean isSupportSlideBack() { + return false; + } + + private void initViews() { + binding.buttonPanel.setOnClickListener(this); + + } + + private void initData() { + } + + + protected void initListeners() { + + } + + + @SingleClick + @Override + public void onClick(View v) { + int id = v.getId(); + if (id == R.id.buttonPanel) { + OcrPhotos.createAlbum(this, new OcrCallback() { + @RequiresApi(api = Build.VERSION_CODES.KITKAT) + @Override + public void onResult(ArrayList var1, boolean var2) { + //System.err.println(var1.get(0).toString()); + binding.text.setText(var1.get(0).path); +// IdentifyRecognitionParams params = new IdentifyRecognitionParams(); +// params.setType(IdentifyRecognitionParams.RecognitionType.IDENTITY_CARD_PATH); +// if (!var1.isEmpty()){ +// params.setRecognitionData1(var1.get(0).path); +// } +// if(var1.size() > 1){ +// params.setRecognitionData2(var1.get(1).path); +// } +// String result = recognitionObj.extractInfo(params); +// binding.text.setText(result); + } + + @Override + public void onCancel() { + + } + }); + + + } + } + + /** + * 菜单、返回键响应 + */ + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + if (keyCode == KeyEvent.KEYCODE_BACK) { + ClickUtils.exitBy2Click(2000, this); + } + return true; + } + + @Override + public void onRetry() { + XToastUtils.toast("再按一次退出程序"); + } + + @Override + public void onExit() { + XUtil.exitApp(); + } + + +// public ArrayList ReadListFromFile(AssetManager assetManager, String filePath) { +// ArrayList list = new ArrayList(); +// BufferedReader reader = null; +// InputStream istr = null; +// try { +// reader = new BufferedReader( +// new InputStreamReader(assetManager.open(filePath))); +// String line; +// while ((line = reader.readLine()) != null) { +// list.add(line); +// } +// } catch (IOException e) { +// e.printStackTrace(); +// } +// return list; +// } + +} diff --git a/AndroidOCRTool/app/src/main/java/com/xuexiang/templateproject/core/BaseActivity.java b/AndroidOCRTool/app/src/main/java/com/xuexiang/templateproject/core/BaseActivity.java new file mode 100644 index 0000000..619534b --- /dev/null +++ b/AndroidOCRTool/app/src/main/java/com/xuexiang/templateproject/core/BaseActivity.java @@ -0,0 +1,180 @@ +/* + * Copyright (C) 2019 xuexiangjys(xuexiangjys@163.com) + * + * Licensed 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. + * + */ + +package com.xuexiang.templateproject.core; + +import android.content.Context; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; + +import androidx.annotation.Nullable; +import androidx.viewbinding.ViewBinding; + +import com.xuexiang.xpage.base.XPageActivity; +import com.xuexiang.xpage.base.XPageFragment; +import com.xuexiang.xpage.core.CoreSwitchBean; +import com.xuexiang.xrouter.facade.service.SerializationService; +import com.xuexiang.xrouter.launcher.XRouter; +import com.xuexiang.xui.utils.ResUtils; +import com.xuexiang.xui.widget.slideback.SlideBack; + +import io.github.inflationx.viewpump.ViewPumpContextWrapper; + +/** + * 基础容器Activity + * + * @author XUE + * @since 2019/3/22 11:21 + */ +public class BaseActivity extends XPageActivity { + /** + * 是否支持侧滑返回 + */ + public static final String KEY_SUPPORT_SLIDE_BACK = "key_support_slide_back"; + /** + * ViewBinding + */ + protected Binding binding; + + @Override + protected void attachBaseContext(Context newBase) { + //注入字体 + super.attachBaseContext(ViewPumpContextWrapper.wrap(newBase)); + } + + @Override + protected View getCustomRootView() { + binding = viewBindingInflate(getLayoutInflater()); + return binding != null ? binding.getRoot() : null; + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + initStatusBarStyle(); + super.onCreate(savedInstanceState); + registerSlideBack(); + } + + /** + * 构建ViewBinding + * + * @param inflater inflater + * @return ViewBinding + */ + @Nullable + protected Binding viewBindingInflate(LayoutInflater inflater) { + return null; + } + + /** + * 获取Binding + * + * @return Binding + */ + public Binding getBinding() { + return binding; + } + + /** + * 初始化状态栏的样式 + */ + protected void initStatusBarStyle() { + + } + + /** + * 打开fragment + * + * @param clazz 页面类 + * @param addToBackStack 是否添加到栈中 + * @return 打开的fragment对象 + */ + public T openPage(Class clazz, boolean addToBackStack) { + CoreSwitchBean page = new CoreSwitchBean(clazz) + .setAddToBackStack(addToBackStack); + return (T) openPage(page); + } + + /** + * 打开fragment + * + * @return 打开的fragment对象 + */ + public T openNewPage(Class clazz) { + CoreSwitchBean page = new CoreSwitchBean(clazz) + .setNewActivity(true); + return (T) openPage(page); + } + + /** + * 切换fragment + * + * @param clazz 页面类 + * @return 打开的fragment对象 + */ + public T switchPage(Class clazz) { + return openPage(clazz, false); + } + + /** + * 序列化对象 + * + * @param object + * @return + */ + public String serializeObject(Object object) { + return XRouter.getInstance().navigation(SerializationService.class).object2Json(object); + } + + @Override + protected void onRelease() { + unregisterSlideBack(); + super.onRelease(); + } + + /** + * 注册侧滑回调 + */ + protected void registerSlideBack() { + if (isSupportSlideBack()) { + SlideBack.with(this) + .haveScroll(true) + .edgeMode(ResUtils.isRtl() ? SlideBack.EDGE_RIGHT : SlideBack.EDGE_LEFT) + .callBack(this::popPage) + .register(); + } + } + + /** + * 注销侧滑回调 + */ + protected void unregisterSlideBack() { + if (isSupportSlideBack()) { + SlideBack.unregister(this); + } + } + + /** + * @return 是否支持侧滑返回 + */ + protected boolean isSupportSlideBack() { + CoreSwitchBean page = getIntent().getParcelableExtra(CoreSwitchBean.KEY_SWITCH_BEAN); + return page == null || page.getBundle() == null || page.getBundle().getBoolean(KEY_SUPPORT_SLIDE_BACK, true); + } + +} diff --git a/AndroidOCRTool/app/src/main/java/com/xuexiang/templateproject/core/BaseFragment.java b/AndroidOCRTool/app/src/main/java/com/xuexiang/templateproject/core/BaseFragment.java new file mode 100644 index 0000000..ba05fb2 --- /dev/null +++ b/AndroidOCRTool/app/src/main/java/com/xuexiang/templateproject/core/BaseFragment.java @@ -0,0 +1,353 @@ +/* + * Copyright (C) 2019 xuexiangjys(xuexiangjys@163.com) + * + * Licensed 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. + * + */ + +package com.xuexiang.templateproject.core; + +import android.content.res.Configuration; +import android.os.Parcelable; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; +import androidx.viewbinding.ViewBinding; +import com.xuexiang.xhttp2.subsciber.impl.IProgressLoader; +import com.xuexiang.xpage.base.XPageActivity; +import com.xuexiang.xpage.base.XPageFragment; +import com.xuexiang.xpage.core.PageOption; +import com.xuexiang.xpage.enums.CoreAnim; +import com.xuexiang.xpage.utils.Utils; +import com.xuexiang.xrouter.facade.service.SerializationService; +import com.xuexiang.xrouter.launcher.XRouter; +import com.xuexiang.xui.widget.actionbar.TitleBar; +import com.xuexiang.xui.widget.actionbar.TitleUtils; + +import java.io.Serializable; +import java.lang.reflect.Type; + +/** + * 基础fragment,使用XPage框架搭建 + *

+ * 具体使用参见:https://github.com/xuexiangjys/XPage/wiki + * + * @author xuexiang + * @since 2018/5/25 下午3:44 + */ +public abstract class BaseFragment extends XPageFragment { + + private IProgressLoader mIProgressLoader; + + /** + * ViewBinding + */ + protected Binding binding; + + @Nullable + @Override + protected View onCreateContentView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, boolean attachToRoot) { + binding = viewBindingInflate(inflater, container, attachToRoot); + return binding.getRoot(); + } + + /** + * 构建ViewBinding + * + * @param inflater inflater + * @param container 容器 + * @return ViewBinding + */ + @NonNull + protected abstract Binding viewBindingInflate(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, boolean attachToRoot); + + /** + * 获取Binding + * + * @return Binding + */ + public Binding getBinding() { + return binding; + } + + @Override + protected void initPage() { + initTitle(); + initViews(); + initListeners(); + } + + protected TitleBar initTitle() { + return TitleUtils.addTitleBarDynamic(getToolbarContainer(), getPageTitle(), v -> popToBack()); + } + + @Override + protected void initListeners() { + + } + + + @Override + public void onConfigurationChanged(@NonNull Configuration newConfig) { + //屏幕旋转时刷新一下title + super.onConfigurationChanged(newConfig); + ViewGroup root = (ViewGroup) getRootView(); + if (root.getChildAt(0) instanceof TitleBar) { + root.removeViewAt(0); + initTitle(); + } + } + + @Override + public void onDestroyView() { + if (mIProgressLoader != null) { + mIProgressLoader.dismissLoading(); + } + super.onDestroyView(); + binding = null; + } + + @Override + public void onResume() { + super.onResume(); + } + + @Override + public void onPause() { + super.onPause(); + } + + //==============================页面跳转api===================================// + + /** + * 打开一个新的页面【建议只在主tab页使用】 + * + * @param clazz 页面的类 + * @param + * @return + */ + public Fragment openNewPage(Class clazz) { + return new PageOption(clazz) + .setNewActivity(true) + .open(this); + } + + /** + * 打开一个新的页面【建议只在主tab页使用】 + * + * @param pageName 页面名 + * @param + * @return + */ + public Fragment openNewPage(String pageName) { + return new PageOption(pageName) + .setAnim(CoreAnim.slide) + .setNewActivity(true) + .open(this); + } + + + /** + * 打开一个新的页面【建议只在主tab页使用】 + * + * @param clazz 页面的类 + * @param containActivityClazz 页面容器 + * @param + * @return + */ + public Fragment openNewPage(Class clazz, @NonNull Class containActivityClazz) { + return new PageOption(clazz) + .setNewActivity(true) + .setContainActivityClazz(containActivityClazz) + .open(this); + } + + /** + * 打开一个新的页面【建议只在主tab页使用】 + * + * @param clazz 页面的类 + * @param key 入参的键 + * @param value 入参的值 + * @param + * @return + */ + public Fragment openNewPage(Class clazz, String key, Object value) { + PageOption option = new PageOption(clazz).setNewActivity(true); + return openPage(option, key, value); + } + + public Fragment openPage(PageOption option, String key, Object value) { + if (value instanceof Integer) { + option.putInt(key, (Integer) value); + } else if (value instanceof Float) { + option.putFloat(key, (Float) value); + } else if (value instanceof String) { + option.putString(key, (String) value); + } else if (value instanceof Boolean) { + option.putBoolean(key, (Boolean) value); + } else if (value instanceof Long) { + option.putLong(key, (Long) value); + } else if (value instanceof Double) { + option.putDouble(key, (Double) value); + } else if (value instanceof Parcelable) { + option.putParcelable(key, (Parcelable) value); + } else if (value instanceof Serializable) { + option.putSerializable(key, (Serializable) value); + } else { + option.putString(key, serializeObject(value)); + } + return option.open(this); + } + + /** + * 打开页面 + * + * @param clazz 页面的类 + * @param addToBackStack 是否加入回退栈 + * @param key 入参的键 + * @param value 入参的值 + * @param + * @return + */ + public Fragment openPage(Class clazz, boolean addToBackStack, String key, String value) { + return new PageOption(clazz) + .setAddToBackStack(addToBackStack) + .putString(key, value) + .open(this); + } + + /** + * 打开页面 + * + * @param clazz 页面的类 + * @param key 入参的键 + * @param value 入参的值 + * @param + * @return + */ + public Fragment openPage(Class clazz, String key, Object value) { + return openPage(clazz, true, key, value); + } + + /** + * 打开页面 + * + * @param clazz 页面的类 + * @param addToBackStack 是否加入回退栈 + * @param key 入参的键 + * @param value 入参的值 + * @param + * @return + */ + public Fragment openPage(Class clazz, boolean addToBackStack, String key, Object value) { + PageOption option = new PageOption(clazz).setAddToBackStack(addToBackStack); + return openPage(option, key, value); + } + + /** + * 打开页面 + * + * @param clazz 页面的类 + * @param key 入参的键 + * @param value 入参的值 + * @param + * @return + */ + public Fragment openPage(Class clazz, String key, String value) { + return new PageOption(clazz) + .putString(key, value) + .open(this); + } + + /** + * 打开页面,需要结果返回 + * + * @param clazz 页面的类 + * @param key 入参的键 + * @param value 入参的值 + * @param requestCode 请求码 + * @param + * @return + */ + public Fragment openPageForResult(Class clazz, String key, Object value, int requestCode) { + PageOption option = new PageOption(clazz).setRequestCode(requestCode); + return openPage(option, key, value); + } + + /** + * 打开页面,需要结果返回 + * + * @param clazz 页面的类 + * @param key 入参的键 + * @param value 入参的值 + * @param requestCode 请求码 + * @param + * @return + */ + public Fragment openPageForResult(Class clazz, String key, String value, int requestCode) { + return new PageOption(clazz) + .setRequestCode(requestCode) + .putString(key, value) + .open(this); + } + + /** + * 打开页面,需要结果返回 + * + * @param clazz 页面的类 + * @param requestCode 请求码 + * @param + * @return + */ + public Fragment openPageForResult(Class clazz, int requestCode) { + return new PageOption(clazz) + .setRequestCode(requestCode) + .open(this); + } + + /** + * 序列化对象 + * + * @param object 需要序列化的对象 + * @return 序列化结果 + */ + public String serializeObject(Object object) { + return XRouter.getInstance().navigation(SerializationService.class).object2Json(object); + } + + /** + * 反序列化对象 + * + * @param input 反序列化的内容 + * @param clazz 类型 + * @return 反序列化结果 + */ + public T deserializeObject(String input, Type clazz) { + return XRouter.getInstance().navigation(SerializationService.class).parseObject(input, clazz); + } + + + @Override + protected void hideCurrentPageSoftInput() { + if (getActivity() == null) { + return; + } + // 记住,要在xml的父布局加上android:focusable="true" 和 android:focusableInTouchMode="true" + Utils.hideSoftInputClearFocus(getActivity().getCurrentFocus()); + } + +} diff --git a/AndroidOCRTool/app/src/main/java/com/xuexiang/templateproject/utils/service/GlideEngine.java b/AndroidOCRTool/app/src/main/java/com/xuexiang/templateproject/utils/service/GlideEngine.java new file mode 100644 index 0000000..c57c80a --- /dev/null +++ b/AndroidOCRTool/app/src/main/java/com/xuexiang/templateproject/utils/service/GlideEngine.java @@ -0,0 +1,98 @@ +package com.xuexiang.templateproject.utils.service; + +import static com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions.withCrossFade; + +import android.content.Context; +import android.graphics.Bitmap; +import android.net.Uri; +import android.widget.ImageView; + +import com.bumptech.glide.Glide; +import com.huantansheng.easyphotos.engine.ImageEngine; + +/** + * Glide4.x的加载图片引擎实现,单例模式 + * Glide4.x的缓存机制更加智能,已经达到无需配置的境界。如果使用Glide3.x,需要考虑缓存机制。 + * Created by huan on 2018/1/15. + */ + +public class GlideEngine implements ImageEngine { + //单例 + private static GlideEngine instance = null; + //单例模式,私有构造方法 + private GlideEngine() { + } + //获取单例 + public static GlideEngine getInstance() { + if (null == instance) { + synchronized (GlideEngine.class) { + if (null == instance) { + instance = new GlideEngine(); + } + } + } + return instance; + } + + /** + * 加载图片到ImageView + * + * @param context 上下文 + * @param uri 图片路径Uri + * @param imageView 加载到的ImageView + */ + //安卓10推荐uri,并且path的方式不再可用 + @Override + public void loadPhoto(Context context, Uri uri, ImageView imageView) { + Glide.with(context).load(uri).transition(withCrossFade()).into(imageView); + } + + /** + * 加载gif动图图片到ImageView,gif动图不动 + * + * @param context 上下文 + * @param gifUri gif动图路径Uri + * @param imageView 加载到的ImageView + *

+ * 备注:不支持动图显示的情况下可以不写 + */ + //安卓10推荐uri,并且path的方式不再可用 + @Override + public void loadGifAsBitmap(Context context, Uri gifUri, ImageView imageView) { + Glide.with(context).asBitmap().load(gifUri).into(imageView); + } + + /** + * 加载gif动图到ImageView,gif动图动 + * + * @param context 上下文 + * @param gifUri gif动图路径Uri + * @param imageView 加载动图的ImageView + *

+ * 备注:不支持动图显示的情况下可以不写 + */ + //安卓10推荐uri,并且path的方式不再可用 + @Override + public void loadGif(Context context, Uri gifUri, ImageView imageView) { + Glide.with(context).asGif().load(gifUri).transition(withCrossFade()).into(imageView); + } + + + /** + * 获取图片加载框架中的缓存Bitmap + * + * @param context 上下文 + * @param uri 图片路径 + * @param width 图片宽度 + * @param height 图片高度 + * @return Bitmap + * @throws Exception 异常直接抛出,EasyPhotos内部处理 + */ + //安卓10推荐uri,并且path的方式不再可用 + @Override + public Bitmap getCacheBitmap(Context context, Uri uri, int width, int height) throws Exception { + return Glide.with(context).asBitmap().load(uri).submit(width, height).get(); + } + + +} \ No newline at end of file diff --git a/AndroidOCRTool/app/src/main/java/com/xuexiang/templateproject/utils/service/OcrCallback.java b/AndroidOCRTool/app/src/main/java/com/xuexiang/templateproject/utils/service/OcrCallback.java new file mode 100644 index 0000000..058a565 --- /dev/null +++ b/AndroidOCRTool/app/src/main/java/com/xuexiang/templateproject/utils/service/OcrCallback.java @@ -0,0 +1,32 @@ +/* + * Copyright (C) 2024 xuexiangjys(xuexiangjys@163.com) + * + * Licensed 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. + * + */ + +package com.xuexiang.templateproject.utils.service; + +import com.huantansheng.easyphotos.models.album.entity.Photo; + +import java.util.ArrayList; + +public abstract class OcrCallback { + + public OcrCallback() { + } + + public abstract void onResult(ArrayList var1, boolean var2); + + public abstract void onCancel(); +} diff --git a/AndroidOCRTool/app/src/main/java/com/xuexiang/templateproject/utils/service/OcrPhotos.java b/AndroidOCRTool/app/src/main/java/com/xuexiang/templateproject/utils/service/OcrPhotos.java new file mode 100644 index 0000000..b685603 --- /dev/null +++ b/AndroidOCRTool/app/src/main/java/com/xuexiang/templateproject/utils/service/OcrPhotos.java @@ -0,0 +1,68 @@ +/* + * Copyright (C) 2024 xuexiangjys(xuexiangjys@163.com) + * + * Licensed 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. + * + */ + +package com.xuexiang.templateproject.utils.service; + +import android.app.Activity; +import android.app.Fragment; + +import com.huantansheng.easyphotos.EasyPhotos; +import com.huantansheng.easyphotos.callback.SelectCallback; +import com.huantansheng.easyphotos.models.album.entity.Photo; + +import java.util.ArrayList; + +public class OcrPhotos { + + public static void createAlbum(Activity activity, OcrCallback ocrCallback) { + EasyPhotos.createAlbum(activity, true, false, GlideEngine.getInstance()) + .setFileProviderAuthority("com.huantansheng.easyphotos.demo.fileprovider") + .setCount(1) + .start(new SelectCallback() { + @Override + public void onResult(ArrayList arrayList, boolean b) { + // + ocrCallback.onResult(arrayList, b); + } + + @Override + public void onCancel() { + + } + }); + + } + + + public static void createAlbum(Fragment fragment, OcrCallback ocrCallback) { + EasyPhotos.createAlbum(fragment, true, false, GlideEngine.getInstance()) + .setFileProviderAuthority("com.huantansheng.easyphotos.demo.fileprovider") + .setCount(1) + .start(new SelectCallback() { + @Override + public void onResult(ArrayList arrayList, boolean b) { + // + ocrCallback.onResult(arrayList, b); + } + + @Override + public void onCancel() { + + } + }); + } +} diff --git a/AndroidOCRTool/app/src/main/res/color/selector_round_button_main_theme_color.xml b/AndroidOCRTool/app/src/main/res/color/selector_round_button_main_theme_color.xml new file mode 100644 index 0000000..16fd2c7 --- /dev/null +++ b/AndroidOCRTool/app/src/main/res/color/selector_round_button_main_theme_color.xml @@ -0,0 +1,24 @@ + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/app/src/main/res/drawable-hdpi/ic_comment.png b/AndroidOCRTool/app/src/main/res/drawable-hdpi/ic_comment.png new file mode 100644 index 0000000..dec6ff4 Binary files /dev/null and b/AndroidOCRTool/app/src/main/res/drawable-hdpi/ic_comment.png differ diff --git a/AndroidOCRTool/app/src/main/res/drawable-hdpi/ic_praise.png b/AndroidOCRTool/app/src/main/res/drawable-hdpi/ic_praise.png new file mode 100644 index 0000000..64021e2 Binary files /dev/null and b/AndroidOCRTool/app/src/main/res/drawable-hdpi/ic_praise.png differ diff --git a/AndroidOCRTool/app/src/main/res/drawable-hdpi/ic_splash_app_logo_xui.png b/AndroidOCRTool/app/src/main/res/drawable-hdpi/ic_splash_app_logo_xui.png new file mode 100644 index 0000000..1f5c884 Binary files /dev/null and b/AndroidOCRTool/app/src/main/res/drawable-hdpi/ic_splash_app_logo_xui.png differ diff --git a/AndroidOCRTool/app/src/main/res/drawable-hdpi/ic_splash_company_logo.png b/AndroidOCRTool/app/src/main/res/drawable-hdpi/ic_splash_company_logo.png new file mode 100644 index 0000000..7d8654d Binary files /dev/null and b/AndroidOCRTool/app/src/main/res/drawable-hdpi/ic_splash_company_logo.png differ diff --git a/AndroidOCRTool/app/src/main/res/drawable-v17/xui_config_bg_splash.xml b/AndroidOCRTool/app/src/main/res/drawable-v17/xui_config_bg_splash.xml new file mode 100644 index 0000000..afbab81 --- /dev/null +++ b/AndroidOCRTool/app/src/main/res/drawable-v17/xui_config_bg_splash.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/app/src/main/res/drawable-v21/xui_config_bg_splash.xml b/AndroidOCRTool/app/src/main/res/drawable-v21/xui_config_bg_splash.xml new file mode 100644 index 0000000..f502f5d --- /dev/null +++ b/AndroidOCRTool/app/src/main/res/drawable-v21/xui_config_bg_splash.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/AndroidOCRTool/app/src/main/res/drawable-v24/ic_launcher_foreground.xml new file mode 100644 index 0000000..1f6bb29 --- /dev/null +++ b/AndroidOCRTool/app/src/main/res/drawable-v24/ic_launcher_foreground.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + diff --git a/AndroidOCRTool/app/src/main/res/drawable-xxxhdpi/ic_web_back.png b/AndroidOCRTool/app/src/main/res/drawable-xxxhdpi/ic_web_back.png new file mode 100644 index 0000000..8bb3cf8 Binary files /dev/null and b/AndroidOCRTool/app/src/main/res/drawable-xxxhdpi/ic_web_back.png differ diff --git a/AndroidOCRTool/app/src/main/res/drawable-xxxhdpi/ic_web_close.png b/AndroidOCRTool/app/src/main/res/drawable-xxxhdpi/ic_web_close.png new file mode 100644 index 0000000..58a7036 Binary files /dev/null and b/AndroidOCRTool/app/src/main/res/drawable-xxxhdpi/ic_web_close.png differ diff --git a/AndroidOCRTool/app/src/main/res/drawable-xxxhdpi/ic_web_more.png b/AndroidOCRTool/app/src/main/res/drawable-xxxhdpi/ic_web_more.png new file mode 100644 index 0000000..6ecc004 Binary files /dev/null and b/AndroidOCRTool/app/src/main/res/drawable-xxxhdpi/ic_web_more.png differ diff --git a/AndroidOCRTool/app/src/main/res/drawable/bg_dialog_common_tip_corner_white.xml b/AndroidOCRTool/app/src/main/res/drawable/bg_dialog_common_tip_corner_white.xml new file mode 100644 index 0000000..dbcadad --- /dev/null +++ b/AndroidOCRTool/app/src/main/res/drawable/bg_dialog_common_tip_corner_white.xml @@ -0,0 +1,9 @@ + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/app/src/main/res/drawable/ic_action_close_white.xml b/AndroidOCRTool/app/src/main/res/drawable/ic_action_close_white.xml new file mode 100644 index 0000000..266e01f --- /dev/null +++ b/AndroidOCRTool/app/src/main/res/drawable/ic_action_close_white.xml @@ -0,0 +1,22 @@ + + + + diff --git a/AndroidOCRTool/app/src/main/res/drawable/ic_default_head.xml b/AndroidOCRTool/app/src/main/res/drawable/ic_default_head.xml new file mode 100644 index 0000000..f68423e --- /dev/null +++ b/AndroidOCRTool/app/src/main/res/drawable/ic_default_head.xml @@ -0,0 +1,26 @@ + + + + + diff --git a/AndroidOCRTool/app/src/main/res/drawable/ic_launcher_background.xml b/AndroidOCRTool/app/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 0000000..0d025f9 --- /dev/null +++ b/AndroidOCRTool/app/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/AndroidOCRTool/app/src/main/res/drawable/ic_login_close.xml b/AndroidOCRTool/app/src/main/res/drawable/ic_login_close.xml new file mode 100644 index 0000000..178ac09 --- /dev/null +++ b/AndroidOCRTool/app/src/main/res/drawable/ic_login_close.xml @@ -0,0 +1,21 @@ + + + + + diff --git a/AndroidOCRTool/app/src/main/res/drawable/ic_logo_app.xml b/AndroidOCRTool/app/src/main/res/drawable/ic_logo_app.xml new file mode 100644 index 0000000..dee15c4 --- /dev/null +++ b/AndroidOCRTool/app/src/main/res/drawable/ic_logo_app.xml @@ -0,0 +1,29 @@ + + + + + + diff --git a/AndroidOCRTool/app/src/main/res/drawable/ic_menu_about.xml b/AndroidOCRTool/app/src/main/res/drawable/ic_menu_about.xml new file mode 100644 index 0000000..1f7d30f --- /dev/null +++ b/AndroidOCRTool/app/src/main/res/drawable/ic_menu_about.xml @@ -0,0 +1,28 @@ + + + + + + + diff --git a/AndroidOCRTool/app/src/main/res/drawable/ic_menu_about_white.xml b/AndroidOCRTool/app/src/main/res/drawable/ic_menu_about_white.xml new file mode 100644 index 0000000..f8b3e1e --- /dev/null +++ b/AndroidOCRTool/app/src/main/res/drawable/ic_menu_about_white.xml @@ -0,0 +1,28 @@ + + + + + + + diff --git a/AndroidOCRTool/app/src/main/res/drawable/ic_menu_issues.xml b/AndroidOCRTool/app/src/main/res/drawable/ic_menu_issues.xml new file mode 100644 index 0000000..1614cdb --- /dev/null +++ b/AndroidOCRTool/app/src/main/res/drawable/ic_menu_issues.xml @@ -0,0 +1,26 @@ + + + + + diff --git a/AndroidOCRTool/app/src/main/res/drawable/ic_menu_news.xml b/AndroidOCRTool/app/src/main/res/drawable/ic_menu_news.xml new file mode 100644 index 0000000..9a7ddff --- /dev/null +++ b/AndroidOCRTool/app/src/main/res/drawable/ic_menu_news.xml @@ -0,0 +1,28 @@ + + + + + + + diff --git a/AndroidOCRTool/app/src/main/res/drawable/ic_menu_notifications.xml b/AndroidOCRTool/app/src/main/res/drawable/ic_menu_notifications.xml new file mode 100644 index 0000000..9c92f09 --- /dev/null +++ b/AndroidOCRTool/app/src/main/res/drawable/ic_menu_notifications.xml @@ -0,0 +1,28 @@ + + + + + + + diff --git a/AndroidOCRTool/app/src/main/res/drawable/ic_menu_person.xml b/AndroidOCRTool/app/src/main/res/drawable/ic_menu_person.xml new file mode 100644 index 0000000..3bd07cf --- /dev/null +++ b/AndroidOCRTool/app/src/main/res/drawable/ic_menu_person.xml @@ -0,0 +1,28 @@ + + + + + + + diff --git a/AndroidOCRTool/app/src/main/res/drawable/ic_menu_privacy.xml b/AndroidOCRTool/app/src/main/res/drawable/ic_menu_privacy.xml new file mode 100644 index 0000000..9184e2e --- /dev/null +++ b/AndroidOCRTool/app/src/main/res/drawable/ic_menu_privacy.xml @@ -0,0 +1,29 @@ + + + + + + diff --git a/AndroidOCRTool/app/src/main/res/drawable/ic_menu_search.xml b/AndroidOCRTool/app/src/main/res/drawable/ic_menu_search.xml new file mode 100644 index 0000000..9dba080 --- /dev/null +++ b/AndroidOCRTool/app/src/main/res/drawable/ic_menu_search.xml @@ -0,0 +1,28 @@ + + + + + + + diff --git a/AndroidOCRTool/app/src/main/res/drawable/ic_menu_settings.xml b/AndroidOCRTool/app/src/main/res/drawable/ic_menu_settings.xml new file mode 100644 index 0000000..ee77a3e --- /dev/null +++ b/AndroidOCRTool/app/src/main/res/drawable/ic_menu_settings.xml @@ -0,0 +1,28 @@ + + + + + + + diff --git a/AndroidOCRTool/app/src/main/res/drawable/ic_menu_star.xml b/AndroidOCRTool/app/src/main/res/drawable/ic_menu_star.xml new file mode 100644 index 0000000..e7b7c61 --- /dev/null +++ b/AndroidOCRTool/app/src/main/res/drawable/ic_menu_star.xml @@ -0,0 +1,28 @@ + + + + + + + diff --git a/AndroidOCRTool/app/src/main/res/drawable/ic_menu_trending.xml b/AndroidOCRTool/app/src/main/res/drawable/ic_menu_trending.xml new file mode 100644 index 0000000..df83f28 --- /dev/null +++ b/AndroidOCRTool/app/src/main/res/drawable/ic_menu_trending.xml @@ -0,0 +1,28 @@ + + + + + + + diff --git a/AndroidOCRTool/app/src/main/res/drawable/ic_password.xml b/AndroidOCRTool/app/src/main/res/drawable/ic_password.xml new file mode 100644 index 0000000..716e402 --- /dev/null +++ b/AndroidOCRTool/app/src/main/res/drawable/ic_password.xml @@ -0,0 +1,18 @@ + + + + + + diff --git a/AndroidOCRTool/app/src/main/res/drawable/ic_phone.xml b/AndroidOCRTool/app/src/main/res/drawable/ic_phone.xml new file mode 100644 index 0000000..56cf551 --- /dev/null +++ b/AndroidOCRTool/app/src/main/res/drawable/ic_phone.xml @@ -0,0 +1,4 @@ + + + diff --git a/AndroidOCRTool/app/src/main/res/drawable/icon_arrow_right_grey.xml b/AndroidOCRTool/app/src/main/res/drawable/icon_arrow_right_grey.xml new file mode 100644 index 0000000..964e9b2 --- /dev/null +++ b/AndroidOCRTool/app/src/main/res/drawable/icon_arrow_right_grey.xml @@ -0,0 +1,29 @@ + + + + + + diff --git a/AndroidOCRTool/app/src/main/res/drawable/img_guide_tip_top.xml b/AndroidOCRTool/app/src/main/res/drawable/img_guide_tip_top.xml new file mode 100644 index 0000000..6c787f8 --- /dev/null +++ b/AndroidOCRTool/app/src/main/res/drawable/img_guide_tip_top.xml @@ -0,0 +1,36 @@ + + + + + + + diff --git a/AndroidOCRTool/app/src/main/res/layout/activity_main.xml b/AndroidOCRTool/app/src/main/res/layout/activity_main.xml new file mode 100644 index 0000000..4021006 --- /dev/null +++ b/AndroidOCRTool/app/src/main/res/layout/activity_main.xml @@ -0,0 +1,42 @@ + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/AndroidOCRTool/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 0000000..eca70cf --- /dev/null +++ b/AndroidOCRTool/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/AndroidOCRTool/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 0000000..eca70cf --- /dev/null +++ b/AndroidOCRTool/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/app/src/main/res/mipmap-hdpi/ic_launcher.png b/AndroidOCRTool/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000..898f3ed Binary files /dev/null and b/AndroidOCRTool/app/src/main/res/mipmap-hdpi/ic_launcher.png differ diff --git a/AndroidOCRTool/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/AndroidOCRTool/app/src/main/res/mipmap-hdpi/ic_launcher_round.png new file mode 100644 index 0000000..dffca36 Binary files /dev/null and b/AndroidOCRTool/app/src/main/res/mipmap-hdpi/ic_launcher_round.png differ diff --git a/AndroidOCRTool/app/src/main/res/mipmap-mdpi/ic_launcher.png b/AndroidOCRTool/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000..64ba76f Binary files /dev/null and b/AndroidOCRTool/app/src/main/res/mipmap-mdpi/ic_launcher.png differ diff --git a/AndroidOCRTool/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/AndroidOCRTool/app/src/main/res/mipmap-mdpi/ic_launcher_round.png new file mode 100644 index 0000000..dae5e08 Binary files /dev/null and b/AndroidOCRTool/app/src/main/res/mipmap-mdpi/ic_launcher_round.png differ diff --git a/AndroidOCRTool/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/AndroidOCRTool/app/src/main/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000..e5ed465 Binary files /dev/null and b/AndroidOCRTool/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/AndroidOCRTool/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/AndroidOCRTool/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png new file mode 100644 index 0000000..14ed0af Binary files /dev/null and b/AndroidOCRTool/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png differ diff --git a/AndroidOCRTool/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/AndroidOCRTool/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000..b0907ca Binary files /dev/null and b/AndroidOCRTool/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/AndroidOCRTool/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/AndroidOCRTool/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png new file mode 100644 index 0000000..d8ae031 Binary files /dev/null and b/AndroidOCRTool/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png differ diff --git a/AndroidOCRTool/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/AndroidOCRTool/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000..2c18de9 Binary files /dev/null and b/AndroidOCRTool/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/AndroidOCRTool/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/AndroidOCRTool/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png new file mode 100644 index 0000000..beed3cd Binary files /dev/null and b/AndroidOCRTool/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png differ diff --git a/AndroidOCRTool/app/src/main/res/values/colors.xml b/AndroidOCRTool/app/src/main/res/values/colors.xml new file mode 100644 index 0000000..0e3e696 --- /dev/null +++ b/AndroidOCRTool/app/src/main/res/values/colors.xml @@ -0,0 +1,26 @@ + + + #299EE3 + #299EE3 + #299EE3 + + #FFF1F1F1 + + + + @color/colorAccent + #388E3C + #353A3E + + #EF5362 + #FE6D4B + #FFCF47 + #9FD661 + #3FD0AD + #2BBDF3 + #5A9AEF + #AC8FEF + #EE85C1 + + + diff --git a/AndroidOCRTool/app/src/main/res/values/dimens.xml b/AndroidOCRTool/app/src/main/res/values/dimens.xml new file mode 100644 index 0000000..27d236d --- /dev/null +++ b/AndroidOCRTool/app/src/main/res/values/dimens.xml @@ -0,0 +1,31 @@ + + + 24dp + + 4dp + 5dp + 6dp + 8dp + 10dp + 12dp + 14dp + 16dp + 18dp + 20dp + 24dp + 30dp + + 4dp + 5dp + 6dp + 8dp + 10dp + 12dp + 14dp + 16dp + 18dp + 20dp + 24dp + 30dp + + \ No newline at end of file diff --git a/AndroidOCRTool/app/src/main/res/values/strings.xml b/AndroidOCRTool/app/src/main/res/values/strings.xml new file mode 100644 index 0000000..38f08fa --- /dev/null +++ b/AndroidOCRTool/app/src/main/res/values/strings.xml @@ -0,0 +1,80 @@ + + TemplateAppProject + 通用浏览器 + + Open navigation drawer + Close navigation drawer + + 动态 + 趋势 + 我的 + + 通知 + 问题 + 收藏 + 搜索 + 设置 + 关于 + + © %1$s xuexiangjys All rights reserved. + 访问官网 + 联系作者 + 捐赠作者 + QQ交流群 + https://github.com/xuexiangjys/TemplateAppProject + https://gitee.com/xuexiangjys/xuexiangjys + https://gitee.com/xuexiangjys/Resource/blob/master/doc/sponsor.md + http://qm.qq.com/cgi-bin/qm/qr?k=tiP-E6rDf0y77PRNfp2lNVcc9RsglPCM + + + + 是否允许页面打开第三方应用? + + + 退出应用 + 同意 + 不同意 + 再次查看 + 仍不同意 + 温馨提示 + 要不要再想想 + 我们非常重视对你个人信息的保护,承诺严格按照《%s隐私权政策》保护及处理你的信息。如果你不同意该政策,很遗憾我们将无法为你提供服务 + 《%s隐私权政策》 + + + 登录/注册 + 获取验证码 + 登录 + 验证码登录 + 注册 + 忘记密码? + 验证码登录 + 密码登录 + 请输入手机号码 + 手机号码 + 密码 + 旧密码 + 请输入验证码 + 验证码 + 密码必须是8~18位字母和数字的组合! + 新密码必须是8~18位字母和数字的组合! + 无效的手机号! + ^((13[0-9])|(14[5,7])|(15[0-3,5-9])|(16[6])|(17[0,1,3,5-8])|(18[0-9])|(19[8,9]))\\d{8}$ + 请输入4位数验证码 + ^\\d{4}$ + ^(?:(?=.*[a-zA-Z])(?=.*[0-9])).{8,18}$ + 重置密码 + 点击注册即表示同意 + ]]> + 是否确认退出账号? + 用户协议 + 隐私政策 + 我已阅读并同意 + + + 跳过 + 上一条 + 下一条 + 以后不再提示此类信息 + 你知道吗? + diff --git a/AndroidOCRTool/app/src/main/res/values/styles.xml b/AndroidOCRTool/app/src/main/res/values/styles.xml new file mode 100644 index 0000000..aaedae8 --- /dev/null +++ b/AndroidOCRTool/app/src/main/res/values/styles.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + diff --git a/AndroidOCRTool/app/src/main/res/values/styles_widget.xml b/AndroidOCRTool/app/src/main/res/values/styles_widget.xml new file mode 100644 index 0000000..c90aa93 --- /dev/null +++ b/AndroidOCRTool/app/src/main/res/values/styles_widget.xml @@ -0,0 +1,102 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/app/src/main/res/xml/network_security_config.xml b/AndroidOCRTool/app/src/main/res/xml/network_security_config.xml new file mode 100644 index 0000000..da03785 --- /dev/null +++ b/AndroidOCRTool/app/src/main/res/xml/network_security_config.xml @@ -0,0 +1,21 @@ + + + + + + \ No newline at end of file diff --git a/AndroidOCRTool/app/x-library.gradle b/AndroidOCRTool/app/x-library.gradle new file mode 100644 index 0000000..4dae7c6 --- /dev/null +++ b/AndroidOCRTool/app/x-library.gradle @@ -0,0 +1,48 @@ +apply plugin: 'com.xuexiang.xaop' //引用XAOP插件 +apply plugin: 'com.xuexiang.xrouter' //引用XRouter-plugin插件实现自动注册 + +//自动添加依赖 +configurations.each { configuration -> + def dependencies = getProject().dependencies + if (configuration.name == "implementation") { + //为Project加入X-Library依赖 + //XUI框架 + configuration.dependencies.add(dependencies.create(deps.xlibrary.xui)) + configuration.dependencies.add(dependencies.create(deps.androidx.appcompat)) + configuration.dependencies.add(dependencies.create(deps.androidx.recyclerview)) + configuration.dependencies.add(dependencies.create(deps.androidx.design)) + configuration.dependencies.add(dependencies.create(deps.glide)) + //XUtil工具类 + configuration.dependencies.add(dependencies.create(deps.xlibrary.xutil_core)) + //XAOP切片 + configuration.dependencies.add(dependencies.create(deps.xlibrary.xaop_runtime)) + //XUpdate版本更新 + configuration.dependencies.add(dependencies.create(deps.xlibrary.xupdate)) + //XHttp2 + configuration.dependencies.add(dependencies.create(deps.xlibrary.xhttp2)) + configuration.dependencies.add(dependencies.create(deps.rxjava2)) + configuration.dependencies.add(dependencies.create(deps.rxandroid)) + configuration.dependencies.add(dependencies.create(deps.okhttp3)) + configuration.dependencies.add(dependencies.create(deps.gson)) + //XPage + configuration.dependencies.add(dependencies.create(deps.xlibrary.xpage_lib)) + //页面路由 + configuration.dependencies.add(dependencies.create(deps.xlibrary.xrouter_runtime)) + } + + if (configuration.name == "annotationProcessor") { + //XPage + configuration.dependencies.add(dependencies.create(deps.xlibrary.xpage_compiler)) + //页面路由 + configuration.dependencies.add(dependencies.create(deps.xlibrary.xrouter_compiler)) + } + + if (configuration.name == "debugImplementation") { + //内存泄漏监测leak + configuration.dependencies.add(dependencies.create(deps.leakcanary)) + } +} + +configurations.all { + resolutionStrategy.force deps.okhttp3 +} \ No newline at end of file diff --git a/AndroidOCRTool/build.gradle b/AndroidOCRTool/build.gradle new file mode 100644 index 0000000..c4391db --- /dev/null +++ b/AndroidOCRTool/build.gradle @@ -0,0 +1,29 @@ +// Top-level build file where you can add configuration options common to all sub-projects/modules. + +buildscript { + apply from: './versions.gradle' + addRepos(repositories) //增加代码仓库 + dependencies { + classpath deps.android_gradle_plugin + classpath deps.android_maven_gradle_plugin + + classpath 'com.chenenyu:img-optimizer:1.2.0' // 图片压缩 + //美团多渠道打包 + classpath 'com.meituan.android.walle:plugin:1.1.6' + //滴滴的质量优化框架 + if (isNeedPackage.toBoolean() && isUseBooster.toBoolean()) { + classpath deps.booster.gradle_plugin + classpath deps.booster.task_processed_res + classpath deps.booster.task_resource_deredundancy + } + } +} + +allprojects { + addRepos(repositories) +} + +task clean(type: Delete) { + delete rootProject.buildDir +} + diff --git a/AndroidOCRTool/gradle.properties b/AndroidOCRTool/gradle.properties new file mode 100644 index 0000000..5d43612 --- /dev/null +++ b/AndroidOCRTool/gradle.properties @@ -0,0 +1,24 @@ +# Project-wide Gradle settings. +# IDE (e.g. Android Studio) users: +# Gradle settings configured through the IDE *will override* +# any settings specified in this file. +# For more details on how to configure your build environment visit +# http://www.gradle.org/docs/current/userguide/build_environment.html +# Specifies the JVM arguments used for the daemon process. +# The setting is particularly useful for tweaking memory settings. +org.gradle.jvmargs=-Xmx1536m +# When configured, Gradle will run in incubating parallel mode. +# This option should only be used with decoupled projects. More details, visit +# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects +# org.gradle.parallel=true + +# 是否打包APK,打正式包时请设置为true,使用正式的签名 +isNeedPackage=false +# 是否使用booster优化APK,这里需要注意gradle的版本,对于最新的gradle版本可能存在兼容问题 +isUseBooster=false +android.precompileDependenciesResources=false + +android.useAndroidX=true +android.enableJetifier=true + +android.enableD8=true diff --git a/AndroidOCRTool/gradle/wrapper/gradle-wrapper.jar b/AndroidOCRTool/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000..f6b961f Binary files /dev/null and b/AndroidOCRTool/gradle/wrapper/gradle-wrapper.jar differ diff --git a/AndroidOCRTool/gradle/wrapper/gradle-wrapper.properties b/AndroidOCRTool/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..df6e363 --- /dev/null +++ b/AndroidOCRTool/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Sun Apr 28 13:11:59 CST 2024 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-6.6.1-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/AndroidOCRTool/gradlew b/AndroidOCRTool/gradlew new file mode 100755 index 0000000..cccdd3d --- /dev/null +++ b/AndroidOCRTool/gradlew @@ -0,0 +1,172 @@ +#!/usr/bin/env sh + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=$(save "$@") + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong +if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then + cd "$(dirname "$0")" +fi + +exec "$JAVACMD" "$@" diff --git a/AndroidOCRTool/gradlew.bat b/AndroidOCRTool/gradlew.bat new file mode 100644 index 0000000..f955316 --- /dev/null +++ b/AndroidOCRTool/gradlew.bat @@ -0,0 +1,84 @@ +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windows variants + +if not "%OS%" == "Windows_NT" goto win9xME_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/AndroidOCRTool/local.properties b/AndroidOCRTool/local.properties new file mode 100644 index 0000000..d594a63 --- /dev/null +++ b/AndroidOCRTool/local.properties @@ -0,0 +1,8 @@ +## This file must *NOT* be checked into Version Control Systems, +# as it contains information specific to your local configuration. +# +# Location of the SDK. This is only used by Gradle. +# For customization when using a Version Control System, please read the +# header note. +#Mon May 06 15:47:45 CST 2024 +sdk.dir=/Users/wangvivi/Library/Android/sdk diff --git a/AndroidOCRTool/settings.gradle b/AndroidOCRTool/settings.gradle new file mode 100644 index 0000000..e7b4def --- /dev/null +++ b/AndroidOCRTool/settings.gradle @@ -0,0 +1 @@ +include ':app' diff --git a/AndroidOCRTool/versions.gradle b/AndroidOCRTool/versions.gradle new file mode 100644 index 0000000..071f6c5 --- /dev/null +++ b/AndroidOCRTool/versions.gradle @@ -0,0 +1,209 @@ +import java.util.regex.Matcher +import java.util.regex.Pattern + +ext.deps = [:] +def versions = [:] +versions.android_gradle_plugin = "4.1.0" +versions.android_maven_gradle_plugin = "2.0" +versions.gradle_bintray_plugin = "1.8.0" +versions.booster = "3.1.0" +versions.booster_all = "1.1.1" +versions.support = "28.0.0" +versions.annotation = "1.2.0" +versions.androidx = "1.3.1" +versions.recyclerview = "1.2.1" +versions.material = "1.4.0" +versions.junit = "4.12" +versions.espresso = "3.2.0" +versions.constraint_layout = "2.1.0" +versions.glide = "4.11.0" +versions.rxjava2 = "2.2.20" +versions.rxandroid = "2.1.1" +versions.rxbinding = "2.2.0" +versions.butterknife = "10.1.0" +versions.runner = "1.2.0" +versions.gson = "2.8.5" +versions.okhttp3 = "3.12.12" +versions.leakcanary = "2.6" + +//========xlibrary start========// + +versions.xui = "1.2.0" +versions.xupdate = "2.1.3" +versions.xaop = "1.1.0" +versions.xutil = "2.0.0" +versions.xhttp2 = "2.0.4" +versions.xpage = "3.4.0" +versions.xrouter = "1.1.0" + +//========xlibrary end========// + +def deps = [:] + +def support = [:] +support.annotations = "com.android.support:support-annotations:$versions.support" +support.app_compat = "com.android.support:appcompat-v7:$versions.support" +support.recyclerview = "com.android.support:recyclerview-v7:$versions.support" +support.cardview = "com.android.support:cardview-v7:$versions.support" +support.design = "com.android.support:design:$versions.support" +support.v4 = "com.android.support:support-v4:$versions.support" +support.core_utils = "com.android.support:support-core-utils:$versions.support" +deps.support = support + +def androidx = [:] +androidx.annotations = "androidx.annotation:annotation:$versions.annotation" +androidx.appcompat = "androidx.appcompat:appcompat:$versions.androidx" +androidx.recyclerview = "androidx.recyclerview:recyclerview:$versions.recyclerview" +androidx.design = "com.google.android.material:material:$versions.material" +androidx.multidex = 'androidx.multidex:multidex:2.0.1' +deps.androidx = androidx + +def booster = [:] +booster.gradle_plugin = "com.didiglobal.booster:booster-gradle-plugin:$versions.booster" +booster.task_all = "com.didiglobal.booster:booster-task-all:$versions.booster_all" +booster.transform_all = "com.didiglobal.booster:booster-transform-all:$versions.booster_all" +//采用 cwebp 对资源进行压缩 +booster.task_compression_cwebp = "com.didiglobal.booster:booster-task-compression-cwebp:$versions.booster" +//采用 pngquant 对资源进行压缩 +booster.task_compression_pngquant = "com.didiglobal.booster:booster-task-compression-pngquant:$versions.booster" +//ap_ 文件压缩 +booster.task_processed_res = "com.didiglobal.booster:booster-task-compression-processed-res:$versions.booster" +//去冗余资源 +booster.task_resource_deredundancy = "com.didiglobal.booster:booster-task-resource-deredundancy:$versions.booster" +//检查 SNAPSHOT 版本 +booster.task_check_snapshot = "com.didiglobal.booster:booster-task-check-snapshot:$versions.booster" +//性能瓶颈检测 +booster.transform_lint = "com.didiglobal.booster:booster-transform-lint:$versions.booster" +//多线程优化 +booster.transform_thread = "com.didiglobal.booster:booster-transform-thread:$versions.booster" +//资源索引内联 +booster.transform_r_inline = "com.didiglobal.booster:booster-transform-r-inline:$versions.booster" +//WebView 预加载 +booster.transform_webview = "com.didiglobal.booster:booster-transform-webview:$versions.booster" +//SharedPreferences 优化 +booster.transform_shared_preferences = "com.didiglobal.booster:booster-transform-shared-preferences:$versions.booster" +//检查覆盖安装导致的 Resources 和 Assets 未加载的 Bug +booster.transform_res_check = "com.didiglobal.booster:booster-transform-res-check:$versions.booster" +//修复 Toast 在 Android 7.1 上的 Bug +booster.transform_toast = "com.didiglobal.booster:booster-transform-toast:$versions.booster" +//处理系统 Crash +booster.transform_activity_thread = "com.didiglobal.booster:booster-transform-activity-thread:$versions.booster" +deps.booster = booster + +def butterknife = [:] +butterknife.runtime = "com.jakewharton:butterknife:$versions.butterknife" +butterknife.compiler = "com.jakewharton:butterknife-compiler:$versions.butterknife" + +deps.butterknife = butterknife + +def espresso = [:] +espresso.core = "androidx.test.espresso:espresso-core:$versions.espresso" +espresso.contrib = "androidx.test.espresso:espresso-contrib:$versions.espresso" +espresso.intents = "androidx.test.espresso:espresso-intents:$versions.espresso" +deps.espresso = espresso + +deps.android_gradle_plugin = "com.android.tools.build:gradle:$versions.android_gradle_plugin" +deps.android_maven_gradle_plugin = "com.github.dcendents:android-maven-gradle-plugin:$versions.android_maven_gradle_plugin" +deps.gradle_bintray_plugin = "com.jfrog.bintray.gradle:gradle-bintray-plugin:$versions.gradle_bintray_plugin" +deps.glide = "com.github.bumptech.glide:glide:$versions.glide" +deps.constraint_layout = "androidx.constraint:constraint-layout:$versions.constraint_layout" +deps.junit = "junit:junit:$versions.junit" +deps.runner = "androidx.test:runner:$versions.runner" +deps.rxjava2 = "io.reactivex.rxjava2:rxjava:$versions.rxjava2" +deps.rxandroid = "io.reactivex.rxjava2:rxandroid:$versions.rxandroid" +deps.rxbinding = "com.jakewharton.rxbinding2:rxbinding:$versions.rxbinding" +deps.gson = "com.google.code.gson:gson:$versions.gson" +deps.okhttp3 = "com.squareup.okhttp3:okhttp:$versions.okhttp3" +deps.leakcanary = "com.squareup.leakcanary:leakcanary-android:$versions.leakcanary" + +//========xlibrary start=================// + +def xlibrary = [:] + +xlibrary.xui = "com.github.xuexiangjys:XUI:$versions.xui" +xlibrary.xupdate = "com.github.xuexiangjys:XUpdate:$versions.xupdate" +xlibrary.xaop_runtime = "com.github.xuexiangjys.XAOP:xaop-runtime:$versions.xaop" +xlibrary.xaop_plugin = "com.github.xuexiangjys.XAOP:xaop-plugin:$versions.xaop" +xlibrary.xutil_core = "com.github.xuexiangjys.XUtil:xutil-core:$versions.xutil" +xlibrary.xhttp2 = "com.github.xuexiangjys:XHttp2:$versions.xhttp2" +xlibrary.xpage_lib = "com.github.xuexiangjys.XPage:xpage-lib:$versions.xpage" +xlibrary.xpage_compiler = "com.github.xuexiangjys.XPage:xpage-compiler:$versions.xpage" +xlibrary.xrouter_runtime = "com.github.xuexiangjys.XRouter:xrouter-runtime:$versions.xrouter" +xlibrary.xrouter_compiler = "com.github.xuexiangjys.XRouter:xrouter-compiler:$versions.xrouter" +xlibrary.xrouter_plugin = "com.github.xuexiangjys.XRouter:xrouter-plugin:$versions.xrouter" + +deps.xlibrary = xlibrary + +//========xlibrary end=================// + +ext.deps = deps + +def build_versions = [:] +build_versions.min_sdk = 19 +build_versions.target_sdk = 29 +build_versions.build_tools = "29.0.3" +ext.build_versions = build_versions + +def app_release = [:] +app_release.storeFile = "../keystores/android.keystore" +app_release.storePassword = "xuexiang" +app_release.keyAlias = "android.keystore" +app_release.keyPassword = "xuexiang" + +ext.app_release = app_release + +/** + * @return 是否为release + */ +def isRelease() { + Gradle gradle = getGradle() + String tskReqStr = gradle.getStartParameter().getTaskRequests().toString() + + Pattern pattern + if (tskReqStr.contains("assemble")) { + println tskReqStr + pattern = Pattern.compile("assemble(\\w*)(Release|Debug)") + } else { + pattern = Pattern.compile("generate(\\w*)(Release|Debug)") + } + Matcher matcher = pattern.matcher(tskReqStr) + + if (matcher.find()) { + String task = matcher.group(0).toLowerCase() + println("[BuildType] Current task: " + task) + return task.contains("release") + } else { + println "[BuildType] NO MATCH FOUND" + return true + } +} + +ext.isRelease = this.&isRelease + +//默认添加代码仓库路径 +static def addRepos(RepositoryHandler handler) { + handler.mavenLocal() + handler.google { url 'https://maven.aliyun.com/repository/google' } + handler.jcenter { url 'https://maven.aliyun.com/repository/jcenter' } + handler.mavenCentral { url 'https://maven.aliyun.com/repository/central' } + handler.maven { url "https://jitpack.io" } + handler.maven { url 'https://maven.aliyun.com/repository/public' } + handler.maven { url "https://repo1.maven.org/maven2/" } + handler.maven { url 'https://oss.sonatype.org/content/repositories/public' } + //Add the Local repository + handler.maven { url 'LocalRepository' } +} + +ext.addRepos = this.&addRepos + + +//自动添加XAOP和XRouter插件 +project.buildscript.configurations.each { configuration -> + def dependencies = getProject().dependencies + if (configuration.name == "classpath") { + //XAOP插件 + configuration.dependencies.add(dependencies.create(deps.xlibrary.xaop_plugin)) + //XRouter插件 + configuration.dependencies.add(dependencies.create(deps.xlibrary.xrouter_plugin)) + } +} \ No newline at end of file diff --git a/OCRTool/.idea/inspectionProfiles/Project_Default.xml b/OCRTool/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..85fda15 --- /dev/null +++ b/OCRTool/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,66 @@ + + + + \ No newline at end of file diff --git a/OCRTool/.idea/sonarlint/issuestore/1/e/1e24bf866dc51c9dad21292d7b33d6d8c8c34cce b/OCRTool/.idea/sonarlint/issuestore/1/e/1e24bf866dc51c9dad21292d7b33d6d8c8c34cce new file mode 100644 index 0000000..08428b0 --- /dev/null +++ b/OCRTool/.idea/sonarlint/issuestore/1/e/1e24bf866dc51c9dad21292d7b33d6d8c8c34cce @@ -0,0 +1,5 @@ + +l +java:S2629&"$Invoke method(s) only conditionally.(81J$08b7d507-5ddc-4e7a-b8f2-f3aa7e34f9d6 + +java:S2142J"^Either re-interrupt this method or rethrow the "InterruptedException" that can be caught here.(81J$6694eaa6-51da-4af5-9271-29eb55295b01 \ No newline at end of file diff --git a/OCRTool/.idea/sonarlint/issuestore/4/4/442292b8a7efeabbe4cc176709b833b1792140ec b/OCRTool/.idea/sonarlint/issuestore/4/4/442292b8a7efeabbe4cc176709b833b1792140ec new file mode 100644 index 0000000..e69de29 diff --git a/OCRTool/.idea/sonarlint/issuestore/5/1/51a2122a0d66f3177ddd273d6903a3d6beedca49 b/OCRTool/.idea/sonarlint/issuestore/5/1/51a2122a0d66f3177ddd273d6903a3d6beedca49 new file mode 100644 index 0000000..53bdc50 --- /dev/null +++ b/OCRTool/.idea/sonarlint/issuestore/5/1/51a2122a0d66f3177ddd273d6903a3d6beedca49 @@ -0,0 +1,3 @@ + +~ +java:S6813 "BRemove this field injection and use constructor injection instead.(J$5cd5a15d-e3e5-444c-b6da-e9273369ee7b \ No newline at end of file diff --git a/OCRTool/.idea/sonarlint/issuestore/8/4/84cd37784f4d386a07d29be93104fbda8cddd566 b/OCRTool/.idea/sonarlint/issuestore/8/4/84cd37784f4d386a07d29be93104fbda8cddd566 new file mode 100644 index 0000000..6be8ffd --- /dev/null +++ b/OCRTool/.idea/sonarlint/issuestore/8/4/84cd37784f4d386a07d29be93104fbda8cddd566 @@ -0,0 +1,7 @@ + +z +java:S1854"7Remove this useless assignment to local variable "app".(81J$2867df20-9e6a-4adb-aee8-c9224cf3a2d0 +k +java:S1481"(Remove this unused "app" local variable.(81J$1df203aa-b9af-4f3d-be46-41952d3b5306 +~ java:S125"