教你如何用Python实现人脸识别(含源代码)


Posted in Python onJune 23, 2021

工具与图书馆

  • 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实现人脸识别(含源代码)

摘要

在这个机器学习项目中,我们使用我们自己的自定义数据集,在python和OpenCV中开发了一个人脸识别模型。

到此这篇关于教你如何用Python实现人脸识别(含源代码)的文章就介绍到这了,更多相关Python人脸识别内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python 控制语句
Nov 03 Python
对比Python中__getattr__和 __getattribute__获取属性的用法
Jun 21 Python
python条件变量之生产者与消费者操作实例分析
Mar 22 Python
python中将字典形式的数据循环插入Excel
Jan 16 Python
对django中render()与render_to_response()的区别详解
Oct 16 Python
python 多线程中子线程和主线程相互通信方法
Nov 09 Python
python 使用 requests 模块发送http请求 的方法
Dec 09 Python
Python实现钉钉发送报警消息的方法
Feb 20 Python
Python文件读写常见用法总结
Feb 22 Python
Pytorch模型转onnx模型实例
Jan 15 Python
Django 自定义权限管理系统详解(通过中间件认证)
Mar 11 Python
python 制作网站小说下载器
Feb 20 Python
python 对图片进行简单的处理
DjangoRestFramework 使用 simpleJWT 登陆认证完整记录
浅析Python中的套接字编程
Python中使用ipython的详细教程
详解Python类和对象内容
python析构函数用法及注意事项
Jun 22 #Python
Python自动化测试PO模型封装过程详解
You might like
PHP判断json格式是否正确的实现代码
2017/09/20 PHP
yii2 url重写并隐藏index.php方法
2018/12/10 PHP
php常用经典函数集锦【数组、字符串、栈、队列、排序等】
2019/08/23 PHP
tp5框架基于Ajax实现列表无刷新排序功能示例
2020/02/10 PHP
JavaScript原型继承之基础机制分析
2011/08/26 Javascript
Jquery 获取对象的几种方式介绍
2014/01/17 Javascript
JavaScript中在光标处插入添加文本标签节点的详细方法
2017/03/22 Javascript
Vue.js仿Metronic高级表格(二)数据渲染
2017/04/19 Javascript
Vue代码分割懒加载的实现方法
2017/11/23 Javascript
Angular2.0实现modal对话框的方法示例
2018/02/18 Javascript
jQuery事件绑定和解绑、事件冒泡与阻止事件冒泡及弹出应用示例
2019/05/13 jQuery
vue使用代理解决请求跨域问题详解
2019/07/24 Javascript
vue监听用户输入和点击功能
2019/09/27 Javascript
vue路由切换之淡入淡出的简单实现
2019/10/31 Javascript
vue实现配置全局访问路径头(axios)
2019/11/01 Javascript
vue 中的动态传参和query传参操作
2020/11/09 Javascript
[01:13:46]iG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[00:20]TI9观赛名额抽取Ⅱ
2019/07/24 DOTA
python 文件与目录操作
2008/12/24 Python
python 解压pkl文件的方法
2018/10/25 Python
python 两个一样的字符串用==结果为false问题的解决
2020/03/12 Python
python3.7 openpyxl 在excel单元格中写入数据实例
2020/09/01 Python
Smallable英国家庭概念店:设计师童装及家居装饰
2017/07/05 全球购物
美国高品质个性化珠宝销售网站:Jewlr
2018/05/03 全球购物
意大利体育用品和运动服网上商店:Maxi Sport
2019/09/14 全球购物
J2EE相关知识面试题
2013/08/26 面试题
便利店投资创业计划书
2014/02/08 职场文书
亲子拓展活动方案
2014/02/20 职场文书
协议书样本
2014/04/23 职场文书
珍惜资源保护环境的建议书
2014/05/14 职场文书
搞笑的爱情检讨书
2014/10/01 职场文书
网聊搭讪开场白
2015/05/28 职场文书
优秀共产党员主要事迹材料
2015/11/05 职场文书
小程序后台PHP版本部署运行 LNMP+WNMP
2021/04/01 Servers
MySQL修炼之联结与集合浅析
2021/10/05 MySQL
动画《平凡职业成就世界最强》宣布制作OVA
2022/04/01 日漫