diff --git a/ReadMe.md b/ReadMe.md new file mode 100644 index 0000000..8178ecc --- /dev/null +++ b/ReadMe.md @@ -0,0 +1,101 @@ +# MainCar - 主车远端服务程序 + +- 本程序用于嵌入式比赛中Android部分识别/控制相关功能的实现。 +- 程序最初版写于2022-09 +- 作者:UnknownObject; 技术支持:UnknownNetworkService Group + +## 使用和后续开发说明 + +1. 本程序在开发时(2022-09)使用的SDK/NDK/Gradle版本是最新的,后续开发时注意随时更新版本并记录在本文档中: + - Target SDK版本:32 + - Compile SDK版本:32 + - Min SDK版本:26 + - Gradle Plugin版本:7.2.1 + - Gradle版本:7.3.3 + - Android Studio IDE版本:2021.2.1 +2. 本程序识别与图像处理相关功能均使用C/C++以原生库的形式实现 +3. 部分算法/库文件引用(或改编、合并、抽取)自其他第三方库,尽可能地不要改动它们 +4. 如有项目结构/用法上的更新,记得更新这个文档 + +## 项目结构简述 + +### 源代码 + +- ```cpp``` -> 所有的C/C++源代码文件 + - ```lib_hyper_lpr``` -> 开源库HyperLPR的导出,用于进行车牌识别 + - ```include``` -> HyperLPR头文件 + - ```src``` -> HyperLPR源文件 + - ```javaWarpper.cpp``` -> HyperLPR中负责提供Java接口的文件 + - ```lib_serial_port``` -> 从Google示例中抽取的串口通信库 + - ```opencv_libqr``` -> 从OpenCV源代码中提取并改写的多个二维码检测/分离库 + - ```CMakeLists.txt``` -> 用于CMake编译的工程文件,记录着所有的原生库信息和如何进行编译 + - ```car_license.h/car_license.cpp``` -> 基于模板匹配的车牌识别 + - ```car_license_ocr.h/car_license_ocr.cpp``` -> 基于OCR的车牌识别(图像预处理部分) + - ```color_reco.h/color_reco.cpp``` -> 颜色识别库(仅作为形状颜色识别的子库使用,无除自检外的Java接口) + - ```debug_logger.h``` -> 用于调试的原生库日志再封装 + - ```env_test.cpp``` -> NDK编译与原生OpenCV自检库,用于检查库是否正确导入及NDK动态库是否能正常加载 + - ```image_processor.h/image_processor.cpp``` -> 形状颜色和交通标志识别的图像预处理库(仅作为子库使用,无除自检外的Java接口) + - ```main_car_aes.h/main_car_aes.cpp``` -> 数据处理算法库,这个库中的内容需要根据比赛时的算法现场编写 + - ```ocr_text.h/ocr_text.cpp``` -> OCR(光学字符识别)的图像预处理库 + - ```opencv_support.h/opencv_support.cpp``` -> 图像格式转换库,提供Android中Bitmap与OpenCV中Mat的互相转换 + - ```public_types.h/public_types.cpp``` -> 识别中使用到的类/结构体/枚举类型的定义 + - ```qr_code_decode.h/qr_code_decode.cpp``` -> 二维码识别的图像预处理和切分 + - ```shape_color_reco.h/shape_color_reco.cpp``` -> 形状颜色识别 + - ```shape_reco.h/shape_reco.cpp``` -> 形状识别库(仅作为形状颜色识别的子库使用,无除自检外的Java接口) + - ```traffic_light.h/traffic_light.cpp``` -> 交通灯识别 + - ```traffic_sign.h/traffic_sign.cpp``` -> 基于模板匹配的交通标志识别 +- ```java``` -> 所有的Java源代码文件 + - ```com.uns.maincar``` -> 主包名 + - ```communication``` -> 通信相关代码 + - ```CommandEncoder``` -> 指令编码类 + - ```CommandDecoder``` -> 指令解码类 + - ```DataTransferCore``` -> 通信接口,定义了基本的通信函数 + - ```SerialPortTransferCore``` -> 通信接口的实现类,实现了串口通信 + - ```WifiTransferCore``` -> 通信接口的实现类,实现了Wifi通信 + - ```constrants``` -> 常量和枚举类型定义 + - ```Commands``` -> 与主车通信的指令定义 + - ```Flags``` -> 主/从车的移动控制指令和一些其他的常量 + - ```GlobalColor``` -> 颜色种类的枚举类型 + - ```GlobalShape``` -> 形状种类的枚举类型 + - ```GlobalSignType``` -> 交通标志种类的枚举类型 + - ```cpp_interface``` -> 原生库对应的Java接口类 + - ```hyperlpr``` -> HyperLPR的接口库 + - ```DeepAssetUtil``` -> HyperLPR资源管理接口 + - ```PlateRecognition``` -> HyperLPR识别接口 + - ```CarLicense``` -> 车牌识别接口类,包含模板匹配、OCR、HyperLPR三种识别方式 + - ```EnvTest``` -> 自检接口类,包含了全部的原生库自检 + - ```MainCarAES``` -> 数据处理算法接口类 + - ```OCR``` -> OCR接口类,提供静态文本识别功能并对基于OCR的车牌识别提供支持 + - ```QRDecode``` -> 二维码识别接口类,提供单个/多个二维码识别功能 + - ```ShapeColor``` -> 形状颜色识别接口类 + - ```TrafficLight``` -> 交通灯识别接口类 + - ```TrafficSign``` -> 交通标志识别接口类 + - ```gui``` -> 图形用户界面(Activity) + - ```MainActivity``` -> 程序主界面和初始化 + - ```MovementController``` -> 主车和从车的移动控制(警告:该功能并不完善,仅供调试及娱乐用途) + - ```PermissionGetter``` -> 外部存储权限获取 + - ```tools``` -> 一些工具类 + - ```ImageReleaser``` -> 车牌和交通标志的模板图释放类 + - ```OCRDataReleaser``` -> OCR训练模型释放类 + - ```TextFilter``` -> 文本过滤器 + +### 资源文件 + +- ```assets``` + - ```lpr``` -> HyperLPR的资源文件 +- ```res``` + - ```drawable``` + - ```cl_x.jpg``` -> 车牌识别的字符模板 + - ```tf_x.jpg``` -> 交通标志识别的模板 + - ```ocr_self_test.png``` -> OCR自检图片 + - ```qr_decode_test``` -> 二维码识别自检图片 + - ```raw``` + - ```chi_sim.traineddata``` -> 简体中文OCR模型 + - ```eng.traineddata``` -> 英文(和数字)OCR模型 + +### 第三方库 + +- ```libs``` + - ```camerautil.jar``` -> 百科融创摄像头操作库 + - ```zxingcpp-release.aar``` -> ZXing二维码识别库 +- ```opencv``` -> OpenCV计算机视觉库 \ No newline at end of file diff --git a/app/src/main/res/drawable/ocr_demo.png b/app/src/main/res/drawable/ocr_demo.png deleted file mode 100644 index 6b07db0..0000000 Binary files a/app/src/main/res/drawable/ocr_demo.png and /dev/null differ diff --git a/opencv/build/intermediates/cxx/Debug/6x33t2q6/meta/x86/generate_cxx_metadata_296_timing.txt b/opencv/build/intermediates/cxx/Debug/6x33t2q6/meta/x86/generate_cxx_metadata_296_timing.txt index 581e979..71ad0aa 100644 --- a/opencv/build/intermediates/cxx/Debug/6x33t2q6/meta/x86/generate_cxx_metadata_296_timing.txt +++ b/opencv/build/intermediates/cxx/Debug/6x33t2q6/meta/x86/generate_cxx_metadata_296_timing.txt @@ -19,3 +19,5 @@ generate_cxx_metadata [gap of 12ms] generate_cxx_metadata completed in 643ms +# C/C++ build system timings + diff --git a/opencv/build/intermediates/cxx/Debug/6x33t2q6/meta/x86/generate_cxx_metadata_31_timing.txt b/opencv/build/intermediates/cxx/Debug/6x33t2q6/meta/x86/generate_cxx_metadata_31_timing.txt index 32a2e40..9e616b5 100644 --- a/opencv/build/intermediates/cxx/Debug/6x33t2q6/meta/x86/generate_cxx_metadata_31_timing.txt +++ b/opencv/build/intermediates/cxx/Debug/6x33t2q6/meta/x86/generate_cxx_metadata_31_timing.txt @@ -156,3 +156,5 @@ generate_cxx_metadata create-invalidation-state 10ms generate_cxx_metadata completed in 14ms +# C/C++ build system timings + diff --git a/opencv/build/intermediates/cxx/Debug/6x33t2q6/meta/x86/metadata_generation_record.json b/opencv/build/intermediates/cxx/Debug/6x33t2q6/meta/x86/metadata_generation_record.json index 107fcb5..1307eb0 100644 --- a/opencv/build/intermediates/cxx/Debug/6x33t2q6/meta/x86/metadata_generation_record.json +++ b/opencv/build/intermediates/cxx/Debug/6x33t2q6/meta/x86/metadata_generation_record.json @@ -11,11 +11,11 @@ "fieldsDescending": {} }, "memoizedSize": -1, - "memoizedHashCode": -1159070138 + "memoizedHashCode": 931437989 }, { "level_": 0, - "message_": "rebuilding JSON F:\\Android-APK\\MainCar\\opencv\\.cxx\\Debug\\6x33t2q6\\x86\\android_gradle_build.json due to:", + "message_": "JSON \u0027F:\\Android-APK\\MainCar\\opencv\\.cxx\\Debug\\6x33t2q6\\x86\\android_gradle_build.json\u0027 was up-to-date", "file_": "F:\\Android-APK\\MainCar\\opencv\\libcxx_helper\\CMakeLists.txt", "tag_": "debug|x86", "diagnosticCode_": 0, @@ -25,119 +25,7 @@ "fieldsDescending": {} }, "memoizedSize": -1, - "memoizedHashCode": -1355196926 - }, - { - "level_": 0, - "message_": "- force flag, will remove stale json folder", - "file_": "F:\\Android-APK\\MainCar\\opencv\\libcxx_helper\\CMakeLists.txt", - "tag_": "debug|x86", - "diagnosticCode_": 0, - "memoizedIsInitialized": 1, - "unknownFields": { - "fields": {}, - "fieldsDescending": {} - }, - "memoizedSize": -1, - "memoizedHashCode": -1958375788 - }, - { - "level_": 0, - "message_": "removing stale contents from \u0027F:\\Android-APK\\MainCar\\opencv\\.cxx\\Debug\\6x33t2q6\\x86\u0027", - "file_": "F:\\Android-APK\\MainCar\\opencv\\libcxx_helper\\CMakeLists.txt", - "tag_": "debug|x86", - "diagnosticCode_": 0, - "memoizedIsInitialized": 1, - "unknownFields": { - "fields": {}, - "fieldsDescending": {} - }, - "memoizedSize": -1, - "memoizedHashCode": -757246036 - }, - { - "level_": 0, - "message_": "created folder \u0027F:\\Android-APK\\MainCar\\opencv\\.cxx\\Debug\\6x33t2q6\\x86\u0027", - "file_": "F:\\Android-APK\\MainCar\\opencv\\libcxx_helper\\CMakeLists.txt", - "tag_": "debug|x86", - "diagnosticCode_": 0, - "memoizedIsInitialized": 1, - "unknownFields": { - "fields": {}, - "fieldsDescending": {} - }, - "memoizedSize": -1, - "memoizedHashCode": -1074877000 - }, - { - "level_": 0, - "message_": "executing cmake Executable : D:\\Android_SDK\\cmake\\3.18.1\\bin\\cmake.exe\narguments : \n-HF:\\Android-APK\\MainCar\\opencv\\libcxx_helper\n-DCMAKE_SYSTEM_NAME\u003dAndroid\n-DCMAKE_EXPORT_COMPILE_COMMANDS\u003dON\n-DCMAKE_SYSTEM_VERSION\u003d26\n-DANDROID_PLATFORM\u003dandroid-26\n-DANDROID_ABI\u003dx86\n-DCMAKE_ANDROID_ARCH_ABI\u003dx86\n-DANDROID_NDK\u003dD:\\Android_SDK\\ndk\\21.4.7075529\n-DCMAKE_ANDROID_NDK\u003dD:\\Android_SDK\\ndk\\21.4.7075529\n-DCMAKE_TOOLCHAIN_FILE\u003dD:\\Android_SDK\\ndk\\21.4.7075529\\build\\cmake\\android.toolchain.cmake\n-DCMAKE_MAKE_PROGRAM\u003dD:\\Android_SDK\\cmake\\3.18.1\\bin\\ninja.exe\n-DCMAKE_LIBRARY_OUTPUT_DIRECTORY\u003dF:\\Android-APK\\MainCar\\opencv\\build\\intermediates\\cxx\\Debug\\6x33t2q6\\obj\\x86\n-DCMAKE_RUNTIME_OUTPUT_DIRECTORY\u003dF:\\Android-APK\\MainCar\\opencv\\build\\intermediates\\cxx\\Debug\\6x33t2q6\\obj\\x86\n-DCMAKE_BUILD_TYPE\u003dDebug\n-BF:\\Android-APK\\MainCar\\opencv\\.cxx\\Debug\\6x33t2q6\\x86\n-GNinja\n-DANDROID_STL\u003dc++_shared\njvmArgs : \n\n", - "file_": "F:\\Android-APK\\MainCar\\opencv\\libcxx_helper\\CMakeLists.txt", - "tag_": "debug|x86", - "diagnosticCode_": 0, - "memoizedIsInitialized": 1, - "unknownFields": { - "fields": {}, - "fieldsDescending": {} - }, - "memoizedSize": -1, - "memoizedHashCode": 155087040 - }, - { - "level_": 0, - "message_": "Executable : D:\\Android_SDK\\cmake\\3.18.1\\bin\\cmake.exe\narguments : \n-HF:\\Android-APK\\MainCar\\opencv\\libcxx_helper\n-DCMAKE_SYSTEM_NAME\u003dAndroid\n-DCMAKE_EXPORT_COMPILE_COMMANDS\u003dON\n-DCMAKE_SYSTEM_VERSION\u003d26\n-DANDROID_PLATFORM\u003dandroid-26\n-DANDROID_ABI\u003dx86\n-DCMAKE_ANDROID_ARCH_ABI\u003dx86\n-DANDROID_NDK\u003dD:\\Android_SDK\\ndk\\21.4.7075529\n-DCMAKE_ANDROID_NDK\u003dD:\\Android_SDK\\ndk\\21.4.7075529\n-DCMAKE_TOOLCHAIN_FILE\u003dD:\\Android_SDK\\ndk\\21.4.7075529\\build\\cmake\\android.toolchain.cmake\n-DCMAKE_MAKE_PROGRAM\u003dD:\\Android_SDK\\cmake\\3.18.1\\bin\\ninja.exe\n-DCMAKE_LIBRARY_OUTPUT_DIRECTORY\u003dF:\\Android-APK\\MainCar\\opencv\\build\\intermediates\\cxx\\Debug\\6x33t2q6\\obj\\x86\n-DCMAKE_RUNTIME_OUTPUT_DIRECTORY\u003dF:\\Android-APK\\MainCar\\opencv\\build\\intermediates\\cxx\\Debug\\6x33t2q6\\obj\\x86\n-DCMAKE_BUILD_TYPE\u003dDebug\n-BF:\\Android-APK\\MainCar\\opencv\\.cxx\\Debug\\6x33t2q6\\x86\n-GNinja\n-DANDROID_STL\u003dc++_shared\njvmArgs : \n\n", - "file_": "F:\\Android-APK\\MainCar\\opencv\\libcxx_helper\\CMakeLists.txt", - "tag_": "debug|x86", - "diagnosticCode_": 0, - "memoizedIsInitialized": 1, - "unknownFields": { - "fields": {}, - "fieldsDescending": {} - }, - "memoizedSize": -1, - "memoizedHashCode": 700052607 - }, - { - "level_": 0, - "message_": "Exiting generation of F:\\Android-APK\\MainCar\\opencv\\.cxx\\Debug\\6x33t2q6\\x86\\compile_commands.json.bin normally", - "file_": "F:\\Android-APK\\MainCar\\opencv\\libcxx_helper\\CMakeLists.txt", - "tag_": "debug|x86", - "diagnosticCode_": 0, - "memoizedIsInitialized": 1, - "unknownFields": { - "fields": {}, - "fieldsDescending": {} - }, - "memoizedSize": -1, - "memoizedHashCode": -452835122 - }, - { - "level_": 0, - "message_": "done executing cmake", - "file_": "F:\\Android-APK\\MainCar\\opencv\\libcxx_helper\\CMakeLists.txt", - "tag_": "debug|x86", - "diagnosticCode_": 0, - "memoizedIsInitialized": 1, - "unknownFields": { - "fields": {}, - "fieldsDescending": {} - }, - "memoizedSize": -1, - "memoizedHashCode": -365654144 - }, - { - "level_": 0, - "message_": "write command file F:\\Android-APK\\MainCar\\opencv\\.cxx\\Debug\\6x33t2q6\\x86\\metadata_generation_command.txt", - "file_": "F:\\Android-APK\\MainCar\\opencv\\libcxx_helper\\CMakeLists.txt", - "tag_": "debug|x86", - "diagnosticCode_": 0, - "memoizedIsInitialized": 1, - "unknownFields": { - "fields": {}, - "fieldsDescending": {} - }, - "memoizedSize": -1, - "memoizedHashCode": 1138716982 + "memoizedHashCode": -1430839592 }, { "level_": 0, @@ -151,6 +39,6 @@ "fieldsDescending": {} }, "memoizedSize": -1, - "memoizedHashCode": 1572418940 + "memoizedHashCode": -632040229 } ] \ No newline at end of file diff --git a/opencv/build/intermediates/cxx/RelWithDebInfo/4h3t2zj4/meta/x86/generate_cxx_metadata_296_timing.txt b/opencv/build/intermediates/cxx/RelWithDebInfo/4h3t2zj4/meta/x86/generate_cxx_metadata_296_timing.txt index c4a800a..d43933f 100644 --- a/opencv/build/intermediates/cxx/RelWithDebInfo/4h3t2zj4/meta/x86/generate_cxx_metadata_296_timing.txt +++ b/opencv/build/intermediates/cxx/RelWithDebInfo/4h3t2zj4/meta/x86/generate_cxx_metadata_296_timing.txt @@ -7,3 +7,5 @@ generate_cxx_metadata completed in 18ms # C/C++ build system timings +# C/C++ build system timings + diff --git a/opencv/build/intermediates/cxx/RelWithDebInfo/4h3t2zj4/meta/x86/generate_cxx_metadata_31_timing.txt b/opencv/build/intermediates/cxx/RelWithDebInfo/4h3t2zj4/meta/x86/generate_cxx_metadata_31_timing.txt index 5be3558..ccc7315 100644 --- a/opencv/build/intermediates/cxx/RelWithDebInfo/4h3t2zj4/meta/x86/generate_cxx_metadata_31_timing.txt +++ b/opencv/build/intermediates/cxx/RelWithDebInfo/4h3t2zj4/meta/x86/generate_cxx_metadata_31_timing.txt @@ -86,3 +86,5 @@ generate_cxx_metadata completed in 23ms # C/C++ build system timings generate_cxx_metadata 10ms +# C/C++ build system timings + diff --git a/opencv/build/intermediates/cxx/RelWithDebInfo/4h3t2zj4/meta/x86/metadata_generation_record.json b/opencv/build/intermediates/cxx/RelWithDebInfo/4h3t2zj4/meta/x86/metadata_generation_record.json index 794bda9..62b5b5d 100644 --- a/opencv/build/intermediates/cxx/RelWithDebInfo/4h3t2zj4/meta/x86/metadata_generation_record.json +++ b/opencv/build/intermediates/cxx/RelWithDebInfo/4h3t2zj4/meta/x86/metadata_generation_record.json @@ -11,7 +11,7 @@ "fieldsDescending": {} }, "memoizedSize": -1, - "memoizedHashCode": -762021707 + "memoizedHashCode": 919642793 }, { "level_": 0, @@ -25,7 +25,7 @@ "fieldsDescending": {} }, "memoizedSize": -1, - "memoizedHashCode": -1113936271 + "memoizedHashCode": 567728229 }, { "level_": 0, @@ -39,6 +39,6 @@ "fieldsDescending": {} }, "memoizedSize": -1, - "memoizedHashCode": 1969467371 + "memoizedHashCode": -643835425 } ] \ No newline at end of file diff --git a/opencv/build/intermediates/cxx/create_cxx_tasks_296_timing.txt b/opencv/build/intermediates/cxx/create_cxx_tasks_296_timing.txt index cba6ec3..2477201 100644 --- a/opencv/build/intermediates/cxx/create_cxx_tasks_296_timing.txt +++ b/opencv/build/intermediates/cxx/create_cxx_tasks_296_timing.txt @@ -166,3 +166,15 @@ create_cxx_tasks create-initial-cxx-model completed in 85ms create_cxx_tasks completed in 86ms +# C/C++ build system timings +create_cxx_tasks + create-initial-cxx-model + create-module-model + create-cmake-model 33ms + create-module-model completed in 36ms + create-module-model + create-cmake-model 33ms + create-module-model completed in 36ms + create-initial-cxx-model completed in 89ms +create_cxx_tasks completed in 90ms + diff --git a/opencv/build/intermediates/cxx/create_cxx_tasks_31_timing.txt b/opencv/build/intermediates/cxx/create_cxx_tasks_31_timing.txt index 036f56f..67a6217 100644 --- a/opencv/build/intermediates/cxx/create_cxx_tasks_31_timing.txt +++ b/opencv/build/intermediates/cxx/create_cxx_tasks_31_timing.txt @@ -864,3 +864,16 @@ create_cxx_tasks create-initial-cxx-model completed in 87ms create_cxx_tasks completed in 89ms +# C/C++ build system timings +create_cxx_tasks + create-initial-cxx-model + create-module-model + create-cmake-model 34ms + create-module-model completed in 36ms + create-module-model + create-cmake-model 31ms + create-module-model completed in 33ms + [gap of 10ms] + create-initial-cxx-model completed in 88ms +create_cxx_tasks completed in 89ms + diff --git a/opencv/build/intermediates/cxx/ndk_locator_record_50t213g5.log b/opencv/build/intermediates/cxx/ndk_locator_record_50t213g5.log index de322f2..9a6ba44 100644 --- a/opencv/build/intermediates/cxx/ndk_locator_record_50t213g5.log +++ b/opencv/build/intermediates/cxx/ndk_locator_record_50t213g5.log @@ -11,7 +11,7 @@ "fieldsDescending": {} }, "memoizedSize": -1, - "memoizedHashCode": -585486183 + "memoizedHashCode": 1505021944 }, { "level_": 0, @@ -25,7 +25,7 @@ "fieldsDescending": {} }, "memoizedSize": -1, - "memoizedHashCode": 206701920 + "memoizedHashCode": -1997757249 }, { "level_": 0, @@ -39,7 +39,7 @@ "fieldsDescending": {} }, "memoizedSize": -1, - "memoizedHashCode": 911163113 + "memoizedHashCode": -1293296056 }, { "level_": 0, @@ -53,7 +53,7 @@ "fieldsDescending": {} }, "memoizedSize": -1, - "memoizedHashCode": -1520990113 + "memoizedHashCode": 569518014 }, { "level_": 0, @@ -67,7 +67,7 @@ "fieldsDescending": {} }, "memoizedSize": -1, - "memoizedHashCode": 1881287601 + "memoizedHashCode": -323171568 }, { "level_": 0, @@ -81,6 +81,6 @@ "fieldsDescending": {} }, "memoizedSize": -1, - "memoizedHashCode": -2077699476 + "memoizedHashCode": 12808651 } ] \ No newline at end of file