# 人脸识别系统 **Repository Path**: cupDpiece/facial-recognition-system ## Basic Information - **Project Name**: 人脸识别系统 - **Description**: 基于linux操作系统,QT,Opencv和seetaface库,imx6ull开发板,4.3英寸屏幕(480,800) - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2025-11-19 - **Last Updated**: 2025-11-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 1111111111 客户端 1:用到opencv源代码和opencv第三方库,第三方库主要是用了识别人脸的库。 2:下载cmake来编译(就是在下载cmake,然后使用库中自带的cmakelist.txt来编译生成运行库),编译后就生成运行库了,主要是得到这个编译库,来给QT使用。 3:就可以在window平台开始写程序了,有了运行库,就可以在pro工程文件里配置声明运行库头文件和库使用了。 4:实现:通过定时器事件(100毫秒)来实现摄像头读取一帧数据,然后通过人脸比对得到矩形框向量,通过这个矩形框向量就能判断是否识别到人脸,然后进行发送数据。 5:连接服务器客户端是通过套接字来连接,通过创建一个套接字向量,然后开启一个定时器,通过信号和槽来实现5秒连接一次,连接成功关闭定时器。 6:发送数据是通过opencv jpg Mat类型数据转换成qbyteArray,通过QDataStream对象来输入到bytearray,里面有字节的大小和字节的数据,然后调用套接字write发送。 7:怎么去判断它是否连接成功,连接成功客户端会收到connect信号,然后通过信号和槽来监听成功,然后把定时器关掉。 8:接收数据同样是套接字接收到readReady信号,就去读取通过JsonObject obj = doc.object();json一个一个解析,然后显示到窗口控件上。 9:页面设计:大小是480 800,左边图片480 480,右边员工信息栏,名字,员工编号,部分,事件,和头像。 222222222222222222 服务器端 1:是通过qtcpserver创建一个服务器对象来监听地址和端口,一旦有对应的端口地址,就会创建一个套接字对象获取qtcpsocket的套接字来进行数据交流。然后通过监听qtcpsocket当有数据到达会发送readyRead信号,然后信号和槽来进行读取数据。 2:一旦收到readyRead信号,就创建对象QDataStream stream(msocket); 把套接字绑定到数据流中,然后通过字节大小判断是否收到数据,然后QByteArray data;对象来读取转换成jpg格式的数据显示到服务器端,同时转换成opencv Mat类型来检查是否有该人脸存在。 3:注册和人脸检查是通过seetaface库来实现,通过查询人脸Id和人脸识别对比度来判断是否存在,要是存在,就通过信号和槽来下发数据,这里是绑定了识别成功发送一个信号,对应的槽函数是通过id是否在员工表中存在再下发信息到客户端,并且把此次考勤数据记录到考勤表。 4:注册功能:信息填写,摄像头拍照同样是通过定时器事件开启摄像头来拍照,点击拍照按钮会保存该帧数据,然后通过该帧数据来得到一个人脸id,然后通过 QSqlTableModel model; model.setTable("employee");//设置表名,绑定表格QSqlRecord record = model.record();来把信息中的数据存到数据库实现注册功能。然后记得 //导入已有的人脸数据库this->fengineptr->Load("./face.db");来识别人脸。 5:查询表格数据,通过一个选择部件,来选择员工表还是考勤表,然后通过表面来显示所有表格信息到Qtableview控件里。 6:创建一个数据库,再pro文件里添加sql,然后再main函数里创建数据库,数据库里创建两个表。 7:页面设计,有三个界面,默认界面是注册信息界面,还有一个查询界面和客户端显示图片界面,通过网页选择控件来实现。 33333333333333 如何下载到板子 1:再linux系统下配置好opencv库和seeaface库的运行环境,然后修改pro文件里的头文件和库文件改成linux环境下的,然后修改代码里的摄像头。然后再linux交叉编译生成可执行文件,然后通过挂载NFS目录的/mnt目录同步到开发板,开发板用的是4.8.99,通信把库移动到根目录下就可以跑了。 44444444444444444 问题 1:第一个碰到的难点就是摄像头VideoCapture cap导致程序异常退出,摄像头打不开,我估计是opencv运行库的问题,所以重新编译一次看看。原来是编译环境路径没添加,添加到windowpath下面的bin就行。 同时在重新编译一次的时候,有了解了运行库的安装路径,添加了第三方库的人脸识别,同时是用cmake的cmakelist.txt来编译的。 2:注册的时候出错,是因为你没有新建一个data文件夹来存储图片,导致图片读取错误,因为它是保存在data文件夹目录下。添加图片的话因为导入的是人脸库,所以你要传人脸照片。