【opencv】基于opencv实现人脸识别,原理&代码部分

上一部分我们解决了环境问题,这一部分我们可以开始上代码,环境没有配好的可以参照上一篇博客:环境搭建解决:

下面先说一下原理:

一.原理部分

  本文基于opencv来实现人脸识别,大致实现流程可以描述为:

在这里插入图片描述
  当计算机拿到你输入的图片以后,首先对整个图片先进行灰度处理,即将图片拆解成一个矩阵,矩阵中的每个元素分别代表着图片中每个像素点的像素值,映射范围是0~255,再提取图片中人脸的部分将其框出,然后提取图片特征,即把人脸那一块数据提取出来,经过多个人脸的特征数据和图片的id进行对应,经过大量数据的训练后,计算机就可以生成人脸识别模型,然后再调用视频,图片或者摄像头就可以识别出来图片里的人是谁。
  在opencv中筛选人脸的代码在刚刚下载好的opencv文件夹中,找到刚刚下载好的opencv文件夹,打开source—>data—>haarcascades,找到里面的haarcascade_frontalface_alt2.xml或者haarcascade_frontalface_default.xml
这两个代码的作用都是将图片中人脸的信息框选出来,以我自己的电脑为例
在这里插入图片描述
  在写代码的时候调用这两个中的一个就好,就例如在这里我们调用的是_alt2,还有就是这个路径中不能出现中文,否则会报错,所以opencv最好不要安装到文件名中带有中文的文件夹里。在这里插入图片描述

二.代码部分

  首先安装必备的包
在这里插入图片描述
  这几个包必须有,因为在中间做计算的时候会用到

数据训练的代码

import os
from os import listdir
import cv2
from PIL import Image           # 如果这里报错了就下载Image,因为我用的是python3,PIL在python3里被Pillow取代了,但是Pillow里没有Image
import numpy as np
import contrib

def getImageAndLabels(path):
    #存储人脸数据
    faceSamples = []
    #存储姓名数据
    ids = []
    imagePaths = [os.path.join(path,f) for f in listdir(path)]
    #加载分类器
    face_detector = cv2.CascadeClassifier('D:/OpenCV/opencv/sources/data/haarcascades/haarcascade_frontalface_alt2.xml')  # 人脸检测文件
    #遍历列表中的图片
    for imagePaths in imagePaths:   #要求每一张图片里只能有一张人脸
        #打开图片
        #灰度化PIL有九种不同模式:1,L,P,RGB,RGBA,CMYK,YCbCr,I,F,   1打开方式为是黑白,L是打开方式是灰度图像
        PIL_img = Image.open(imagePaths).convert('L')       #灰度打开图像,相当于cv.imread然后再用cv.cvtColor对图像进行灰度转换,把像素范围界定在0~255
        #将图片转换为数组,以黑白深浅。就是将图片向量化,把图片的每一个像素点变成一个数值,用这个数值进行判别计算
        img_numpy = np.array(PIL_img,'uint8')
        #获取图片人脸特征
        faces = face_detector.detectMultiScale(img_numpy)   #img_numpy是整张图片,然后将整张图片中人脸的那一块小数组提取出来存到faces里面
        #获取每张图片id和姓名
        id = int(os.path.s
  • 21
    点赞
  • 167
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值