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

初步代码:

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. JasperReport:概述
  2. 前端学习(3159):react-hello-react之一个简单的helloworld
  3. bzoj2435: [Noi2011]道路修建 树上dp
  4. springboot工程的热部署
  5. 蓝领ERP:谁在坚守,谁在逃跑(转)
  6. VSCode - PHP/Go开发 - 使用/实践
  7. 【设计开发命名必备】英语单词缩写规则
  8. Unity开发VR项目(四)—— 创建VR场景
  9. FFmpeg动效实践与探索(文字方框的同步展开及收缩)
  10. 视频教程-用project做项目计划及总结报表-研发管理
  11. 1688API接口,获取商品详情,按关键词搜索,拍立淘,商品评论商品类目,店铺接口等
  12. ppt讲解中的过渡_PPT过渡页其实大有学问!如何让你的PPT过渡页更加精美?
  13. bool变量的使用(整理)
  14. 学计算机语言的最佳年龄,孩子学编程最佳年龄是几岁
  15. 字符串算法 | AC自动机算法
  16. 【STM32】STM32F103ZE程序修改改为STM32F103C8步骤
  17. 【vue系列】2021新建vue项目
  18. EndNote参考文献管理
  19. 《程序设计(C)》期末考试A卷
  20. 分布式计算的八大谬论

热门文章

  1. java计算机毕业设计线上远程教学及自主学平台的设计与实现源码+系统+数据库+lw文档
  2. 轻松查询多个德邦单号物流详情,并一键查看备注
  3. java: 程序包org.csource.fastdfs不存在 错误解决
  4. 欣向路由器:四大过人绝技的应用价值(转)
  5. ebay账号防关联4要素(ebay防关联软件)
  6. 理正 开发语言c,关于理正抗滑桩的中的“计算方法”选项“M法、C法、K法”这三个选项中每个选项的值该如何算或者如何选?...
  7. Redis学习(一)基础篇
  8. Excel实现根据日期周期显示出内容
  9. 计算机专业的公务员考试试题,2018年国家公务员考试计算机专业试题7
  10. Microsoft Visual Studio 2019 下载与离线安装教程