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

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

相关推荐
一点一木6 小时前
🚀 2026 年 4 月 GitHub 十大热门项目排行榜 🔥
人工智能·github
淡海水7 小时前
【AI模型】常见问题与解决方案
人工智能·深度学习·机器学习
HIT_Weston7 小时前
65、【Agent】【OpenCode】用户对话提示词(费米估算)
人工智能·agent·opencode
njsgcs7 小时前
我的知识是以图片保存的,我的任务状态可能也与图片有关,我把100张知识图片丢给vlm实时分析吗
人工智能
星爷AG I8 小时前
20-4 长时工作记忆(AGI基础理论)
人工智能·agi
#卢松松#8 小时前
用秒悟(meoo)制作了一个GEO查询小工具。
人工智能·创业创新
zandy10118 小时前
Agentic BI 架构实战:当AI Agent接管数据建模、指标计算与可视化全链路
人工智能·架构
数字供应链安全产品选型8 小时前
关键领域清单+SBOM:834号令下软件供应链的“精准治理“逻辑与技术落地路径
人工智能·安全
Flying pigs~~8 小时前
RAG智慧问答项目
数据库·人工智能·缓存·微调·知识库·rag
zuozewei8 小时前
从线下到等保二级生产平台:一次公有云新型电力系统 AI 部署复盘
人工智能