一、流程:
人脸数据采集→模型训练→建立一个maxmember.csv表格用来存放人员的ID、打卡的名称,识别时显示的名称→启动人脸检测打卡→自动生成CSV表格用来存放打卡人的名称与时间。

二代码:

import cv2
import os
import numpy as np
from PIL import Image
import datetime
import csv
# 调用笔记本内置摄像头,所以参数为0,如果有其他的摄像头可以调整参数为1,2
Path = r"G:/haarcascade_frontalface_default.xml"
face_detector = cv2.CascadeClassifier(Path)
names = []
zh_name = []
############################################################
# 建立一个maxmember.csv表格
# 用来存放人员的ID、姓名
#UTF-8:是实现Unicode的方法
#把8位以内能表示的Unicode编码用一个字节表示
############################################################
with open("maxmember.csv","r",encoding='UTF-8') as csv_file:reader = csv.reader(csv_file)for item in reader:# print(item)names.append(item[2])            #边框显示的名称zh_name.append(item[1])          #打卡人员名称# print (zh_name)
def data_collection():cap = cv2.VideoCapture(0,cv2.CAP_DSHOW)#cv2.CAP_DSHOW是作为open调用的一部分传递标志,还有许多其它的参数,而这个CAP_DSHOW是微软特有的。face_id = input('\n 请输入你的ID:')print('\n 数据初始化中,请直视摄像机录入数据....')count = 0while True:# 从摄像头读取图片sucess, img = cap.read()# 转为灰度图片gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)fi=img/255gamma=0.5o=np.power(fi,gamma)# 检测人脸faces = face_detector.detectMultiScale(gray, 1.3, 5)for (x, y, w, h) in faces:cv2.rectangle(o, (x, y), (x + w, y + w), (255, 0, 0))count += 1# 保存图像cv2.imwrite("dataset/User." + str(face_id) + '.' + str(count) + ".jpg", gray[y:y+h,x:x+w])cv2.imshow('data collection', o)# 保持画面的持续。k = cv2.waitKey(1)if k == 27:  # 通过esc键退出摄像breakelif count >= 20:  # 得到n个样本后退出摄像breakcap.release()cv2.destroyAllWindows()
def face_training():# 人脸数据路径path = './dataset'recognizer = cv2.face.LBPHFaceRecognizer_create()def getImagesAndLabels(path):imagePaths = [os.path.join(path, f) for f in os.listdir(path)]  # join函数将多个路径组合后返回faceSamples = []ids = []for imagePath in imagePaths:PIL_img = Image.open(imagePath).convert('L')  # convert it to grayscaleimg_numpy = np.array(PIL_img, 'uint8')id = int(os.path.split(imagePath)[-1].split(".")[1])faces = face_detector.detectMultiScale(img_numpy)for (x, y, w, h) in faces:faceSamples.append(img_numpy[y:y + h, x: x + w])ids.append(id)return faceSamples, idsprint('数据训练中')faces, ids = getImagesAndLabels(path)recognizer.train(faces, np.array(ids))recognizer.write(r'trainer\trainer.yml')# print("{0} faces trained. Exiting Program".format(len(np.unique(ids))))print("\n [INFO] {0} faces trained. Exiting Program".format(len(np.unique(ids))))###############
#采用LBPH算法
###############def face_ientification():cap = cv2.VideoCapture(0)recognizer = cv2.face.LBPHFaceRecognizer_create()recognizer.read('trainer/trainer.yml')faceCascade = cv2.CascadeClassifier(Path)font = cv2.FONT_HERSHEY_SIMPLEXidnum = 0global namesscam = cv2.VideoCapture(0)#设置大小minW = 0.1 * cam.get(3)minH = 0.1 * cam.get(4)while True:ret, img = cam.read()#图像灰度处理gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)#----------------------#采用伽玛变换,提高图像清晰度#----------------------fi=img/255gamma=0.5o=np.power(fi,gamma)# 将人脸用vector保存各个人脸的坐标、大小(用矩形表示)faces = faceCascade.detectMultiScale(gray,scaleFactor=1.2,#表示在前后两次相继的扫描中,搜索窗口的比例系数minNeighbors=5,#表示构成检测目标的相邻矩形的最小个数(默认为3个)minSize=(int(minW), int(minH))#minSize和maxSize用来限制得到的目标区域的范围)for (x, y, w, h) in faces:cv2.rectangle(o, (x, y), (x + w, y + h), (11, 255, 255), 2)idnum, confidence = recognizer.predict(gray[y:y + h, x:x + w])if ((confidence < 100)):namess = names[idnum]confidence = "{0}%".format(round(100 - confidence))else:namess = "unknown"confidence = "{0}%".format(round(100 - confidence))cv2.putText(o, str(namess), (x + 5, y - 5), font, 1, (255, 255, 255), 1)cv2.putText(o, str(confidence), (x + 5, y + h - 5), font, 1, (255, 255, 0), 1)#输出置信度cv2.imshow(u'Identification punch', o)k = cv2.waitKey(1)if k == 13:              #回车键的ASCLL(13)theTime = datetime.datetime.now()# print(zh_name[idnum])strings = [str(zh_name[idnum]),str(theTime)]print(strings)with open("log.csv", "a",newline="") as csvFile:  #将获取到的打卡时间重新做一个表格writer = csv.writer(csvFile)writer.writerow([str(zh_name[idnum]),str(theTime)])elif k==27:             #ESC  ENDcap.release()cv2.destroyAllWindows()break
while True:a = int(input("输入1,进行人脸收集;输入2,进行人脸模型训练;输入3,进行识别打卡;输入4,退出系统:"))if a==1:data_collection()if a==2:face_training()if a==3:face_ientification()if a==4:cv2.destroyAllWindows()break

三效果展示:
ID:4

采集到人脸时,边框显示我的名字
打卡时也会显示打卡人的名称以及打卡的时间maxmember.csv表格:

第一列为采集人脸数据的ID好,比如我采集自己的人脸时我的ID为4,第二列为打卡时显示打卡人的名称,第三列为人脸识别后对人人的名称。

生成的csv用来保存打卡人员的名称与时间:

基于OpenCV-Python的人脸签到系统相关推荐

  1. 基于 OpenCV + Python 的人脸识别上课签到系统

    目录 前言 安装第三方库 第一步:采集人脸图像 (1)修改姓名学号 (2)运行capture_face.py (3)采集人脸图像 (4)查看采集到的人脸图像 第二步:训练模型 第三步:识别签到 (1) ...

  2. 基于Flask/Opencv/Dlib课堂人脸签到系统

    简介 本项目主要采用了Python语言基于Flask框架开发,利用Dlib库中68特征点检测器和深度残差网络模型,欧氏距离,目标跟踪方法实现了人脸识别,采用MySQL数据库记录系统相关数据,并用Boo ...

  3. 基于OpenCV的简单人脸识别系统

    目录 1. 调用库函数 2. 调用摄像头并设置窗口 3. 设置图片正负样本数据集的路径 4. 调用人脸检测器 5. 正负样本载入 6.提取人脸区域 7. 建立LBPH人脸识别模型 8. 实时检测 9. ...

  4. 基于python的人脸签到系统-3(使用百度API)

    文章目录 人脸识别 使用百度提供的技术支持(在线API和离线SDK) 在线API 实现过程 参考资料 人脸识别 自己训练模型或者使用网上已有的模型 使用百度提供的技术支持(在线API和离线SDK) 在 ...

  5. Python毕设-【人脸签到系统】附源码/Python练手项目/Python毕业设计

    本人承诺只做技术分享,永不收费. V----------------->:专栏详情 文章目录 本人承诺只做技术分享,永不收费. V----------------->:专栏详情 一.背景 ...

  6. python dlib caffe人脸相似度_基于深度学习的人脸识别系统(Caffe+OpenCV+Dlib)【一】如何配置caffe属性表...

    前言 基于深度学习的人脸识别系统,一共用到了5个开源库:OpenCV(计算机视觉库).Caffe(深度学习库).Dlib(机器学习库).libfacedetection(人脸检测库).cudnn(gp ...

  7. Python毕设-【课堂人脸签到系统】附源码课件/Python练手项目/Python毕业设计

    Python毕设-[课堂人脸签到系统]附源码课件/允许白嫖 文章目录 Python毕设-[课堂人脸签到系统]附源码课件/允许白嫖 系统简介 一.本课题拟解决的问题 二.系统技术栈 三.开发工具 四.数 ...

  8. OpenCV + python 实现人脸检测(基于照片和视频进行检测)

    OpenCV + python 实现人脸检测(基于照片和视频进行检测) Haar-like 通俗的来讲,就是作为人脸特征即可. Haar特征值反映了图像的灰度变化情况.例如:脸部的一些特征能由矩形特征 ...

  9. 基于深度学习的人脸识别系统(Caffe+OpenCV+Dlib)【三】VGG网络进行特征提取

    前言 基于深度学习的人脸识别系统,一共用到了5个开源库:OpenCV(计算机视觉库).Caffe(深度学习库).Dlib(机器学习库).libfacedetection(人脸检测库).cudnn(gp ...

  10. 基于深度学习的人脸识别系统系列(Caffe+OpenCV+Dlib)——【六】设计人脸识别的识别类...

    前言 基于深度学习的人脸识别系统,一共用到了5个开源库:OpenCV(计算机视觉库).Caffe(深度学习库).Dlib(机器学习库).libfacedetection(人脸检测库).cudnn(gp ...

最新文章

  1. 克隆复制可使用原型( Prototype)设计模式
  2. [linux] SIGPIPE信号处理
  3. The Preliminary Contest for ICPC Asia Nanjing 2019ICPC南京网络赛
  4. 解决@vue/cli 创建项目是安装chromedriver时失败的问题
  5. 在ATM取钱5000,查询余额却少了50000,怎么回事?
  6. zbar扫描无法近距离扫码_生意好时最怕收银出故障,这几个扫码枪的常见问题你一定要知道...
  7. python lncrna_lncRNA分析
  8. 飞鸽传书人必须对自己守信
  9. HR-Former | 随迟但到,HRNet+Transformer轻装归来(非常值得学习!!!)
  10. OA系统如何快速做出统计报表
  11. Java中字符串数组转 long[]基本类型数组的方法
  12. [分层最短路板子] 洛谷 P4568
  13. SQL Server 2008用'sa'登录失败(错误18456)
  14. hibernate4中HHH000273的错误
  15. ROS2/DDS/QoS/主题的记录
  16. 基于WPF的科学计算器程序
  17. #define 定义常量和宏,指针和结构体
  18. 前一个问题的答案后续
  19. C++:实现量化SMM Caplet α 校准测试实例
  20. 微软VS2010广告全集,让程序员们内牛满面

热门文章

  1. 排班问题——Nurse Rostering Problem(NRP)实战
  2. Windows 10如何进行“Windows体验指数评估”?
  3. 活体检测,人脸识别应用方案
  4. 几个软件需要的请联系我
  5. EJB学习日记(7)
  6. Web项目实现一般思路
  7. 四格表卡方检验.医学统计实例详解-医学统计助手★卡方检验,t检验,F检验,秩和检验,方差分析
  8. Unicode与16进制字符串相互转换
  9. 【AVD】杀鸡用牛刀,FFmpeg API 加载存储图片,比 ImageMagic 和 stb_image 快多了
  10. 杀鸡用用牛刀 scrapy框架爬取豆瓣电影top250信息