OpenCV人脸识别(二) 初步实现人脸签到
功能:进行人脸识别签到。
初步代码:
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人脸识别(二) 初步实现人脸签到相关推荐
- 《 Python程序设计项目案例》— 人脸识别考勤可视化分析系统签到打卡记录到Excel表格项目参考代码(课程设计、期末结课大作业、毕业设计)
声明 本文仅在CSDN发布,其他均为盗版.请支持正版! 正版链接: https://blog.csdn.net/meenr/article/details/107348867 Python课程设计(程 ...
- python人脸识别、语音合成、智能签到系统
基于python+face_recognition+opencv+pyqt5+百度AI实现的人脸识别.语音播报.语音合成.模拟签到系统(1) 人脸识别效果图 源码看最下面 这是新版本地址人脸识别.语音 ...
- python人脸识别、语音合成、智能签到系统(2)
基于python+face_recognition+opencv+pyqt5+百度AI实现的人脸识别.语音播报.语音合成.模拟签到系统(2) 人脸识别效果图 简单介绍以及需要的配置在 python人脸 ...
- iOS黑科技之(AVFoundation)动态人脸识别(二)
iOS黑科技之(AVFoundation)动态人脸识别(二) 上一篇介绍了Core Image实现的静态人脸识别, 这里介绍AVFoundation的强大功能之一的动态人脸识别 一. 首先介绍一些人脸 ...
- 转《trackingjs+websocket+百度人脸识别API,实现人脸签到》流程
先用websocket与后台建立通讯:用trackingjs在页面调用电脑摄像头,监听人脸,发现有人脸进入屏幕了,就把图片转成base64字符串,通过websocket发送到后端:后端拿到图片,调用百 ...
- Java + opencv 实现人脸识别,图片人脸识别、视频人脸识别、摄像头实时人脸识别
搭建环境 opencv官网下载windows安装包 https://opencv.org/releases/ 选择最新版4.1.1 下载完成后是一个opencv-4.1.1-vc14_vc15.exe ...
- 语音控制+人脸识别——二次开发 Parrot 无人机!
继"如何用100美元和 TensorFlow 来造一个能'看'东西的机器人" 之后,Lukas 又一最新力作. 在"造"出能进行物体识别的机器人后,下一步就很清 ...
- 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人脸关键点 ...
- 人脸识别(5)---人脸识别技术及应用概览
人脸识别技术及应用概览 科技的发展正在加速改变我们的生活.以前,我们购物埋单时,收银员会问"现金还是刷卡",现在,这句话则变成了"微信还是支付宝?"以前,我们上 ...
- 人脸识别(4)---人脸识别行业分析报告
人脸识别行业分析报告 图像识别主要用到了两个第三方的框架:OpenCV和TesseractOCR,OpenCV用来做图像处理,定位到身份证号码的区域,TesseractOCR则是对定位到的区域内的内容 ...
最新文章
- JasperReport:概述
- 前端学习(3159):react-hello-react之一个简单的helloworld
- bzoj2435: [Noi2011]道路修建 树上dp
- springboot工程的热部署
- 蓝领ERP:谁在坚守,谁在逃跑(转)
- VSCode - PHP/Go开发 - 使用/实践
- 【设计开发命名必备】英语单词缩写规则
- Unity开发VR项目(四)—— 创建VR场景
- FFmpeg动效实践与探索(文字方框的同步展开及收缩)
- 视频教程-用project做项目计划及总结报表-研发管理
- 1688API接口,获取商品详情,按关键词搜索,拍立淘,商品评论商品类目,店铺接口等
- ppt讲解中的过渡_PPT过渡页其实大有学问!如何让你的PPT过渡页更加精美?
- bool变量的使用(整理)
- 学计算机语言的最佳年龄,孩子学编程最佳年龄是几岁
- 字符串算法 | AC自动机算法
- 【STM32】STM32F103ZE程序修改改为STM32F103C8步骤
- 【vue系列】2021新建vue项目
- EndNote参考文献管理
- 《程序设计(C)》期末考试A卷
- 分布式计算的八大谬论
热门文章
- java计算机毕业设计线上远程教学及自主学平台的设计与实现源码+系统+数据库+lw文档
- 轻松查询多个德邦单号物流详情,并一键查看备注
- java: 程序包org.csource.fastdfs不存在 错误解决
- 欣向路由器:四大过人绝技的应用价值(转)
- ebay账号防关联4要素(ebay防关联软件)
- 理正 开发语言c,关于理正抗滑桩的中的“计算方法”选项“M法、C法、K法”这三个选项中每个选项的值该如何算或者如何选?...
- Redis学习(一)基础篇
- Excel实现根据日期周期显示出内容
- 计算机专业的公务员考试试题,2018年国家公务员考试计算机专业试题7
- Microsoft Visual Studio 2019 下载与离线安装教程