# SmartGarage **Repository Path**: EastWen/smart-garage ## Basic Information - **Project Name**: SmartGarage - **Description**: 基于HyperLPR3,讯飞星火语音合成API的Linux高并发智能车库系统 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2025-11-18 - **Last Updated**: 2026-05-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 智能车库管理系统 这是一个用C语言嵌入式 Linux 做的高并发的车库管理系统。 ## 项目简介 我们的系统包含下面这些功能: - **相册模块** - 可以处理 BMP、JPEG、PNG 这些不同格式的图片 - **拍照模块** - 用于拍摄车牌照片,然后识别车牌号 - **RFID 识别模块** - 用来识别车辆的 RFID 卡 - **数据库模块** - 用 SQLite 来存车辆的信息 - **音频模块** - 可以播放语音提示 - **LCD 显示模块** - 负责在屏幕上显示内容 - **按键模块** - 处理按键输入,切换LCD拍照/相册模式 为了实现高并发系统,我们使用了多种技术: - **线程池管理** - 用来同时处理多个任务 - **管道通信** - 用于进程间数据传输 - **共享内存** - 用于进程间共享数据 - **信号量** - 用于进程同步 - **事件轮询(epoll)** - 用于高效处理多个I/O事件 ## 项目结构 我们的项目目录结构是这样的: ``` SmartGarage/ ├── CMakeLists.txt # 主配置文件 ├── include/ # 公共头文件 ├── bin/ # 编译后的可执行文件 ├── common/ # 公共代码模块 │ ├── CMakeLists.txt │ ├── event_loop.c # 事件循环 │ └── pthread_pool.c # 线程池 ├── Album/ # 图像处理模块 │ ├── CMakeLists.txt │ ├── Album.c # 主程序 │ ├── bmp.c, jpg.c, png.c # 图片格式处理 │ └── include/ # 头文件 ├── takePhoto/ # 拍照模块 │ ├── CMakeLists.txt │ └── takePhoto.c ├── RFID/ # RFID 识别模块 │ ├── CMakeLists.txt │ └── RFID.c ├── sqlite/ # 数据库模块 │ ├── CMakeLists.txt │ ├── SQLite.c ├── Audio/ # 音频模块 │ ├── CMakeLists.txt │ └── audio.c ├── drivers/ # 驱动模块 │ ├── key_drv.c # 按键驱动 │ └── spi_lcd.c # LCD 驱动 └── ...(其他文件) ``` ## 构建要求 ### 需要的工具 - **CMake**: 3.12 或更高版本 - **交叉编译工具链**: arm-none-linux-gnueabi 5.4.0 - **OpenCV版本**: 4.10.0 - **MNN版本**: 3.2.0 - **目标平台**: GEC6818 ## 第三方库和组件 ### 开源库 - **HyperLPR3** - 车牌识别库 (Apache License 2.0) - **OpenCV** - 计算机视觉库 (Apache License 2.0) - **MNN** - 神经网络推理框架 (Apache License 2.0) - **SQLite3** - 嵌入式数据库 (公共领域) - **ALSA** - 音频系统 (LGPL) ### Linux 内核组件 - **V4L2 (Video4Linux2)** - 视频采集框架 (GPLv2) - 用于摄像头视频流采集 - 支持多种图像格式(JPEG, YUYV等) - 提供内存映射高效数据访问 ### 云服务 API - **讯飞星火语音合成** - 在线TTS服务 - 需要API密钥和网络连接 - 遵循讯飞开放平台服务条款 ### 需要的库 - **zlib**: 压缩库 - **libpng**: PNG 图像处理库 - **libjpeg**: JPEG 图像处理库 - **pthread**: 线程库 - **dl**: 动态加载库 - **rt**: 实时库 - **m**: 数学库 需要的可以在此下载打包好的源码(有小改动)、头文件和库: https://pan.baidu.com/s/1d48nRDPMH2qKsEQE02A9Tw?pwd=zaxh 提取码: zaxh 下载好后放置在与这个readme.md的同级目录上 ## 交叉编译配置 项目使用 ARM 交叉编译工具链,配置在 arm-toolchain.cmake 文件中: ``` # 指定目标系统 set(CMAKE_SYSTEM_NAME Linux) set(CMAKE_SYSTEM_PROCESSOR arm) # 指定交叉编译器的路径 set(TOOLCHAINDIR "/home/gec/6818GEC/prebuilts/gcc/linux-x86/arm/arm-eabi-4.8/bin") set(CMAKE_C_COMPILER ${TOOLCHAINDIR}/arm-linux-gcc) set(CMAKE_CXX_COMPILER ${TOOLCHAINDIR}/arm-linux-g++) # 设置编译器标志 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=armv7-a -mfpu=neon -mfloat-abi=softfp -std=gnu99") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=armv7-a -mfpu=neon -mfloat-abi=softfp -std=gnu++11") ``` ## 模块说明 ### 主程序 (Garage) - **位置**: 根目录 - **功能**: 系统主程序,管理所有模块 - **依赖**: 需要所有子模块 ### 相册模块 (Album) - **库文件**: Bmp, Jpg, Png - **可执行文件**: Album - **功能**: 处理各种图片格式 ### 拍照模块 (takePhoto) - **可执行文件**: takePhoto, PlateRecDemo - **功能**: 拍摄车牌照片,然后识别车牌号 - **车牌识别测试程序**: PlateRecDemo - **用途**: 测试车牌识别功能 - **使用方法**: ./PlateRecDemo <图片路径> - **输出**: 在控制台显示识别结果(车牌类型、号码和置信度) - **摄像头采集**: 模块使用 V4L2进行视频帧采集,用于实时抓拍和识别。 ### 数据库模块 (SQLite) - **功能**: 存储和查询车辆信息 - **特性**: 使用 SQLite3 数据库 ### RFID 模块 - **功能**: 识别车辆 RFID 卡 - **集成**: 和数据库模块一起工作 ### 音频模块 - **功能**: 提供语音提示和播放 - **架构**: 客户端-服务器模式 - **采集接口**: 使用alsa在ARM设备上播放合成的WAV文件 ### 驱动模块 - **按键驱动**: - **功能**: 处理按键输入 - **模式切换**: 通过按键切换两种显示模式 - 相册模式:显示车辆照片 - 拍照模式:显示实时摄像头画面 - **LCD 驱动**: - **功能**: 提供 framebuffer 接口用于显示图像与 GUI,支持区域刷新与清屏 - **接口**: 支持标准 Linux framebuffer 与自定义 IOCTL(刷新/清屏/开关/设置区域) - **特性**: 支持 1024×600、ARGB8888→RGB565 转换、可选双缓冲。 ## 构建与运行 ### 构建步骤 1. **准备交叉编译环境** ```bash # 确保已安装 ARM 交叉编译工具链 export PATH=$PATH:/usr/local/arm/5.4.0/usr/bin # 确保已配置MNN和OpenCV对应编译工具链的版本 file /usr/local/arm/5.4.0/usr/lib/libopencv*.so.4.10.0 file /usr/local/arm/5.4.0/usr/lib/libMNN*.so ``` 2. **构建项目** ```bash # 创建构建目录 mkdir -p build && cd build # 配置项目 cmake -DCMAKE_TOOLCHAIN_FILE=../arm-toolchain.cmake .. # 编译项目 make -j$(nproc) ``` 3. **构建驱动** ```bash # 进入驱动目录 cd drivers # 编译驱动模块 make ``` ### 车牌识别测试程序 PlateRecDemo 是一个独立的车牌识别测试程序,可以单独运行测试车牌识别功能。 **使用方法:** ```bash ./PlateRecDemo <图片路径>(3rd_party/resource/images上有可测试图片) ``` **输出:** - 控制台显示识别结果(车牌类型、号码和置信度) ### 运行步骤 1. **部署到目标设备** ```bash # 将编译好的所有文件复制到目标设备(如果不需要测试车牌识别那就不用复制PlateRecDemo) scp -r bin/ root@<目标设备IP>:/root/ scp drivers/key_drv.ko root@<目标设备IP>:/root/ ``` 2. **在目标设备上运行** ```bash # 加载驱动 insmod key_drv.ko insmod spi_lcd.ko # 运行主程序 cd bin ./Garage ... ``` ### 注意事项 - 确保目标设备上已安装需要的库 - 检查设备权限,确保有权限加载驱动和运行程序 - 如果找不到库文件,请设置 LD_LIBRARY_PATH 环境变量 ## 项目状态和问题 ### 现在的情况 - **基本功能**: 相册、拍照、RFID识别、数据库管理、音频播放这些功能已经做好了 - **并发处理**: 使用多种技术实现高并发系统 - 线程池管理多个任务 - 管道实现进程间通信 - 共享内存实现数据共享 - 信号量实现进程同步 - 事件轮询(epoll)实现高效I/O事件处理 - 多进程架构处理不同功能 - 信号处理实现进程间通信 - 互斥锁和条件变量实现线程同步 - **界面显示**: LCD显示模块和按键已经集成 - 按键可切换相册模式和拍照模式 ### 未来计划 - 增加错误处理和日志记录 - 优化并发性能和资源使用 ## 致谢与参考 ### 核心技术依赖 本项目建立在众多优秀的开源项目之上,特别感谢: - **HyperLPR3** ([GitHub](https://github.com/szad670401/HyperLPR)) - 提供了高精度的车牌识别能力 - Apache 2.0 许可证让集成变得简单 - **OpenCV** ([官网](https://opencv.org/)) - 强大的图像处理和计算机视觉功能 - 丰富的文档和社区支持 - **讯飞星火语音合成** ([开放平台](https://www.xfyun.cn/)) - 高质量的文本转语音服务 - 稳定的 API 接口 ### 开发工具 感谢以下工具在开发过程中提供的支持: - CMake - 跨平台构建系统 - Git - 版本控制