使用Python进行人脸识别

引言:

机器视觉在近些年来很热门,比如自动驾驶、人脸识别等领域都有很大的作用,所以也有很多人愿意去学习相关内容,本文将初步探索人脸识别领域中人脸识别的模块。

正文:

如果真的要自己从底层开发识别人脸的程序,那么难度还是很大的。

其实还是站在巨人的肩膀上看世界,权当娱乐或增进自己的知识面还是没问题的。本文将讲解利用cv2等模块实现人脸识别。

工具准备:Pycharm 、cv2、PIL、os和numpy模块 。

而CV2(OpenCV 库的 Python 接口)是基于 OpenCV(Open Source Computer Vision Library)开发的。OpenCV 最初是由英特尔公司(Intel)发起并开发的一个计算机视觉库。

PIL 是 Python 中一个功能强大的图像处理库,它提供了广泛的图像操作功能,如打开、保存、裁剪、旋转、缩放、滤镜处理等多种操作。它能够处理多种图像文件格式,包括但不限于 JPEG、PNG、BMP 等常见格式。

os模块可以方便地与操作系统进行交互,执行诸如文件和目录操作、获取系统信息等任务,在本实验主要是文件与目录操作。

思路:首先分为几个模块,人脸检测模块(判断是否有人脸)、整合人脸与其对应的标签的函数、使用cv.face.LBPHFaceRecognizer_create()的train、predict等函数进行训练模型。

程序运行流程:首先调用函数,处理图片数据,使得图片转为机器能够处理的数组数据,其中还要整理好与其对应的图片标签,(在本实验只训练了两个人脸识别,陈冠希和彭于晏,使用这个还可以测试一下与彭于晏和陈冠希的相似程度,权当娱乐),整合好数据就可以使用cv2封装好的模型进行训练和预测,最终结果还是不错的。如下图,上面的标签就是预测的结果,如若出现不认识的人脸,也会标出。

具体模块程序如下:

人脸检测模块(主要是判断人脸位置,返回数组数据,以便后续处理)

复制代码
# 脸部检测函数
def face_recg(image):
    image = cv.cvtColor(image, cv.COLOR_BGR2GRAY) #因为后续处理需要灰度图像
    face_recg = cv.CascadeClassifier("haarcascade_frontalface_default.xml")  # openCV的开源文件
    count = 6
    while (count > 0):
        count -=1
        # print("FACE_REG计数值",count)
        faces = face_recg.detectMultiScale(image, 1.2, 6)
            # 如果未检测到面部,则返回原始图像
        if (len(faces) == 0):
            if count == 0:
                return None,None
            continue
        else: # 目前假设只有一张脸,xy为左上角坐标,wh为矩形的宽高
           (x, y, w, h) = faces[0]
        # 返回图像的脸部部分
           return image[y:y + w, x:x + h], faces[0]

处理图片数据和标签:

复制代码
def addfaces(img_path,labelname):
    """
    img_path: 文件夹路径
    labelname:图片标签
    """
    # 用于存储训练集图片数据和对应标签的列表
    train_images_list = []
    train_labels_list = []
    count=0
    root_src = img_path
    while (count < 10):
        # 构建正确的图片文件路径,确保路径拼接正确
        img_path = os.path.join(root_src, str(count)+ '.jpeg')
        if not os.path.exists(img_path):
            print(f"警告:训练集图片 {img_path} 不存在,跳过该图片")
            count += 1
            pass
        # face = Image.open(img_path).convert('RGB')
        else:
            face = cv.imread(img_path)
            facedata, rect = face_recg(face)
            if facedata is not None:
                # 将脸添加到脸部列表并添加相应的标签
                train_images_list.append(facedata)
                train_labels_list.append(labelname)
                count += 1
                # print("ADDFACE计数值",count)
            else:
                count += 1
    cv.waitKey(1)
    cv.destroyAllWindows()
    return train_images_list,train_labels_list

剩下的就是简单的调用训练和预测函数,以及如何让图片和预测结果显示了。

相关推荐
搜移IT科技2 分钟前
【无标题】2025ARCE亚洲机器人大会暨展览会将带来哪些新技术与新体验?
人工智能
信也科技布道师FTE21 分钟前
当AMIS遇见AI智能体:如何为低代码开发装上“智慧大脑”?
人工智能·低代码·llm
青瓷程序设计22 分钟前
植物识别系统【最新版】Python+TensorFlow+Vue3+Django+人工智能+深度学习+卷积神经网络算法
人工智能·python·深度学习
AI即插即用1 小时前
即插即用系列 | CVPR 2025 WPFormer:用于表面缺陷检测的查询式Transformer
人工智能·深度学习·yolo·目标检测·cnn·视觉检测·transformer
唐兴通个人1 小时前
数字化AI大客户营销TOB营销客户开发专业销售技巧培训讲师培训师唐兴通老师分享AI销冠人工智能销售AI赋能销售医药金融工业品制造业
人工智能·金融
人机与认知实验室1 小时前
国内主流大语言模型之比较
人工智能·语言模型·自然语言处理
T0uken1 小时前
【Python】UV:境内的深度学习环境搭建
人工智能·深度学习·uv
七宝大爷1 小时前
基于人类反馈的强化学习(RLHF):ChatGPT“对齐”人类的秘密武器
人工智能·chatgpt
shayudiandian1 小时前
ChatGPT风格对话机器人搭建教程
人工智能·chatgpt·机器人
腾讯云开发者1 小时前
TVP首场香港活动重磅启幕,AI出海变革风向如何把握?
人工智能