You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

101 lines
6.4 KiB
Markdown

3 years ago
# MainCar - 主车远端服务程序
- 本程序用于嵌入式比赛中Android部分识别/控制相关功能的实现。
- 程序最初版写于2022-09
3 years ago
- 作者UnknownObject 技术支持UnknownNetworkService
3 years ago
## 使用和后续开发说明
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计算机视觉库