python+opencv实现简单的人脸识别(代码片段)

shaoWang-top shaoWang-top     2023-02-15     246

关键词:

前言

最近自己尝试了python+opencv实现简单的人脸识别,接下来我将一步步讲解我实现其功能的详细步骤,有不对的地方请指正

具体的功能是:识别图片或者视频片段中的人脸,打印出识别的信息

模块

这里我将罗列我们需要使用的模块

  1. opencv(cv2) : 这是我们实现人脸识别的主要模块
  2. os :文件操作
  3. xlrd :操作excel(我将一部分信息放在excel中)
  4. pillow :图像处理标准库
  5. numpy :数组运算 (通常我们可以将彩色图片看作三维数组,黑白图片看作二维数组)

功能实现

        1.目录介绍

这是我创建的文件目录,下面我将依次介绍相应信息(该文件夹是按照自己习惯建立,大家只需要了解具体用处即可)

  1. image:  存放照片的总文件夹
  2. imge/colours:  存放用来训练模型的照片
  3. image/need_recognize:  存放需要识别的照片
  4. image/video:  存放需要识别的视频
  5. info/faceInfo.xls:  存放照片训练模型照片的相应信息
  6. train/train.yml:  训练好的模型文件
  7. haarcascade_frontalface_default.xml:  opencv人脸识别文件,需自行下载
  8. recognize.py:  实现人脸识别功能的文件
  9. train.py:  实现模型训练的文件

        2.训练模块

模型训练最终会生成train.yml文件,在train.py中,我定义了两个函数来完成改功能,我将会在代码注释部分详细讲解其作用。

#train.py =>  getImageAndLabels(images_path)

def getImageAndLabels(images_path):  # 传入模型训练的照片路径
    faces = []
    ids = []
    face_detector = cv.CascadeClassifier('haarcascade_frontalface_default.xml') 
# 引用人脸识别模块  (这个模块来自opencv开源人脸模块)
    images = [os.path.join(images_path, title) for title in os.listdir(images_path)]
# 将路径下照片依次放入images列表 
    for image in images:
        gray_image = Image.open(image).convert('L')  # 灰度照片
        image_numpy = np.array(gray_image, 'uint8')  # 将照片转化为数组
        face_site = face_detector.detectMultiScale(image_numpy)  # 检测人脸并存入
        id = os.path.split(image)[1].split('.')[0]
# 将每张照片的id记录
        if not len(face_site):
            print(image, '无法识别')
        else:
            for x, y, w, h in face_site:
                faces.append(image_numpy[y:y + h, x:x + w])
                ids.append(int(id))
    return faces, ids   #  返回所有照片的人脸数据和id

#train.py =>  train_data(face_image_path)

def train_data(face_image_path):   #  传入模型训练的照片路径
    faces, ids = getImageAndLabels(face_image_path)   #  获取所有照片人脸数据和id
    recognizer = face.LBPHFaceRecognizer_create()  #  引入训练模型的函数
    recognizer.train(faces, np.array(ids))  #  训练模型
    recognizer.write('trainer/trainer.yml') #  创建训练模型的文件或重新写入

  

        3.识别模块

在识别模块中,对于照片的人脸识别和视频的人脸识别,其实现方式是相同的,故我将视频的每一帧作为照片传入函数进行识别,达到复用函数的目的,该模块共定义了四个函数。

#recognize.py =>  read_info(id_info)

def read_info(id_info):   #  传入需要识别出的人脸id
    excel = xlrd.open_workbook(excel_path) 
    sheet = excel.sheet_by_index(0)  
    name = sheet.row_values(id_info + 1)[1]  #  查找传入id照片的信息
    return name

#recognize.py =>  face_recognize(image, isVideo)

def face_recognize(image, isVideo):  # 传入需要识别的照片以及该照片是否属于视频的一帧
    recognizer.read('trainer/trainer.yml')  # 读取训练模型
    gray_img = cv.cvtColor(image, cv.COLOR_BGR2GRAY)  # 将图片灰度转换
    faces = face_detector.detectMultiScale(gray_img)  # 检测图片中人脸部分
    for x, y, w, h in faces:
        cv.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2)  
# 在原图中圈出人脸
        id, confidence = recognizer.predict(gray_img[y:y + h, x:x + w])  
# 返回id、置信度
        name = read_info(id) 
        if confidence < 100:
            print(id, name)
        else:
            print('识别度较低')
            name = '识别度较低'
        image = cv.resize(image, (300, 400))  #  限定展示照片的大小
        cv.imshow('result', image)
        if not isVideo:
            cv.waitKey(0)

#recognize.py =>  image_face_recognize(recognize_image_path)

def image_face_recognize(recognize_image_path):  #  传入需要识别的照片都总路径
    lists = [os.path.join(recognize_image_path, title) for title in os.listdir(recognize_image_path)]
#  将路径下所有照片的具体路径存入lists列表
    for item in lists:
        image = cv.imread(item)  # 读取图片
        face_recognize(image, False)  # 调用识别函数
    cv.destroyAllWindows()

#recognize.py =>  video_face_recognize(video_path)

def video_face_recognize(video_path):  #  传入视频路径
    lists = [os.path.join(video_path, title) for title in os.listdir(video_path)]
    print(lists)
    for item in lists:
        print(item)
        capture = cv.VideoCapture(item)  #  打开视频
        while True:
            flag, frame = capture.read()  #  读取视频每一帧
            if not flag:
                break
            face_recognize(frame, True)  #  传入该帧图片
            if ord('q') == cv.waitKey(10):
                break

总结

目前人脸识别我只采用 'haarcascade_frontalface_default.xml' 模块,如果需要更高的精度可以结合更多的模块一起进行处理和识别。同时,增加模型训练中一组照片的数量也能在一定程度上提高人脸识别精度。

python+opencv实现简单的人脸识别(代码片段)

前言最近自己尝试了python+opencv实现简单的人脸识别,接下来我将一步步讲解我实现其功能的详细步骤,有不对的地方请指正具体的功能是:识别图片或者视频片段中的人脸,打印出识别的信息模块这里我将罗... 查看详情

python-opencv实现人脸识别功能(代码片段)

使用python-opencv实现人脸识别功能。思路如下:1.使用opencv库打开摄像头。2.加载opencv中自带的人脸特征识别分类器3.输出结果代码如下:importcv2importmatplotlib.pyplotasplt#1.读取笔记本相机cap=cv2.VideoCapture(0)#2.在每一帧数据中进行人脸... 查看详情

如何用python实现简单人脸识别

参考技术A你可以使用opencv库提供的人脸识别模块,这样子会比较快 参考技术B人脸识别的话你得需要一个3D摄像头,不同的摄像头他写的方法是不一样的,这得看摄像头生产商的介绍了。 查看详情

python基于opencv+face_recognition实现人脸捕捉与人脸识别(照片对比)(代码片段)

...与上篇通过摄像头动态识别人脸一样,先下载好opencv-python、face-recognition,这里因为使用的是照片对比的方式,特意使用tkinter画了一个简单的GUI方便操作。在python3以上版本tkinter是环境自带的,所以这里不需要安... 查看详情

python+opencv人脸识别身份认证系统设计:专栏总述

本专栏依托于Python编程语言,在内容上尽可能涵盖了人脸识别的各个技术模块,从人脸数据采集、数据预处理、数据分析、人脸识别模型的训练到最后的人脸识别,均有详细的操作步骤和注释代码,能帮助学习者... 查看详情

python基于opencv的人脸表情识别系统[源码&部署教程](代码片段)

...情识别技术的发展方向。2.识别效果展示3.识别视频演示Python基于OpenCV的人脸表情识别系统[源码&部署教程]_哔哩哔哩_bilibili4.实现方法分析人脸表情识别中需要运用人脸检测技术,识别人脸之后,再对表情图像做预处... 查看详情

opencv-python也能实现人脸检测了(代码片段)

opencv中也可以实现深度学习中的人脸识别算法了。是怎么一回事呢?就是opencv中的DNN库,更新了好多深度学习的模块或者说是库函数,这样就让我们摆脱了安装庞大繁琐的深度学习框架。我们只需下载相应的权重文件... 查看详情

基于python+opencv人脸识别及人脸遮挡识别

...大小:21M代码行数:47行(主程序)开发环境:Python3.8、OpenCV4.5、dlib点击下载:点击下载猿创承诺:该源码均通过亲自测试可正常运行简要概述:这种人脸识别实现能够识别具有一定遮挡程度的人脸,包... 查看详情

人脸识别《一》opencv人脸识别之人脸检测(代码片段)

opencv中已经有人脸识别的功能了,所以来看看整个流程以及具体实现吧。人脸识别:就是给一个已知人脸贴上一个标签。上面这句简单的话,其实包含的信息量好大啊,这说明首先你要知道这是一张脸,然后... 查看详情

python笔记-opencv图像处理和人脸识别(代码片段)

...9.拍照保存10.训练数据11.人脸识别三.简单实例1.环境配置python下编程,先安装库pipinstallopencv-pythonpipinstallopencv-contrib-python通过pip下载的只是阉割版的,部分功能不全,要实现人脸识别还需在官网Home-OpenCV下载完整的库(... 查看详情

opencv-python实战(17)——人脸识别详解(代码片段)

OpenCV-Python实战(17)——人脸识别详解0.前言1.人脸识别简介2.使用OpenCV进行人脸识别2.1使用OpenCV进行人脸识别流程示例3.使用dlib进行人脸识别4.使用face_recognition进行人脸识别小结系列链接0.前言人脸处理是人工智能中的一... 查看详情

linux学习opencv+ros实现人脸识别(ubantu16.04)(代码片段)

...1.创建工作空间2.创建功能包三、人脸识别检测相关代码1.python文件2.lanuch文件 3.CvBridge四、代码实测1.执行命令行 2.人脸识别效果五、报错解决六、总结前言本文主要学习 ROS机器人操作系统 ,在ROS系统里调用OpenCV库 实现... 查看详情

基于opencv的人脸识别,翻车了居然识别错误。(代码片段)

...。今天我们就说说利用opencv打造人脸识别系统。环境使用python3.9pycharm模块使用syscv2face_recognition模块介绍1.opencv关于OpenCvOpencv是一个开源的的跨平台计算机视觉库,内部实现了图像处理和计算机视觉方面的很多通用算法,... 查看详情

人脸表情识别系统介绍——上篇(python实现,含ui界面及完整代码)

摘要:这篇博文介绍基于深度卷积神经网络实现的人脸表情识别系统,系统程序由Keras,OpenCv,PyQt5的库实现,训练测试集采用fer2013表情库。如图系统可通过摄像头获取实时画面并识别其中的人脸表情,也可以通过读取图片识别,... 查看详情

processing调用opencv库实现人脸识别和图片切换(代码片段)

Processing调用OpenCV库实现人脸识别和图片切换公众号:STCode效果描述:本作品调用OpenCV计算机视觉库,通过调取摄像头,利用Processing编程实现当检测到人脸离开后更换图片的效果,更换图片的形式为逐渐消失和... 查看详情

基于python的百度ai人脸识别api接口(可用于opencv-python人脸识别)(代码片段)

基于Python的百度AI人脸识别API接口(可用于OpenCV-Python人脸识别)资源:https://download.csdn.net/download/weixin_53403301/43644312之前的项目:【最新】基于OpenCV的Python人脸识别、检测、框选(遍历目录下所有照片依次识别... 查看详情

附源码基于opencv的python人脸识别

大家好,我是cv君,近期朋友的作品,由我来分享给大家,人脸识别的,顺便还附带了比较完整的一些功能,还有UI界面,可拓展性高,欢迎收藏~(遍历目录下所有照片依次识别视频随时标注)一、功能概览可以实现在摄像头下... 查看详情

附源码基于opencv的python人脸识别

大家好,我是cv君,近期朋友的作品,由我来分享给大家,人脸识别的,顺便还附带了比较完整的一些功能,还有UI界面,可拓展性高,欢迎收藏~(遍历目录下所有照片依次识别视频随时标注)一、功能概览可以实现在摄像头下... 查看详情