执着于理想,纯粹于当下。

文章目录

  • 一、数据和知识准备
    • 1. 下载HAAR与LBP数据
    • 2. opencv相关知识
  • 二、python+opencv实现人脸检测
    • 1. 图像单人脸检测
    • 2. 图像多人脸检测
    • 3. 视频中人脸检测
    • 4. 摄像头人脸检测

原文链接:https://yetingyun.blog.csdn.net/article/details/108153075
创作不易,未经作者允许,禁止转载,更勿做其他用途,违者必究。

一、数据和知识准备

1. 下载HAAR与LBP数据

人脸检测的常见步骤如下,如果想要将人脸准确地检测出来,需要通过建立人脸模型,获取准确区分人脸的分类器,这里我们使用网上公开的扩展包或已经训练好的分类器。

将 haarcascades 与 lbpcascades 里面的相关 xml 文件下载到本地,便于之后调用,辅助进行人脸检测。

下载地址:https://github.com/opencv/opencv/tree/master/data

2. opencv相关知识

  • cv.CascadeClassifier():是 OpenCV 中人脸检测的一个级联分类器,既可以使用 Haar 特征,也可以使用 LBP 特征。以 Haar 特征分类器为基础的对象检测技术是一种非常有效的技术,它是基于机器学习且使用大量的正负样本训练得到分类器。
  • detectMultiScale函数:检测人脸算法,其参数如下:
    image:要检测的输入图像
    scaleFactor:表示每次图像尺寸减小的比例
    minNeighbors:表示每一个目标至少要被检测到多少次才算是真的人脸,因为周围的像素和不同的窗口大小都可能检测成人脸
    minSize:表示目标的最小尺寸
    maxSize:表示目标的最小尺寸
  • Haar-like矩形特征:是用于物体检测的数字图像特征。这类矩形特征模板由两个或多个全等的黑白矩形相邻组合而成,而矩形特征值是白色矩形的灰度值的和减去黑色矩形的灰度值的和,矩形特征对一些简单的图形结构,如线段、边缘比较敏感。如果把这样的矩形放在一个非人脸区域,那么计算出的特征值应该和人脸特征值不一样,所以这些矩形就是为了把人脸特征量化,以区分人脸和非人脸。
  • LBP:是一种特征提取方式,能提取出图像的局部的纹理特征,最开始的 LBP 算子是在 3X3 窗口中,取中心像素的像素值为阀值,与其周围八个像素点的像素值比较,若像素点的像素值大于阀值,则此像素点被标记为1,否则标记为0。这样就能得到一个八位二进制的码,转换为十进制即 LBP 码,于是得到了这个窗口的 LBP 值,用这个值来反映这个窗口内的纹理信息。LBPH是在原始 LBP 上的一个改进,在 opencv 支持下可以直接调用函数直接创建一个 LBPH 人脸识别的模型。
    比如:cv2.face.LBPHFaceRecognizer_create()。

二、python+opencv实现人脸检测

1. 图像单人脸检测

import cv2 as cvdef face_detection(image):# 创建一个级联分类器 加载一个.xml分类器文件 它既可以是Haar特征也可以是LBP特征的分类器face_detecter = cv.CascadeClassifier(r'./face_detection/haarcascades/haarcascade_frontalface_default.xml')# 多个尺度空间进行人脸检测   返回检测到的人脸区域坐标信息faces = face_detecter.detectMultiScale(image=image, scaleFactor=1.1, minNeighbors=5)print('检测人脸信息如下:\n', faces)for x, y, w, h in faces:# 在原图像上绘制矩形标识cv.rectangle(img=image, pt1=(x, y), pt2=(x+w, y+h), color=(0, 0, 255), thickness=2)cv.imshow('result', image)src = cv.imread(r'./test/036.jpg')
cv.imshow('input image', src)
face_detection(src)
cv.waitKey(0)
cv.destroyAllWindows()

运行效果如下:

检测人脸信息如下:[[ 61  53 110 110]]Process finished with exit code 0


2. 图像多人脸检测

import cv2 as cvdef face_detection(image):# 转成灰度图像gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)# 创建一个级联分类器 加载一个.xml分类器文件 它既可以是Haar特征也可以是LBP特征的分类器face_detecter = cv.CascadeClassifier(r'./face_detection/haarcascades/haarcascade_frontalface_default.xml')# 多个尺度空间进行人脸检测   返回检测到的人脸区域坐标信息faces = face_detecter.detectMultiScale(image=gray, scaleFactor=1.1, minNeighbors=5)print('检测人脸信息如下:\n', faces)for x, y, w, h in faces:# 在原图像上绘制矩形标识cv.rectangle(img=image, pt1=(x, y), pt2=(x+w, y+h), color=(0, 0, 255), thickness=2)cv.imshow('result', image)src = cv.imread(r'./test/044.jpg')
cv.imshow('input image', src)
face_detection(src)
cv.waitKey(0)
cv.destroyAllWindows()

运行效果如下:

检测人脸信息如下:[[329 157  49  49][ 88 156  44  44][157 158  54  54][240 159  50  50][ 86 370  68  68][ 79 254  54  54][339 250  58  58][155 254  59  59][251 247  59  59][199 371  80  80][308 370  69  69]]Process finished with exit code 0

3. 视频中人脸检测

# -*- coding: UTF-8 -*-
"""
@公众号      : AI庭云君
@Author     : 叶庭云
@CSDN       : https://yetingyun.blog.csdn.net/
"""
import cv2# 加载视频
cap = cv2.VideoCapture('test.mp4')
# 创建一个级联分类器 加载一个.xml分类器文件 它既可以是Haar特征也可以是LBP特征的分类器
face_detect = cv2.CascadeClassifier(r'./face_detection/haarcascades/haarcascade_frontalface_default.xml')while True:# 读取视频片段ret, frame = cap.read()if not ret:  # 读完视频后falg返回Falsebreakframe = cv2.resize(frame, None, fx=0.5, fy=0.5)# 灰度处理gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)# 多个尺度空间进行人脸检测   返回检测到的人脸区域坐标信息face_zone = face_detect.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=8)# 绘制矩形和圆形检测人脸for x, y, w, h in face_zone:cv2.rectangle(frame, pt1=(x, y), pt2=(x + w, y + h), color=[0, 0, 255], thickness=2)cv2.circle(frame, center=(x + w // 2, y + h // 2), radius=w // 2, color=[0, 255, 0], thickness=2)# 显示图片cv2.imshow('video', frame)# 设置退出键和展示频率if ord('q') == cv2.waitKey(40):break# 释放资源
cv2.destroyAllWindows()
cap.release()

截取新版倚天屠龙记某一集36:35到36:39的片段,简单实现实时检测人脸并显示,运行效果如下:


任何算法都不会 100% 识别准确,由于噪声、误差、算法、训练集等影响,某些时候也会出现一些错误识别。自己进行简单测试时也会发现,人物动作、视频中镜头切换过快、背景变化等因素,可能会造成对视频中人脸检测不准确。

4. 摄像头人脸检测

"""
@公众号      : AI庭云君
@Author     : 叶庭云
@CSDN       : https://yetingyun.blog.csdn.net/
"""
import cv2 as cv# 识别电脑摄像头并打开
cap = cv.VideoCapture(0, cv.CAP_DSHOW)
# 创建一个级联分类器 加载一个.xml分类器文件 它既可以是Haar特征也可以是LBP特征的分类器
face_detect = cv.CascadeClassifier(r'./face_detection/haarcascades/haarcascade_frontalface_default.xml')while True:# 读取视频片段flag, frame = cap.read()frame = cv.flip(frame, 1)if not flag:   # 读完视频后falg返回Falsebreak# 灰度处理gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)# 多个尺度空间进行人脸检测   返回检测到的人脸区域坐标信息face_zone = face_detect.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5)# 绘制矩形和圆形检测人脸for x, y, w, h in face_zone:cv.rectangle(frame, pt1=(x, y), pt2=(x + w, y + h), color=[0, 0, 255], thickness=2)cv.circle(frame, center=(x + w // 2, y + h // 2), radius=w // 2, color=[0, 255, 0], thickness=2)# 显示图片cv.imshow('video', frame)# 设置退出键q 展示频率if ord('q') == cv.waitKey(30):break# 释放资源
cv.destroyAllWindows()
cap.release()

程序运行,即可调用电脑的摄像头识别面对摄像头的人脸,正脸和静止状态检测人脸的效果好。

python+opencv 实现图像人脸检测及视频中的人脸检测相关推荐

  1. frame中src怎么设置成一个变量_OpenCV图像人脸检测及视频中的人脸检测(附源码)...

    文章目录 一.数据和知识准备 1. 下载HAAR与LBP数据 2. opencv相关知识 二.python+opencv实现人脸检测 1. 图像单人脸检测 2. 图像多人脸检测 3. 视频中人脸检测 ...

  2. 人脸识别-在视频中识别人脸

    感谢优秀的你打开了小白的文章 "希望在看文章的你今天又进步了一点点,离美好生活更近一步!" 目录 往期回顾 代码 结果展示 VideoCapture类的构造函数: 往期回顾 灰度转 ...

  3. [Python图像处理] 二十八.OpenCV快速实现人脸检测及视频中的人脸

    该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...

  4. OpenCvSharp人脸识别系统(视频中的人脸)

    前段时间因项目中有用到人脸识别,折腾了好久才解决了问题.现将简单的人脸识别功能分享出来,供大家研究. 是基于OpenCVSharp写的人脸识别功能,启用电脑自带的摄像头,识别到人脸图片,并以视频的形式 ...

  5. 使用OpenCV检测摄像头视频中的人脸

    import cv2 import numpy as np import matplotlib.pyplot as plt#人脸检测 def face_rec(img):gray = cv2.cvtC ...

  6. python+opencv+PIL,在图片和视频中写入中文(汉字)

    原博客地址:https://blog.csdn.net/wyx100/article/details/80412101 效果 代码 #!/usr/bin/env python # -*- coding ...

  7. Python 计算机视觉(十六)—— 图像和视频中的人脸识别

    参考的一些文章以及论文我都会给大家分享出来 -- 链接就贴在原文,论文我上传到资源中去,大家可以免费下载学习,如果当天资源区找不到论文,那就等等,可能正在审核,审核完后就可以下载了.大家一起学习,一起 ...

  8. face_recognition、opencv中haar人脸特征:视频/图片 进行 人脸检测/人脸识别

    日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) import face_recognition import ...

  9. OpenCV视频中的人脸标志检测

    OpenCV视频中的人脸标志检测 视频中的人脸标志检测 简介 命令参数说明 源代码 视频中的人脸标志检测 简介 此应用程序使您可以检测视频中检测到的面部的地标.此应用程序首先检测当前视频帧中的面部,然 ...

最新文章

  1. EXCEL数据导入数据库
  2. rhel6Inode详解
  3. 调用dubbo接口出现多次
  4. Javascript:郁闷了好久终于找到原因了,原理还不明白
  5. 一级域名和二级域名的区别是什么?作用怎样?
  6. 三章:CentOS6.5 更改时区设置、安装samba、install VMware、install XFS 、install XFS --parted
  7. u盘安装linux双系统6,用U盘安装Centos6.5 + Win7 双系统
  8. [codevs1262] 不要把球传我 数论+组合数学
  9. 认识和学习orchestrator之基本使用篇
  10. VideoLan 0.8.6b test 1
  11. 敏捷开发般若敏捷系列之六:如何推广敏捷(下)(以无我之心,行无住之法)...
  12. 为什么对流层散射通信距离远、容量大、_中级通信工程师|「专业实务」第9章重点学习内容!...
  13. 增霸卡传输掉线/无法登录/再次登录时间长
  14. 计算机毕业设计的读书笔记,毕业设计之读书笔记
  15. 【嵌入式流媒体开发】Linux ALSA 声卡数据采集与播放
  16. 安装JDK+SDK+eclipse+Android Studio+模拟器(夜神OK,AVD黑屏)
  17. 我的世界服务器皮肤显示mod,【回归了】McMySkin Mod - Minecraft单机联机皮肤显示Mod...
  18. 计算机del键作用,计算机里的英文字母“DEL”键是干什么用的
  19. 邱姓女孩五行缺水取名
  20. 大腿根部发黑怎么样白,变白方法

热门文章

  1. 反渗透设备:反渗透设备应用的基本原理与技术优势
  2. 微信小程序支付,查询和支付回调
  3. python爬取电商订单_Python探索之爬取电商售卖信息代码示例
  4. 同一台机器不同的sata线居然传输率不同
  5. 学习C语言-学习指针
  6. linux替换命令 vim,Vim 替换命令(substitute)
  7. 多维泰勒网(Multi-dimensional Taylor Network,MTN)
  8. magic--创建魔方矩阵
  9. WARNING:Retrying(Retry(total=4,connect=None,read=None,redirect=None,status =None))connect broken解决方案
  10. Fortify--安装与使用