我是靠谱客的博主 辛勤羊,最近开发中收集的这篇文章主要介绍基于opencv实现人脸检测,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

人脸检测是对人脸图片进行处理的前提条件,如果需要进行学习,那么数据集的采样可以配合人脸检测功能进行联动采集和过滤。此处,我们主要采用python程序设计语言来对图片中的人脸信息进行处理。

首先我们需要在我们的计算机中安装opencv,如果安装出现问题的,可以尝试通过anaconda进行一个新环境的安装。

首先我们导入模块

import cv2                          #opencv2库
import matplotlib.pyplot as plt     #plt绘图库
import numpy as np
import os
import scipy.io

在这里,我们不仅要对我们采集到的人脸进行检测,我们还需要将一个画面中出现的不同的人脸打上一个标签,如果出现两个人脸相同的情况,那么我们认定他们是同一个人,就将他们的信息存储在一起。(这部分代码暂不放出)

获得人脸信息

在人脸检测的代码中,我们首先需要载入我们的级联分类器,在opencv中,我们的级联分类器的函数为:CascadeClassifier
我们载入开源的haarcascade_frontalface_default.xml人脸分类器

下载链接:https://github.com/kipr/opencv/blob/master/data/haarcascades/haarcascade_frontalface_default.xml

我们通过级联分类器对我们级联分类器分类出的信息进行过滤,获得我们想要的人脸数据。我们可以使用 分类器的detectMultiScale方法。
该方法中的image参数需要是一个图片信息,scanleFactor参数则是指定在每个图像比例下图像尺寸减小多少的参数,minNeighbors参数指定每个候选矩形应保留多少个邻居的参数,我们在这里对scanleFactor设置为1.5,对minNeighbors设置为5。

那么我们的代码如下:

face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
faces = face_cascade.detectMultiScale(image = img, scaleFactor = 1.5, minNeighbors = 5)

我们得到的faces是一个向量数组(类似于pytorch中的张量,也就是tensor),但是其本质是数组,我们通过len方法获得faces数组中的个数,那么如果len(faces)<0,我们的图片中就没有检测到任何的人脸。

人脸裁剪

通过for循环遍历faces数组,获得我们的像tensor实际上是numpy.Array的数据类型,并通过start_pos和end_pos获得在二维坐标系的起始坐标和对角线上的结束坐标。得到了一个矩形。

for (x, y, w, h) in faces:
        start_point = (x,y)
        end_point = (x+w,y+h)

        #图像绘图
        cv2.rectangle(img, start_point, end_point, (255, 0, 0), 2)        #color参数的顺序是BGR,因此(255,0,0)显示的是蓝色的线条,##最后一个参数表示矩形框的厚度。
        #图像裁剪,并保存为temp.png
        crop = img[y:(y + h), x:(x + w)]

人脸绘制

在裁剪后,我们对图像进行最后的处理,暂时我们的处理结果

finalimg = cv2.cvtColor(img, cv2.COLOR_RGB2BGR)
plt.figure(figsize=(5,5))
plt.imshow(finalimg) 
plt.axis("off")
plt.show()

完整代码暂不放出。

效果展示

输入图像

请添加图片描述

输出图像

请添加图片描述

而在实际的使用过程中,我们把相同的人脸放在同一个文件夹中,并准备进行后续的操作。

例子:

请添加图片描述
对于类似的图片流,我们或许可以用一些技术手段来做一些面向未来的事情~!

最后

以上就是辛勤羊为你收集整理的基于opencv实现人脸检测的全部内容,希望文章能够帮你解决基于opencv实现人脸检测所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部