基于opencv的人脸识别(实战)

前言

经过这几天的学习,我已经跃跃欲试了,相信大家也是,所以我决定自己做一个人脸识别程序。我会把自己的思路和想法都在这篇博客内讲清楚,大家可以当个参考,🌟仅供学习使用🌟。

🌟在文章顶部,我给出打包的exe文件,不管你的电脑是否有python都可以运行人脸识别应用程序,我在这里打包了文件,后续有空会更新代码,给出功能更完善的程序应用,大家图个乐吧~

🌟这里提供本文代码打包的exe文件的蓝奏云,这个后续是不会更新的:人脸识别系统 密码是:551x

⚠️本博客的所有内容只供学习,不可用于其他用途,目前拒绝转载!!!

流程

  • 前言
    • 前期准备
    • 添加人脸数据集
    • 人脸识别功能
    • 人脸检测
    • 成果展示
    • 补充:如何用手机作为摄像头
    • 小结

前期准备

在开始之前,我们先构想一个基本框架:

  1. 我们需要一个数据库来存储人物照片。
  2. 我们需要使用一种人脸识别器来进行人脸识别训练,这里我选用Fisherfaces人脸识别器。
  3. 既然已经可以识别人脸了,我们需要检测人脸,haarcascade_frontalface_default.xml是检测正面人脸的级联分类器文件,加载该文件我们就可以创建出追踪正面人脸的分类器了。

根据这些思路,我创建了以下文件架构:

face
└── cascades # 用来存放opencv的xml文件├── face_db # 用来存放人脸数据集└── lib # 用来存放功能函数└── main.py # 主函数

添加人脸数据集

在face_db文件夹添加你要识别的人的文件,例如你有十张杨幂的人脸图片,你在face_db文件夹中添加一个文件夹:yangmi,将十张杨幂的人脸图片放入文件夹内,例如我这样:
在这里插入图片描述

这是我放了两个人的人脸的数据,这里要注意两点:

  1. 首先就是数据最少都要两个人的数据
  2. 其次就是如果你进行人脸检测的摄像头是电脑的你就用电脑的相机拍照,如果检测时用手机摄像头就用手机摄像头拍照

人脸识别功能

我们有了数据集就可以创建特征脸识别器进行训练了。这里我们在lib文件夹内添加功能函数模块,目前我只添加了人脸识别功能,在lib内创建函数face_recognition.py。

废话不多说,直接上代码:

# face_recognition.py
import cv2,os
import numpy as npphotos = list()  # 样本图像列表
lables = list()  # 标签列表
target_size = (100, 200)  # 设置统一的图像尺寸# ⚠️listdir要求绝对路径,换成你们自己的
for filename in os.listdir(r'C:\Users\lyh20\PycharmProjects\face\face_db\lyh'):file_path = os.path.join(r'C:\Users\lyh20\PycharmProjects\face\face_db\lyh', filename)# 检查是否为文件if os.path.isfile(file_path):# 读取图像并添加到photos列表photo = cv2.imread(file_path,0)# ⚠️识别器要求图片尺寸要相同,所以统一尺寸photo = cv2.resize(photo,target_size)if photo is not None:  # 确保图像被正确读取photos.append(photo)lables.append(0)for filename in os.listdir(r'C:\Users\lyh20\PycharmProjects\face\face_db\zch'):file_path = os.path.join(r'C:\Users\lyh20\PycharmProjects\face\face_db\zch', filename)# 检查是否为文件if os.path.isfile(file_path):# 读取图像并添加到photos列表photo = cv2.imread(file_path,0)photo = cv2.resize(photo, target_size)if photo is not None:  # 确保图像被正确读取photos.append(photo)lables.append(1)names = {"0": "lyh","1":"zch"}  # 标签对应的名称字典,如果有更多的人物,就按照这个格式添加def recognitionface(img):
'''
img:图像数据
'''recognizer = cv2.face.FisherFaceRecognizer_create()  # 创建特征脸识别器recognizer.train(photos, np.array(lables))  # 识别器开始训练i = cv2.resize(img,target_size)i = cv2.cvtColor(i,cv2.COLOR_RGB2GRAY)label, confidence = recognizer.predict(i)  # 识别器开始分析人脸图像return names[str(label)]

🌟代码写的很详细了,如果还有不懂的评论区见咯。

lib文件夹内就是存储功能函数的,我目前只添加了这个功能。

人脸检测

我们已经有了识别人脸的函数了,那我们现在就需要打开摄像头检测到人脸,然后调用识别人脸函数来识别人脸是谁了并在视频中显示。

废话不多说,上代码:

# main.py
import cv2
from lib.face_recognition import recognitionface # 从lib中调用人脸识别函数
capture = cv2.VideoCapture(0) # 打开笔记本内置摄像头
while (capture.isOpened()): # 笔记本内置摄像头被打开后retval, img = capture.read() # 从摄像头中实时读取视频faceCascade = cv2.CascadeClassifier("cascades/haarcascade_frontalface_default.xml") # 调用正面人脸级联分类器faces = faceCascade.detectMultiScale(img, 1.3)  # 检测出所有人脸for (x, y, w, h) in faces:  # 遍历所有人脸的区域faces_sql = recognitionface(img) # 获取人脸信息,对人脸进行识别cv2.putText(img, faces_sql, (x, y), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 3) # 在视频中展示人脸信息cv2.rectangle(img, (x, y), (x + w, y + h), (0, 0, 255), 2)  # 在图像中人脸的位置绘制方框cv2.imshow("Video", img) # 在窗口中显示读取到的视频key = cv2.waitKey(1) # 窗口的图像刷新时间为1毫秒if key == 27: # 如果按下esc键,退出进程break
capture.release() # 关闭笔记本内置摄像头
cv2.destroyAllWindows() # 销毁显示摄像头视频的窗口

🌟这个代码比较简陋,对很多可能的报错和人脸的匹配度都没有处理方案,但是学习完全够了,大家可以看看,可以在评论区交流。

成果展示

在这里浅浅地展示一下吧,这里加了代码做了遮挡处理哈哈哈:
请添加图片描述

识别没错,是我本人。代码还有很多需要修缮的地方,但是核心都做到啦!

补充:如何用手机作为摄像头

这里我用的是DroidCamApp软件,可以将手机摄像头作为电脑摄像头,我在这提供下载路径:

  1. 电脑端链接: droidcam电脑端
  2. 安卓的得在谷歌商店下载,所以我这里提供安卓端安装包: droidcam安卓端 密码是:50s1

软件的用法自行百度吧,很简单。

🌟当你成功用这个软件将手机作为摄像头之后,你需要修改一部分代码:

capture = cv2.VideoCapture(0) # 打开笔记本内置摄像头

你需要修改为:

capture = cv2.VideoCapture(1) # 1,表示外置摄像头

小结

因为代码比较简单,所以用到的知识点不多,我在这里@出这个项目中涉及到的:
@ 苦学Opencv的第十四天:人脸检测和人脸识别

@ 苦学Opencv的第五天:绘制图形与文字

@ 苦学Opencv的第十三天:视频处理

大家可以根据之前的学习日记完善代码。

🌟注意这只是一个学习代码,功能少且缺少报错处理,只能用于学习使用。如果不满意可以添加完善代码,大佬勿喷勿喷哈哈哈😂

❤️本专栏到这也就结束了,专栏不对或者不完善的地方后续会更新纠正。

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

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

相关文章

分享10个好用的论文编辑服务/平台

学境思源,一键生成论文初稿: AcademicIdeas - 学境思源AI论文写作 如果您对自己的学术写作能力存在怀疑,论文编辑服务/平台或许能提供帮助。为了帮助您做出更好的选择,今天的分享我们列出了2024年“全网”最好用的10个论文编辑服…

怎么样建设数字化车间?

建设数字化车间是一个综合性的过程,旨在通过现代信息技术、智能设备和自动化技术对车间进行优化改造,提高生产效率和产品质量。以下是一些关键步骤和要点,用于指导数字化车间的建设: 一、明确建设目标和需求 分析现状&#xff1…

【轨物方案】开关柜在线监测物联网解决方案

随着物联网技术的发展,电力设备状态监测技术也得到了迅速发展。传统的电力成套开关柜设备状态监测方法主要采用人工巡检和定期维护的方式,这种方法不仅效率低下,而且难以保证设备的实时性和安全性。因此,基于物联网技术的成套开关…

Mybatis-Plus-常用的注解:@TableName、@TableId、@TableField、@TableLogic

1、TableName 经过之前的测试,在使用MyBatis-Plus实现基本的CRUD时,我们并没有指定要操作的表,只是在Mapper接口继承BaseMapper时,设置了泛型User,而操作的表为user表由此得出结论,MyBatis-Plus在确定操作…

Python:随机数、随机选择的应用

step1:导入 导入的random相当于是创建了random文件里的的一个对象 import random random() 产生0~1随机数 randint(a,b)产生a~b的整数 闭区间,可以取到a,b random.choice(touple_name)从touple_name(数组、列表..)中随机选择元素 import rand…

Java人力资源招聘社会校招类型招聘小程序

✨💼【职场新风尚!解锁人力资源招聘新神器:社会校招类型招聘小程序】✨ 🎓【校招新体验,一键触达梦想企业】🎓 还在为错过校园宣讲会而懊恼?别怕,社会校招类型招聘小程序来救场&am…

L2TP VPN

目录 一、实验目的 二、实验环境 三、实验内容 1、实验规划: 2、关键内容: 3、实施步骤: 四、实验总结 一、实验目的 1、了解L2TP的实现原理; 2、掌握Client-Initiated场景下的L2TP的配置。 二、实验环境 华为eNSP模拟器…

pytest 测试框架中 setup、teardown 方法不生效

pytest 测试框架中 setup、teardown 方法不生效 源码有改动: 将 setup、teardown改为:setup_method、teardown_method 可生效 def setup_method(self):print("测试用例执行前的初始化,如:打开浏览器,加载网页...")def setup_class…

MybatisPlus(一)

目录 入门: 使用MybatisPlus的基本步骤: 常见注解 常见配置 总结 核心功能 条件构造器 自定义SQL Service接口 IService接口基本用法 IService的Lambda查询 IService的Lambda更新 IService批量新增 入门: 使用MybatisPlus的基本步…

WebSocket程序设计

协议说明 WebSocket 是一种在单个TCP连接上进行全双工通信的协议。WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。Websocket主要用在B/S架构的应用程序中,在 WebSocket API 中,浏览器和服务器只…

2024全面解析:从零基础到精通的大模型学习路线,非常详细零基础入门到精通,收藏我这一篇就够了

大模型学习路线规划 第一阶段:基础理论入门 目标:了解大模型的基本概念和背景。 内容: 人工智能演进与大模型兴起。 大模型定义及通用人工智能定义。 GPT模型的发展历程。 第二阶段:核心技术解析 目标:深入学习大模…

python 图片转文字、语音转文字、文字转语音保存音频并朗读

一、python图片转文字 1、引言 pytesseract是基于Python的OCR工具, 底层使用的是Google的Tesseract-OCR 引擎,支持识别图片中的文字,支持jpeg, png, gif, bmp, tiff等图片格式 2、环境配置 python3.6PIL库安装Google Tesseract OCR 3、安…

mac下通过brew安装mysql的环境调试

mac安装mysql 打开终端,运行命令(必须已经装过homebrew哦): 安装brewbin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"已安装brew直接运行:brew install mysql8.0报…

洛科威岩棉板在生产生活中广泛应用,以优秀表现实现隔热性能最大化

无论是在住宅领域还是工业生产领域,隔热保温都扮演着极其重要的角色,选用的材料是否足够出色,决定了大家居家生活的舒适度,以及生产过程中能耗的高低。近些年来,洛科威岩棉优秀的隔热性能逐渐得到了各行各业的青睐&…

HomeDepot commercedesk 平台EDI自测流程

Home Depot Canada 是一家全球知名的家居建材零售公司,在加拿大拥有多家分店。它是美国的家居建材零售巨头 Home Depot 在加拿大的子公司。Home Depot 主要销售各种家庭装修和建筑材料,包括工具、家具、装饰品、电器等。公司提供广泛的产品选择和专业的顾…

机器学习(二十四):信息增益、独热编码和回归树

一、纯度测量方式——熵 第一步,定义:一个子集里,某一类别的数据在子集中的占比 例如,下图这组输入数据,根据耳朵形状划分为两个子集,尖耳朵子集里,有四只猫,1只狗。则是4/5 第二步…

NVIDIA正偷偷复活卡皇泰坦,性能秒杀5090Ti

PC 硬件圈的瓜年年有,但最近似乎格外的多噢! 首先针对 13、14 代酷睿 CPU 不稳定问题,Intel 终于做出了正式回应: 他们在对退回的 CPU 进行大量分析后得出,确认是过高的运行电压和微代码算法错误导致了不稳定情况。 …

2-48 基于matlab的EM算法聚类可视化程序

基于matlab的EM算法聚类可视化程序,通过期望最大化算法(EM)优化类别间距,使得类别间距最大、类内间距最小。输出聚类前后结果及收敛曲线。程序已调通,可直接运行。 2-48 期望最大化算法(EM) 聚类…

微信小程序教程002:代码结构介绍和新建小程序页面

文章目录 代码介绍1、小程序代码构成2、小程序页面组成部分3、JSON配置文件的作用3.1 app.json文件3.2 project.config.json文件3.3 sitemap.json文件3.4 页面的.json文件 新建小程序页面WXML和WXSS介绍1、什么是WXML2、什么是WXSS 小程序的JS文件1、JS文件2、小程序中JS文件分…

使用abpcli创建项目时提示数据库迁移失败

问题描述 使用abpcli创建项目时提示数据库迁移失败! 解决方案: 1、检查数据库连接字符串 {"ConnectionStrings": {"Default": "serverlocalhost;port3306;databaseAcmeBookStore;userroot;passwordyour_password;"} }2、…