opencv动态识别人脸

embedded/2024/9/23 14:36:37/
import cv2
import os
import numpy as npdef take_faces():while True:key = input('请输入文件夹的名字,姓名拼音的缩写,如果输入Q,程序退出!')if key == 'Q':break# 在faces_dynamic下面创建子文件夹os.makedirs('./faces_dymamic/%s' % (key), exist_ok=True)take_photo(key)def load_data():listdir = os.listdir('./faces_dymamic')#列表生成式names = [d for d in listdir if not d.startswith('.')]faces  = []target = [i for i in range(len(names))]*10for dir in names:for i in range(1,11):gray = cv2.imread('./faces_dymamic/%s/%d.jpg'% (dir,i)) #三维图片gray_ = gray[:, :, 0] #二维数组faces.append(gray_)faces = np.asarray(faces)target = np.asarray(target)target.sort()  # 排序return faces,target,namesdef dynamic_recognizer_face(face_recognizer,names):cap = cv2.VideoCapture(0)#人脸检测face_detector = cv2.CascadeClassifier('./haarcascade_frontalface_default.xml')while True:flag,frame = cap.read()if not flag:breakgray = cv2.cvtColor(frame, code=cv2.COLOR_BGR2GRAY)faces = face_detector.detectMultiScale(gray,minNeighbors=5)for x,y,w,h in faces:face = gray[y:y + h, x:x + w]face = cv2.resize(face, dsize=(64, 64))y_,confidence = face_recognizer.predict(face)label = names[y_]print('这个人是:%s.置信度:%0.1f'%(label,confidence))cv2.rectangle(frame,pt1=(x,y),pt2=(x+w,y+h),color=[0,0,255],thickness=2)cv2.putText(frame,text=label,org=(x,y-10),fontFace=cv2.FONT_HERSHEY_SIMPLEX,fontScale=1.5,color=[0,0,255],thickness=2)cv2.imshow('face',frame)key = cv2.waitKey(1000//24)if key == ord('q'):breakcv2.destroyAllWindows()cap.release()if __name__ == '__main__':#2、加载数据,返回目标值faces,target,names  = load_data()#print(faces.shape,target.shape)#3、加载人脸识别算法#face_recognizer = cv2.face.EigenFaceRecognizer_create()#face_recognizer = cv2.face.FisherFaceRecognizer_create()face_recognizer = cv2.face.LBPHFaceRecognizer_create()#4、算法训练,找到目标值之间的规律face_recognizer.train(faces,target)#5、动态加载数据dynamic_recognizer_face(face_recognizer,names )

http://www.ppmy.cn/embedded/28234.html

相关文章

Redisson分布式锁,重试锁和锁续命的原理

RedissonLock 锁重试原理 tryLock有三个三个参数,第一个是等待时间,第二个是锁失效后自动释放的时间,不填默认为-1,第三个是时间单位; 当设置了第一个参数,那这个锁就成了可重试锁;获取锁失败后&#xff0c…

实验报告1 小费数据分析(包含描述性-数据可视化)

实验报告1 小费数据分析 实验内容 小费数据分析 实验思路:读取数据-数据预处理-探索性数据分析(描述性统计分析)-分组分析-可视化分析-特征工程 实验环境工具:VS code 编程语言:python 实验原理: (用到pandas库的哪些基本概念和方法?这些方法分别是什么作用?) 在上述…

Linux服务器安全基础 - 查看入侵痕迹

1. 常见系统日志 /var/log/cron 记录了系统定时任务相关的日志 /var/log/dmesg 记录了系统在开机时内核自检的信息,也可以使用dmesg命令直接查看内核自检信息 /var/log/secure:记录登录系统存取数据的文件;例如:pop3,ssh,telnet,ftp等都会记录在此. /var/log/btmp:记…

利用RunnerGo数据大屏强化测试管理与决策

测试平台中的数据大屏在提供实时监控、统计分析、效率提升、制定策略和促进沟通等方面具有重要的意义。它为测试团队提供更全面、更直观的数据支持,有助于提高测试质量和效率,减少风险,并加强团队协作和沟通。 数据大屏也是RunnerGo的核心特…

Json高效处理方法

一、参考我之前的博客,Delphi可以很方便的把类和结构体转换成JSON数据,但是数据量大了,就会非常之慢,1万条数据需要20秒左右。如果引用Serializers单元,那么100万数据只需要4秒左右,每秒处理20万+,速度还是很快的。 二、写一个简单的类  TPeople = class private …

kerberos-hive-dbeaver问题总结

一、kerberos安装windows客户端 1、官方下载地址 http://web.mit.edu/kerberos/dist/ 2、环境变量配置 下载msi安装包,无需重启计算机,调整环境变量在jdk的前面,尽量靠前,因为jdk也带了kinit、klist等命令 C:\Program Files\…

【数组】Leetcode 88. 合并两个有序数组【简单】

合并两个有序数组 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。 **注意:**最终…

【机器学习】集成学习---Bagging之随机森林(RF)

【机器学习】集成学习---Bagging之随机森林(RF) 一、引言1. 简要介绍集成学习的概念及其在机器学习领域的重要性。2. 引出随机森林作为Bagging算法的一个典型应用。 二、随机森林原理1. Bagging算法的基本思想2. 随机森林的构造3. 随机森林的工作机制 三…