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

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

相关推荐
奔跑中的小象2 小时前
统信UOS + 天数AI卡部署SGLang服务手册
人工智能·uos·sglang·天数智芯
DevSecOps选型指南2 小时前
中国版Mythos,为何是悬镜安全灵脉CodeAI?
人工智能·安全
Shockang2 小时前
LangGraph 状态机实战
人工智能
刹那芳华19922 小时前
循环神经网络的从零开始实现(RNN)
人工智能·rnn·深度学习
阿童木写作2 小时前
跨境图片翻译工具多合一,批量图片视频字幕翻译加智能抠图
人工智能·python·音视频·语音识别
科技之门2 小时前
AI3D从建模到贴图、绑骨和动画的完整流程怎么做?V2Fun完整工作流指南
人工智能·3d·贴图
宇宙第一小趴菜2 小时前
二、机器学习的应用领域和发展史
人工智能·机器学习
前端开发江鸟2 小时前
我写过 MCP Server,却一直以为 MCP 只有 Tool
人工智能
天国梦3 小时前
自习室智能化升级避坑指南:天学网AI智习室方案实测与选型建议
大数据·人工智能
阿里云云原生3 小时前
可用性从 99.9% 跃升至 99.995%:畅捷通如何用 AI 重塑运维底座?
运维·网络·人工智能