使用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

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

相关推荐
飞哥数智坊几秒前
openclaw 不是全站第一!但它的爆发,足以引人深思
人工智能
zone77391 小时前
001:LangChain的LCEL语法学习
人工智能·后端·面试
程序员鱼皮2 小时前
微软竟然出了免费的 AI 应用开发课?!我已经学上了
人工智能·程序员·ai编程
DevnullCoffe2 小时前
基于 OpenClaw + Pangolinfo API 的 Amazon 价格监控系统:架构设计与最佳实践
人工智能·架构
Baihai_IDP2 小时前
回头看 RLHF、PPO、DPO、GRPO 与 RLVR 的发展路径
人工智能·llm·强化学习
aristotle2 小时前
Openclow安装保姆级教程
人工智能·程序员
明明如月学长2 小时前
从 Subagent 到 Team:Claude Code 把 AI 协同玩明白了
人工智能
叶落阁主2 小时前
揭秘 Happy:如何实现 AI 编程助手输出的实时同步
人工智能·claude·vibecoding
王鑫星2 小时前
Anthropic 把自己发明的协议捐了:MCP 入驻 Linux 基金会,OpenAI 竟然也签了名
人工智能
陈少波AI应用笔记2 小时前
OpenClaw安全实测:4种攻击方式与防护指南
人工智能