OpenCV与图像处理学习十七——OpenCV人脸检测(含代码)

  • 一、人脸识别概要
    • 1.1 人脸检测
    • 1.2 人脸对齐(Face Alignment)
    • 1.3 人脸特征提取(Face Feature Extraction)
    • 1.4 人脸识别(Face Recognition)
  • 二、人脸检测(不是识别)的代码
    • 2.1 cv2.CascadeClassifier
    • 2.2 dlib库

一、人脸识别概要

一般而言,一个完整的人脸识别系统包含4个主要组成部分,即人脸检测人脸对齐(将侧脸或歪脸变成正面脸)、人脸特征提取以及人脸识别

四部分流水线操作:

  • 人脸检测在图像中找到人脸的位置;
  • 人脸配准在人脸上找到眼睛、鼻子、嘴巴等面部器官的位置;
  • 通过人脸特征提取将人脸图像信息抽象为字符串信息;
  • 人脸识别将目标人脸图像与既有人脸比对计算相似度,确认人脸对应身份。

1.1 人脸检测

人脸检测算法的输入是一张图片,输出是人脸框坐标序列。一般情况下,输出的人脸坐标框为一个正朝上的正方形,但也有一些人脸检测技术输出是正朝上的矩形,或者是带旋转方向的矩形。

1.2 人脸对齐(Face Alignment)

根据人脸图像,自动定位出人脸五官关键点坐标的一项技术。

人脸对齐算法的输入是“一张人脸图片”加“人脸坐标框”,输出五官关键点的坐标序列。五官关键点的数量是预先设定好的一个固定数值,可以根据不同的语义来定义(常见的有5点、68点等)。

对人脸图像进行特征点定位,将得到的特征点利用仿射变换进行人脸矫正,若不矫正,非正面人脸进行识别的准确率不高。

1.3 人脸特征提取(Face Feature Extraction)

将一张人脸图像转化为一串固定长度的数值的过程。

具有表征某个人脸特点能力的数值串被称为“人脸特征(Face Feature)”

1.4 人脸识别(Face Recognition)

识别出输入人脸图对应身份的算法。

输入一个人脸特征,通过和注册在库中N个身份对应的特征进行逐个比对,找出 “一个” 与输入特征相似度最高的特征。将这个最高相似度和预设的阈值进行比较,如果大于阈值,则返回该特征对应的身份,否则返回 “不在库中” 。

二、人脸检测(不是识别)的代码

2.1 cv2.CascadeClassifier

import cv2# 读入图像
img = cv2.imread("image/3.png")# 加载人脸特征,该文件在 python安装目录\Lib\site-packages\cv2\data 下
# 注意xml文件的路径一定要对
face_cascade = cv2.CascadeClassifier(r'image/haarcascade_frontalface_default.xml')
# 将读取的图像转为COLOR_BGR2GRAY,减少计算强度
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 检测出的人脸个数
faces = face_cascade.detectMultiScale(gray, scaleFactor = 1.15, minNeighbors = 4, minSize = (5, 5))print("Face : {0}".format(len(faces)))
print(faces)
# 用矩形圈出人脸的位置
for(x, y, w, h) in faces:cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2) cv2.namedWindow("Faces")
cv2.imshow("Faces", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

效果如下所示:

2.2 dlib库

ps:dlib库的安装可以自行百度。

dlib库是通过68特征点来识别人脸的:

# -*- coding:utf-8 -*-
import cv2
import dlib
import numpy as nppredictor_model = 'image/shape_predictor_68_face_landmarks/shape_predictor_68_face_landmarks.dat'
detector = dlib.get_frontal_face_detector()
predictor = dlib.shape_predictor(predictor_model)# cv2读取图像
test_film_path = "image/3.png"
img = cv2.imread(test_film_path)
# 取灰度
img_gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)# 人脸数rects
rects = detector(img_gray, 0)
print(rects[0])
for i in range(len(rects)):landmarks = np.matrix([[p.x, p.y] for p in predictor(img, rects[i]).parts()])print(landmarks, type(landmarks))for idx, point in enumerate(landmarks):# 68点的坐标pos = (point[0, 0], point[0, 1])#print(idx+1, pos)# 利用cv2.circle给每个特征点画一个圈,共68个cv2.circle(img, pos, 3, color=(0, 255, 0))# 利用cv2.putText输出1-68font = cv2.FONT_HERSHEY_SIMPLEXcv2.putText(img, str(idx+1), pos, font, 0.5, (0, 0, 255), 1, cv2.LINE_AA)# cv2.imwrite("result.png", img)
cv2.imshow("img", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

效果如下所示:

68点坐标保存在一个np.martrix里:

[[ 95 137][ 98 162][104 187][108 212][117 235][131 255][149 272][170 285][192 289][215 285][235 270][253 251][266 229][272 205][276 180][283 156][285 131][101 114][116 106][134 107][153 110][172 117][209 117][227 109][246 106][265 105][282 113][190 135][191 153][191 172][192 189][177 199][184 203][192 205][201 203][208 199][125 135][136 127][151 127][163 139][149 143][135 143][219 138][230 127][245 126][257 134][247 142][232 142][161 235][172 226][185 219][193 222][200 219][212 226][224 235][213 247][201 252][193 252][184 252][172 247][168 235][185 231][193 232][200 232][217 235][201 235][193 236][185 235]] <class 'numpy.matrix'>

OpenCV与图像处理学习十七——OpenCV人脸检测(含代码)相关推荐

  1. OpenCV与图像处理学习十一——分水岭算法(含代码)

    OpenCV与图像处理学习十一--分水岭算法(含代码) 一.分水岭算法概要 二.分水岭算法步骤 三.代码应用 一.分水岭算法概要 任意的灰度图像可以被看做是地质学表面,高亮度的地方是山峰,低亮度的地方 ...

  2. OpenCV与图像处理学习十——区域生长算法(含代码)

    OpenCV与图像处理学习十--区域生长算法(含代码) 一.区域生长算法概要 二.区域生长算法原理 三.代码应用 一.区域生长算法概要 区域生长是一种串行区域分割的图像分割方法.区域生长是指从某个像素 ...

  3. OpenCV中基于LBP算法的人脸检测测试代码

    下面是OpenCV 3.3中基于CascadeClassifier类的LBP算法实现的人脸检测,从结果上看,不如其它开源库效果好,如libfacedetection,可参考 https://blog. ...

  4. OpenCV与图像处理学习十三——Harris角点检测(含代码)

    OpenCV与图像处理学习十三--Harris角点检测(含代码) 一.角点的概念 二.Harris角点检测的实现过程 三.Harris代码应用 一.角点的概念 角点: 在现实世界中, 角点对应于物体的 ...

  5. OpenCV与图像处理学习八——图像边缘提取(Canny检测代码)

    OpenCV与图像处理学习八--图像边缘提取(Canny检测代码) 一.图像梯度 1.1 梯度 1.2 图像梯度 二.梯度图与梯度算子 2.1模板卷积 2.2 梯度图 2.3 梯度算子 2.3.1 R ...

  6. 人脸检测实战:使用opencv加载深度学习模型实现人脸检测

    使用 OpenCV 和深度学习进行人脸检测 今天的博文分为三个部分. 在第一部分中,我们将讨论更准确的 OpenCV 人脸检测器的起源以及它们在 OpenCV 库中的位置. 然后我将演示如何使用 Op ...

  7. OpenCV与图像处理学习十六——模板匹配

    OpenCV与图像处理学习十六--模板匹配 一.模板匹配介绍 二.代码应用 一.模板匹配介绍 模板匹配是一种最原始.最基本的模式识别方法,研究某一特定目标的图像位于图像的什么地方,进而对图像进行定位. ...

  8. OpenCV与图像处理学习十五——LBP纹理特征(含代码)

    OpenCV与图像处理学习十五--LBP纹理特征(含代码) 一.LBP介绍 二.LBP原理 三.代码应用 一.LBP介绍 LBP(Local Binary Pattern, 局部二值模式) , 是一种 ...

  9. OpenCV与图像处理学习十四——SIFT特征(含代码)

    OpenCV与图像处理学习十四--SIFT特征(含代码) 一.SIFT算法 二.SIFT实现过程 三.代码实现 一.SIFT算法 SIFT, 即尺度不变特征变换算法(Scale-invariant f ...

最新文章

  1. java super是引用变量吗_Java中super的几种用法并与this的区别
  2. 旷视科技完成4.6亿美元C轮融资,打破商汤4.1亿美元单轮融资记录
  3. android 关机 流程_Android系统关机的全流程解析
  4. COM 组件设计与应用(七)
  5. 推荐系统之美团在CTR模型优化的实践
  6. [BZOJ 3668UOJ #2][Noi2014]起床困难综合症(贪心)
  7. debounce(防抖)和throttle(节流)
  8. CVS文件的常见操作
  9. python csv wordpress xmlrpc_wordpress_xmlrpc模块批量自动发布文章到wordpress - 老牛博客...
  10. mysql 如何按时间备份_如何用mysqldump进行全量和时间点备份
  11. Vue项目中出现Loading chunk {n} failed问题的解决方法
  12. c语言三角分解法解方程,用直接三角分解法解线性方程组.ppt
  13. 【问链财经-EOS公开课】 第十八课 史上最全EOS 资源汇总
  14. VB集成无标题栏Form图片按钮Activex
  15. 基于STM32F103HAL库的声音定位系统
  16. (二)GL 简单绘制
  17. AV1视频编码标准资源汇总 转载
  18. java 正则 浮点数_浮点数的正则表达式
  19. latex写姓名_用Latex写学术论文:作者(Author)摘要(Abstract)
  20. 【学习笔记1】C++除号“/”的使用

热门文章

  1. Linux无法连接远程仓库,ssh无法连接到远端Ubuntu的解决方法
  2. 秋招视频攻略!13个offer,8家SSP的Q神谈算法岗秋招技巧
  3. Spring Boot开发Web应用
  4. Reactor三种线程模型与Netty线程模型
  5. 论文浅尝 | 多标签分类中的元学习
  6. 论文浅尝 | 端到端神经视觉问答之上的显式推理
  7. XGB的python实现
  8. 【JavaWeb】数据库基础复习
  9. 短期记忆容量必需有限
  10. 第七届蓝桥杯省赛---蚂蚁感冒