基于Python的人脸识别(Python 3.12+face_recognition库)

使用Python进行人脸编码和比较

简介

在这个教程中,我们将学习如何使用Python和face_recognition库来加载图像、提取人脸编码,并比较两个人脸是否相似。face_recognition库是一个强大的工具,它基于dlib的深度学习模型,可以轻松实现人脸检测和识别功能。本教程适合初学者,我们将通过一个简单的项目来了解这个库的基本用法和环境配置。

代码示例

import face_recognition
import cv2
import matplotlib.pyplot as plt

def load_and_encode_face(image_path):
    """加载图片并获取人脸编码"""
    # 加载图像
    image = face_recognition.load_image_file(image_path)

    # 检查图像是否为8位灰度或RGB
    if image.dtype == 'uint8' and (len(image.shape) == 2 or image.shape[2] == 3):
        # 图像已经是8位灰度或RGB
        pass
    else:
        # 转换为8位RGB图像
        image = cv2.convertScaleAbs(image)
        if len(image.shape) == 2:
            # 如果是灰度图像,转换为RGB
            image = cv2.cvtColor(image, cv2.COLOR_GRAY2RGB)
        elif image.shape[2] == 4:
            # 如果是RGBA,转换为RGB
            image = cv2.cvtColor(image, cv2.COLOR_RGBA2RGB)

    face_encodings = face_recognition.face_encodings(image)

    if face_encodings:
        return face_encodings[0], image
    else:
        raise ValueError("No faces found in the image.")

def compare_faces(known_face_encoding, unknown_face_encoding, tolerance=0.5):
    """比较两个人脸编码是否相似"""
    results = face_recognition.compare_faces([known_face_encoding], unknown_face_encoding, tolerance=tolerance)
    return results[0]

def plot_faces(known_image, unknown_image, match):
    """绘制并显示两张人脸图像"""
    fig, axes = plt.subplots(1, 2, figsize=(12, 6))
    axes[0].imshow(cv2.cvtColor(known_image, cv2.COLOR_BGR2RGB))
    axes[0].set_title("Known Face")
    axes[1].imshow(cv2.cvtColor(unknown_image, cv2.COLOR_BGR2RGB))
    axes[1].set_title("Unknown Face")

    # 显示匹配结果
    if match:
        plt.suptitle("Faces Match")
    else:
        plt.suptitle("Faces Do Not Match")
    plt.show
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值