人脸采集训练识别

项目概述:

       本地摄像头采集人脸数据集,通过训练得到trainingData.yml模型,加载haarcascade_frontalface_default.xml实现人脸识别。haarcascade_frontalface_default.xml 文件并不是一个完整的人脸识别模型,而是一个用于检测正脸(frontal face)的 Haar 特征级联分类器文件。具体来说,这个 XML 文件包含了经过训练的级联分类器,用于在图像中快速定位和识别人脸区域。这种级联分类器主要基于 Haar 特征,通过使用一系列特征模板来区分对象。该分类器主要用于人脸检测任务,识别出输入图像中可能存在的人脸区域。

haarcascade_frontalface_default.xml文件下载地址:

opencv/data/haarcascades/haarcascade_frontalface_default.xml at master · kipr/opencv · GitHub

1、数据采集

使用在线sqlite3(SQL Online Compiler - Next gen SQL Editor)创建数据库。

 CREATE TABLE students(Id int,Name varchar(20),age INT);

 '''数据采集 dataset_creater.py'''​import cv2import sqlite3​faceDetect = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')  # 摄像头中面部识别cam = cv2.VideoCapture(0)  # 打开默认的第一个摄像头​​def inserttoupdate(Id, Name, age):conn = sqlite3.connect("sqlite.db")cmd = "SELECT * FROM STUDENTS WHERE ID=" + str(Id)cursor = conn.execute(cmd)isRecordExist = 0for row in cursor:isRecordExist = 1if isRecordExist == 1:conn.execute("UPDATE STUDENTS SET NAME =?,AGE=? WHERE ID=?", (Name, age, Id))else:conn.execute("INSERT INTO STUDENTS (ID,NAME,AGE) VALUES (?,?,?)", (Id, Name, age))conn.commit()conn.close()​​# 向sqlite3数据库中插入数据Id = input('输入用户的ID:')Name = input('输入用户的姓名:')age = input('输入用户的年龄')inserttoupdate(Id, Name, age)​sampleNum = 0  # 假设数据集中没有样本​while True:ret, img = cam.read()gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)faces = faceDetect.detectMultiScale(gray, 1.3, 5)for (x, y, w, h) in faces:sampleNum = sampleNum + 1  # 如果检测到了人脸+1cv2.imwrite("dataset/User." + str(Id) + "." + str(sampleNum) + ".jpg", gray[y:y + h, x:x + w])cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)cv2.waitKey(100)cv2.namedWindow('Face', cv2.WINDOW_NORMAL)cv2.imshow('Face', img)  # 显示网络摄像头中检测到的面孔if cv2.waitKey(5) & 0xFF == 27:  # 按ESC退出breakcam.release()cv2.destroyAllWindows()
 ​2、数据训练
'''数据训练 trainer.py'''​import osimport cv2import numpy as npfrom PIL import Image​recognizer = cv2.face.LBPHFaceRecognizer_create()  # 创建 LBPH 人脸识别器path = "dataset"​def getImagesWithID(path):imagePaths = [os.path.join(path, f) for f in os.listdir(path)]  # 获取图像路径faces = []IDs = []for imagePath in imagePaths:faceImg = Image.open(imagePath).convert('L')  # 打开并转换为灰度图像faceNp = np.array(faceImg, 'uint8')ID = int(os.path.split(imagePath)[-1].split(".")[1])  # 从文件名中提取IDprint(ID)faces.append(faceNp)IDs.append(ID)cv2.imshow("Training", faceNp)  # 在窗口中显示训练图像cv2.waitKey(100)return np.array(IDs), faces​Ids, faces = getImagesWithID(path)recognizer.train(faces, Ids)  # 使用图像数据进行训绋recognizer.save('recognizer/trainingData.yml')  # 保存训练好的模型​cv2.destroyAllWindows()  # 关闭所有 OpenCV 窗口​

运行以上代码中如果出现以下错误:

 AttributeError: module 'cv2' has no attribute 'face'

可以重新 pip install opencv-contrib-python

3、人脸分析 
'''人脸分析 detect.py'''​import cv2import sqlite3​facedetector = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')cam = cv2.VideoCapture(0)​recognizer = cv2.face.LBPHFaceRecognizer_create()recognizer.read('recognizer/trainingData.yml')​​def getprofile(id):conn = sqlite3.connect("sqlite.db")cmd = "SELECT * FROM STUDENTS WHERE ID=" + str(id)cursor = conn.execute(cmd)profile = Nonefor row in cursor:profile = rowconn.close()return profile​​id = 0while True:ret, im = cam.read() # 从摄像头捕获一帧图像,ret 表示是否成功读取帧,im 是捕获的图像。gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)faces = facedetector.detectMultiScale(gray, 1.2, 5)for (x, y, w, h) in faces:cv2.rectangle(im, (x, y), (x + w, y + h), (225, 0, 0), 2)id, conf = recognizer.predict(gray[y:y + h, x:x + w])profile = getprofile(id)print(profile)if profile is not None:cv2.putText(im, "Name:" + str(profile[1]), (x, y + h + 20), cv2.FONT_HERSHEY_COMPLEX, 1, (0, 255, 127), 2)cv2.putText(im, "Age:" + str(profile[2]), (x, y + h + 45), cv2.FONT_HERSHEY_COMPLEX, 1, (0, 255, 255), 2)cv2.imshow('Face', im)if cv2.waitKey(5) & 0xFF == 27: # 按ESC退出breakcam.release()cv2.destroyAllWindows()

​在人脸识别代码中:

facedetector 是使用的人脸检测器对象,通常是一个基于 Haar 特征的级联分类器。在这段代码中,facedetector 是通过加载名为 'haarcascade_frontalface_default.xml' 的 XML 文件创建的。该 XML 文件包含了训练好的模型,用于检测图像中的人脸。具体来说,这个级联分类器可以根据预先训练好的数据集,通过对输入图像进行特征匹配和分类来识别出人脸。detectMultiScale() 方法用于在图像中检测多个尺度的目标(在这种情况下是人脸)。在 detectMultiScale() 方法中,传入的参数包括灰度图像、每次缩小图像的尺寸比例因子以及定义人脸大小的参数。这个方法会返回检测到的人脸区域的坐标和尺寸,以便后续对每个人脸区域进行识别和处理。总之,facedetector 对象是用于检测输入图像中人脸的重要组件,通过使用 Haar 特征和级联分类器技术,在实时视频流中定位并识别人脸。recognizer.predict() 方法返回两值:识别出的人脸 ID 和与该 ID 相关的置信度(confidence)。

  1. Person ID:

    • 这是表示识别出的人脸属于哪个个体的标识符。

    • 在训练期间,每个被识别的人脸都会分配一个唯一的 ID。

    • 通过这个 ID,可以在数据库中查找对应的个人信息。

  2. Confidence (置信度):

    • 置信度是指识别系统对预测结果的自信程度或确定性水平。

    • 通常用数值来表示,越低表示系统认为识别可能不太可靠,而较高的值则表示系统更有信心认为识别结果准确。

    • 对于人脸识别系统,置信度越低表示系统对于该识别结果的可靠性存在疑问。

因此,recognizer.predict() 返回的两个值可以帮助我们了解识别出的人脸属于哪个个体,并提供了一个指标来评估系统对该识别结果的确定程度。

最后识别结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/832969.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Llama3-Tutorial之XTuner微调Llama3图片理解多模态

Llama3-Tutorial之XTuner微调Llama3图片理解多模态 基于 Llama3-8B-Instruct 和 XTuner 团队预训练好的 Image Projector 微调自己的多模态图文理解模型 LLaVA。 参考: https://github.com/SmartFlowAI/Llama3-Tutorial 1. 环境、模型、数据准备 1.1 配置环境 使用如…

【算法】双指针

下面是对双指针算法的题目总结和归纳,有需要借鉴即可。 双指针算法习题目录 1.移动零2.复写零3.快乐数4.盛最多水的容器5.有效三角形的个数6.和为s的两个数7.三数之和8.四数之和 1.移动零 题目链接:LINK 题解: 思路①:暴力求解 …

【备战软考(嵌入式系统设计师)】08 - 多媒体技术信息安全

多媒体技术 这内容比较杂,而且跟咱嵌入式的关系不大,但是软考里会考一些,下面我就结合我已经刷过的一千多道往年真题概括总结一下常考的知识点。 媒体分类 首先媒体分为五类: 感觉媒体,让人直接感觉得到的媒体&…

zTasker v1.88.1一键定时自动化任务

软件介绍 zTasker是一款完全免费支持定时、热键或条件触发的方式执行多种自动化任务的小工具,支持win7-11。其支持超过100种任务类型,50种定时/条件执行方法,而且任务列表可以随意编辑、排列、移动、更改类型,支持任务执行日志&a…

人脸美妆SDK解决方案,自研人脸美妆方案

美妆已经成为视频内容中不可或缺的一部分。从拍摄到编辑,再到直播,美妆效果都能为视频内容增添魅力,吸引更多观众的眼球。为了满足企业对于高质量美妆效果的需求,美摄科技凭借多年的技术积累和创新精神,推出了全新的人…

内容安全(DPI和DFI解析)

内容安全前言: 防火墙的本质其实就是包过滤,我们通常所说的安全设备(如:IPS、IDS、AV、WAF)的检测重心是应用层。下一代防火墙基于传统防火墙的拓展能力,就是可以将以上的安全设备模块集成在一起&#xff0…

智慧应急三维电子沙盘系统

深圳易图讯科技有限公司(www.3dgis.top)自主研发的智慧应急三维电子沙盘系统依托大数据融合物联网、云计算、移动互联、5G、BIM、三维GIS等新一代信息技术,集成了高清卫星影像、地形数据、实景三维模型、现场环境数据、物联感知信息、人口、建…

SRC公益漏洞挖掘思路分享

0x00 前言 第一次尝试挖SRC的小伙伴可能会觉得挖掘漏洞非常困难,没有思路,不知道从何下手,在这里我分享一下我的思路 0x01 挖掘思路 确定自己要挖的漏洞,以及该漏洞可能存在的功能点,然后针对性的进行信息收集 inurl…

一起深度学习(AlexNet网络)

AlexNet神经网络 代码实现: 代码实现: import torch from torch import nn from d2l import torch as d2lnet nn.Sequential(# 采用了11*11的卷积核来捕捉对象,因为原始输入数据比较大#步幅为4 ,可减少输出的高度核宽度。#输出通…

Compose 状态管理

文章目录 Compose 状态管理概述使用MutableStaterememberStatelessComposable & StatefulComposable状态提升rememberSaveable支持parceable不支持parceable 使用ViewModelViewModelProvider.Factory 使用Flow Compose 状态管理 概述 当应用程序的状态发生变化时&#xf…

(40)4.30数据结构(队列)

1.队列的基本概念 2.队列的顺序 #define MaxSize 10 #define ElemType int typedef struct { ElemType data[MaxSize]; int front, rear; }SqQueue;//1.初始化操作 void InitQueue(SqQueue& Q) { //初始化 队头,队尾指针指向0 Q.rear Q.fron…

环形链表理解||QJ141.环形链表

在链表中,不光只有普通的单链表。之前写过的的一个约瑟夫环形链表是尾直接连向头的。这里的环形链表是从尾节点的next指针连向这链表的任意位置。 那么给定一个链表,判断这个链表是否带环。qj题141.环形链表就是一个这样的题目。 这里的思路是用快慢指…

jenkins+gitlab+ansible-tower实现发布

前提准备: gitlab中上传相应的jenkinsfile文件和源码。 安装和破解ansible-tower。 安装jenkins。 大致流程:从gitlab中拉取文件,存放到windows机器上,使用nuget等进行打包到windows中,使用sshPublisher语句传输到远程…

LLMs之RAG:LangChain-Chatchat(一款中文友好的全流程本地知识库问答应用)的简介(支持 FastChat 接入的ChatGLM-2/LLaMA-2等多款主流LLMs+多款embe

LLMs之RAG:LangChain-Chatchat(一款中文友好的全流程本地知识库问答应用)的简介(支持 FastChat 接入的ChatGLM-2/LLaMA-2等多款主流LLMs多款embedding模型m3e等多种TextSplitter分词器)、安装(镜像部署【AutoDL云平台/Docker镜像】,离线私有部署支持RTX3…

yum仓库及NFS共享

yum简介 yum是一个基于RPM包(是Red-Hat Package Manager红帽软件包管理器的缩写)构建的软件更新机制,能够自动解决软件包之间的依赖关系。 yum 实现过程 先在yum服务器上创建 yum repository(仓库),在仓…

stm32f103zet6_DAC_2_输出电压

实现效果 DAC输出的电压 同过电压表测量电压 1.DAC配置的步骤 初始化DAC时钟。配置DAC的GPIO端口。设置DAC的工作模式(例如,是否使用触发功能,是否启用DAC中断等)。启动DAC。 2常用的函数 函数 HAL_DAC_Start() - 开启指定…

EtherCAT开发_4_分布时钟知识点摘抄笔记1

分布时钟 (DC,Distributed Cl ock) 可以使所有EtherCAT设备使用相同的系统时间,从而控制各设备任务的同步执行。从站设备可以根据同步的系统时间产生同步信号,用于中断控制或触发数字量输入输出。支持分布式时钟的从站称为 DC 从站。分布时钟…

ATA-2161高压放大器用途有哪些种类

高压放大器是一种电子设备,其主要功能是将输入信号放大到较高的电压水平,同时保持信号的形状和特性。这种设备在各种应用领域中都有重要作用,它的种类繁多,根据不同的用途可以分为多种类型。 1.医学领域 在医学设备中,…

Sermant在异地多活场景下的实践

Sermant社区在1.3.0和1.4.0版本相继推出了消息队列禁止消费插件和数据库禁写插件,分别用于解决异地多活场景下的故障切流和保护数据一致性问题。本文将对Sermant在异地多活场景下的实践进行剖析。 一、异地多活 1.1 什么是异地多活 对于一个软件系统,…

极致视觉盛宴,尽在Extreme Picture Finder!

在信息爆炸的时代,网络图片如同繁星点点,为我们的生活增添无尽的色彩。然而,如何在浩渺的网海中快速、准确地找到心仪的图片,却成了许多人的难题。此刻,Extreme Picture Finder如同一位贴心的向导,引领我们…