基于opencv的人脸检测与识别(python)(1)

本文介绍基于opencv和Python的人脸检测与识别项目,详细阐述了环境配置、数据库、项目结构和人脸获取过程,提供了数据集和项目的百度云链接,适合初学者上手实践。
摘要由CSDN通过智能技术生成

基于opencv的人脸检测与识别(python语言)(1)

人脸检测和识别技术就目前而言,已经相对成熟,各类算法层出不穷,这都归功于各位奋斗在一线的大佬的努力(站在巨人的肩膀上的感觉就是爽)。本文是参考博客 https://www.cnblogs.com/neo-T/p/6477378.html 针对自己实际应用改写程序实现人脸检测与识别,并给出在实际操作过程中的一些问题说明,所以在一些程序注释上略显精简,读者可以参考这篇博客(注释详尽)对比学习。

另外为了让读者能够更快的上手程序,本文末尾也将整个项目百度云分享给大家(我这样的好人不多了!!),同时为了让初涉人脸识别的同学能够对这个方向有着一个整体了解,文末也提供了一篇文章综述的百度云(有英文注释哦!英语差的有福了!!)。

前期准备

环境

原文是在ubuntu环境下,本文则是在windows10环境下(主要差别在路径设置上),选择anaconda+python3.6+tensorflow1.9编写,读者可以根据自己平时喜好选择具体的IDE,jupyter Notebook,PyCharm也不错(虽然我更喜欢spyder)。至于tensorflow安装相关教程不是本文重点就不详说了(想要详说的网上搜哈有很多教程,唉,太多了!还有各种问题!算了看文末百度云链接吧)

原文用的是keras这个深度学习库,keras是纯python语言编写,继承了tensorflow和theano这样的深度学习框架。想学习的可以打开这个链接 https://keras-cn.readthedocs.io/en/latest/ (捡重要的看就行)。
具体安装跟一般python库安装一样的。

opencv作为最受欢迎的开源计算机视觉库,提供Python、Ruby、Matlab等语言的接口,实现图像处理和计算机视觉方面的很多通用算法,是初学者入门的一个重要且高效的工具。安装跟前keras安装流程相同具体见博客。opencvGithub链接:https://github.com/opencv/opencv 本文选择的级联分类器是haarcascade_frontalface_alt2.xml,大家可以在Github中下载下来在路径.\opencv-master\data\haarcascades中选择合适自己的分类器。

数据库

ORL人脸数据库是由英国剑桥大写AT&T实验室创建,包含40人工400张面部图像,每人有10幅经过归一化图像,图像尺寸为92*112,图像格式为pgm格式,是opencv例程中使用的数据集。下载链接:https://www.cl.cam.ac.uk/research/dtg/attarchive/facedatabase.html 也可以从文末百度云下载。数据集下载如下(文件s41是我添加的自己的图像数据,百度云的我删了的哈,大家根据自己需要添加数据):

ORL数据集

项目详解

项目列表

  • face_rec_project
    • pycache
    • data
      • s1
        • 1.pgm
        • 2.pgm
        • 10.pgm
      • s2
      • s41
      • data.txt
    • haarcascades
    • model
    • testdata
      • 1
    • catch_pic.py
    • face_predict_test.py
    • load_dataset.py
    • train_with_keras.py

文件夹data存放数据集;haarcascades文件夹存放级联分类器;model文件夹存放训练好的模型;.\testdata\1文件夹存放摄像头获得的人脸作为加入的训练样本。

在这里插入图片描述

获取人脸

本文在ORL人脸数据集的基础上,通过摄像头直接获取人脸添加进ORL数据集中扩充该数据集。下面是具体程序介绍:

def catch_pict(classfier, path_name, catch_pic_num):
    """Recognizing and storing 1000 face pictures form camera"""
    
    cv.namedWindow("face detect", cv.WINDOW_AUTOSIZE)
    color = (0, 255, 0)  # box color 
    
    cam = cv.VideoCapture(0)
    
    num = 0
    while cam.isOpened():
        ret, img = cam.read()  
        if not ret:
            break
        
        img = cv.flip(img, 1) # reverse picture
        gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
        gray = cv.equalizeHist(gray)
        
        faceRects = classfier.detectMultiScale(gray, scaleFactor=1.3, minNeighbors=4, 
                                               minSize=(30
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值