为了账号安全,请及时绑定邮箱和手机立即绑定

OpenCV神技——人脸检测,猫脸检测

标签:
人工智能

简介

  OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。
  OpenCV的官方网址为:。
  本文将会介绍OpenCV在人脸检测等方面的应用,使用的语言为Python。
  本文介绍的人脸检测使用OpenCV自带的Haar特征检测,训练好的模型的存放网址为:,如下图:

webp


笔者将会介绍其中的人脸检测(haarcascade_frontalface_default.xml)和猫脸检测(haarcascade_frontalface.xml)。

人脸检测

  利用OpenCV的Python接口实现人脸检测的流程如下:

  • 读取图片

  • 将图片转换为灰度模式,便于人脸检测

  • 利用Haar特征检测图片中的人脸

  • 绘制人脸的矩形区域

  • 显示人脸检测后的图片

  示例的Python代码如下:

# -*- coding: utf-8 -*-import cv2import logging# 设置日志logging.basicConfig(level = logging.INFO, format='%(asctime)s - %(levelname)s: %(message)s')
logger = logging.getLogger(__name__)# 待检测的图片路径ImagePath = 'E://zhoujielun.jpg'# 读取图片logger.info('Reading image...')
image = cv2.imread(ImagePath)# 把图片转换为灰度模式gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 探测图片中的人脸logger.info('Detect faces...')# 获取训练好的人脸的参数数据,进行人脸检测face_cascade = cv2.CascadeClassifier(r'./haarcascade_frontalface_default.xml')
faces = face_cascade.detectMultiScale(gray,scaleFactor=1.15,minNeighbors=5,minSize=(3, 3))

search_info = "Find %d face."%len(faces) if len(faces) <= 1 else "Find %d faces."%len(faces)
logger.info(search_info)# 绘制人脸的矩形区域(红色边框)for (x, y, w, h) in faces:
    cv2.rectangle(image, (x,y), (x+w,y+h), (0,0,255), 2)# 显示图片cv2.imshow('Find faces!', image)
cv2.waitKey(0)

输出结果如下:

2018-09-18 10:35:31,232 - INFO: Reading image...
2018-09-18 10:35:31,261 - INFO: Detect faces...
2018-09-18 10:35:32,122 - INFO: Find 1 face.

检测后的图片如下:

webp

可以看到人脸检测的效果还是不错的。
  把代码中的图片换成《碟中谍6》里面的图片(笔者最近刚看完《碟中谍6》,强烈推荐),人脸检测的效果如下:


webp

猫脸检测

  人脸检测、人脸识别是近来非常火的技术,那么,用来识别猫脸呢?只需要把之前代码中的模型文件换成haarcascade_frontalface.xml即可。完整的Python代码如下:

# -*- coding: utf-8 -*-import cv2import logging# 设置日志logging.basicConfig(level = logging.INFO, format='%(asctime)s - %(levelname)s: %(message)s')
logger = logging.getLogger(__name__)# 待检测的图片路径ImagePath = 'E://cat.jpg'# 读取图片logger.info('Reading image...')
image = cv2.imread(ImagePath)# 把图片转换为灰度模式gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 探测图片中的人脸logger.info('Detect faces...')# 获取训练好的人脸的参数数据,进行人脸检测face_cascade = cv2.CascadeClassifier(r'./haarcascade_frontalcatface.xml')
faces = face_cascade.detectMultiScale(gray,scaleFactor=1.15,minNeighbors=5,minSize=(3, 3))

search_info = "Find %d face."%len(faces) if len(faces) <= 1 else "Find %d faces."%len(faces)
logger.info(search_info)# 绘制人脸的矩形区域(红色边框)for (x, y, w, h) in faces:
    cv2.rectangle(image, (x,y), (x+w,y+h), (0,0,255), 2)# 显示图片cv2.imshow('Find faces!', image)
cv2.waitKey(0)

输出的结果如下:

2018-09-18 10:43:00,564 - INFO: Reading image...
2018-09-18 10:43:00,585 - INFO: Detect faces...
2018-09-18 10:43:01,741 - INFO: Find 1 face.

猫脸检测后的效果如下:

webp

怎么样,是不是感觉萌萌的?

总结

  本文主要介绍了OpenCV在人脸检测和猫脸检测方面的应用,并且给出了具体的Python代码。
  那么,能检测人脸和猫脸,我们又能做些什么呢?其实,我们如果继续探究下去,可以做不少的事情,比如结合深度学习的模型,比如CNN等,可以实现人脸识别啊,物体检测,自动给图像打标签等。后续,笔者将会给出这些具体应用的一些实例,欢迎大家交流~



作者:但盼风雨来_jc
链接:https://www.jianshu.com/p/d22905c2704a


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消