# 识别视频审核平台 **Repository Path**: leewj120/ai_video_platform ## Basic Information - **Project Name**: 识别视频审核平台 - **Description**: 接收边缘端识别问题平台 - **Primary Language**: Java - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-09-01 - **Last Updated**: 2026-09-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # AI 视频识别中台系统

logo

AI 边缘设备视频识别与远程管理平台

Gitee SpringBoot Vue License

--- ## 项目简介 本系统是面向 **AI 边缘设备(识别盒子)** 的视频识别问题采集与远程管理中台,主要用于道路病害、市政设施等场景的智能识别与数据管理。支持边缘设备实时上报识别结果(图片/视频)、远程 OTA 升级(固件/模型)、心跳监控、数据同步等核心功能。 **核心业务场景**: - 🚗 车载/固定 AI 识别设备实时上报道路病害、井盖缺失、积水等识别问题 - 📡 设备心跳监控与 GPS 轨迹记录 - 🔧 远程下发 OTA 升级指令(升级应用、更新模型、清除数据) - 📊 识别问题数据管理、拦截规则配置、数据同步到外部业务平台 - 🖥️ 大屏可视化展示识别统计数据 --- ## 系统架构 ### 技术栈 **后端**: - Spring Boot 2.5.14 + Spring Security + JWT - MyBatis + MyBatis-Plus + PageHelper - Redis(Lettuce)+ Druid 连接池 - Quartz(内存模式)+ Spring @Scheduled - Socket.IO(已废弃,可移除) - Swagger 3.0 接口文档 **前端**: - Vue 2.6 + Vue Router + Vuex - Element UI 2.x - Axios + ECharts - FLV.js(视频播放) **部署**: - Docker 容器化部署 - Nginx 反向代理(前后端分离) - 外部 Python 服务(OTA 升级执行) ### 模块划分 ``` atmosphere-ai-middleware-nanchuan/ ├── zxsl-admin # Spring Boot 启动模块,Web 服务入口 ├── zxsl-framework # 框架核心(Security、Redis、异常处理、切面) ├── zxsl-system # 系统管理模块(用户/角色/菜单/字典/日志等) ├── zxsl-common # 通用工具类(工具、常量、异常、注解) ├── zxsl-video # 核心业务模块(设备上报/OTA/事件管理) ├── zxsl-quartz # 定时任务管理(Quartz,内存模式) ├── zxsl-generator # 代码生成器(开发期工具) ├── zxsl-ui # 管理后台前端(Vue2 + Element UI) ├── zxsl-screen-ui # 大屏展示前端(独立部署) ├── sql/ # 数据库脚本(quartz.sql) └── doc/ # 文档(若依环境手册) ``` --- ## 核心功能 ### 1. 设备上报接收(zxsl-video 核心) - **`POST /api/detections/upload`**:接收边缘设备识别结果上报(JSON 格式,含经纬度、识别类型、置信度等) - **`POST /api/images/upload`**:接收识别问题图片上传(支持水印叠加,可配置开关) - **`POST /api/videos/upload`**:接收识别问题视频上传 - **`POST /api/vehicles/heartbeat`**:设备心跳上报(支持移动/固定模式,GPS 轨迹记录) - 集成高德地图逆地理编码(根据经纬度自动获取详细地址) - 支持识别问题拦截规则配置(按类型/时间段过滤) ### 2. OTA 远程升级(zxsl-video 核心) - **设备管理**(`/ota/device/list`):查询所有 AI 设备及在线状态 - **升级包管理**(`/ota/file/list` + `/ota/file/upload`):管理固件 tar.gz、模型 .rknn/.pt 文件,SHA256 校验 - **指令下发**(`POST /ota/device/{deviceId}/command`):向设备下发升级指令 - `update_config`:更新配置 - `upgrade_app`:升级应用程序 - `update_model`:更新识别模型 - `clear_data`:清除数据 - 指令通过后端代理转发到外部 Python 服务(`http://221.178.103.44:13004/update`)执行 ### 3. 识别问题管理 - **问题列表**(`/api/identify/list`):分页查询所有识别问题,支持按类型/时间/状态筛选 - **状态更新**(`/api/identify/updateStatus`):标记问题已处理/未处理 - **类型修正**(`/api/identify/updateType`):人工修正识别类型 - **类别字典**(`/api/identify/categories`):获取识别类型枚举 - 前端支持视频回放、图片预览、批量导出 Excel ### 4. 数据同步任务 - **AiDataSyncTask**(`@Scheduled`,每 60 秒执行):将 `ai_identify_result` 表中未同步记录推送到外部业务平台(`http://172.16.98.3:20002/app/event/acceptWl`) - 支持等待媒体(图片/视频)上传齐全后再同步,配置最小/最大等待时间 - 失败自动重试机制(最多 3 次) ### 5. 系统基础功能(若依框架) - 用户管理、角色管理、菜单管理、部门管理、岗位管理 - 字典管理、参数配置、通知公告 - 操作日志(`@Log` 注解)、登录日志 - 在线用户监控、服务器监控、缓存监控、Druid 连接池监控 - Swagger 接口文档(`/swagger-ui/index.html`) ### 6. 大屏展示(zxsl-screen-ui) - 独立 Vue 单页应用(部署在 `/screenWeb/`) - 调用 `/api/screen/*` 统计接口展示识别问题数据 - ECharts 图表展示(道路问题分布、车辆轨迹、统计趋势等) --- ## 快速开始 ### 环境要求 - JDK 1.8+ - MySQL 5.7+ - Redis 3.0+ - Maven 3.6+ - Node.js 12+ & npm(前端构建) ### 后端启动 1. **初始化数据库** ```bash # 创建数据库 CREATE DATABASE ai_video_sh DEFAULT CHARACTER SET utf8mb4; # 导入表结构(需外部若依 SQL) # 注意:仓库内 sql/ 只有 quartz.sql,基础表(sys_user/sys_menu 等)需从若依官方获取 ry_*.sql ``` 2. **修改配置** 编辑 `zxsl-admin/src/main/resources/application-prod.yml`: ```yaml spring: datasource: druid: master: url: jdbc:mysql://your-db-host:3306/ai_video_sh?... username: root password: your-password redis: host: your-redis-host port: 6379 password: your-redis-password ``` 3. **编译打包** ```bash cd atmosphere-ai-middleware-nanchuan mvn clean package -DskipTests ``` 4. **运行** ```bash java -jar zxsl-admin/target/zxsl-admin.jar --spring.profiles.active=prod # 默认端口 8081 ``` ### 前端启动 **管理后台(zxsl-ui)**: ```bash cd zxsl-ui npm install npm run dev # 开发模式,http://localhost:80 npm run build:prod # 生产构建,输出到 dist/ ``` **大屏展示(zxsl-screen-ui)**: ```bash cd zxsl-screen-ui npm install npm run dev # 开发模式,http://localhost:84 npm run build # 生产构建,输出到 dist/ ``` ### Docker 部署 ```bash # 构建镜像 docker build -t ai-video-platform:1.0.0 . # 运行容器 docker run -d \ -p 8081:8081 \ -p 8235:8235 \ -v /data/ai_business:/data/ai_business \ --name ai-video-platform \ ai-video-platform:1.0.0 ``` **Nginx 配置建议**(前后端分离): ```nginx # 管理后台 location / { root /path/to/zxsl-ui/dist; try_files $uri $uri/ /index.html; } # 大屏 location /screenWeb/ { alias /path/to/zxsl-screen-ui/dist/; try_files $uri $uri/ /screenWeb/index.html; } # 后端 API location /prod-api/ { proxy_pass http://127.0.0.1:8081/; } # OTA 升级 Python 服务 location /update/ { proxy_pass http://221.178.103.44:13004/update/; } ``` --- ## 关键配置说明 ### application.yml 核心配置 ```yaml # 识别问题类型映射(与 AI 模型输出类型一致) identify: access: image: event_pic video: event_vdo watermark: enabled: false # 是否启用图片水印(叠加标识框和类型信息) # OTA 升级服务地址 ota: app-url: "http://221.178.103.44:13004/update" online-timeout: 60 # 在线超时判定(秒) # 设备心跳模式 heartbeat: trajectoryMode: false # false=固定模式(更新同一条记录),true=移动模式(每次插入新记录) # 数据同步配置 sync: intervalSeconds: 60 # 定时任务间隔(秒) media: minWaitSeconds: 300 # 最小等待媒体上传时间 maxWaitSeconds: 600 # 最大等待时间 requireImage: true # 是否必须等待图片 requireVideo: true # 是否必须等待视频 aiDataSync: sourceBaseUrl: "http://221.178.103.44:13005/" syncApiUrl: "http://172.16.98.3:20002/app/event/acceptWl" # 高德地图 API Key(逆地理编码) amap: key: 1792228304fc4711bca2589e186aa4fc apiUrl: https://restapi.amap.com/v3/geocode/regeo?output=json&location=%s,%s&key=%s ``` --- ## 接口文档 启动后访问 Swagger 文档:`http://localhost:8081/swagger-ui/index.html` **核心 API 端点**: | 分组 | 路径 | 说明 | |------|------|------| | 设备上报 | `/api/detections/upload` | 识别结果上报(设备端调用,免鉴权) | | 设备上报 | `/api/images/upload` | 图片上传 | | 设备上报 | `/api/videos/upload` | 视频上传 | | 设备上报 | `/api/vehicles/heartbeat` | 心跳上报 | | OTA 管理 | `/ota/device/list` | 设备列表 | | OTA 管理 | `/ota/device/{id}/command` | 下发升级指令 | | OTA 管理 | `/ota/file/upload` | 上传升级包 | | 问题管理 | `/api/identify/list` | 识别问题列表 | | 问题管理 | `/api/identify/updateStatus` | 更新问题状态 | | 大屏统计 | `/api/screen/road-issues` | 道路问题统计 | | 大屏统计 | `/api/screen/stats` | 综合统计 | --- ## 数据库表结构 **业务核心表**(zxsl-video 模块): - `ai_identify_result`:识别结果主表(含 sync_status 同步状态) - `ai_identify_images`:识别图片表 - `ai_identify_videos`:识别视频表 - `ai_device_heartbeat`:设备心跳表 - `ai_device_ota`:OTA 设备表 - `ai_ota_command`:OTA 指令记录表 - `ai_ota_file`:OTA 升级包表 - `ai_system_manage`:多系统配置表 - `event*` 系列表:事件链路表(一期/二期遗留,与 ai_identify_* 并存) **系统基础表**(若依框架): - `sys_user`、`sys_role`、`sys_menu`:权限体系 - `sys_dict_type`、`sys_dict_data`:字典管理 - `sys_oper_log`、`sys_logininfor`:日志记录 - `QRTZ_*`:Quartz 11 张表(当前为内存模式,表未使用) --- ## 项目特色 1. **边缘计算友好**:接口设计考虑弱网环境,支持图片/视频分片上传,心跳节流 2. **灵活的拦截规则**:按识别类型、时间段配置过滤规则,减少无效数据存储 3. **OTA 升级安全**:SHA256 校验升级包完整性,支持版本回退 4. **数据同步可靠**:失败自动重试,等待媒体齐全后推送,保证数据完整性 5. **模块化设计**:基于若依框架二次开发,保留完整的权限体系和日志审计 --- ## 已知问题与优化建议 ### 可移除的冗余功能 基于代码分析,以下功能/模块可安全移除(不影响核心业务): **确定可删**: - Socket.IO / WebSocket 链路(端口不匹配,前端未使用) - 若干死代码文件(User/Role/Permission 自建鉴权残留、Tools.java、TestEventService 等) - 前端旧版仪表盘(index_v1.vue + dashboard/) - 前端遗留页面(system/video/index.vue、components/Zxsl/) **需确认后移除**: - `zxsl-generator` 模块(代码生成器,开发期工具) - `zxsl-quartz` 模块(当前业务定时任务全部走 Spring @Scheduled,quartz 只是依赖桥) - 大屏 `zxsl-screen-ui`(若不需要可视化展示可移除) - 监控类页面(在线用户/服务监控/缓存监控,属运维功能) 详细分析见项目文档或联系维护者。 --- ## 常见问题 **Q1: 启动报错 `Error creating bean 'SysJobServiceImpl'`** A: 数据库缺少 `sys_job` 表,需导入外部若依 SQL(ry_*.sql),或注释 `zxsl-quartz` 模块依赖。 **Q2: 前端菜单为空** A: 检查 `sys_menu` 表数据,菜单由后端 `/getRouters` 动态下发。 **Q3: OTA 升级指令下发失败** A: 检查外部 Python 服务(`http://221.178.103.44:13004/update`)是否可访问。 **Q4: 识别问题图片无水印** A: 检查 `identify.watermark.enabled` 配置,或查看 ImageHandleUtils 水印逻辑。 --- ## 开发团队 - **技术栈**:若依(RuoYi)框架 + 南川定制业务 - **适用场景**:市政管理、道路巡检、智慧城市等 AI 视频识别项目 - **开源协议**:MIT License --- ## 联系方式 - 项目地址:[https://gitee.com/leewj120/ai_video_platform](https://gitee.com/leewj120/ai_video_platform) - 问题反馈:Gitee Issues - 技术支持:联系项目维护者 --- ## 更新日志 ### v1.0.0(2024) - 完成核心业务开发(设备上报、OTA 升级、数据同步) - 集成若依权限框架 - 支持 Docker 容器化部署 - 大屏可视化展示 --- **注**:本 README 基于代码深度分析生成,准确反映项目实际架构与功能。若与运行环境差异,请以实际部署配置为准。