|
|
需求分析文档 要求:[最终形成的文档,以word的文档格式表现出来]
|
|
1、项目背景
|
<<<<<<< HEAD
|
|
应市场需求,结合业务方向,现决定研发一款考勤打卡设备,及监控一体以AI为主的设备。
|
|
2、可查看范围(谁能看这个文档)
|
|
PM,PL以及负责实现各个模块的Pg。
|
|
3、专业术语(名词解释,自己写的缩写和一些较生僻的名字)
|
|
AI方面:
|
TensorFlow框架:由 Google 开发和维护的开源深度学习框架,被广泛应用于各类机器学习算法的编程实现
|
OpenCV框架:是一个广泛使用的开源计算机视觉和机器学习软件库,它提供了各种用于处理图像和视频的工具和算法。
|
CNN卷积神经网络算法:Convolutional Neural Network,CNN)是一种专门为处理具有网格结构数据(如图像、音频)而设计的深度学习模型,在图像识别、目标检测、语义分割等诸多领域取得了巨大成功。
|
卷积层(Convolutional Layer)
|
卷积操作:通过卷积核(也叫滤波器)在输入数据上滑动,对每个位置进行卷积计算,提取局部特征。例如,在图像上,卷积核与图像的局部区域进行元素相乘并求和,生成特征图。如一个 3×3 的卷积核在一张 6×6 的图像上滑动,每次计算对应位置的乘积和,得到新的特征值组成新的矩阵(特征图)。
|
作用:大大减少模型参数数量,降低计算量,同时保留数据的空间结构信息。例如,对于一张 100×100 像素的彩色图像(3 个通道),若使用全连接层处理,参数数量巨大;而使用卷积层,通过小的卷积核就能有效提取特征。
|
池化层(Pooling Layer)
|
池化操作:常见的有最大池化(Max Pooling)和平均池化(Average Pooling)。最大池化是在一个区域内取最大值,平均池化则是计算区域内的平均值。例如,在 2×2 的区域上进行最大池化,就是从这 4 个值中选取最大的作为输出。
|
作用:降低数据维度,减少计算量,同时在一定程度上防止过拟合,提高模型的鲁棒性。比如经过多次卷积后特征图尺寸仍然较大,通过池化可以压缩尺寸。
|
全连接层(Fully Connected Layer)
|
连接方式:将前面层输出的所有神经元都与本层的每个神经元相连,其权重矩阵包含了所有输入到输出的连接权重。比如,前一层输出 100 个特征,全连接层有 50 个神经元,那么权重矩阵大小就是 100×50。
|
作用:对前面提取到的特征进行综合,完成分类或回归任务。在图像分类中,全连接层将卷积和池化后提取的特征映射到不同的类别上。
|
激活函数(Activation Function)
|
常用函数:如 ReLU(Rectified Linear Unit),表达式为 f (x) = max (0, x)。当输入 x 大于 0 时,输出就是 x 本身;当 x 小于等于 0 时,输出为 0。还有 Sigmoid 函数、Tanh 函数等。
|
作用:为模型引入非线性因素,使模型能够学习复杂的非线性关系。如果没有激活函数,无论神经网络有多少层,其输出都是输入的线性组合,无法处理复杂的现实问题。
|
视频方面:
|
Live555框架:是一个开放源代码的、实现了标准流媒体传输协议的多媒体流框架,广泛应用于流媒体服务器和客户端的开发。
|
FFmpeg库:是一个强大的开源音视频处理库,被广泛应用于音视频的录制、转码、流式传输等众多领域。
|
RTSP协议:(Real Time Streaming Protocol)即实时流协议,是一种用于控制实时数据(如音频、视频)传输的网络协议。
|
高并发(多线程):
|
线性池:是一种预先分配一块连续的内存区域或资源集合,然后按照顺序依次分配和使用这些内存块或资源的管理方式。它在初始化时会一次性分配一大块内存或一组资源,后续的分配操作就在这个已分配的区域内进行,直到所有资源都被分配完。
|
Epoll:Epoll 是 Linux 内核为处理大批量文件描述符而作的改进,是在 2.5.44 内核中引入的,用于实现高效的 I/O 多路复用。
|
通用:
|
XML:可扩展标记语言,是一种用于存储和传输数据的标记语言。设计目标是传输和存储数据,而不是显示数据。它的标签没有被预定义,用户可以根据自己的需求自定义标签,具有很强的灵活性和扩展性,被广泛应用于数据交换、配置文件、文档存储等领域。
|
TCP:传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议。
|
|
4、功能描述
|
4.1、总的功能描述(罗列出C,S端的所有功能)
|
C端:1.注册,登录 2.权限管理 3.图像录入 4.考勤识别、管理 5.实时播报 6.历史回放 7.摄像头地图标注 8.系统设置 9.版本升级
|
S端: 1.socket网络搭建 2.SQL封装,建库、表,备份导出,防注入 3.日志封装生产 4.配置管理 5.图像管理 6.CNN搭建模型,训练,验证,迁移 7.版本管理
|
|
4.2、具体负责模块的描述:[详细描述]若有界面,可以把界面截图放上来,可以文字描述多写一些
|
尽量用通俗易懂的语言来描述
|
|
1. 员工信息表:存储员工的基本信息,如员工编号、姓名、性别、年龄、部门、职业。
|
2. 考勤记录表:存储员工的考勤记录,包括考勤时间、考勤类型(如上班、下班、加班等)、考勤状态(如正常、迟到、早退、旷工等)。
|
3. 部门信息表:存储公司的部门信息,如部门编号、部门名称等。
|
1. **员工信息表**:存储员工的基本信息,如员工编号、姓名、年龄、性别、出生日期、部门、职位等。该表的主键为员工编号。
|
2. **考勤记录表**:存储员工的考勤记录,包括考勤日期、上班时间、下班时间、迟到时间、早退时间、旷工时间等。该表的主键为考勤日期和员工编号的组合键。
|
3. **部门信息表**:存储公司的部门信息,如部门编号、部门名称、部门负责人等。该表的主键为部门编号。
|
|
|
5、负责模块的流程图(绘制并截图)
|
|
|
6、负责模块用到的数据库表:[若用到多张表了,可以绘制ER图(表之间的关系图)]
|
表名、字段名、具体的约束等(二维表格形式罗列)
|
|
7、UML类图:模块用到的类名、属性、函数等,以及类之间的关系(六大关系)
|
|
|
8、网络通信用到的结构体[私有协议]:
|
请求结构体
|
响应结构体
|
以及需要用到的配套结构体
|
=======
|
应市场对于高效人员管理和安全监控的强烈需求,同时结合公司业务的发展方向,决定研发一款集考勤打卡与监控功能为一体,且以 AI 技术为核心的设备。
|
这款设备旨在为各类企业、机构提供一站式解决方案,帮助其提升管理效率,降低人力成本,并增强安全性。
|
2、可查看范围
|
项目经理
|
开发人员
|
测试人员
|
3、专业术语
|
设计架构:C/S
|
C:Client客户端 用Qt实现
|
S:Sersvr服务端 用C++实现
|
TensorFlow框架:一个机器学习框架,用于构建和训练深度学习模型。
|
OpenCv框架:计算机视觉库,用于处理图像和视频。
|
CNN卷积神经网络算法:处理图像、音频等深度学习的算法,也是面部识别、行为分析等功能的核心算法。
|
Live555框架:多媒体流媒体框架,用于实现音频和视频数据的实时传输。
|
FFmpeg:对音频、视频进行解码、编码、转码、复用等操作。
|
RTSP协议:实时流协议,监控视频流。
|
Epoll:处理大量并发连接,提高服务器端处理大量客户端连接请求的效率。
|
TCP:传输控制协议。
|
XML:可扩展标记语言,用于存储和传输数据。
|
4、功能描述
|
4.1、总的功能描述 (罗列出C/S的所有功能)
|
C:1、注册、登录
|
2、权限管理
|
3、图像录入
|
4、考勤识别、管理
|
5、实时播放
|
6、历史回放
|
7、摄像头地图标注
|
8、系统设置
|
9、版本升级
|
S: 1、socket网络搭建
|
2、SQL封装,建库、表,备份导出,防注入
|
3、日志封装生成
|
4、配置管理
|
5、图像管理
|
6、CNN搭建模型、训练、验证、迁移
|
7、版本管理
|
4.2、具体负责模块的描述:[详细描述]若有界面,可以把界面截图放上来,可以文字描述多写一些尽量用通俗易懂的语言来描述 (说白话)
|
负责模块:S端版本管理主要负责服务端软件版本的全生命周期管理。
|
新版本:当有新的功能开发完成后或者问题修复后,会生成新的版本。
|
版本编号:对不同版本进行编号,记录版本的详细信息,包括发布时间、功能特性、修复的问题等。
|
版本测试:新版本发布时,进行严格的版本测试,确保新版本的稳定性和兼容性。
|
协调客户端:确保客户端可以及时获取到最新的服务器版本。
|
5、负责模块的流程图 (绘制流程图,开始结束)
|
开始->功能开发/问题修复->生成新版本编号->记录版本信息(发布时间、功能、修复问题等)
|
->进行版本测试->发布版本->回滚到上一个稳定版本->通知客户端升级->通知客户端升级->结束。
|
6、负责模块用到的数据库表:[若用到多张表了,可以绘制ER图] (表关系图)
|
表名、字段名、具体的约束等 (表格形式罗列)
|
|
7、UML类图:模块用到的类名、属性、函数等,以及类之间的关系
|
|
8、网络通信用到的结构体[私有协议]:
|
请求结构体:
|
struct Request {
|
int request_id; // 请求ID
|
string action; // 请求的动作
|
string data; // 附加数据
|
};
|
响应结构体:
|
struct Response {
|
int response_id; // 响应ID
|
bool success; // 是否成功
|
string message; // 响应信息
|
string data; // 附加数据
|
};
|
以及需要用到的配套结构体
|
struct ClientInfo {
|
int client_id; // 客户端ID
|
string version; // 客户端版本
|
};
|
>>>>>>> ea8fe583dba43898151a584ae2c8b4d80d2c4772
|
|
|