一:背景
项目背景:5G互联网机器视觉开发
使用技术:
IPC 进程间通信
EasyPR 开源车牌识别框架
OpenCV 开源机器视觉框架
项目介绍:
本系统采用高位摄像头进行车牌识别,区别以往的咪表、手持 PDA 等,具有识别效率高,节省人力成本与投入资本等优点。本项目城市路边停车管理系统基于机器视觉与人工智能视图判断服务的停车管理和运营管理系统,车辆进入管理区域时,由特定区域的高位摄像头实时抓拍车牌照片由车牌终端进行检测出车牌图像,然后上传到云车牌识别系统并识别出车牌号码开始计时;在车辆离开时,用高位摄像头抓拍车牌计费,车主可通过现金、自助缴费机、手机支付等方式进行缴费。具有方便省时、高效、操作简便、降低管理人员成本等特点。该项目由设备客户端、终端服务器、大并发压力测试程序三大部分构成,项目综合了《5G 物联网视觉开发》和《Linux 基础开发》的知识体系;采用大并发通信框架思想和自定义协议,基于 TCP Socket 封装了包含通信组件、动态数组以及线程池等技术的通信框架。以及基于FFMpeg 的媒体数据的编解码功能。
项目要求:
掌握 Linux 环境下的高并发通信服务和通信。信息设备上软件开发的各类技术、还掌握 FFMpeg 媒体数据的编解码技术、EasyPR 车牌识别框架、OpenCV 开发平台、SQLite3 数据库开发技术,多进程或多线程技术应用,以及基于SOCKET API 的网络通信技术,基于 Live555 的 RTSP 流媒体协议通信,Linux 进程间通信 IPC技术应用等等。
二:项目功能需求
2.1 客户端
用户登入注册
1、开机动画展示2、用户成功注册后进入登录3、用户登录成功进入历史记录数据。
出/入场车牌识别
1、车辆进入显示进入时间、2、车牌智能截图、车牌信息显示3、车辆类别相关信息4、该入口车辆进场列表5、提供车辆抓拍存档6、显示车辆入场时间7、显示驾驶人员人脸信息8、记录车辆出场时间9、计算车辆停车费应收金额10、车辆相关入场记录
系统设置
1、 配置服务器的 ip 地址2、 配置服务器端口。3、 配置本地采集视频保存大小4、 满数据时自动删除
停车场内部管理
1、可疑人员抓拍2、车辆入库记录查询3、车辆特征图片抓拍4、车辆视频录制
车辆信息查询功能
1、 通过车牌、出入场时间查询车辆信息2、 通过监控回放模式可以安日期查看视频录制信息。
2.2 服务器
智慧停车客户端接入
1、 接收各客户端的连接,并管理客户端信息;2、 对连接但长久未登入的设备连接及时关闭,以节约资源。
各业务处理
1、处理客户端的各类型的业务。
心跳处理
1、 定时需要收到客户端的心跳2、 在一定时间内没有收到客户端心跳时,需要强制关闭客户端的连接并删除客户端信息。
并发负载
1、 初始化 30 处理现场,在不够处理并发的情况下,能及时欢喜一定量的处理线程。2、 设置处理线程上线 200。
实时日志
服务器启动日志进程后能够查看当前连接情况等信息
全部日志
实现日志信息写入文本文件
三:设备端具体业务功能
3.1 用户登入注册
客户端开机进入后展示开机动画界面,上图为开机样例图,请自行设计界面展示。客户端开机动画结束后进入系统设置界面
3.2 系统设置
用户在界面上选择设置菜单。客户端进入设置界面。可在此界面修改设备要连接的服务器 IP 地址和端口信息。车牌图片保存地址,使用文件路径选择器选择保存图片的地址(编辑框禁止输入)视频录制存地址,使用文件路径选择器选择保存视频的地址(编辑框禁止输入)退出后,要立即保存到配置文件中。可以设置本地系统默认存储空间大小,用于保存采集到的视频数据,如果视频大小不够或超出大小,则系统从本地存储数据的最早时间开始自动删除,直到新的采集数据可以保存为止。连接服务器成功与否,需要有友好提示。
3.3 登录注册
用户输入用户名与密码。账号、密码输入为空,提示用户名、密码不能为空。账号密码输入框可以用灰色字体显示规定的长度范围。账号和密码输入超过规定的长度范围时、特殊字符@#¥需拒接输入或提示不符合要求。选择登录后,等待服务器进行密码验证。密码在服务器接受到的是 MD5 加密后的信息。用户名密码验证失败,提示用户,验证成功后,进入系统主界面。点击注册按钮进入注册界面进行用户注册
点击注册按钮进入注册界面进行用户注册。账号:英文大小写、数字、下划线,长度 6~8 位。(用户为管理员权限,可以查看所有的视频、照片)用户名:中英文大小写、数字,长度 6~8 位。密码:英文大小写、数字、下划线,长度 6~10 位。密码在文本框中以隐藏字符的形式展示,点击右边的按钮时可以现实明文。点击确定,实现用户注册。注册成果后返回登录界面。点击取消,返回登录界面
用户登录成功后进入系统主界面
3.4 车辆入场
主界面默认进入场模式。当车辆进入摄像头一定距离后,开始抓拍车牌信息。车牌识别成功后截取车牌图片到右边车牌特征框中。正确车牌信息显示在右边正确车牌框中可以点击右边的修改车牌手工修正车牌号码。在窗口右下方数据最下方显示出本日入场所有车牌信息,鼠标双击可以在上方显示车牌信息所有数据。每增加一条入场记录和出场记录都必须向服务器发送入场数据和入场图片点击修改车牌信息可以手工修正录入车牌信息。每次自动录入车牌后界面提示车辆入场成功。
3.5 车辆出场
车辆出场时,显示车辆出场时间、车牌截图信息、车辆停车时长、正确车牌信息、总共收费金额。手动勾选月卡,该车牌是包月客户,那么收费金额就为零。出场车牌识别后根据收费标准自动计算收费金额。点击放行按钮表示收费手续完成。窗口标题栏下实时显示剩余车位数量。点击入场模式就切换到车辆入场界面。
3.6 停车场内部管理
窗口左边显示停车场内部实时视频,对于进入车辆可以实时识别车辆和人脸信息窗口右边实时显示当前车场 总共车辆和空闲车位信息点击人物和车辆特征图片抓拍可以保存当前图片信息到本地,并上传到服务器点击停车场监控手动录制按钮可以录制一段 30 秒时长的视频信息。勾选视频监控自动录制会每隔 30 秒录制一段视频存到本地。
3.7 监控回放
点击监控回放目录下面的日期,可以查看当前日期下所有监控回放视频预览图片。左边栏显示的是实时服务器日期,显示当月日期。选择某一天,右侧栏显示当天的视频第一帧图片,选择图片可以播放视频。可以选择按月显示回放记录和按天显示回放记录。双击点击窗口右边预览图片,可以打开视频播放窗口播放当前视频。
3.8 视频播放窗口界面
用户在界面上选择视频记录列表的某个视频播放,进入播放界面获取该视频记录:如果该视频从未播放则从头开始播放如果该视频已经记录了播放时长,则直接获取已播放时长和总时长,直接开始播放注意播放的视频为本地采集视频数据。点击暂停按钮视频播放暂停,按钮内容变为播放
3.9 车辆信息查询
根据输入车牌号码或者输入入场/出场时间区间点击查询可以把符合信息的车牌显 示到下面表格中智慧停车云平台管理系统点击查询下要求从服务器发送数据请求,服务器在后台查询相关信息后返回给终端,然后终端显示出来。编辑框内显示的日期时间格式例如:年-月-日 时:分。三个编辑框任意填写一个,都能搜索。扩展:点选编辑框,可以浮现日历选择日期。车牌的出入场图片都存放在终端设备的固定目录下,图片命名格式为时间+车牌号码。点击数据导出,可以把相关查询的数据导入到文本文件中。点击返回主界面,回到系统主菜单界面。
四:服务器基本业务功能
不需要有界面信息。
4.1 接入功能
响应各客户端的接入请求;完成登录验证功能;管理和登记各客户端的信息;如果 2 分钟内未登录,则关闭连接,清除客户端信息
4.2 各业务处理
服务器能够处理如下业务请求:用户登录/注册业务。客户端播放记录上传业务。特征数据上传业务。客户端展示视频数据列表业务。心跳业务。并发负载业务。
4.3 异常处理
4.3.1 不完整包检测和处理
客户端发送数据包瞬间,线路发生中断,则服务器端可能就收到不完整包,在后续又会收到完整包。因此,服务器需要对数据包的完整性进行验证,为了完成数据包的完整性检测,建议在数据包前或后添加包头或包尾标志。
4.3.2 粘包检测和处理
在协议栈的 TCP 缓冲区内,可能同时存在两笔业务或心跳包等等的数据。需要注意区分。解决方案:包头+包体;
4.3.3 重包处理
服务器端需要有一套机制来判断客户端发来的数据包是否已经收到过,如果已经收到过,就直接丢弃。建议解决方案:通信包的包头带有每个包的流水号 。
4.3.4 实时日志
实现启动该日志进程后能够查看当前连接情况等信息,关闭该进程后不影响后台业务进程处理。实时刷新日志信息如下:有效连接数接收数据包发送数据包用户登录业务数获取视频列表业务数获取用户视频播放记录业务数上传用户的历史播放视频记录业务数
4.3.5 全部日志
实现日志信息写入文本文件。包括启动日志,登录日志数据包,交易数据包,接收数据包,心态数据包等,相关日志信息写入文本日志。文件每天生成一个。日志格式如下:时间:yyyy-mm-dd hh:mm:ss功能:登录类型:发送/接收用户 id:xxxxxx发送个人结构体数据包:用户名:xxxx密码:xxx智慧停车云平台管理系统时间:yyyy-mm-dd hh:mm:ss功能:上传播放记录类型:发送/接收用户 Id:xxxxxxx文件名:记录于 2020-05-01 11:59:20文件播放时间:2020-05-01 12:10:20文件总时长:5:30文件播放进度:2:20其他依次类推,要求在中文说明中详细表达本次业务包做的功能、类型、用户等信息。
4.3.6 业务测试
根据参数设置的要求,产生满足条件的环境。
4.3.7 日志信息
实现日志信息写入文本文件。包括启动日志,登录日志数据包,交易数据包,接收数据包,心态数据包等,相关日志信息写入文本日志。文件每天生成一个。日志格式如下:时间:yyyy-mm-dd hh:mm:ss功能:登录类型:发送/接收用户 id:xxxxxx交易流水:0293992993发送文件数据包(结构体数据信息):文件名:记录于 2020-05-01 11:59:20文件播放时间:2020-05-01 12:10:20文件总时长:5:30文件播放进度:2:20其他依次类推,要求在中文说明中详细表达本次业务包做的功能、类型、用户等信息。
4.3.8 实时日志
实现启动该日志进程后能够查看但前连接情况等信息,关闭该进程后不影响后台业务经常处理。实时刷新日志信息如下
4.4 非功能性需求
五:系统总体设计
5.1 系统总体框架
智慧停车云平台管理系统客户端智慧停车云平台管理系统客户端是提供用户进行视频的点播功能,通过 RTSP 协议接收多媒体文件的数据流,解码后进行播放。业务应用服务智慧停车云平台管理系统与前置接入服务一道为智慧停车云平台管理系统提供业务数据处理服务,并负责与核心交易系统的协议转换和对接;数据被送到业务应用服务后,系统为客户端的播放视频做准备工作,将业务数据进行分析,调用相关的接口。将处理的结果,通过系统的前置服务反馈给客户端。数据库用于存储客户端点播的视频地址,点播数据等信息。服务性能监控监控服务器的接入量,业务并发量,各时段的服务器性能分析。并能够实时监控各个客户端的详细状态。
5.1.1 接入服务器逻辑结构
1、 接入模块:客户端发起连接后,由接入模块接收,并由接入模块分配或初始化接入设备的信息缓冲。2、 接收数据模块:接受新的客户端连接后,采用 IO 复用技术,服务器监控每个协议端口的状况,当有数据需要接收,接收数据模块接收数据,并存入到接收和发送的数据包缓冲区,等待其他模块的处理;当发现对方端口关闭即连接断开时,接收模块清除相应的接入设备信息缓冲内容;当收到心跳包时,接收模块处理接入设备信息缓冲,超时计数器清零。3、 发送数据模块:实时得轮询发送数据包缓冲,一旦发现有数据到来,立即将数据包内容按照格式要求发送给对应的客户端。智慧停车云平台管理系统4、 接入设备信息缓冲区:存放每个在线接入设备的信息;信息格式:设备 ID+SOCKET 描述符+超时计数器等5、 接收和发送的数据包缓冲:存放接收到的数据包以及要发送的数据包缓冲。数据包格式请详见接口协议。6、 连接监控模块:轮询接入设备信息缓冲区,如果发现超时计数器已经大于规定的阀值,则强制关闭该接入设备的连接。7、 业务应用处理模块:根据接收缓冲区的数据包,依据交易流水号判断该数据包是否已经被发过,如果是且属于交易未完成状态,则直接丢弃(通过数据库表的状态记录来判断);如果是且属于交易完成状态,则将交易结果返回给客户端;如果没有被发过,在交易流水记录中,增加一条记录,并记录调用外系统接口层函数进行交易处理。
5.1.2 设备端逻辑结构
1、 发送模块:将发送数据包缓冲内的数据发送出去,并确认服务器已经收到;如果规定时间内没有答复,则进行重发。如果发现 SOCKET 错误,则通知 UI 交互层处理2、 接收模块:从网络上接收数据包,并存放进接收数据包缓冲。如果发现 SOCKET 错误,则通知 UI交互层处理3、 发送数据包缓冲区数据包格式详见接口协议4、 接收数据包缓冲区数据包格式详见接口协议5、 定时器模块智慧停车云平台管理系统维持心跳及其他服务。6、 UI 交互层完成用户业务操作,获取用户输入,并将接收到信息显示到 UI 给客户看。由 UI 进程负责整个客户端的框架初始化和复位。
5.2 系统总体架构
5.2.1 智慧停车云平台管理系统 服务器
前置服务器监听:创建 TCPServer,使用 epoll 进行监听。创建新连接:对客户端的连接请求,创建新的 Socket 连接。应答:前置服务对共享内存的应答包进行监听,读取应答包,发送给指定的客户端。定时器扫描客户端:扫描客户端连接,断开无效的客户端连接,并清理数据,释放内存。解析包模块解析包线程池:创建包含 20 个线程的线程池,用来解析数据包的数据。智慧停车云平台管理系统解析包回调函数:解析数据包数据,并将正确解析的业务包数据写入共享内存。共享内存共享内存:用来保存客户端发送的业务包、服务端返回的应答包。前置服务器监听共享内存中的应答包,并读取。后置服务器监听客户端发送的业务包,并读取。后置服务器读取业务包:读取共享内存中的业务包。业务处理模块业务处理线程池:创建包含 20 个线程的线程池,用来处理业务包的数据。业务回调函数:根据业务包的类型,进行相应的业务处理。数据库:根据业务的需要对数据库进行读写访问。