python实现人脸识别(face_recognition)

这篇具有很好参考价值的文章主要介绍了python实现人脸识别(face_recognition)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、定义

1、介绍

本项目是世界上最强大、简洁的人脸识别库,你可以使用Python和命令行工具提取、识别、操作人脸。
本项目的人脸识别是基于业内领先的C++开源库dlib中的深度学习模型,用Labeled Faces in the Wild人脸数据集进行测试,有高达99.38%的准确率。但对小孩和亚洲人脸的识别准确率尚待提升。
Labeled Faces in the Wild是美国麻省大学安姆斯特分校(University of Massachusetts Amherst)制作的人脸数据集,该数据集包含了从网络收集的13,000多张面部图像。

github和官网网址:

https://github.com/ageitgey/face_recognition/blob/master/README_Simplified_Chinese.md
https://face-recognition.readthedocs.io/en/latest/face_recognition.html

2、人脸识别步骤:

1)人脸检测

要想识别人脸,首先需要在图像或者视频帧中找到所有人脸的位置,并将人脸部分的图像切割出来。

可以使用方向梯度直方图(HOG)来检测人脸位置。先将图片灰度化,因为色彩对于找到人脸位置并无明显作用,接着计算图像中各像素的梯度。

python实现人脸识别(face_recognition)

通过将图像变换为HOG形式,我们就可以提取图像的特征,从而获取人脸位置。

2)人脸对齐

一张图片中的人脸可能是倾斜的,或者仅仅是侧脸。为了方便给人脸编码,需要将人脸对齐成同一种标准的形状。


人脸对齐的第一步就是人脸是特征点估计。Dlib有专门的函数和模型,能够实现人脸68个特征点的定位。

python实现人脸识别(face_recognition)


找到特征点后,就可以通过图像的几何变换(仿射、旋转、缩放),使各个特征点对齐(将眼睛、嘴等部位移到相同位置)。

3)人脸编码

python实现人脸识别(face_recognition)


训练一个神经网络,将输入的脸部图像生成为128维的预测值。
训练的大致过程为:将同一人的两张不同照片和另一人的照片一起喂入神经网络,不断迭代训练,使同一人的两张照片编码后的预测值接近,不同人的照片预测值拉远。也就是减小类内距离,增大类间距离。具体算法参考facenet[3]。

python实现人脸识别(face_recognition)

4)识别身份

预先将所有人的连放入人脸库中,全部用上述的神经网络编码为128维并保存。识别时,将人脸预测为128维的向量后,与人脸库中的数据进行比对。

比对方法有很多种,可以直接找出阈值范围内欧氏距离最小的人脸,或者训练一个末端的SVM或者knn分类器,直接生成人的代号(身份)。
knn分类器构建方法可参考这个代码。

python实现人脸识别(face_recognition)

整体的使用python实现人脸识别的代码可以参考使用OpenCV,Python和深度学习进行人脸识别。

二、通过python代码实现

1、安装

1)windows系统 python3.10下安装 dlib 

Steins-Gate-Divergence-Meter-Clock-VisitorCounter/dlib-19.22.99-cp310-cp310-win_amd64.whl at main · longsongline/Steins-Gate-Divergence-Meter-Clock-VisitorCounter · GitHub

2)安装 face_recognition 库文章来源地址https://www.toymoban.com/news/detail-433678.html

pip3 install face_recognition

2、代码案例 

# coding=utf-8
import sys
import cv2
from PIL import Image,ImageDraw,ImageFont
import numpy as np
import face_recognition

# 加载已知人脸图像
known_image = face_recognition.load_image_file("know_img.jpg")

# 提取已知人脸的编码
known_face_encoding = face_recognition.face_encodings(known_image)[0]

# 初始化摄像头
video_capture = cv2.VideoCapture(0)

def cv2AddChineseText(frame, name, position, fill):
    font = ImageFont.truetype('simsun.ttc', 30)
    img_pil = Image.fromarray(frame)
    draw = ImageDraw.Draw(img_pil)
    draw.text(position, name, font=font, fill=fill)
    return np.array((img_pil))

while True:
    # 读取摄像头中的图像
    ret, frame = video_capture.read()

    # 将图像转换为RGB格式
    rgb_frame = frame[:, :, ::-1]

    # 检测图像中的人脸
    face_locations = face_recognition.face_locations(rgb_frame)
    face_encodings = face_recognition.face_encodings(rgb_frame, face_locations)

    # 在图像中标记人脸位置
    for (top, right, bottom, left), face_encoding in zip(face_locations, face_encodings):
        # 判断检测到的人脸是否和已知人脸匹配
        matches = face_recognition.compare_faces([known_face_encoding], face_encoding, tolerance=0.38)

        # 如果匹配,则标记人脸为已知人脸
        name = "unknow"
        if True in matches:
            name = "know"

        # 在图像中标记人脸位置和姓名
        cv2.rectangle(frame, (left, top), (right, bottom), (0, 0, 255), 2)
        # cv2.putText(frame, name, (left + 6, bottom - 6), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (0, 0, 255), 1)
        frame = cv2AddChineseText(frame, name, (left, top - 38), (0, 0, 255))
        

    # 显示图像
    cv2.imshow('Video', frame)

    # 按下q键退出程序
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# 释放摄像头
video_capture.release()

# 关闭所有窗口
cv2.destroyAllWindows()

到了这里,关于python实现人脸识别(face_recognition)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python 通过opencv及face_recognition识别人脸

    效果: 使用Python的cv2库和face_recognition库来进行人脸检测和比对的 0是代表一样 认为是同一人。 代码:

    2024年02月03日
    浏览(30)
  • 人脸识别 Face Recognition 入门

    找论文搭配 Sci-Hub 食用更佳 💪 Sci-Hub 实时更新 : https://tool.yovisun.com/scihub/ 公益科研通文献求助:https://www.ablesci.com/ 人脸识别流程:检测、对齐、(活体)、预处理、提取特征(表示)、人脸识别(验证) 传统方法试图通过一两层表示来识别人脸,例如过滤响应、特征直方图

    2024年02月04日
    浏览(28)
  • 人脸识别(Java+ Face++实现)

    Face++的核心技术是基于深度学习的人脸识别技术,其算法在准确率和速度方面都处于领先地位。该公司的产品和服务包括人脸识别SDK、人脸识别API、人脸比对服务、人脸检测服务、活体检测服务等。这些产品和服务广泛应用于金融、公安、零售、物流等领域。并且,Face++提供

    2024年02月07日
    浏览(35)
  • face-api实现人脸识别。

    访问地址 JavaScript API for face detection and face recognition in the browser implemented on top of the tensorflow.js core API 官方说明 翻译:在tensorflow.js核心API之上实现的用于浏览器中人脸检测和人脸识别的JavaScript API 访问tensorflow.js 部分代码 蓝奏云:https://wwud.lanzouw.com/iLnE516oj2eh 百度云:https://

    2024年02月10日
    浏览(28)
  • 【face-api.js】前端实现,人脸捕获、表情识别、年龄性别识别、人脸比对、视频人脸追踪、摄像头人物识别

    官网看下简介,在线预览看下效果 官方的github文件拷下来 npm i face-api.js 把模型文件拷进你的项目 主要是在图片或视频元素上,盖一个相同大小的canvas 先是录入一些图片的描述信息,然后比较描述信息,判断人脸的相似度 人脸检测器有两种, SSD 和 Tiny 两种,SSD较大,Tiny用

    2024年02月11日
    浏览(41)
  • vue+face-api.js实现前端人脸识别功能

    近期做了一个前端vue实现人脸识别的功能,主要功能逻辑包含:人脸识别,人脸验证,唤起摄像头视频流之后从三个事件(用户点头、摇头、眨眼睛)中随机选中两个事件,待两个事件通过判断后人脸静止不动3秒钟后截取视频流生成图片,上传到阿里或者腾讯oss,通过oss返回

    2024年02月05日
    浏览(30)
  • 基于Face++,使用Spring Boot+Elemnet-UI实现人脸识别登录。

    上一篇文章只是封装了人脸检测的一些工具类,要实现刷脸登录,我们首先得思考一个问题,就是如何将我们的人脸和登录账户信息进行绑定,让它通过人脸就能识别到当前登录的账户是谁的账户。 这个问题我们可以这样解决,我浏览Face++的官网发现它还有人脸比对的一个

    2024年02月04日
    浏览(31)
  • OpenCV人脸识别,训练模型为cv2.face.LBPHFaceRecognizer_create()

    OpenCV内部自带有三种人脸检测方式:LBPH人脸识和其他两种方法(Eigen人脸识别,FisherFace人脸识别)本次主要说明第一种方式LBPH检测。 1.创建需要训练的图片的集文件夹,和识别功能测试图片集的文件夹。 图(1)训练图集文件夹   图(1.1)taylorswift照片(尽量选用背景没其

    2024年02月07日
    浏览(36)
  • opencv 进阶13-Fisherfaces 人脸识别-函数cv2.face.FisherFaceRecognizer_create()

    PCA 方法是 EigenFaces 方法的核心,它找到了最大化数据总方差特征的线性组合。不可否认,EigenFaces 是一种非常有效的方法,但是它的缺点在于在操作过程中会损失许多特征信息。 因此,在一些情况下,如果损失的信息正好是用于分类的关键信息,必然会导致无法完成分类。

    2024年02月11日
    浏览(32)
  • Python进阶——实现人脸识别

    前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 今天我们来实现一下人脸识别~ 先问大家一个问题 什么是百度Aip模块? 百度AI平台提供了很多的API接口供开发者快速的调用运用在项目中 本文写的是使用百度AI的在线接口SDK模块(baidu-aip)进行实现人脸识别 除了人脸识别,其他

    2024年02月03日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包