importcv2importosimportnumpy as npfrom PIL importImageimportdatetimeimportcsvfrom time importsleep#调用笔记本内置摄像头,所以参数为0,如果有其他的摄像头可以调整参数为1,2

Path = r"C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python36_64\Lib\site-packages\cv2\data\haarcascade_frontalface_default.xml"face_detector=cv2.CascadeClassifier(Path)

names=[]

zh_name=[]

with open("maxmember.csv","r",encoding='UTF-8') as csv_file:

reader=csv.reader(csv_file)for item inreader:#print(item)

names.append(item[2])

zh_name.append(item[1])#print (zh_name)

defdata_collection():

cap= cv2.VideoCapture(0,cv2.CAP_DSHOW)#cv2.CAP_DSHOW是作为open调用的一部分传递标志,还有许多其它的参数,而这个CAP_DSHOW是微软特有的。

face_id = input('\n 请输入你的ID:')print('\n 数据初始化中,请直视摄像机录入数据....')

count=0whileTrue:#从摄像头读取图片

sucess, img =cap.read()#转为灰度图片

gray =cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)#检测人脸

faces = face_detector.detectMultiScale(gray, 1.3, 5)#1.image表示的是要检测的输入图像# 2.objects表示检测到的人脸目标序列# 3.scaleFactor表示每次图像尺寸减小的比例

for (x, y, w, h) infaces:#画矩形

cv2.rectangle(img, (x, y), (x + w, y + w), (255, 0, 0))

count+= 1

#保存图像

cv2.imwrite("facedata/Member." + str(face_id) + '.' + str(count) + '.jpg', gray[y: y + h, x: x +w])

cv2.imshow('data collection', img)#保持画面的持续。

k = cv2.waitKey(1)if k == 27: #通过esc键退出摄像

break

elif count >= 200: #得到n个样本后退出摄像

breakcap.release()

cv2.destroyAllWindows()defface_training():#人脸数据路径

path = './facedata'recognizer=cv2.face.LBPHFaceRecognizer_create()#LBP是一种特征提取方式,能提取出图像的局部的纹理特征

defget_images_and_labels(path):

imagePaths= [os.path.join(path, f) for f in os.listdir(path)] #join函数将多个路径组合后返回

faceSamples =[]

ids=[]#遍历图片路径,导入图片和id,添加到list

for imagePath inimagePaths:

PIL_img= Image.open(imagePath).convert('L') #通过图片路径并将其转换为灰度图片。

img_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) infaces:

faceSamples.append(img_numpy[y:y+ h, x: x +w])

ids.append(id)returnfaceSamples, idsprint('数据训练中')

faces, ids=get_images_and_labels(path)

recognizer.train(faces, np.array(ids))

recognizer.write(r'.\trainer.yml')defface_ientification():

cap=cv2.VideoCapture(0)

recognizer=cv2.face.LBPHFaceRecognizer_create()

recognizer.read('./trainer.yml')

faceCascade=cv2.CascadeClassifier(Path)

font=cv2.FONT_HERSHEY_SIMPLEX

idnum=0globalnamess

cam=cv2.VideoCapture(0)#设置大小

minW = 0.1 * cam.get(3)

minH= 0.1 * cam.get(4)whileTrue:

ret, img=cam.read()#图像灰度处理

gray =cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)#将人脸用vector保存各个人脸的坐标、大小(用矩形表示)

faces =faceCascade.detectMultiScale(

gray,

scaleFactor=1.2,#表示在前后两次相继的扫描中,搜索窗口的比例系数

minNeighbors=5,#表示构成检测目标的相邻矩形的最小个数(默认为3个)

minSize=(int(minW), int(minH))#minSize和maxSize用来限制得到的目标区域的范围

)for (x, y, w, h) infaces:

cv2.rectangle(img, (x, y), (x+ w, y + h), (0, 255, 0), 2)#返回侦测到的人脸的id和近似度conf(数字越大和训练数据越不像)

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(img, str(namess), (x+ 5, y - 5), font, 1, (0, 0, 255), 1)

cv2.putText(img, str(confidence), (x+ 5, y + h - 5), font, 1, (0, 0, 0), 1)#输出置信度

cv2.imshow(u'Identification punch', img)

k= cv2.waitKey(5)if k == 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:

cap.release()

cv2.destroyAllWindows()break

whileTrue:

a= int(input("输入1,录入脸部,输入2进行识别打卡:"))if a==1:

data_collection()elif a==2:

face_ientification()elif a==3:

face_training()

opencv python考勤_基于python+opencv的简易人脸识别打卡系统相关推荐

  1. Python OpenCV开发MR智能人脸识别打卡系统(一、需求分析与系统设计)

    需要源码请点赞关注收藏后评论区留言私信~~~ 整体系统讲解如下链接 Python OpenCV开发MR智能人脸识别打卡系统(二.文件系统.数据实体模块设计) Python OpenCV开发MR智能人脸 ...

  2. Python OpenCV开发MR智能人脸识别打卡系统(四、服务模块设计)

    需要源码请点赞关注收藏后评论区留言私信~~~ 整体系统讲解如下 Python OpenCV开发MR智能人脸识别打卡系统(一.需求分析与系统设计) Python OpenCV开发MR智能人脸识别打卡系统 ...

  3. Python OpenCV开发MR智能人脸识别打卡系统(三、工具模块设计)

    需要源码请点赞关注收藏后评论区留言私信~~~ 整体系统讲解如下 Python OpenCV开发MR智能人脸识别打卡系统(一.需求分析与系统设计) Python OpenCV开发MR智能人脸识别打卡系统 ...

  4. Python OpenCV开发MR智能人脸识别打卡系统(五、程序入口设计与测试)

    需要源码请点赞关注收藏后评论区留言私信~~~ 整体系统讲解如下 Python OpenCV开发MR智能人脸识别打卡系统(一.需求分析与系统设计) Python OpenCV开发MR智能人脸识别打卡系统 ...

  5. opencv python考勤_基于opencv和dlib人脸识别的员工考勤系统

    已打包生成可执行文件exe,可直接下载运行,exe文件及代码均已上传到我的github,点击传送门,打包的具体过程及教程可见pyinstaller简明教程 WorkAttendanceSystem 一 ...

  6. 用python做炒股软件-同花顺有python接口_基于python的炒股软件

    股票详细数据 怎么获得股市数据针对股票等金融数据的获取,python提供了一个非常实用的模块-tushare,自动完成了数据从采集.清洗到存储的全过程,可以极大减轻金融分析人员的工作量,下面我简单介绍 ...

  7. python产品缺陷_基于python从redmine-api中获取项目缺陷数据(1)

    1.引言 本文主要内容是将如何利用 Python 对 Redmine缺陷进行缺陷数据获取操作.目前统计缺陷数据时基本是根据项目手动去redmine获取缺陷数据,至少要花费一个工作日去完成,目前的目标是 ...

  8. 爬虫技术python流程图_基于Python的网络爬虫技术研究

    基于 Python 的网络爬虫技术研究 王碧瑶 [摘 要] 摘要:专用型的网络爬虫能够得到想要的返回结果 , 本文就以拉勾网作 为例子 , 对基于 Python 的网络爬虫技术进行研究和分析. [期刊 ...

  9. python分行_基于python实现对文件进行切分行

    针对配置文件进行切分,重组,每隔30行为一段,进行重新生成功能. 代码如下 #!/usr/local/python/bin/python # coding=utf-8 import sys impor ...

最新文章

  1. java单元测试总结
  2. python预处理c语言_详解C语言编程中预处理器的用法
  3. asp获取手机mac_asp.net 获取客户端IP与mac
  4. 用互斥锁实现程序只能有一个实例
  5. 隐私安全的必答题,网易云信如何解?
  6. wake on lan
  7. Stackops快速部署手册
  8. 减少系统进程【ZT】
  9. 3项目里面全局用less变量 cli vue_vue-cli3全局载入scss变量或less变量配置
  10. Android获取状态栏和标题栏的高度
  11. html文本域滚动条标签,怎么给textarea加滚动条
  12. 雷蛇鼠标 雷云3 驱动无法启动 Razer Syncapse 3 Failed to start
  13. java能自学吗_java能自学吗?
  14. Leetcode每日一题:使括号有效的最少添加(括号匹配)
  15. 下载visual studio 2022 Professional 离线包
  16. 颜色的前世今生3·色彩体系
  17. 看看谁是中国最受欢迎的50大技术博客?
  18. PCB及电路抗干扰措施
  19. #NOIP1999#旅行家的预算
  20. 适用于一切模型的决策曲线分析DCA

热门文章

  1. elasticsearch中的关键词
  2. Atmel发布AVR XMEGA评测工具套件
  3. 同步器AQS中的同步队列与等待队列
  4. 编程技术面试的7个英文网站,你知道几个?
  5. css插件载进去ps里面,css3ps插件
  6. 二分图大讲堂——彻底搞定最大匹配数(最小覆盖数)、最大独立数、最小路径覆盖、带权最优匹配
  7. 【HTB靶场记录】TIER-0
  8. ARM pwn 入门 (1)
  9. 【题解】Quiz: Networks and Sockets (Using Python to Access Web Data)
  10. 学习笔记7--车辆转向系统