功能:进行人脸识别签到。

初步代码:

import cv2
import os
import numpy as np
from PIL import Image #pillow
import pyttsx3
import  sys
import json
def makeDir(engine):if not os.path.exists("face_trainer"):print("创建预训练环境")engine.say('检测到第一次启动,未检测到环境,正在创建环境')engine.say('正在创建预训练环境')os.mkdir("face_trainer")engine.say('创建成功')engine.runAndWait()if not os.path.exists("Facedata"):print("创建训练环境")engine.say('正在创建训练环境')os.mkdir("Facedata")engine.say('创建成功')engine.runAndWait()
def getFace(cap,face_id):# 调用笔记本内置摄像头,所以参数为0,如果有其他的摄像头可以调整参数为1,2#cap = cv2.VideoCapture(0)face_detector = cv2.CascadeClassifier('../data/haarcascade_frontalface_default.xml')#face_id = input('\n enter user id:')print('\n Initializing face capture. Look at the camera and wait ...')count = 0while True:# 从摄像头读取图片sucess, img = cap.read()# 转为灰度图片gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 检测人脸faces = face_detector.detectMultiScale(gray, 1.3, 5)for (x, y, w, h) in faces:cv2.rectangle(img, (x, y), (x+w, y+w), (255, 0, 0))count += 1# 保存图像cv2.imwrite("Facedata/User." + str(face_id) + '.' + str(count) + '.jpg', gray[y: y + h, x: x + w])cv2.imshow('image', img)# 保持画面的持续。k = cv2.waitKey(1)if k == 27:   # 通过esc键退出摄像breakelif count >= 100:  # 得到1000个样本后退出摄像breakcv2.destroyAllWindows()
def getImagesAndLabels(path,detector):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 = 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, ids
def trainFace():# 人脸数据路径path = 'Facedata'recognizer = cv2.face.LBPHFaceRecognizer_create()detector = cv2.CascadeClassifier("../data/haarcascade_frontalface_default.xml")print('Training faces. It will take a few seconds. Wait ...')faces, ids = getImagesAndLabels(path,detector)recognizer.train(faces, np.array(ids))recognizer.write(r'face_trainer\trainer.yml')print("{0} faces trained. Exiting Program".format(len(np.unique(ids))))
def checkFace(cam,names,engine):recognizer = cv2.face.LBPHFaceRecognizer_create()recognizer.read('face_trainer/trainer.yml')cascadePath = "../data/haarcascade_frontalface_default.xml"faceCascade = cv2.CascadeClassifier(cascadePath)font = cv2.FONT_HERSHEY_SIMPLEXidnum = 0#names = ['zongyong', 'zhangmin', 'shanglanqing']#cam = 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)faces = faceCascade.detectMultiScale(gray,scaleFactor=1.2,minNeighbors=5,minSize=(int(minW), int(minH)))for (x, y, w, h) in faces:cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)idnum, confidence = recognizer.predict(gray[y:y + h, x:x + w])if confidence < 100:idnum = names[idnum]confidence = "{0}%".format(round(100 - confidence))say(engine, "欢迎      "+idnum+"签到成功!")returnelse:idnum = "unknown"confidence = "{0}%".format(round(100 - confidence))cv2.putText(img, str(idnum), (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('camera', img)k = cv2.waitKey(10)if k == 27:breakcam.release()cv2.destroyAllWindows()
def say(engine,str):engine.say(str)engine.runAndWait()if __name__ == '__main__':names = []if os.path.exists("name.txt"):with open("name.txt") as f:names = json.loads(f.read())print(names)engine = pyttsx3.init()rate = engine.getProperty('rate')engine.setProperty('rate', rate - 20)makeDir(engine)while True:say(engine, "是否要录入新的人脸信息      ")say(engine, "输入0 代表是 输入其他代表不是")value = input("0:是 or other:否")if value == '0':say(engine, "请输入您的姓名,注意要写成拼音形式")name = input("请输入姓名:")names.append(name)say(engine,"正在打开摄像头")cam = cv2.VideoCapture(0)say(engine, "注视摄像头,开始采集人脸数据")getFace(cam,len(names)-1)say(engine, "采集完毕,开始训练")trainFace()say(engine, "训练完毕,开始人脸识别 ,按esc键将会终止本次识别")else:say(engine, "开始人脸识别")say(engine, "正在打开摄像头")cam = cv2.VideoCapture(0)checkFace(cam,names,engine)say(engine, "继续输入 0 退出系统 ,输入 其他任意键 录入新的人脸")key = input("输入key:(0 - 退出系统 ,other - 重新启动系统)")if key == '0':#将姓名保存到文件with open("name.txt",'w') as f:f.write(json.dumps(names))say(engine, "信息已保存")say(engine, "再见")sys.exit(0)

下一步改进:加入数据库,从中读取信息。

OpenCV人脸识别(二) 初步实现人脸签到相关推荐

  1. 《 Python程序设计项目案例》— 人脸识别考勤可视化分析系统签到打卡记录到Excel表格项目参考代码(课程设计、期末结课大作业、毕业设计)

    声明 本文仅在CSDN发布,其他均为盗版.请支持正版! 正版链接: https://blog.csdn.net/meenr/article/details/107348867 Python课程设计(程 ...

  2. python人脸识别、语音合成、智能签到系统

    基于python+face_recognition+opencv+pyqt5+百度AI实现的人脸识别.语音播报.语音合成.模拟签到系统(1) 人脸识别效果图 源码看最下面 这是新版本地址人脸识别.语音 ...

  3. python人脸识别、语音合成、智能签到系统(2)

    基于python+face_recognition+opencv+pyqt5+百度AI实现的人脸识别.语音播报.语音合成.模拟签到系统(2) 人脸识别效果图 简单介绍以及需要的配置在 python人脸 ...

  4. iOS黑科技之(AVFoundation)动态人脸识别(二)

    iOS黑科技之(AVFoundation)动态人脸识别(二) 上一篇介绍了Core Image实现的静态人脸识别, 这里介绍AVFoundation的强大功能之一的动态人脸识别 一. 首先介绍一些人脸 ...

  5. 转《trackingjs+websocket+百度人脸识别API,实现人脸签到》流程

    先用websocket与后台建立通讯:用trackingjs在页面调用电脑摄像头,监听人脸,发现有人脸进入屏幕了,就把图片转成base64字符串,通过websocket发送到后端:后端拿到图片,调用百 ...

  6. Java + opencv 实现人脸识别,图片人脸识别、视频人脸识别、摄像头实时人脸识别

    搭建环境 opencv官网下载windows安装包 https://opencv.org/releases/ 选择最新版4.1.1 下载完成后是一个opencv-4.1.1-vc14_vc15.exe ...

  7. 语音控制+人脸识别——二次开发 Parrot 无人机!

    继"如何用100美元和 TensorFlow 来造一个能'看'东西的机器人" 之后,Lukas 又一最新力作. 在"造"出能进行物体识别的机器人后,下一步就很清 ...

  8. dlib库包的介绍与使用,opencv+dlib检测人脸框、opencv+dlib进行人脸68关键点检测,opencv+dlib实现人脸识别,dlib进行人脸特征聚类、dlib视频目标跟踪

    文章目录: 1 dlib库介绍 2 dlib人脸检测:绘制出人脸检测框 2.1 dlib人脸检测源码 2.2 opencv + dlib 人脸检测 2.3 dlib人脸检测总结 3 dlib人脸关键点 ...

  9. 人脸识别(5)---人脸识别技术及应用概览

    人脸识别技术及应用概览 科技的发展正在加速改变我们的生活.以前,我们购物埋单时,收银员会问"现金还是刷卡",现在,这句话则变成了"微信还是支付宝?"以前,我们上 ...

  10. 人脸识别(4)---人脸识别行业分析报告

    人脸识别行业分析报告 图像识别主要用到了两个第三方的框架:OpenCV和TesseractOCR,OpenCV用来做图像处理,定位到身份证号码的区域,TesseractOCR则是对定位到的区域内的内容 ...

最新文章

  1. 打破定式,突破屏障,走出自己的创意舒适区
  2. Mirror, Mirror,What do I see、一切都是投射
  3. vcpkg —— VC++ 打包工具
  4. [转]常用OCR软件介绍
  5. LeetCode Unique Paths
  6. WebSphere Application Server v6中的问题诊断以及日志策略
  7. android aop 权限检查,AOP简单拦截实现验证权限功能
  8. 低秩矩阵完备_多源域和多视角 “秩约束”
  9. Java 语言实现的 I/O 模型
  10. Java中的变量Variable
  11. JavaScript不用临时变量交换两个变量的值的七种解决方案
  12. vcpkg 简明教程
  13. 西安电子科大2010年的硕士博士考试推荐书
  14. 一周信创舆情观察(1.10~1.16)
  15. undefined和is not defined一样吗?
  16. 【问答】区块链遇到Waiting for cache lock: Could not get lock /var/lib/dpkg/lock-frontend. It is heWaiting for
  17. CentOS7设置笔记本合盖不休眠
  18. 面试官:hold住了八股和算法,扫码登录应该怎么实现你总不会了吧
  19. CMWAP 和 CMNET 的主要区别与适用范围
  20. 计算机视觉基础-图像处理-几何变换

热门文章

  1. 一个程序猿的讨薪日记
  2. ABB机器人利用激光测距传感器求与机器人法兰Z向夹角
  3. 决定经典的故事,震撼人心啊!
  4. 使用Stream处理Map
  5. 理正消息服务器,理正图纸打印系统
  6. Iperf 带宽测试
  7. JS实现点星星消除小游戏
  8. 鸿蒙应用开发:安装DevEco Studio及环境配置
  9. 【路径规划】基于遗传算法求解三维装载下的汽车零部件循环取货路径规划问题含Matlab源码
  10. java的vps多大内存够用_如今电脑配多少G的内存,才真正够用?