博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Object Detection: Face Detection using Haar Cascades
阅读量:7214 次
发布时间:2019-06-29

本文共 3172 字,大约阅读时间需要 10 分钟。

目录


  利用基于Haar特征的级联分类器实现人脸检测;


目标

  • 学习基于Haar特征的级联分类器(Cascade Callifiers)实现人脸检测;
  • 扩展到人眼检测;

基础知识

Paul Viola、Michael Jones: Rapid Object Detection using a Boosted Cascade of Simple Features

  OpenCV中提供了训练和检测两个部分;下面的代码主要是检测部分,也就是说利用OpenCV提供的训练好的模型进行检测;OpenCV提供了不少训练好的分类器模型,如人脸、眼睛、笑容,分类器文件位于;

  有关训练的部分会涉及到上面那篇发表在2001年的CVPR上的文章;Haar特征,积分图,还有级联分类器等概念;

OpenCV实现人脸检测

result_face_2.jpg

#!/usr/bin/env python#-*- coding:utf-8 -*-# @Time    : 19-4-21 下午1:08# @Author  : chen"""基于Haar特征的级联分类器用于人脸检测https://docs.opencv.org/4.0.0/d7/d8b/tutorial_py_face_detection.html"""import cv2 # 下面两个文件下载地址# https://github.com/opencv/opencv/tree/master/data/haarcascadesprint("[INFO] 加载.xml文件")face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')# 读取图片,并转换成灰度图像print("[INFO] 转换成灰度图像")img = cv2.imread('face_2.jpeg')gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 在灰度图像下检测人脸print("[INFO] 人脸检测")faces = face_cascade.detectMultiScale(gray, 1.3, 5)count = 0for (x, y, w, h) in faces:    print("[INFO] 检测到第{}张人脸图像".format(count))    count += 1    # 画矩形圈出人脸    cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)    # 获取人脸灰度图像和彩色图像    roi_gray = gray[y:y+h, x:x+w]    roi_color = img[y:y+h, x:x+w]    # 在人脸灰度图像上检测眼睛位置    eyes = eye_cascade.detectMultiScale(roi_gray)    for (ex, ey, ew, eh) in eyes:        cv2.rectangle(roi_color, (ex, ey), (ex+ew, ey+eh), (0, 255, 0), 2)cv2.imshow('img', img)cv2.waitKey(0)cv2.destroyAllWindows()

从视频流中检测人脸

#!/usr/bin/env python#-*- coding:utf-8 -*-# @Time    : 19-4-21 下午1:56# @Author  : chen"""从视频流中检测人脸位置,眼睛位置"""# import the necessary packagesfrom imutils.video import VideoStreamfrom imutils.video import FPSimport timeimport cv2# 加载.xml文件print("[INFO] 加载.xml文件")face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')# 初始化视频流,唤醒摄像头print("[INFO] 开启摄像头")vs = VideoStream(src=0).start()time.sleep(2.0)# start the FPS throughput estimatorfps = FPS().start()# loop over frames from the video file streamwhile True:    # 捕获视频帧    frame = vs.read()    # 读取图片,并转换成灰度图像    # img = cv2.imread(img)    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)    # 在灰度图像下检测人脸    faces = face_cascade.detectMultiScale(gray, 1.3, 5)    for (x, y, w, h) in faces:        # 画矩形圈出人脸        cv2.rectangle(frame, (x, y), (x + w, y + h), (255, 0, 0), 2)        # 获取人脸灰度图像和彩色图像        roi_gray = gray[y:y + h, x:x + w]        roi_color = frame[y:y + h, x:x + w]        # 在人脸灰度图像上检测眼睛位置        eyes = eye_cascade.detectMultiScale(roi_gray)        for (ex, ey, ew, eh) in eyes:            cv2.rectangle(roi_color, (ex, ey), (ex + ew, ey + eh), (0, 255, 0), 2)    # update the FPS counter    fps.update()    # show the output frame    cv2.imshow("Frame", frame)    key = cv2.waitKey(1) & 0xFF    # if the `q` key was pressed, break from the loop    if key == ord("q"):        break    # stop the timer and display FPS informationfps.stop()print("[INFO] elasped time: {:.2f}".format(fps.elapsed()))print("[INFO] approx. FPS: {:.2f}".format(fps.fps()))# do a bit of cleanupcv2.destroyAllWindows()vs.stop()

转载于:https://www.cnblogs.com/chenzhen0530/p/10746731.html

你可能感兴趣的文章
小微贷是美团的上坡之路?
查看>>
js 将线性数据转为树形
查看>>
java B2B2C 源码 多级分销Springcloud多租户电子商城系统- 整合企业架构的技术点(二)...
查看>>
微信小程序
查看>>
区块链+金融
查看>>
阿里开发者招聘节 | 面试题14:如何实现两金额数据相加(最多小数点两位)...
查看>>
一些不错的文章
查看>>
Python爬虫常见面试题(二)
查看>>
【译】Web Components简介
查看>>
java生成缩略图类源码
查看>>
java虚拟机
查看>>
Script标签的async和defer
查看>>
JAVA 多用户商城系统b2b2c-kafka处理超大消息
查看>>
java B2B2C源码电子商城系统:服务消费(基础)
查看>>
API 集合
查看>>
我的友情链接
查看>>
a+aa+aaa+aaaa+aaaaa
查看>>
thinkphp_ajax分页实现_无需整理
查看>>
无聊软件-GIT屏幕录制工具_已迁移
查看>>
在论坛如何写好原创技术贴
查看>>