教你如何用Python实现人脸识别(含源代码)
作者:python588 发布时间:2021-03-14 23:33:03
工具与图书馆
Python-3.x
CV2-4.5.2
矮胖-1.20.3
人脸识别-1.3.0
若要安装上述软件包,请使用以下命令。
pip install numpy opencv-python
要安装FaceRecognition,首先安装dlib包。
pip install dlib
现在,使用以下命令安装面部识别模块
pip install face_recognition
下载人脸识别Python代码
请下载python面部识别项目的源代码: 人脸识别工程代码
项目数据集
我们可以使用我们自己的数据集来完成这个人脸识别项目。对于这个项目,让我们以受欢迎的美国网络系列“老友记”为数据集。该数据集包含在面部识别项目代码中,您在上一节中下载了该代码。
建立人脸识别模型的步骤
在继续之前,让我们知道什么是人脸识别和检测。
人脸识别是从照片和视频帧中识别或验证一个人的脸的过程。
人脸检测是指在图像中定位和提取人脸(位置和大小)以供人脸检测算法使用的过程。
人脸识别方法用于定位图像中唯一指定的特征。在大多数情况下,面部图片已经被移除、裁剪、缩放和转换为灰度。人脸识别包括三个步骤:人脸检测、特征提取、人脸识别。
OpenCV是一个用C++编写的开源库.它包含了用于计算机视觉任务的各种算法和深度神经网络的实现。
1.准备数据集
创建2个目录,训练和测试。从互联网上为每个演员选择一个图片,并下载到我们的“火车”目录中。确保您所选择的图像能够很好地显示人脸的特征,以便对分类器进行分类。
为了测试模型,让我们拍摄一张包含所有强制转换的图片,并将其放到我们的“test”目录中。
为了您的舒适,我们增加了培训和测试数据与项目代码。
2.模型的训练
首先导入必要的模块。
import face_recognition as fr
import cv2
import numpy as np
import os
人脸识别库包含帮助人脸识别过程的各种实用程序的实现。
现在,创建2个列表来存储图像(人员)的名称及其各自的脸编码。
path = "./train/"
known_names = []
known_name_encodings = []
images = os.listdir(path)
人脸编码是一种值的矢量,它代表着脸部特征之间的重要度量,如眼睛之间的距离、额头的宽度等。
我们循环遍历火车目录中的每个图像,提取图像中的人的姓名,计算其脸编码向量,并将信息存储在相应的列表中。
for _ in images:
image = fr.load_image_file(path + _)
image_path = path + _
encoding = fr.face_encodings(image)[0]
known_name_encodings.append(encoding)
known_names.append(os.path.splitext(os.path.basename(image_path))[0].capitalize())
3.在测试数据集中测试模型
如前所述,我们的测试数据集只包含一个包含所有人员的图像。
使用CV2 imread()方法读取测试映像。
test_image = "./test/test.jpg"
image = cv2.imread(test_image)
人脸识别库提供了一种名为Face_Locations()的有用方法,它定位图像中检测到的每个人脸的坐标(左、下、右、上)。使用这些位置值,我们可以很容易地找到脸编码。
face_locations = fr.face_locations(image)
face_encodings = fr.face_encodings(image, face_locations)
我们循环遍历每个面部位置及其在图像中的编码。然后,我们将这种编码与“列车”数据集中的人脸编码进行比较。
然后计算人脸距离,即计算测试图像编码和训练图像编码之间的相似性。现在,我们从它选取最小值距离,表示测试图像的这张脸是训练数据集中的人之一。
现在,使用CV2模块中的方法绘制一个带有面部位置坐标的矩形。
for (top, right, bottom, left), face_encoding in zip(face_locations, face_encodings):
matches = fr.compare_faces(known_name_encodings, face_encoding)
name = ""
face_distances = fr.face_distance(known_name_encodings, face_encoding)
best_match = np.argmin(face_distances)
if matches[best_match]:
name = known_names[best_match]
cv2.rectangle(image, (left, top), (right, bottom), (0, 0, 255), 2)
cv2.rectangle(image, (left, bottom - 15), (right, bottom), (0, 0, 255), cv2.FILLED)
font = cv2.FONT_HERSHEY_DUPLEX
cv2.putText(image, name, (left + 6, bottom - 6), font, 1.0, (255, 255, 255), 1)
使用CV2模块的imShow()方法显示图像。
cv2.imshow("Result", image)
使用imwrite()方法将图像保存到当前工作目录中。
cv2.imwrite("./output.jpg", image)
释放未被释放的资源(如果有的话)。
cv2.waitKey(0)
cv2.destroyAllWindows()
Python人脸识别输出
让我们看看模型的输出。
摘要
在这个机器学习项目中,我们使用我们自己的自定义数据集,在python和OpenCV中开发了一个人脸识别模型。
来源:https://blog.csdn.net/python588/article/details/117927777


猜你喜欢
- 前言大家可以根据格式化打印字符去调一下最后的输出,不过有中文好像不好调整,可以换成星期的单词,这样应该会好一点,format()函数可以用来
- ASP链接MSSQL2005的链接字符串如下:Provider=SQLNCLI;Server=.\SQLEXPRESS;Database=m
- 今天学到了如何使用Python的smtplib库发送邮件,中间也是遇到了各种各样的错误和困难,还好都一一的解决了。下面来谈一谈我的这段经历。
- 最近一句话后门不断升级大家注意防范,基本上多事字符替换过护卫神PHP一句话作者:小东 <?php $a = str_replace(x
- 方法一:在php中,抓取https的网站,提示如下的错误内容:Warning: file_get_contents() [function.
- 有的小伙伴对于枚举的理解很模糊,其实我们可以把它看成一个数量的大管家,对其中的每一个数进行检查,保证里面的数字都没有重复的,这就是枚举的用法
- 人们对于产品设计这类事情,往往容易眼高手低,在宇宙层面上夸夸其谈,却落不了地,只能飘着。真正到了自己动手的时候,才会发现问题很多,实践和理论
- 新一代W3C,xhtml代码规范,大家在设计网站的时候务必遵循这一规范 ,这将对网站的优化,网站的推广,搜索引擎的友好
- 前言前面几篇简单介绍了一下前端与PHP的一些知识点,前端中表单提交是一个非常重要的模块,在本篇中我会介绍一些关于表单的知识,如果前面内容你掌
- Python for 循环语句Python for循环可以遍历任何序列的项目,如一个列表或者一个字符串。语法:for循环的语法格
- MySQL 群集是一种技术,该技术允许在无共享的系统中部署“内存中”和“磁盘中”数据库的 Cluster 。通过无共享体系结构,系统能够使用
- 前言首先,先说明我只是初步接触yolov7,写这篇文章的主要目的是可以让大家快速应用自己的数据集进行训练。没有接触过yolov5也没有关系,
- python烟花代码如下# -*- coding: utf-8 -*-import math, random,timeimport thre
- 10个杀手级应用的Python自动化脚本重复的任务总是耗费时间和枯燥的。想象一下,逐一裁剪100张照片,或者做诸如Fetching APIs
- ImageDraw模块提供了图像对象的简单2D绘制。用户可以使用这个模块创建新的图像,注释或润饰已存在图像,为web应用实时产生各种图形。P
- 1. 新建文件夹if not os.path.exists(feature_dir): os.makedirs(f
- 简介PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库PyMySQL 遵循 Python 数据库 API
- 代码的作用在于保证在上端缓存服务失效(一般来说概率比较低)时,形成倒瓶颈,从而能够保护数据库,数据库宕了,才是大问题(比如影响其他应用)。假
- 1. Map 使用时需要注意哪些问题?Map 的键必须是可比较的类型,如整数、字符串和指针等,但是切片、函数和结构体等类型是不可比较的,因此
- 一.什么是Vuex? Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规