1、打开摄像头进行人脸识别

#导入相关库
import numpy as np
import cv2 #要加载人脸检测相关的pre-trained分类器,级联检测器
detector = cv2.CascadeClassifier(r'C:\Users\lmy\AppData\Local\Packages\Microsoft.MicrosoftEdge_8wekyb3d8bbwe\TempState\Downloads\opencv-4.1.2\data\haarcascades\haarcascade_frontalface_alt_tree.xml')
#测试一下摄像头
cap = cv2.VideoCapture(0)  #调用你电脑的0号摄像头
ret, img = cap.read()  #从摄像头获取到图像,这个函数返回了两个变量,第一个为布尔值表示成功与否,以及第二个是图像。
cv2.imshow('windowname', img)  #imshow()展示图片。其第一个传入的参数为窗口的名称,而第二个就是要展示的图片,以上代码传入的就是我们的自拍。
cv2.waitKey(0)  #waitKey是用来停在图片的展示界面,单位是毫秒。这里填0就是一直停着,如果停留的时间不够久,就可能看不见imshow的照片了。#将图片先转换为灰度图片
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = detector.detectMultiScale(gray,1.3,5)  #人脸检测,第二个参数是移动距离,第三个参数是识别度,越大识别读越高。
#这句代码会等到一串list,list中的每个都有x, y, height, width四个变量。其中list表示检测到的人脸,即list的size就是人脸的个数,而每个人脸在图片中的位置是(x, y, height, width)。#为了能让我们更直观地看出来检测结果,我们将这些人脸用方框框出来:
for (x, y, w, h) in faces:cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)
cv2.imshow('frame', img)
cv2.waitKey(0)#以上已经可以检测到静态图片的人脸,之后通过循环,检测的实时动态视频流,最终在显示在新窗口中。
while True:#逐帧捕获ret, img = cap.read()gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)faces = detector.detectMultiScale(gray, 1.3, 5)for (x, y, w, h) in faces:cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)cv2.imshow('frame', img)if cv2.waitKey(1) & 0xFF == ord('q'):print('Finish!')breakcap.release() # 释放摄像头资源
cv2.destroyAllWindows()

2、抓取人脸训练数据

detector=cv2.CascadeClassifier(r'C:\Users\lmy\AppData\Local\Packages\Microsoft.MicrosoftEdge_8wekyb3d8bbwe\TempState\Downloads\opencv-4.1.2\data\haarcascades\haarcascade_frontalface_default.xml')
#这个xml文件,就是opencv在GitHub上共享出来的具有普适的训练好的数据。我们可以直接的拿来使用。说白了,就是根据训练的数据来对新图片进行识别的过程。
sampleNum = 0
Id = input('enter your id: ')
#训练数据集生成循环
while True:ret, img = cap.read()gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)faces = detector.detectMultiScale(gray, 1.3, 5)  #人脸检测。for (x, y, w, h) in faces:cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)  #这些人脸框出来sampleNum = sampleNum + 1 # 增加例子数 cv2.imwrite("Pictures/opcv/User." + str(Id) + '.' + str(sampleNum) + ".jpg", gray[y:y + h, x:x + w])  #,保存在../Pictures/opcv文件夹下,命名规则为User.[ID].[SampleNumber].jpg。如果是1号人的第十张照片,我们可以将它命名为User.1.10.jpg。cv2.imshow('frame', img)if cv2.waitKey(100) & 0xFF == ord('q'):breakelif sampleNum > 200: # 超过200张就停break    cap.release()
cv2.destroyAllWindows()

3、根据人脸训练数据,训练一个人脸识别器

from PIL import Image  #PIL(pillow)库可以完成图像归档和图像处理两方面功能需求
#(1)图像归档:对图像进行批处理、生成图像预览、图像格式转换等;
#(2)图像处理:图像基本处理、像素处理、颜色处理等。#1、初始化识别器和人脸检测器:
recognizer = cv2.face.LBPHFaceRecognizer_create()  #训练器,LBP是一种特征提取方式,能提取出图像的局部的纹理特征
'''
# 有可能是
recognizer = cv2.createLBPHFaceRecognizer()
如果face.LBPHFaceRecognizer_create或createLBPHFaceRecognizer显示不存在,则需要下载opencv-contrib-python:
pip install opencv-contrib-python(须先更新pip,pip install --upgrade pip)
从OpenCV 3开始,您必须获取并构建opencv_contrib存储库。然后你可以使用子模块“face”
'''
detector = cv2.CascadeClassifier(r'C:\Users\lmy\AppData\Local\Packages\Microsoft.MicrosoftEdge_8wekyb3d8bbwe\TempState\Downloads\opencv-4.1.2\data\haarcascades\haarcascade_frontalface_default.xml')#2、载入训练数据
#现在我们来创建一个函数,用于从数据集文件夹中获取训练图片,然后从图片的文件名中获取到这个素材相应的id。
def get_images_and_labels(path):image_paths = [os.path.join(path, f) for f in os.listdir(path)]  #从数据文件夹中载入训练图片face_samples = []  #存放ids = []           #存放for image_path in image_paths:                          #遍历图片路径,导入图片和id,添加到list:image = Image.open(image_path).convert('L')        #使用了Image.open(image_path).convert(‘L’)通过图片路径并将其转换为灰度图片。image_np = np.array(image, 'uint8')  #np.array(image, 'uint8')将图片转换成了Numpy数组,Numpy数组的逻辑结构和普通的数组无异,但是是经过优化的if os.path.split(image_path)[-1].split(".")[-1] != 'jpg':continueimage_id = int(os.path.split(image_path)[-1].split(".")[1])  #将图片路径分裂并获取信息faces = detector.detectMultiScale(image_np)for (x, y, w, h) in faces:                         #将图片和id都添加到list中face_samples.append(image_np[y:y + h, x:x + w])ids.append(image_id)return face_samples, ids#3、进行训练
faces, Ids = get_images_and_labels('Pictures/opcv')
recognizer.train(faces, np.array(Ids))
recognizer.save('trainner.yml') 

4、使用生成的人脸识别器进行人脸识别

#1、加载训练生成的识别器
#用OpenCV库以及我们训练好的数据(yml文件)创建一个识别器对象:
recognizer = cv2.face.LBPHFaceRecognizer_create()
recognizer.read('trainner.yml')#加载人脸检测的分类器
cascade_path = r'C:\Users\lmy\AppData\Local\Packages\Microsoft.MicrosoftEdge_8wekyb3d8bbwe\TempState\Downloads\opencv-4.1.2\data\haarcascades\haarcascade_frontalface_default.xml'
face_cascade = cv2.CascadeClassifier(cascade_path)
face_cascade = cv2.CascadeClassifier(r'C:\Users\lmy\AppData\Local\Packages\Microsoft.MicrosoftEdge_8wekyb3d8bbwe\TempState\Downloads\opencv-4.1.2\data\haarcascades\haarcascade_frontalface_default.xml')cam = cv2.VideoCapture(0)
font = cv2.FONT_HERSHEY_SIMPLEX #加载一个字体,用于在识别后,在图片上标注出识别对象的名字#2、识别程序的主循环
'''
在程序的主循环中,我们需要做的是:
从摄像头中获取图像
将图像转换为灰度图片
在图片中检测人脸
用识别器识别该人的id
将识别出人脸的id或名称用矩形在图片中标出来
'''
while True:ret, im = cam.read()gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)faces = face_cascade.detectMultiScale(gray, 1.2, 5)for (x, y, w, h) in faces:cv2.rectangle(im, (x - 50, y - 50), (x + w + 50, y + h + 50), (225, 0, 0), 2)img_id, conf = recognizer.predict(gray[y:y + h, x:x + w])  ##conf是置信度吧,就是预测这个头像为用户id的可信度为conf%,越小越精确if conf < 50:if img_id == 1:img_id = 'limengyao'conf = "{0}%".format(round(100 - conf))elif img_id == 2:img_id = 'liangyun'conf = "{0}%".format(round(100 - conf))else:img_id = "Unknown"# cv2.cv.PutText(cv2.cv.fromarray(im), str(Id), (x, y + h), font, 255)cv2.putText(im, str(img_id), (x, y + h), font, 0.55, (0, 255, 0), 1)cv2.putText(img, str(confidence), (x + 5, y + h - 5), font, 1, (0, 0, 0), 1)#输出置信度cv2.imshow('im', im)if cv2.waitKey(10) & 0xFF == ord('q'):breakcam.release()
cv2.destroyAllWindows()

还是可以识别出来滴O(∩_∩)O哈哈

Python-OpenCV创建人脸识别器相关推荐

  1. Python人脸识别黑科技(二):教你使用python+Opencv完成人脸解锁

    继上一篇"Python人脸识别黑科技(一):50行代码运用Python+OpenCV实现人脸追踪+详细教程+快速入门+图像识",那么今天我们来讲关于使用python+opencv+ ...

  2. python+opencv实现人脸微整形

    目录 一.前言 二.主要原理 三.算法实现 (1)计算偏移量 (2)考虑多个点影响 (3)控制点的手动增加,删除功能 四.总结 一.前言 表情捕捉驱动另一张脸或者3D人脸是元宇宙一项比较热门的技术,目 ...

  3. python opencv检测人脸

    python opencv检测人脸 文章目录: 一.opencv检测一张图片 二.opencv摄像头实时检测人脸 一.opencv检测一张图片 opencv检测人脸分成三部分: 1.图片转换成灰色(降 ...

  4. AI新时代-大神教你使用python+Opencv完成人脸解锁(附源码)

    摘要: 好吧,伙计们,我回来了.说我拖更不写文章的可以过来用你的小拳拳狠命地捶我胸口.... 那么今天我们来讲关于使用python+opencv+face++来实现人脸验证及人脸解锁.代码量同样不多, ...

  5. python+opencv实现人脸识别|采用现成训练好的模型

    一.图片人脸检测(opencv) 1.安装opencv环境 介绍windows中opencv在python3上的实现,我的系统环境win10+python3.6+opcv3.4.1 首先去网站下载Op ...

  6. Python+OpenCV创建级联文件(Windows7/10环境)

    目录 1.搭建环境 2.准备数据集 3.训练级联文件 之前使用Python+OpenCV实现交通路标识别,具体实现步骤及心得如下: OpenCV训练属于自己的xml文件,需以下几个步骤: 1.首先下载 ...

  7. python opencv 人体/人脸识别 简易demo

    前言 参考文章: pythonopencv检测行人_[图像处理]使用OpenCV实现人脸和行人检测 Python如何实现行人识别-人体识别 本文主要讲述关于opencv官方提供的现成模型,采取Hog特 ...

  8. python + OpenCV 实现人脸检测(全网之最通俗易懂)

    文章目录 先看一下效果 采集人脸信息 人脸识别 以上源码 本文人脸识别检测具体是通过程序采集图像并进行训练,并且基于这些训练的图像对人脸进行动态识别. 人脸识别前所需要的人脸库可以通过两种方式获得: ...

  9. python人脸口罩识别_基于Python+OpenCV的人脸口罩识别检测

    以下编程在Jupyter notbook平台上进行 一.OpenCV下载安装 二.人脸口罩数据集下载处理 (一)人脸口罩数据集下载 下载人脸口罩数据集的目的是利用OpenCV进行模型训练,这里采用口罩 ...

最新文章

  1. jquery操作复选框(checkbox)的12个小技巧总结
  2. pwm调制 matlab仿真,PWM脉冲调制直流电机的simulink仿真
  3. linux NFS配置:NFS相关概念及其配置与查看
  4. debian 8 网桥
  5. Apache Maven ToolChains的使用
  6. 绝地求生信号枪只能在服务器吗,绝地求生信号枪怎么用?信号枪刷新点及用法详解...
  7. window.print 点击取消后再次打印无效_教程 | 图书馆自助复印打印机使用方法
  8. 【英语学习】【Level 08】U03 My Choice L4 The coolest movie character
  9. struts2的知识
  10. 《python核心编程》学习笔记
  11. 保姆级的Arduino循迹小车研发日志及一些坑(其中包含L298N、Arduino、TCRT5000以及1:48的TT电机的使用)
  12. ad18 bell封装_AD元件库中的常用元件和元器件封装资料合集
  13. celeste第二章_蔚蓝山Celeste全成就指南_蔚蓝山Celeste全成就获得方法_游戏堡
  14. 大学物理复习笔记——电磁感应定律
  15. nc 监听数据_linux包之nc之nc命令
  16. typora 有道云笔记_利用神器Typora+PicGo,实现有道云不用会...
  17. 数据预处理 拉依达准则 matlab,数学建模数据预处理.doc
  18. 暴雪战网怎么修改服务器,战网更改地区的图文教程
  19. 什么是seo、vue中如何优化seo ?
  20. 怎么找生物信息论文的数据,PubMed太有用了!

热门文章

  1. fpdlink DS90UB947-DS90UB948 LVDS
  2. 边缘计算网关在水文监测系统中的应用
  3. chm文件打不开解决方法
  4. 敏捷 Scrum 框架核心 “3355”
  5. 手把手教你利用Word制作成绩表(超详细)
  6. 祈祷套装的属性怎么样?
  7. 【译+评】VisionMobile:Nokia+Microsoft:两个残破商务模式的故事
  8. *2.5 迭代法的收敛阶与加速收敛方法
  9. iptables用recent来提高安全性,防止ssh暴力攻击
  10. 生活随记-关于姚老先生