# 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计算机视觉库