iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python中基于Opencv怎么实现人脸识别
  • 611
分享到

Python中基于Opencv怎么实现人脸识别

2023-06-02 05:06:39 611人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

这篇文章主要讲解了“python中基于OpenCV怎么实现人脸识别”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python中基于Opencv怎么实现人脸识别”吧!检测人脸。这应该是最基本的

这篇文章主要讲解了“python中基于OpenCV怎么实现人脸识别”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python中基于Opencv怎么实现人脸识别”吧!

  1. 检测人脸。这应该是最基本的,给我们一张图片,我们要先检测出人脸的区域,然后才能

进行操作,opencv已经内置了很多分类检测器,我们这次用haar:

def detect_face(img): #将测试图像转换为灰度图像,因为opencv人脸检测器需要灰度图像 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) #加载OpenCV人脸检测分类器Haar face_cascade = cv2.CascadeClassifier('./haarcascade_frontalface_default.xml') #检测多尺度图像,返回值是一张脸部区域信息的列表(x,y,宽,高) faces = face_cascade.detectMultiScale(gray, scaleFactor=1.2, minNeighbors=5) # 如果未检测到面部,则返回原始图像 if (len(faces) == 0): return None, None #目前假设只有一张脸,xy为左上角坐标,wh为矩形的宽高 (x, y, w, h) = faces[0] #返回图像的正面部分 return gray[y:y + w, x:x + h], faces[0]

有了数据集和检测人脸的功能后,我们就可以进行预训练了,最后返回所有训练图片的人脸检测信息和标签:

# 该函数将读取所有的训练图像,从每个图像检测人脸并将返回两个相同大小的列表,分别为脸部信息和标签def prepare_training_data(data_folder_path): # 获取数据文件夹中的目录(每个主题的一个目录) dirs = os.listdir(data_folder_path) # 两个列表分别保存所有的脸部和标签 faces = [] labels = [] # 浏览每个目录并访问其中的图像 for dir_name in dirs: # dir_name(str类型)即标签 label = int(dir_name) # 建立包含当前主题主题图像的目录路径 subject_dir_path = data_folder_path + "/" + dir_name # 获取给定主题目录内的图像名称 subject_images_names = os.listdir(subject_dir_path) # 浏览每张图片并检测脸部,然后将脸部信息添加到脸部列表faces[] for image_name in subject_images_names: # 建立图像路径 image_path = subject_dir_path + "/" + image_name # 读取图像 image = cv2.imread(image_path) # 显示图像0.1s cv2.imshow("Training on image...", image) cv2.waiTKEy(100) # 检测脸部 face, rect = detect_face(image) # 我们忽略未检测到的脸部 if face is not None: #将脸添加到脸部列表并添加相应的标签 faces.append(face) labels.append(label) cv2.waitKey(1) cv2.destroyAllwindows() #最终返回值为人脸和标签列表 return faces, labels

有了脸部信息和对应标签后,我们就可以使用opencv自带的识别器来进行训练了:

#调用prepare_training_data()函数faces, labels = prepare_training_data("training_data")#创建LBPH识别器并开始训练,当然也可以选择Eigen或者Fisher识别器face_recognizer = cv2.face.LBPHFaceRecognizer_create()face_recognizer.train(faces, np.array(labels))

训练完毕后就可以进行预测了,在这之前我们可以设定一下预测的格式,包括用矩形框框出人脸并标出其名字,当然最后别忘了建立标签与真实姓名直接的映射表:

#根据给定的(x,y)坐标和宽度高度在图像上绘制矩形def draw_rectangle(img, rect): (x, y, w, h) = rect cv2.rectangle(img, (x, y), (x + w, y + h), (128, 128, 0), 2)# 根据给定的(x,y)坐标标识出人名def draw_text(img, text, x, y): cv2.putText(img, text, (x, y), cv2.FONT_HERSHEY_COMPLEX, 1, (128, 128, 0), 2)#建立标签与人名的映射列表(标签只能为整数)subjects = ["jiaju", "jiaqiang"]

现在就可以定义我们的预测函数了:

# 此函数识别传递的图像中的人物并在检测到的脸部周围绘制一个矩形及其名称def predict(test_img): #生成图像的副本,这样就能保留原始图像 img = test_img.copy() #检测人脸 face, rect = detect_face(img) #预测人脸 label = face_recognizer.predict(face) # 获取由人脸识别器返回的相应标签的名称 label_text = subjects[label[0]] # 在检测到的脸部周围画一个矩形 draw_rectangle(img, rect) # 标出预测的名字 draw_text(img, label_text, rect[0], rect[1] - 5) #返回预测的图像 return img

最后使用我们test_data中的图片进行预测并显示最终效果:

#加载测试图像test_img1 = cv2.imread("test_data/test1.jpg")test_img2 = cv2.imread("test_data/test2.jpg")#执行预测predicted_img1 = predict(test_img1)predicted_img2 = predict(test_img2)#显示两个图像cv2.imshow(subjects[0], predicted_img1)cv2.imshow(subjects[1], predicted_img2)cv2.waitKey(0)cv2.destroyAllWindows()

来看看识别的结果:

Python中基于Opencv怎么实现人脸识别

这就是人脸识别最基本的流程,后续还会进一步的研究,下一篇我们将讨论本次实验的一些细节和注意事项,算是对本篇的一次挖掘和总结吧。最后附上完整代码:

# # -*- coding:utf-8 -*-import cv2import osimport numpy as np# 检测人脸def detect_face(img): #将测试图像转换为灰度图像,因为opencv人脸检测器需要灰度图像 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) #加载OpenCV人脸检测分类器Haar face_cascade = cv2.CascadeClassifier('./haarcascade_frontalface_default.xml') #检测多尺度图像,返回值是一张脸部区域信息的列表(x,y,宽,高) faces = face_cascade.detectMultiScale(gray, scaleFactor=1.2, minNeighbors=5) # 如果未检测到面部,则返回原始图像 if (len(faces) == 0): return None, None #目前假设只有一张脸,xy为左上角坐标,wh为矩形的宽高 (x, y, w, h) = faces[0] #返回图像的正面部分 return gray[y:y + w, x:x + h], faces[0]# 该函数将读取所有的训练图像,从每个图像检测人脸并将返回两个相同大小的列表,分别为脸部信息和标签def prepare_training_data(data_folder_path): # 获取数据文件夹中的目录(每个主题的一个目录) dirs = os.listdir(data_folder_path) # 两个列表分别保存所有的脸部和标签 faces = [] labels = [] # 浏览每个目录并访问其中的图像 for dir_name in dirs: # dir_name(str类型)即标签 label = int(dir_name) # 建立包含当前主题主题图像的目录路径 subject_dir_path = data_folder_path + "/" + dir_name # 获取给定主题目录内的图像名称 subject_images_names = os.listdir(subject_dir_path) # 浏览每张图片并检测脸部,然后将脸部信息添加到脸部列表faces[] for image_name in subject_images_names: # 建立图像路径 image_path = subject_dir_path + "/" + image_name # 读取图像 image = cv2.imread(image_path) # 显示图像0.1s cv2.imshow("Training on image...", image) cv2.waitKey(100) # 检测脸部 face, rect = detect_face(image) # 我们忽略未检测到的脸部 if face is not None: #将脸添加到脸部列表并添加相应的标签 faces.append(face) labels.append(label) cv2.waitKey(1) cv2.destroyAllWindows() #最终返回值为人脸和标签列表 return faces, labels#调用prepare_training_data()函数faces, labels = prepare_training_data("training_data")#创建LBPH识别器并开始训练,当然也可以选择Eigen或者Fisher识别器face_recognizer = cv2.face.LBPHFaceRecognizer_create()face_recognizer.train(faces, np.array(labels))#根据给定的(x,y)坐标和宽度高度在图像上绘制矩形def draw_rectangle(img, rect): (x, y, w, h) = rect cv2.rectangle(img, (x, y), (x + w, y + h), (128, 128, 0), 2)# 根据给定的(x,y)坐标标识出人名def draw_text(img, text, x, y): cv2.putText(img, text, (x, y), cv2.FONT_HERSHEY_COMPLEX, 1, (128, 128, 0), 2)#建立标签与人名的映射列表(标签只能为整数)subjects = ["jiaju", "jiaqiang"]# 此函数识别传递的图像中的人物并在检测到的脸部周围绘制一个矩形及其名称def predict(test_img): #生成图像的副本,这样就能保留原始图像 img = test_img.copy() #检测人脸 face, rect = detect_face(img) #预测人脸 label = face_recognizer.predict(face) # 获取由人脸识别器返回的相应标签的名称 label_text = subjects[label[0]] # 在检测到的脸部周围画一个矩形 draw_rectangle(img, rect) # 标出预测的名字 draw_text(img, label_text, rect[0], rect[1] - 5) #返回预测的图像 return img#加载测试图像test_img1 = cv2.imread("test_data/test1.jpg")test_img2 = cv2.imread("test_data/test2.jpg")#执行预测predicted_img1 = predict(test_img1)predicted_img2 = predict(test_img2)#显示两个图像cv2.imshow(subjects[0], predicted_img1)cv2.imshow(subjects[1], predicted_img2)cv2.waitKey(0)cv2.destroyAllWindows()

感谢各位的阅读,以上就是“Python中基于Opencv怎么实现人脸识别”的内容了,经过本文的学习后,相信大家对Python中基于Opencv怎么实现人脸识别这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: Python中基于Opencv怎么实现人脸识别

本文链接: https://www.lsjlt.com/news/228953.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python中基于Opencv怎么实现人脸识别
    这篇文章主要讲解了“Python中基于Opencv怎么实现人脸识别”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python中基于Opencv怎么实现人脸识别”吧!检测人脸。这应该是最基本的...
    99+
    2023-06-02
  • 基于opencv和pillow怎么实现人脸识别系统
    这篇文章主要讲解了“基于opencv和pillow怎么实现人脸识别系统”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“基于opencv和pillow怎么实现人脸识别系统”吧!本文不涉及分类器、...
    99+
    2023-06-21
  • 基于python3+OpenCV实现人脸和眼睛识别
    基于python3+OpenCV的人脸和眼睛识别,供大家参考,具体内容如下 一、OpenCV人脸检测的xml文件下载 人脸检测和眼睛检测要用到haarcascade_eye.xml和...
    99+
    2022-11-12
  • 基于OpenCV和Gradio怎么实现简单的人脸识别
    今天小编给大家分享一下基于OpenCV和Gradio怎么实现简单的人脸识别的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。环境...
    99+
    2023-07-05
  • Python基于opencv实现的人脸识别(适合初学者)
    目录一点背景知识一、人脸识别步骤 二、直接上代码(1)录入人脸.py(2)数据训练.py(3)进行识别.py三、运行过程及结果1、获取人脸照片于目标文件中2、进行数据训练,...
    99+
    2022-11-13
  • OpenCV实现人脸识别
    主要有以下步骤: 1、人脸检测 2、人脸预处理 3、从收集的人脸训练机器学习算法 4、人脸识别 5、收尾工作 人脸检测算法: 基于Haar的脸部检测器的基本思想是,对于面部正面大部分区域而言,会有眼睛所在区...
    99+
    2022-06-04
    OpenCV
  • 人脸识别实战之Opencv+SVM实现人脸识别
    目录前言项目结构编码训练人脸识别模型识别图像中的人脸摄像头识别人脸前言 在本文中,您将学习如何使用 OpenCV 进行人脸识别。文章分三部分介绍: 第一,将首先执行人脸检测,使用深度...
    99+
    2022-11-12
  • 基于Python的人脸识别功能怎么实现
    这篇文章主要介绍“基于Python的人脸识别功能怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“基于Python的人脸识别功能怎么实现”文章能帮助大家解决问题。一、 人脸检测人脸检测是指从图像...
    99+
    2023-07-05
  • 基于opencv和pillow实现人脸识别系统(附demo)
    目录一。人脸检测和数据收集二.训练识别器三.人脸识别和显示本文不涉及分类器、训练识别器等算法原理,仅包含对其应用(未来我也会写自己对机器学习算法原理的一些观点和了解) 首先我们需要知...
    99+
    2022-11-12
  • 基于OpenCV和Gradio实现简单的人脸识别详解
    目录环境配置实验原理程序设计1.上传图片2.人脸识别3.绘制方框4.保存预测结果5.最后运行gradio的lauch完整代码环境配置 gradio 安装 pip install gr...
    99+
    2023-05-14
    OpenCV Gradio实现人脸识别 OpenCV Gradio人脸识别 OpenCV Gradio
  • Opencv+SVM怎样实现人脸识别
    Opencv+SVM怎样实现人脸识别,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。前言如何使用 OpenCV 进行人脸识别。第一,将首先执行人脸检测,使用深度学习从每个人脸...
    99+
    2023-06-22
  • python opencv怎么实现人脸识别考勤系统
    小编给大家分享一下python opencv怎么实现人脸识别考勤系统,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!python可以做什么Python是一种编程语言...
    99+
    2023-06-14
  • 基于face_recognition如何实现人脸识别
    这篇文章将为大家详细讲解有关基于face_recognition如何实现人脸识别,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。准备工作我们的人脸识别基于face_recognition库。f...
    99+
    2023-06-17
  • 基于HTML5的人脸识别技术怎么实现
    今天小编给大家分享一下基于HTML5的人脸识别技术怎么实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起...
    99+
    2022-10-19
  • 基于Python实现简单的人脸识别系统
    目录前言基本原理代码实现创建虚拟环境安装必要的库前言 最近又多了不少朋友关注,先在这里谢谢大家。关注我的朋友大多数都是大学生,而且我简单看了一下,低年级的大学生居多,大多数都是为了完...
    99+
    2022-11-12
  • python基于Opencv实现人脸口罩检测
    一、开发环境 python 3.6.6 opencv-python 4.5.1 二、设计要求 1、使用opencv-python对人脸口罩进行检测 三、设计原理 设计流程图如图3-1...
    99+
    2022-11-12
  • java+opencv实现人脸识别功能
    背景:最近需要用到人脸识别,但又不花钱使用现有的第三方人脸识别接口,为此使用opencv结合java进行人脸识别(ps:opencv是开源的,使用它来做人脸识别存在一定的误差,效果一...
    99+
    2022-11-12
  • 【ROS】OpenCV+ROS 实现人脸识别(Ubantu16.04)
    目录   前言 一、环境配置   1.安装ROS  2.摄像头调用 3.导入OpenCV 二、创建工作空间和功能包 1.创建工作空间 2.创建功能包 三、人脸识别检测相关代码 1.python文件 2.lanuch文件  3.CvBridg...
    99+
    2023-08-31
    opencv linux 人工智能 python 学习
  • Android基于opencv4.6.0实现人脸识别功能
    前言 步骤: 整合opencv 获取相机的SurfaceView传到native层去检测(亦或是不断的获取SurfaceView的Bitmap,传到native层) 检测人脸,在本地保存人脸特征信息 4.上传至后台(不实现) 人脸识别实现的...
    99+
    2023-09-30
    android android studio opencv
  • Android基于虹软(ArcSoft)实现人脸识别
    1、在虹软的开发者中心创建一个自己的应用,将APP_ID与SDK_KEY记录下来,后面会用到。创建完后就可以下载SDK了。 2、下载完后,就可以根据SDK包里的开发说明文档和代码进...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作