OpenCV中自带已训练好的检测器,包括面部,眼睛,猫脸等,都保存在XML文件中,我们可以通过以下程序找到他们:

import cv2 as cv
print(cv.__file__)

找到的文件如下所示:

opencv中人脸识别的流程是:

  1. 读取图片,并转换成灰度图

  2. 实例化人脸和眼睛检测的分类器对象

# 实例化级联分类器
classifier =cv.CascadeClassifier( "haarcascade_frontalface_default.xml" )
# 加载分类器
classifier.load('haarcascade_frontalface_default.xml')
  1. 进行人脸和眼睛的检测
rect = classifier.detectMultiScale(gray, scaleFactor, minNeighbors, minSize,maxsize)

参数:

  • Gray: 要进行检测的人脸图像
  • scaleFactor: 前后两次扫描中,搜索窗口的比例系数
  • minneighbors:目标至少被检测到minNeighbors次才会被认为是目标
  • minsize和maxsize: 目标的最小尺寸和最大尺寸
  1. 将检测结果绘制出来。

在图片中对人脸进行检测:

import cv2 as cv
import matplotlib.pyplot as plt# 1.以灰度图的形式读取图片
img = cv.imread("img.png")
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)# 2.实例化OpenCV人脸和眼睛识别的分类器
face_cas = cv.CascadeClassifier("haarcascade_frontalface_default.xml")
face_cas.load('haarcascade_frontalface_default.xml')eyes_cas = cv.CascadeClassifier("haarcascade_eye.xml")
eyes_cas.load("haarcascade_eye.xml")# 3.调用识别人脸
faceRects = face_cas.detectMultiScale(gray, scaleFactor=1.2, minNeighbors=3, minSize=(32, 32))
for faceRect in faceRects:x, y, w, h = faceRect# 框出人脸 cv.rectangle(img, (x, y), (x + h, y + w), (0, 255, 0), 3)# 4.在识别出的人脸中进行眼睛的检测roi_color = img[y:y+h, x:x+w]roi_gray = gray[y:y+h, x:x+w]eyes = eyes_cas.detectMultiScale(roi_gray)for (ex, ey, ew, eh) in eyes:cv.rectangle(roi_color, (ex, ey), (ex+ew, ey+eh), (0, 255, 0), 2)# 5. 检测结果的绘制
plt.figure(figsize=(8, 6), dpi=100)
plt.imshow(img[:, :, ::-1]),
plt.title('检测结果')
plt.xticks([]),
plt.yticks([])
plt.show()

在摄像头中对人脸进行检测:

import cv2 as cv# 1.读取摄像头
cap = cv.VideoCapture(0)# 2.在每一帧数据中进行人脸识别
while(cap.isOpened()):ret, frame = cap.read()if ret==True:gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)# 3.实例化OpenCV人脸识别的分类器face_cas = cv.CascadeClassifier("haarcascade_frontalface_default.xml")face_cas.load('haarcascade_frontalface_default.xml')# 4.调用识别人脸faceRects = face_cas.detectMultiScale(gray, scaleFactor=1.2, minNeighbors=3, minSize=(32, 32))for faceRect in faceRects:x, y, w, h = faceRect# 框出人脸cv.rectangle(frame, (x, y), (x + h, y + w), (0, 255, 0), 3)cv.imshow("frame", frame)if cv.waitKey(1) & 0xFF == ord('q'):break# 5. 释放资源
cap.release()
cv.destroyAllWindows()
文件名 功能
haarcascade_lefteye_2splits.xml 可用来检测睁开或闭着的眼睛
haarcascade_eye.xml 可用来检测睁开或闭着的眼睛
haarcascade_eye_tree_eyeglasses.xml 仅在带被检测者戴眼镜时方可检测
haarcascade_frontalcatface 猫脸检测
haarcascade_frontalcatface_extended 猫脸检测
haarcascade_smile 微笑检测
haarcascade_upperbody 人体上半部分检测
haarcascade_russian_plate_number.xml 俄罗斯车牌识别
haarcascade_righteye_2splits 用于进行人脸和人眼检测
haarcascade_profileface 侧脸检测
haarcascade_lowerbody 身体下半部分检测
licence_plate_rus_16stages 俄罗斯汽车牌照检测
haarcascade_fullbody 人体全身检测
haarcascade_frontalface_default 人脸识别
haarcascade_frontalface_alt2 人脸识别
haarcascade_frontalface_alt_tree 人脸识别
haarcascade_frontalface_alt.xml 人脸识别

haarcascade_frontalface_default.xml下载:
https://github.com/opencv/opencv/tree/master/data/haarcascades

# -*- coding: utf-8 -*-
import cv2
import timecap = cv2.VideoCapture(0)
ret = cap.set(3, 640)  # 设置帧宽
ret = cap.set(4, 480)  # 设置帧高
font = cv2.FONT_HERSHEY_SIMPLEX  # 设置字体样式
face_cascade = cv2.CascadeClassifier('/home/pi/Desktop/haarcascade_frontalface_default.xml')class FaceDetector():def __init__(self):self.start_video()def api_init(self):print("process start")def start_video(self):while cap.isOpened():ret, frame = cap.read()src = frame.copy()result = frame.copy()gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)faces = face_cascade.detectMultiScale(gray, 1.3, 5)for (x, y, w, h) in faces:result = cv2.rectangle(frame, (x, y), (x + w, y + h), (255, 0, 0), 2)if faces is not None:if len(faces) == 1:(fx, fy, fw, fh) = faces[0]target_face_x = fx + fw / 2offset_x = target_face_x - 640 / 2offset_x = -offset_xcv2.imshow("result", result)if cv2.waitKey(1) & 0xFF == ord('q'):breakcap.release()cv2.destroyAllWindows()if __name__ == '__main__':face_detector = FaceDetector()

OpenCV 简单的人脸识别相关推荐

  1. 使用OpenCV简单实现人脸识别

    简介 OpenCV是一个非常强大的计算机视觉库,现有的一系列特征检测和特征匹配算法,有很大一部分都已经在OpenCV的库中得以实现,故此我们只需调用OpenCV库中函数即可简单实现人脸识别. 开发环境 ...

  2. 史上最简单的人脸识别项目登上GitHub趋势榜

    来源 | GitHub Trending整理 | Freesia译者 | TommyZihao出品 | AI科技大本营(ID: rgznai100) 导读:近日,一个名为 face_recogniti ...

  3. 用Python实现简单的人脸识别,10分钟(附源码)

    前言 今天,我们用Python实现简单的人脸识别技术! Python里,简单的人脸识别有很多种方法可以实现,依赖于python胶水语言的特性,我们通过调用包可以快速准确的达成这一目的.这里介绍的是准确 ...

  4. 用Python几行代码实现简单的人脸识别,10分钟完成(附源码)

    前言 今天,我们用Python实现简单的人脸识别技术! Python里,简单的人脸识别有很多种方法可以实现,依赖于python胶水语言的特性,我们通过调用包可以快速准确的达成这一目的.这里介绍的是准确 ...

  5. 10分钟手把手教你运用Python实现简单的人脸识别

    欲直接下载代码文件,关注我们的公众号哦!查看历史消息即可! 前言:让我的电脑认识我 我的电脑只有认识我,才配称之为我的电脑! 今天,我们用Python实现高大上的人脸识别技术! Python里,简单的 ...

  6. python人脸识别opencv_手把手教你如何用 OpenCV + Python 实现人脸识别

    必备知识 Haar-like 通俗的来讲,就是作为人脸特征即可. Haar特征值反映了图像的灰度变化情况.例如:脸部的一些特征能由矩形特征简单的描述,如:眼睛要比脸颊颜色要深,鼻梁两侧比鼻梁颜色要深, ...

  7. 使用openCV进行视频人脸识别

    视频人脸识别系列 第一篇 使用openCV进行视频人脸识别 第二篇 使用虹软SDK进行视频人脸识别 第三篇 使用虹软SDK进行视频人脸比对 文章目录 视频人脸识别系列 前言 一.环境搭建 开发环境 配 ...

  8. Python+OpenCv实现AI人脸识别身份认证系统(2)——人脸数据采集、存储

    原 Python+OpenCv实现AI人脸识别身份认证系统(2)--人脸数据采集.存储 2019年07月02日 08:47:52 不脱发的程序猿 阅读数 602更多 所属专栏: 人脸识别身份认证系统设 ...

  9. python人脸识别解锁电脑_给你的电脑做个简单的“人脸识别认证”

    原标题:给你的电脑做个简单的"人脸识别认证" Simple "Face ID" for your PC 作者 | German Gensetskiy 翻译 | ...

最新文章

  1. 详解基于busybox、dropbear、ngnix制作完整的嵌入式Linux系统
  2. 用python画爱心的代码-怎么用python实现画爱心
  3. 无人数据中心何时到来仍需等待
  4. JSP Problem(第一次创建Web Project报错)
  5. 使用parted命令对硬盘进行操作
  6. 关于C++中函数指针的使用(包含对typedef用法的讨论)
  7. 02 | 高性能 IO 模型:为什么单线程 Redis 能那么快?
  8. SQL和PL/SQL的性能优化之四---联结与子查询
  9. Qt工作笔记-对Qt工作线程的进一步理解
  10. node.js http-server 搭建本地服务器
  11. wpf 深度复制控件,打印控件
  12. 【转】android:windowSoftInputMode属性详解
  13. 详解MATLAB/Simulink通信系统建模与仿真源码
  14. IBM P750 AIX机器根目录空间满问题解决办法
  15. php面试题狼兔,面试题总结 - 疯狂的兔子的个人空间 - OSCHINA - 中文开源技术交流社区...
  16. vue中控制台报错[WDS] Disconnected的解决办法
  17. 计算机英语论文及翻译,计算机专业英语翻译小论文
  18. python字母对应序号_python获取字母在字母表对应位置的几种方法及性能对比较
  19. 秩和检验(秩的概念,秩和检验法)
  20. python爬虫 爬取360图片(非结构化数据)

热门文章

  1. 用户空间和内核空间通讯Netlink
  2. hdu 1872(稳定排序)
  3. SharePoint 2010 内容编辑器Web部件的使用方法
  4. jquery之empty()与remove([expr])区别
  5. Android app按三层架构+MVC整理(重构)代码可行吗
  6. JS 提交form表单
  7. 后台开发经典书籍--计算机网络
  8. golang中的strings.IndexRune
  9. 嵌入式ARM启动代码的工作
  10. spring18-1:采用jdk的动态代理 proxy。