环境:python3.9 opencv-python 4.5.5.62

首先是录入人脸,信息会保存到py文件的同级目录下的data文件中,data文件要先创建好,否则不能生成文件,然后训练生成trainer/trainer.yml文件,trainer文件也要先创建,然后进行检测就好,代码中用的xml文件的下载地址:代码中的xml文件
haarcascade_frontalface_alt2.xml
haarcascade_frontalface_default.xml

haarcascade的其他文件
haarcascade_eye.xml
haarcascade_eye_tree_eyeglasses.xml
haarcascade_frontalcatface.xml
haarcascade_frontalcatface_extended.xml
haarcascade_frontalface_alt.xml
haarcascade_frontalface_alt_tree.xml
haarcascade_fullbody.xml
haarcascade_lefteye_2splits.xml
haarcascade_licence_plate_rus_16stages.xml
haarcascade_lowerbody.xml
haarcascade_profileface.xml
haarcascade_righteye_2splits.xml
haarcascade_russian_plate_number.xml
haarcascade_smile.xml
haarcascade_upperbody.xml


源码:


录入人脸

# Enter
# 2022/2/17
import cv2face_name = ''  # 该人脸的名字# 加载OpenCV人脸检测分类器
face_cascade = cv2.CascadeClassifier("E:/data/haarcascade_frontalface_default.xml")
recognizer = cv2.face.LBPHFaceRecognizer_create()  # 准备好识别方法LBPH方法camera = cv2.VideoCapture(0 ,cv2.CAP_DSHOW)  # 0:开启摄像头
success, img = camera.read()  # 从摄像头读取照片
W_size = 0.1 * camera.get(3)  # 在视频流的帧的宽度
H_size = 0.1 * camera.get(4)  # 在视频流的帧的高度def get_face():print("正在从摄像头录入新人脸信息 \n")picture_num = 0  # 设置录入照片的初始值while True:  # 从摄像头读取图片global success  # 设置全局变量global img  # 设置全局变量ret, frame = camera.read()  # 获得摄像头读取到的数据(ret为返回值,frame为视频中的每一帧)if ret is True:gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)  # 转为灰度图片cv2.imshow("gray",gray)else:breakface_detector = face_cascade  # 记录摄像头记录的每一帧的数据,让Classifier判断人脸faces = face_detector.detectMultiScale(gray, 1.3, 5)  # gray是要灰度图像,1.3为每次图像尺寸减小的比例,5为minNeighborsfor (x, y, w, h) in faces:  # 制造一个矩形框选人脸(xy为左上角的坐标,w为宽,h为高)cv2.rectangle(frame, (x, y), (x + w, y + w), (255, 0, 0))picture_num += 1  # 照片数加一t = face_nameprint("./data/1." + str(t) + '.' + str(picture_num))cv2.imwrite("./data/1." + str(t) + '.' + str(picture_num) + '.jpg', gray[y:y + h, x:x + w])# 保存图像,将脸部的特征转化为二维数组,保存在data文件夹内maximums_picture = 13  # 设置摄像头拍摄照片的数量的上限if picture_num > maximums_picture:breakcv2.waitKey(1000)get_face()

训练

# Train
# 2022/2/17
import os
import cv2
from PIL import Image
import numpy as npdef getlable(path):facesamples = []  # 储存人脸数据(该数据为二位数组)ids = []  # 储存星门数据imagepaths = [os.path.join(path, f) for f in os.listdir(path)]  # 储存图片信息face_detector = cv2.CascadeClassifier('E:/data/'                                         'haarcascade_frontalface_alt2.xml')  # 加载分类器print('数据排列:', imagepaths)  # 打印数组imagepathsfor imagePath in imagepaths:  # 遍历列表中的图片pil_img = Image.open(imagePath).convert('L')# 打开图片,灰度化,PIL的两种不同模式:# (1)1(黑白,有像素的地方为1,无像素的地方为0)# (2)L(灰度图像,把每个像素点变成0~255的数值,颜色越深值越大)img_numpy = np.array(pil_img, 'uint8')  # 将图像转化为数组faces = face_detector.detectMultiScale(img_numpy)  # 获取人脸特征id = int(os.path.split(imagePath)[1].split('.')[0])  # 获取每张图片的id和姓名for x, y, w, h in faces:  # 预防无面容照片ids.append(id)facesamples.append(img_numpy[y:y + h, x:x + w])# 打印脸部特征和idprint('id:', id)print('fs:', facesamples)return facesamples, idsif __name__ == '__main__':path = 'C:/Desktop/py/Face_ Recognition/data'  # 图片路径faces, ids = getlable(path)  # 获取图像数组和id标签数组和姓名recognizer = cv2.face.LBPHFaceRecognizer_create()  # 获取训练对象recognizer.train(faces, np.array(ids))recognizer.write('trainer/trainer.yml')  # 保存生成的人脸特征数据文件

识别

# Recognition
# 2022/2/17import cv2
import os# 加载训练数据集文件
recogizer = cv2.face.LBPHFaceRecognizer_create()
recogizer.read('trainer/trainer.yml')  # 获取脸部特征数据文件
names = []
warningtime = 0def face_detect_demo(img):gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  # 转换为灰度图像face_detector = cv2.CascadeClassifier("E:/data/haarcascade_frontalface_default.xml")  # 加载分类器face = face_detector.detectMultiScale(gray, 1.3, 5, cv2.CASCADE_SCALE_IMAGE, (100, 100), (300, 300))# 进行识别,把整张人脸部分框起来for x, y, w, h in face:cv2.rectangle(img, (x, y), (x + w, y + h), color=(0, 0, 255), thickness=2)  # 矩形cv2.circle(img, center=(x + w // 2, y + h // 2), radius=w // 2, color=(0, 255, 0), thickness=1)  # 圆形ids, confidence = recogizer.predict(gray[y:y + h, x:x + w])  # 进行预测、评分if confidence > 80:global warningtimewarningtime += 1if warningtime > 100:  # 警报达到一定次数,说明不是这个人warningtime = 0cv2.putText(img, 'unkonw', (x + 10, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (0, 255, 0), 1)else:cv2.putText(img, str(names[ids - 1]), (x + 10, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (0, 255, 0), 1)# 把姓名打到人脸的框图上cv2.imshow('result', img)# print('bug:',ids)def name():path = 'C:/Users/wangb/Desktop/py/Face_ Recognition/data'imagepaths = [os.path.join(path, f) for f in os.listdir(path)]for imagePath in imagepaths:name1 = str(os.path.split(imagePath)[1].split('.', 2)[1])names.append(name1)cap = cv2.VideoCapture(0,cv2.CAP_DSHOW)
name()
while True:flag, frame = cap.read()  # 获得摄像头读取到的数据(flag为返回值,frame为视频中的每一帧)if not flag:breakface_detect_demo(frame)if ord(' ') == cv2.waitKey(10):  # 按空格,退出break
cv2.destroyAllWindows()
cap.release()
# print(names)

识别效果

问题:

如果cv2.VideoCapture(0)
报错: ...\cap_msmf.cpp(435)anonymousnamespace'::SourceReaderCB::~SourceReaderCB terminating async callback
改为:cv2.VideoCapture(0 ,cv2.CAP_DSHOW)
可能是版本兼容问题

python+opencv简单人脸识别(源码)(有手就行)相关推荐

  1. python 人脸识别源码

    Python是一种流行的编程语言,可以用于许多任务,包括人脸识别.以下是使用Python进行人脸识别的基本步骤: 安装必要的库:为了进行人脸识别,您需要安装OpenCV(用于图像处理),dlib(用于 ...

  2. Android之OpenCv简单人脸识别功能(Bitmap)

    Android之OpenCv简单人脸识别功能 OpenCv的下载 下载地址 - https://opencv.org/releases/ doc 文档目录 samples 示例代码 sdk 编译后的动 ...

  3. Android园区部队人脸识别源码门禁项目讲解

    Android园区部队人脸识别源码门禁项目讲解 这边搞人脸识别相关项目有一段时间,今天抽时间讲述一个经典的人脸识别项目:部队人脸识别门禁系统. 大家都知道部队对人员管理安全要求是相当高的,很多保密的技 ...

  4. 人脸检测颜值软件_AI人脸颜值测颜版下载-百度ai测试颜值人脸识别源码下载v1.0 免费版-西西软件下载...

    百度ai测试颜值人脸识别源码这是由官方百度AI精心打造出来的,这款软件将人脸识别氛围V2和V3两个接口,而且用户使用可以参考相应的文档权限来选择接口类型,让广大用户学习到百度AI人脸识别测颜值相关知识 ...

  5. python人脸识别源码_Python 抖音机器人,让你找到漂亮小姐姐

    本项目作者沉迷于抖音无法自拔,常常花好几个小时在抖音漂亮小姐姐身上. 本着高效.直接地找到漂亮小姐姐的核心思想,我用 Python + ADB 做了一个 Python 抖音机器人 Douyin-Bot ...

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

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

  7. facenet 人脸识别源码的使用方法(一)

    1. 开发环境 OS:        ubuntu16.04 tensorflow版本:1.12.0 python版本:    3.6.7 2. 下载源码到本地 facenet官方github: ht ...

  8. python+opencv的人脸识别+语音播报集成的模拟人脸打卡系统的编程思路

      1.前言   人脸打卡系统实现的功能是:刷张三的脸并提示打卡成功,想满足这个条件首先要有张三的图像制成的分类器,外加上一个判断语句做成的语音播报,语音播报有相关的第三方库,所以让他发出声音只需要刷 ...

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

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

  10. 树莓派用Python+OpenCV做人脸识别

    硬件:树莓派 B+ 先安装python-opencv: sudo apt-get install python-opencv Python 2.7   OpenCV3.0 然后在树莓派usb端口插入一 ...

最新文章

  1. 马云再谈996,又一次被网友怒骂:马老师,求求你闭嘴吧!
  2. SQL Server索引设计 第五篇
  3. Lesson 16.1416.15 GoogLeNet:思想与具体框架GoogLeNet复现
  4. 两数之和——双指针法
  5. 一对多关系(one-to-many)
  6. 效果图底图 线框图_5分钟的线框图教程
  7. (计算机组成原理)第二章数据的表示和运算-第一节3:字符与字符串在计算机中的表示详解
  8. 性能超最先进卷积!用Transformer进行图像语义分割!
  9. Druid 配置及内置监控,Web页面查看监控内容 【我改】
  10. Django 添加应用
  11. 罗森伯格2013中国数据中心峰会—长春站
  12. 按键精灵手机助手之数学函数
  13. 微信小程序使用百度翻译
  14. MessAPI V1.1.1 QQ音乐、网易云音乐、酷狗音乐、咪咕音乐、酷我音乐、百度音乐API接口
  15. 尼克 超级智能 路线_他山石|《超级智能》作者尼克·波斯特洛姆:超级智能将决定人类的未来...
  16. EverNote开源协议-Android
  17. kubernetes增加删除master节点操作
  18. Trinity 概述(一)
  19. 2022年Roguelike“割草”游戏风潮为何刮的如此强劲?
  20. iPhone X适配之MJ上拉加载更多的适配

热门文章

  1. mysql的驱动jar包_各版本MySQL数据库驱动程序jar包大全(java连接mysql驱动jar包)
  2. delphi 读取pdf
  3. c语言单片机题目设计大全,单片机课程设计要求及参考题目
  4. GIT仓库瘦身及GIT LFS迁移说明
  5. html制作摩天轮,LED幻彩摩天轮的制作方法
  6. 抖音快手vbs表白代码大全(操作方法)
  7. linux设置定时关机命令,linux定时关机命令是什么?
  8. 详细User-Agent大全
  9. python语义网络图_知识图谱之语义网络篇
  10. HTML5七夕情人节表白网页制作【唯美满天星3D相册】HTML+CSS+JavaScript