编辑 | blame | 历史 | 原始文档

需求分析文档 要求:[最终形成的文档,以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