超详细!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, ImageFont

known_face_names = []
known_face_encodings = []


def IsDuplicateName(name):
    if name in known_face_names:
        return True
    return False


def 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 False
    known_face_encodings.insert(0, face_encoding[0])
    known_face_names.insert(0, name)
    return True


def 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_locations
    face_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 为列表,相同人脸为 True
        name = ""

        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 *= 4
        right *= 4
        bottom *= 4
        left *= 4
        if  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 frame


if __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:
            continue

        frame = FaceRecognition(frame)
        cv2.imshow("Face Recognition", frame)

        # 退出条件
        if cv2.waitKey(1) & 0xFF == ord("q"):
            break

    # 释放资源
    video_capture.release()
    cv2.destroyAllWindows()


代码文件目录:

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

XTU OJ 1339 Interprime 学习笔记

链接 传送门 代码 #include<bits/stdc.h> using namespace std;const int N1e610; //78498 我计算了一下&#xff0c;6个0的范围内有这么多个素数&#xff0c;所以开这么大的数组存素数 //计算的代码是一个循环 int prime[80000]; int a[N],s[N];//s数组是前缀和数组b…

力扣 --- 删除有序数组中的重复项 II

题目描述&#xff1a; 给你一个有序数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使得出现次数超过两次的元素只出现两次 &#xff0c;返回删除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的…

时序预测 | Python实现GA-TCN-LSTM遗传算法-时间卷积神经网络-长短期记忆网络时间序列预测

时序预测 | Python实现GA-TCN-LSTM遗传算法-时间卷积神经网络-长短期记忆网络时间序列预测 目录 时序预测 | Python实现GA-TCN-LSTM遗传算法-时间卷积神经网络-长短期记忆网络时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 使用先进的机器学习技术和优化算法…

Ubuntu systemd-analyze命令(系统启动性能分析工具:分析系统启动时间,找出可能导致启动缓慢的原因)

文章目录 Ubuntu systemd-analyze命令剖析目录简介systemd与systemd-analyze工作原理 安装和使用命令参数详解用例与示例显示启动时间&#xff08;systemd-analyze time&#xff09;列出启动过程中各个服务的启动时间&#xff08;systemd-analyze blame&#xff09;显示系统启动…

没想法、没经验做不了BI?求你,别再自我pua了

“我没想法&#xff0c;没经验&#xff0c;做不了BI报表&#xff0c;是不是不适合现代职场啊&#xff01;”在网上看到不少姐妹有这种迷惘发言&#xff0c;真的就&#xff0c;恨铁不成钢。求你了&#xff0c;别再自我pua了。你没想法没经验多正常啊&#xff0c;因为你没用过BI报…

Django 模板引擎 (四)

一、Django模板引擎 一个强大的工具&#xff0c;用于在HTML页面中嵌入动态内容。它使用一种被称为Django模板语言&#xff08;Django Template Language&#xff09;的简单而强大的语法来处理模板。该模板语言使用”{% %}”进行标记&#xff0c;用于执行各种操作。 二、Django…

指针数组以及利用函数指针来实现简易计算器及typedef关键字(指针终篇)

文章目录 &#x1f680;前言&#x1f680;两段有趣的代码✈️typedef关键字 &#x1f680;指针数组&#x1f680;简易计算器的实现 &#x1f680;前言 基于阿辉前两篇博客指针的基础篇和进阶篇对于指针的了解&#xff0c;那么今天阿辉将为大家介绍C语言的指针剩下的部分&#…

计算机组成原理期中题库

计算机组成原理题目集 2.1 下面是关于计算机中存储器容量单位的叙述&#xff0c;其中错误的是 A. 最基本的计量单位是字节&#xff08;Byte&#xff09;&#xff0c;一个字节等于8bit B. 一台计算机的编址单位、指令字长和数据字长都一样&#xff0c;且是字节的整数倍 C. 最小…

零基础编程入门视频教程,零基础编程从哪学起,分享中文编程工具构件实例

零基础编程入门视频教程&#xff0c;零基础编程从哪学起&#xff0c;分享中文编程工具构件实例 1、零基础编程入门视频教程&#xff0c;系统化编程教程链接 https://jywxz.blog.csdn.net/article/details/134073098?spm1001.2014.3001.5502 2、零基础编程从哪学起 建议初学…

多多跨境跑出高质量发展“加速度”,解锁拼多多Q3财报背后的王牌

互联网红利渐趋消退&#xff0c;用户拉新难度加大&#xff0c;这些现象也在表明过去电子商务依靠资本、流量快速增长的发展模式已经成为过去式。由高速发展转为高质量发展&#xff0c;在今天每一个经济体与宏观经济发展态势一般&#xff0c;发展的“质量”价值正在被放大开来。…

Zabbix“专家坐诊”第213期问答汇总

问题一 Q&#xff1a;Zabbix报错&#xff1a;Zabbix server is not running :the information displayed may not be current&#xff0c;是什么问题呢&#xff1f; A&#xff1a; 1、数据库软件问题导致导入的zabbix数据库不完整2、zabbix Server配置问题3、zabbix-server没…

超赞!让vue开发效率翻倍的工具分享

分享一个很实用的工具库 VueUse&#xff0c;它是基于 Vue Composition Api&#xff0c;也就是组合式API。支持在Vue2和Vue3项目中进行使用&#xff0c;据说是目前世界上Star最高的同类型库之一。 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 它的初衷就…

2023.11.29 深度学习框架理解

2023.11.29 深度学习框架理解 对深度学习框架进行复习&#xff0c;选最简单的“三好学生”问题的四个变化&#xff0c;简要总结其具体思路。 深度学习一开始就是为分类问题研究的&#xff0c;因此其框架的设计都是基于分类的问题&#xff0c;虽然现在也已经演变为可以执行多种…

高效解决在本地打开可视化服务器端的tensorboard

文章目录 问题解决方案 问题 由于连着远程服务器构建模型&#xff0c;但是想在本地可视化却做不到&#xff0c;不要想当然天真的以为CTRLC点击链接http://localhost:6006就真能在本地打开tensorboard。你电脑都没连接服务器&#xff0c;只是pycharm连上了而已 解决方案 你需要…

1000多页!LeetCode刷题手册分享

这本手册确实是一部令人印象深刻的作品。&#xff08;手册链接在文末&#xff01;&#xff01;&#xff01;&#xff09; 首先&#xff0c;内容充实是这本手册的一大亮点。它涵盖了广泛的算法和数据结构主题&#xff0c;包括数组、链表、树、图、排序算法、动态规划等等。每个…

基于SpringBoot房产销售系统

摘 要 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#xff1b;对于房产销售系统当然也不能排除在外&#xff0c;随着网络技术的不断成熟&#xff0c;带动了房产销售系统&#xff0c;它彻底改变了过去传统的…

自定义链 SNAT / DNAT 实验举例

参考原理图 实验前的环境搭建 1. 准备三台虚拟机&#xff0c;定义为内网&#xff0c;外网以及网卡服务器 2. 给网卡服务器添加网卡 3. 将三台虚拟机的防火墙和安全终端全部关掉 systemctl stop firewalld && setenforce 0 4. 给内网虚拟机和外网虚拟机 yum安装 httpd…

CityEngine2023 根据shp数据构建三维模型并导入UE5

目录 0 引言1 基本操作2 实践2.1 导入数据&#xff08;.shp&#xff09;2.2 构建三维模型2.3 将模型导入UE5 &#x1f64b;‍♂️ 作者&#xff1a;海码007&#x1f4dc; 专栏&#xff1a;CityEngine专栏&#x1f4a5; 标题&#xff1a;CityEngine2023 根据shp数据构建三维模型…

麒麟操作系统进入单用户模式

Kylin V4 桌面版&#xff1a; 启动系统后&#xff0c;在启动菜单界面选择 Kylin 4.0.2 高级选项后回车。 在高级模式选项下选择第二行 recovery mode 模式后&#xff0c;按 e 编辑。 按 e 后如下图&#xff0c;找到 linux 开头的一行&#xff0c;修改 ro 为 rw 后&#xff0c…

浅聊langchain-chatchat

个人的一点经验和总结&#xff0c;希望能帮助到大家。有不对的地方请留言和指正&#xff01; langchain-GLM是什么 langchain-GLM是一个本地知识库应用解决方案&#xff0c;支持以cli、web、api方式提供以本地知识库或在线资源为知识素材的对话服务&#xff0c;对中英文场景对…