超详细!Opencv人脸识别!附源码!

一、新建环境

在这里插入图片描述
在这里插入图片描述

注意!!确定后需要关闭项目,重新打开,终端的环境才会变化!!

在这里插入图片描述

二、下载安装包(只需要3个即可)

1. 下载dlib包

pip install dlib-19.19.0-cp38-cp38-win_amd64.whl.whl   

这里我使用编译好的包文件。
在这里插入图片描述
在这里插入图片描述

2.下载face_recognition包

pip install face_recognition -i https://pypi.tuna.tsinghua.edu.cn/simple

3.安装opencv

pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple  

三、源码

import face_recognition
import cv2
import numpy as np
from PIL import Image, ImageDraw, ImageFontknown_face_names = []
known_face_encodings = []def IsDuplicateName(name):if name in known_face_names:return Truereturn Falsedef AddPhoto(name, filename):image = face_recognition.load_image_file(filename)# 用 128 维的向量表示 1 张人脸face_encoding = face_recognition.face_encodings(image)if len(face_encoding) != 1:return Falseknown_face_encodings.insert(0, face_encoding[0])known_face_names.insert(0, name)return Truedef PutCNText(image, strs, local, sizes, colour):"""在 frame 中添加文字"""cv2img = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)pilimg = Image.fromarray(cv2img)draw = ImageDraw.Draw(pilimg)font = ImageFont.truetype("./simhei.ttf", sizes, encoding="utf-8")draw.text(local, strs, colour, font=font)return cv2.cvtColor(np.array(pilimg), cv2.COLOR_RGB2BGR)def FaceRecognition(frame):# 尺寸缩放为原来的 1/4,参数 (0, 0) 原意表示输出图像的大小# 当指定为 (0, 0) 时,输出图像的大小会根据 fx 和 fy 参数进行计算# 缩小图像 4 倍是为了加速人脸检测过程small_frame = cv2.resize(frame, (0, 0), fx=0.25, fy=0.25)# np.ascontiguousarray() 确保数组在内存中的存储是连续的rgb_small_frame = np.ascontiguousarray(small_frame[:, :, ::-1])# 得到检测到的人脸位置信息 face_locationsface_locations = face_recognition.face_locations(rgb_small_frame)# 对 rgb_small_frame 中人脸进行编码,得到人脸向量 face_encodings# 这个编码信息将用于后续的人脸比对和识别face_encodings = face_recognition.face_encodings(rgb_small_frame, face_locations)face_names = []for face_encoding in face_encodings:matches = face_recognition.compare_faces(known_face_encodings, face_encoding, tolerance=0.4)# known_face_encodings 为列表,相同人脸为 Truename = ""if True in matches:first_match_index = matches.index(True)name = known_face_names[first_match_index]else:name='未录入人员'face_names.append(name)for (top, right, bottom, left), name in zip(face_locations, face_names):top *= 4right *= 4bottom *= 4left *= 4if  name =='未录入人员':cv2.rectangle(frame, (left, top), (right, bottom), (0, 0, 255), 2)frame = PutCNText(frame, name, (left + 6, bottom - 24), 20, (0, 255, 255))else:cv2.rectangle(frame, (left, top), (right, bottom), (0, 255, 0), 2)frame = PutCNText(frame, name, (left + 6, bottom - 24), 20, (255, 255, 255))return frameif __name__ == "__main__":# 注册缓存 人名 和 人脸向量,用于后续人脸识别AddPhoto("佳龙", "./photos/long.jpg")video_capture = cv2.VideoCapture(0)# 设置视频帧的 宽度 和 高度# video_capture.set(cv2.CAP_PROP_FRAME_WIDTH, 1024) # 3# video_capture.set(cv2.CAP_PROP_FRAME_HEIGHT, 768) # 4# video_capture.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc("M", "J", "P", "G"))while video_capture.isOpened():# 读取 1 帧视频图像ret, frame = video_capture.read()# print("frame.shape:", frame.shape)  # frame.shape = (720, 1280, 3) 就是一张图片# 如果读取失败,进入下一循环if ret == False:continueframe = FaceRecognition(frame)cv2.imshow("Face Recognition", frame)# 退出条件if cv2.waitKey(1) & 0xFF == ord("q"):break# 释放资源video_capture.release()cv2.destroyAllWindows()

代码文件目录:

在这里插入图片描述

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

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

相关文章

Linux 如何在文件中查找指定内容,grep的用法

Linux 如何在文件中查找指定内容 1、 如我们 查找 log_file_catalina.out 文件中,包含 ‘总数:900’ 的字符内容 2、 在日志中查看 83910_law_21CFBC7EB25B1FF60255FE7F4BE1BCCF1CE726F6_0.bdyhf 的相关内容 grep 83910_law_21CFBC7EB25B1FF60255FE7…

人工智能概论

一、关键技术 人工智能包含了七项关键技术: 1. 机器学习: 机器学习是研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能,是人工智能技术的核心。 从学习模式划分,分…

虚拟数据生成_以Python为工具

生成虚拟数据_以Python为工具 生成虚拟数据技术在现实生活中具有多个重要的应用领域。它为数据隐私保护、机器学习算法开发、数据处理和可视化等方面提供了实用且有价值的解决方案。尤其是能满足定制化需求的虚拟数据,在预期的方向上让数据定向随机。 &#x1f339…

原生GPT本地及云端部署方式保姆级教程

前提条件 部署必须要有一个超过1年的Github账号 本地服务部署 运行效果 部署方法 下载安装包 暂时无法在飞书文档外展示此内容 GitHub授权登录: https://dash.pandoranext.com/ 登录后是这个样子: 复制下面红框里面这个License Id 编辑Config.js…

flutter开发实战-轮播Swiper更改Custom_layout样式中Widget层级

flutter开发实战-轮播Swiper更改Custom_layout样式中Widget层级 在之前的开发过程中,需要实现卡片轮播效果,但是卡片轮播需要中间大、两边小一些的效果,这里就使用到了Swiper。具体效果如视频所示 添加链接描述 这里需要的效果是中间大、两边…

【人工智能Ⅰ】实验3:蚁群算法

实验3 蚁群算法的应用 一、实验内容 TSP 问题的蚁群算法实现。 二、实验目的 1. 熟悉和掌握蚁群算法的基本概念和思想; 2. 理解和掌握蚁群算法的参数选取,解决实际应用问题。 三、实验原理 1.算法来源 蚁群算法的基本原理来源于自然界…

【JavaScript】3.2 JavaScript性能优化

文章目录 1. 避免全局查找2. 避免不必要的属性查找3. 使用快速的JavaScript方法4. 避免不必要的DOM操作5. 使用Web Workers进行后台处理总结 性能优化是任何编程语言的重要组成部分,JavaScript也不例外。在这个章节中,我们将探讨如何优化JavaScript代码&…

GAN:WGAN

论文:https://arxiv.org/pdf/1701.07875.pdf 发表:2017 WGAN 算法流程 从GAN 到 WGAN 的转变 相比于原始 GAN,WGAN 只需要修改以下几点,就能使得训练更稳定,生成质量更高: 1. 此时的判别器相当于做回归…

【DDD】领域驱动设计总结——如何构造领域模型

文章目录 一 分离领域二 领域对象分类2.1 实体(ENTITY)2.2 值对象(VALUE OBJECT)2.3 服务(SERVICE)2.4 模块(MODULE) 三 管理领域对象的生命周期3.1 聚合(AGGREGATE)3.2 工厂(FACTORY)3.3 存储库…

记i18n ally工具检测语言失败的一则思路

情况 只有某个文件检测不到汉字,其余都可以检测出来,困扰许久,发个博客记一下思路 解决方法: 1、肯定不是i18n ally工具的问题,因为其他的vue都能检测成功 2、是这个文件的问题 采用排除法 先删掉所有代码&#…

解决keil右键Go To Definition跳转不过去的问题

解决: 在魔法棒中如图所示打上√

flask web开发学习之初识flask(二)

文章目录 一、创建程序实例并注册路由1. 为视图绑定绑定多个URL2. 动态URL 二、启动开发服务器1. 自动发现程序实例2. 管理环境变量3. 使用pycharm运行服务器4. 更多的启动选项5. 设置运行环境6. 调试器7. 重载器 一、创建程序实例并注册路由 app.py # 从flask包中导入flask类…

NoSQL 数据建模错误会降低性能

数据建模错误是破坏性能的最简单方法之一。当您使用 NoSQL 时,特别容易搞砸,(讽刺的是)NoSQL 往往用于对性能最敏感的工作负载。NoSQL 数据建模最初可能看起来非常简单:只需对数据进行建模以适应应用程序的访问模式。但…

【C++】异常处理 ② ( 异常捕获类型 | 异常捕获机制 - 严格匹配异常类型 | 未知异常捕获 - 不知道异常类型 )

文章目录 一、异常捕获机制 - 严格匹配异常类型1、异常捕获机制 - 严格匹配异常类型2、代码示例 - 异常捕获严格匹配异常类型 二、异常捕获机制 - 未知异常捕获1、未知异常捕获 - 不知道异常类型2、代码示例 - 未知异常捕获 一、异常捕获机制 - 严格匹配异常类型 1、异常捕获机…

Echarts大屏-数据可视化

使用原生htmljavascript实现大屏展示,较为麻烦的为边框的四个小角使用伪元素生成,其余echarts使用如下快速上手 - Handbook - Apache ECharts 效果如下:

java论坛数据以及搜索接口实现

一. 内容简介 java论坛数据以及搜索接口实现 二. 软件环境 2.1 java 1.8 2.2 mysql Ver 8.0.13 for Win64 on x86_64 (MySQL Community Server - GPL) 2.3 IDEA ULTIMATE 2019.3 2.4d代码地址 三.主要流程 3.1 创建数据库,创建数据表 3.2 开始编写接口,并测…

键盘打字盲打练习系列之刻意练习——1

一.欢迎来到我的酒馆 盲打,刻意练习! 目录 一.欢迎来到我的酒馆二.选择一款工具三.刻意练习第一步:基准键位练习第二步:字母键位练习第三步:数字符号键位练习 四.矫正坐姿 二.选择一款工具 工欲善其事必先利其器。在开始之前&…

井盖位移报警器安装,智能化井盖厂家推荐

当井盖发生位移或倾斜时,通常会引起所处道路的安全隐患,给过往的车辆和行人带来许多潜在的危险。为了避免潜在的安全事故频繁出现,及时发现并处理井盖位移或倾斜才能更好的保障人民的安全。因此安装井盖位移报警器是满足政府和市民需求的。 单…

vue项目npm install报错Failed at the fibersa4.0.3 install script

报错如下 解决:降低node版本 降到12.16.0 参考链接

Linux下删除当前目录下的所有目录

Linux下删除当前目录下的所有目录 Linux下删除当前目录下的所有目录,可以使用命令:rm -rf ./* rm -rf ./*可以得知rm -rf ./命令是删除当前目录下的所有文件和文件夹,但不会删除根目录下的文件。其中,".“代表当前目录&…