【优秀毕设】基于OpenCV的人脸识别打卡/签到/考勤管理系统(最简基本库开发、可基于树莓派)

该系统利用Harr级联检测和LPBH进行人脸检测和训练、识别
利用Tkinter完成界面搭建
利用Flask+HTML完成网络实时图像推流及控制
利用captcha.image 完成验证码功能
利用xlsxwriter将数据保存为Excel文档
利用email库发送邮件
功能如下图所示 所有功能均可实现

部分资源:
download.csdn.net/download/weixin_53403301/85545163

基础完整资源:
download.csdn.net/download/weixin_53403301/85744946

部分代码:

# -*- coding: utf-8 -*-
"""
Created on Mon May 31 23:39:19 2021@author: ZHOU
"""# -*- coding: utf-8 -*-
import tkinter as tk # 调用窗口tk
from tkinter import ttk
from tkinter.filedialog import askopenfilename
import tkinter.messagebox
from PIL import Image, ImageTk, ImageDraw, ImageFont # 调用图像处理库pillow
import cv2 # 调用OpenCV图像处理库
import threading # 调用threading多线程运行库
import time # 调用系统时间戳库
import os # 调用os多操作系统接口库
import re
import numpy as np
from captcha.image import  ImageCaptcha
import random
import string
import xlsxwriter
import smtplib
import email.mime.multipart
import email.mime.text
from email.mime.application import MIMEApplication
from flask import Flask,render_template, request, Response
import socketglobal network_flag
network_flag = 0
local_post = 1212
local_ip = None
for i in range(12):try:s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)s.connect(("8.8.8.8",80))local_ip = str(s.getsockname()[0])s.close()print("Network Enable")network_flag = 1breakexcept:        print("Network Error...")network_flag = 0time.sleep(5)app = Flask(__name__)star_pic_path = "./star.png"
pic_path = "./dataset"
train_path = "./trainer"
data_path = "./data"
train_nb_path = "/train_nb.txt"
train_time_path = "/train_time.txt"
name_id_path = "/name_id.txt"
email_set_path = "/email_set.txt"
admin_path = "/admin.txt"
yml_path = "/trainer.yml"
temp_path = "./temp"
save_path = "./save"
date_path = "/date.txt"
sign_in_mode_path = "/sign_in_mode.txt"
company_path = "/company.txt"
department_path = "/department.txt"
class_id_path = "/class_id.txt"
global today_temp_path
now_today = time.time()
today_temp_path = "/today_"+str(time.localtime(now_today).tm_year)+"_"+str(time.localtime(now_today).tm_mon)+"_"+str(time.localtime(now_today).tm_mday)+".txt"cascadePath = "./cascade/haarcascade_frontalface_alt2.xml"
faceCascade = cv2.CascadeClassifier(cascadePath)
font = cv2.FONT_HERSHEY_SIMPLEXrecognizer = cv2.face.LBPHFaceRecognizer_create()
try:recognizer.read(train_path+yml_path)
except:print("缺失训练数据文件,请先训练数据")cam_flag = 0global img2
img2 = None
global img_flag
img_flag = 0
global login_flag
login_flag = 0
global doing_change_record_date_flag
doing_change_record_date_flag = 0
global auto_send_flag
auto_send_flag = 0
# -*- coding: utf-8 -*-
"""
Created on Mon Apr 25 23:25:45 2022@author: 16016
"""import xlsxwriter
import timedef txt_excel(filename):fp = open(filename,encoding="utf-8")x = 0y = 0lines = fp.readlines()today_list = (lines[0].split("\n")[0]).split("-")xls = xlsxwriter.Workbook('record_' + today_list[0]+"_"+today_list[1]+"_"+today_list[2] + '.xlsx')sheet = xls.add_worksheet('record_' + today_list[0]+"_"+today_list[1]+"_"+today_list[2])    sheet.write(0,0,"姓名")for j in lines:for i in range(1,len(j.split('|'))):item = j.split('|')[i].strip(' ')sheet.write(x,y,item)y += 1  # 另起一列x += 1  # 另起一行y = 0   # 初始成第一列    fp.close()xls.close()filename = './temp/today_2022_4_25.txt'
xlsname = './save/学生签到表'
txt_excel(filename)
<html><meta http-equiv="refresh" content="60"> <head><title>人脸识别签到管理系统</title></head>    <body><h1>人脸识别签到管理系统</h1><form action="/" method="post"><p><input type="submit" style="font-size:50px" name="send" value="发送数据">   <input type="submit" style="font-size:50px" name="maul" value="刷新网页"></p><p><table>{% for k,v in data_dict.items() %}<tr><td>{{k}}</td><td>{{v[0]}}</td><td>{{v[1]}}</td><td>{{v[2]}}</td><td>{{v[3]}}</td><td>{{v[4]}}</td></tr>{% endfor %}</table></p><p><input type="submit" style="font-size:50px" name="update" value="更新记录日期">            <input type="submit" style="font-size:50px" name="back" value="回退记录日期"></p> </form>        <img src="{{ url_for('video_feed') }}" height="520" style="float:left"></body>
</html>
# -*- coding: utf-8 -*-
"""
Created on Tue Apr 26 15:16:42 2022@author: 16016
"""#!/usr/bin/python
# -*- coding: UTF-8 -*-
import smtplib
import email.mime.multipart
import email.mime.text
from email.mime.application import MIMEApplicationdef send_email(file_path,smtp_host, smtp_port, sendAddr, password, recipientAddrs, subject='', content=''):''':param smtp_host: 域名:param smtp_port: 端口:param sendAddr: 发送邮箱:param password: 邮箱密码:param recipientAddrs: 发送地址:param subject: 标题:param content: 内容:return: 无'''msg = email.mime.multipart.MIMEMultipart()msg['from'] = sendAddrmsg['to'] = recipientAddrsmsg['subject'] = subjectcontent = contenttxt = email.mime.text.MIMEText(content, 'plain', 'utf-8')msg.attach(txt)if file_path != '':# 添加附件地址part = MIMEApplication(open(file_path, 'rb').read())part.add_header('Content-Disposition', 'attachment', filename="name_id.xlsx")  # 发送文件名称msg.attach(part)try:smtpSSLClient = smtplib.SMTP_SSL(smtp_host, smtp_port)  # 实例化一个SMTP_SSL对象loginRes = smtpSSLClient.login(sendAddr, password)  # 登录smtp服务器print(f"登录结果:loginRes = {loginRes}")  # loginRes = (235, b'Authentication successful')if loginRes and loginRes[0] == 235:print(f"登录成功,code = {loginRes[0]}")smtpSSLClient.sendmail(sendAddr, recipientAddrs, str(msg))print(f"mail has been send successfully. message:{str(msg)}")smtpSSLClient.quit()else:print(f"登陆失败,code = {loginRes[0]}")except Exception as e:print(f"发送失败,Exception: e={e}")try:subject = 'Python 测试邮件'content = '这是一封来自 Python 编写的测试邮件。'send_email('','smtp.qq.com', 465, '', '', '', subject, content)
except Exception as err:print(err)

主页面

验证码:

识别效果


管理页面:

数据保存除了用户信息和签到信息外 还可以判断是否迟到、早退并计算工作时长

人脸信息采集

管理:

实时数据更新:

签到结果:

邮件发送:

网络前端效果:

实时图像推流:

py打包

Pyinstaller打包exe(包括打包资源文件 绝不出错版)

依赖包及其对应的版本号

PyQt5 5.10.1
PyQt5-Qt5 5.15.2
PyQt5-sip 12.9.0

pyinstaller 4.5.1
pyinstaller-hooks-contrib 2021.3

Pyinstaller -F setup.py 打包exe

Pyinstaller -F -w setup.py 不带控制台的打包

Pyinstaller -F -i xx.ico setup.py 打包指定exe图标打包

打包exe参数说明:

-F:打包后只生成单个exe格式文件;

-D:默认选项,创建一个目录,包含exe文件以及大量依赖文件;

-c:默认选项,使用控制台(就是类似cmd的黑框);

-w:不使用控制台;

-p:添加搜索路径,让其找到对应的库;

-i:改变生成程序的icon图标。

如果要打包资源文件
则需要对代码中的路径进行转换处理
另外要注意的是 如果要打包资源文件 则py程序里面的路径要从./xxx/yy换成xxx/yy 并且进行路径转换
但如果不打包资源文件的话 最好路径还是用作./xxx/yy 并且不进行路径转换

def get_resource_path(relative_path):if hasattr(sys, '_MEIPASS'):return os.path.join(sys._MEIPASS, relative_path)return os.path.join(os.path.abspath("."), relative_path)

而后再spec文件中的datas部分加入目录
如:

a = Analysis(['cxk.py'],pathex=['D:\\Python Test\\cxk'],binaries=[],datas=[('root','root')],hiddenimports=[],hookspath=[],hooksconfig={},runtime_hooks=[],excludes=[],win_no_prefer_redirects=False,win_private_assemblies=False,cipher=block_cipher,noarchive=False)

而后直接Pyinstaller -F setup.spec即可

如果打包的文件过大则更改spec文件中的excludes 把不需要的库写进去(但是已经在环境中安装了的)就行

这些不要了的库在上一次编译时的shell里面输出
比如:


然后用pyinstaller --clean -F 某某.spec

【优秀毕设】基于OpenCV的人脸识别打卡/签到/考勤管理系统(最简基本库开发、可基于树莓派)相关推荐

  1. 【人工智能毕设之基于opencv的人脸识别智能考勤管理系统

    [人工智能毕设之基于opencv的人脸识别智能考勤管理系统-哔哩哔哩] https://b23.tv/slzvS7e

  2. 基于OpenCV实现人脸识别--Python

    目录 前言 第一章 OpenCV介绍 第二章 功能描述 2.1 对已有的数据进行检测 2.2 陌生人检测并发出警告 2.3 保存陌生人的视频 2.4 输入图片进行检测 2.5 现场录用信息 第三章 功 ...

  3. 基于OpenCV的人脸识别自助商店(源码&部署视频)

    1.模块功能介绍 实现人脸识别模块.人脸登录与注册功能.商店显示和用户余额页显示功能 用GUl图形界面实现(pyqt)语言python windows下软件pycharm 1.用户登录模块:刷脸登录 ...

  4. 树莓派 --- 基于OpenCV实现人脸识别

    目录 参考博客 调百度人脸识别的API也能达到目的,我这里是基于OpenCV进行人脸识别 OpenCV(Open source Computer Vision Library) 是一个开源的计算机视觉 ...

  5. Python基于OpenCV的人脸识别自助商店(源码&部署视频)

    1.模块功能介绍 实现人脸识别模块.人脸登录与注册功能.商店显示和用户余额页显示功能 用GUl图形界面实现(pyqt)语言python windows下软件pycharm 1.用户登录模块:刷脸登录 ...

  6. 基于OpenCV的人脸识别系统的pyhon源代码

    本论文主要阐述了基于OpenCV的人脸识别原型系统.基于生物特征识别的身份认证方法有指纹.掌纹.眼睛虹膜.人脸等,其中,由于人脸的稳定性和可见性,人脸识别的研究与应用成为热点,本文针对出租公寓安全管理 ...

  7. 百度AI人脸识别与检测二:学生人脸识别打卡签到系统主界面功能需求和设计以及通过Python实现界面运行

    <百度AI人脸识别与检测>专栏为项目专栏,从零到一,从无到有开发一个学生人脸识别签到系统:主要用到的技术有百度开放平台中的人脸检测.人脸识别.Python图形界面开发PyQt5.线程的管理 ...

  8. 【计算机视觉】基于OpenCV的人脸识别

    一点背景知识 OpenCV 是一个开源的计算机视觉和机器学习库.它包含成千上万优化过的算法,为各种计算机视觉应用提供了一个通用工具包.根据这个项目的关于页面,OpenCV 已被广泛运用在各种项目上,从 ...

  9. Python 毕业设计 - 基于 opencv 的人脸识别上课考勤系统,附源码

    一.简介 这个人脸识别考勤签到系统是基于大佬的人脸识别陌生人报警系统二次开发的. 项目使用Python实现,基于OpenCV框架进行人脸识别和摄像头硬件调用,同时也用OpenCV工具包处理图片.交互界 ...

最新文章

  1. C#调用非托管C++DLL:直接调用法
  2. Ubuntu系统环境变量配置文件(转)
  3. oracle服务端用sql查看连接到数据库的IP
  4. AD域机器如何指定时钟服务器,active-directory – 如何让我的域控制器与正确的外部时间源同步?...
  5. 二叉树结构 codevs 1029 遍历问题
  6. 5c用计算机怎么打,再一次谈谈%5c暴库的利用 -电脑资料
  7. 计算机失误,计算机做题的易出现的失误
  8. BigGAN学会“七十二变”:跟着视频模仿动物,看到啥就能变啥
  9. 小米2S ROM重分区
  10. ubuntu18.04配置ORB-SLAM3
  11. BZOJ_1011_[HNOI2008]_遥远的行星_(近似)
  12. 352.将数据流变成多个不相交间隔
  13. 计算机机房中使用ups的作用是什么,机房监控UPS的作用是什么?你可知道?
  14. Java编程语言最流行的7个框架介绍
  15. 服务器vga连接显示器不亮,HDMI转VGA显示器不亮怎么办?HDMI转VGA显示器没反应如何处理?...
  16. 胡铸韬担任BCF理事
  17. scrapy_redis分布式爬虫遇到的问题DEBUG: Filtered offsite request to
  18. PSAM卡相关知识整理
  19. 盲盒App就是一元购吗?
  20. Qt实现多摄像头的识别、显示、截图、分辨率帧率设置等功能

热门文章

  1. 去除GHOST版系统自带的2345流氓软件
  2. linux精确匹配字符串
  3. 在线订货管理系统的特点
  4. AES加密算法原理及java android实现
  5. Paperreading之五 Stacked Hourglass Networks(SHN)和源码阅读(PyTorch版本)
  6. 如何删除搜索框中的历史记录?(转)
  7. 如何使用Arduino开发板连接NEO-6M GPS模块
  8. iOS语音通话功能实现流程(实时语音通话二)
  9. e480换高分屏_ThinkPadE480笔记本(i5-8250u 8G内存 256G固态 高分屏0QCD 14英寸) 京东5799元...
  10. 电磁波空间传播损耗公式