7行Python的人脸识别

随着去年alphago 的震撼表现,AI 再次成为科技公司的宠儿。AI涉及的领域众多,图像识别中的人脸识别是其中一个有趣的分支。百度的BFR,Face++的开放平台,汉王,讯飞等等都提供了人脸识别的API,对于老码农而言,自己写一小段代码,来看看一张图片中有几个人,没有高大上,只是觉得好玩,而且只需要7行代码。

import cv2 face_patterns = cv2.CascadeClassifier('/usr/local/opt/opencv3/share/OpenCV/haarcascades/haarcascade_frontalface_default.xml') sample_image = cv2.imread('/Users/abel/201612.jpg') faces = face_patterns.detectMultiScale(sample_image,scaleFactor=1.1,minNeighbors=5,minSize=(100, 100)) for (x, y, w, h) in faces:    cv2.rectangle(sample_image, (x, y), (x+w, y+h), (0, 255, 0), 2) cv2.imwrite('/Users/abel/201612_detected.png', sample_image);

第1行 引入 OpenCV

开源是伟大的,使我们视野更开阔,而且不用重复造轮子。这里没有用PIL,再结合特定算法,而是直接使用了OpenCV(http://opencv.org)。OpenCV是一个基于BSD许可发行的跨平台计算机视觉库,可以运行在Linux、Windows和Mac OS操作系统上,轻量而且高效,用C/C++编写,同时提供了Python、Ruby、MATLAB等接口,实现了图像处理和计算机视觉方面的很多通用算法。

第2行 加载分类器 cv2.CascadeClassifier

CascadeClassifier是Opencv中做人脸检测时候的一个级联分类器,该类中封装的是目标检测机制即滑动窗口机制+级联分类器的方式。数据结构包括Data和FeatureEvaluator两个主要部分。Data中存储的是从训练获得的xml文件中载入的分类器数据;而FeatureEvaluator中是关于特征的载入、存储和计算。这里采用的训练文件是OpenCV中默认提供的haarcascadefrontalfacedefault.xml。至于Haar,LBP的具体原理,可以参考opencv的相关文档,简单地,可以理解为人脸的特征数据。

第3行 加载目标图片 imread

人脸识别系统一般分为:人脸图像采集、人脸图像预处理、人脸图像特征提取以及匹配与识别。 简化起见,之间读入图片,这是一张去年中生代北京闭门会的集体照。

第4行 多尺度检测 detectMultiScale

调用 CascadeClassifier 中的调detectMultiScale函数进行多尺度检测,多尺度检测中会调用单尺度的方法detectSingleScale。 参数说明:

  • scaleFactor 是 图像的缩放因子

  • minNeighbors 为每一个级联矩形应该保留的邻近个数,可以理解为一个人周边有几个人脸

  • minSize 是检测窗口的大小

这些参数都是可以针对图片进行调整的,处理结果返回一个人脸的矩形对象列表。

第5行 和 第6行 为每个人脸画一个框

循环读取人脸的矩形对象列表,获得人脸矩形的坐标和宽高, 然后在原图片中画出该矩形框,调用的是OpenCV的rectangle 方法,其中矩形框的颜色等是可调整的。

第7行 保存检测后的结果

万事具备了,调用imwrite,将检测后的结果保存到指定的位置。结果图如下:

神秘感不是这7行代码,而是OpenCV中的相关实现,OpenCV的中文网也是一个学习体会的好场所。

因此,7行代码只是个噱头,真正的核心是OpenCV。然后,安装OpenCV环境的时候就是有一些坑,特别记录一下。

基于Mac的OpenCV环境

建议使用Brew 安装,如果没有安装brew,先执行下面命令:

$/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)”

然后,指定目标仓库 $brew tap homebrew/science

安装OpenCV3  $brew install opencv3

安装速度取决于网络,安装完毕需要绑定Python开发环境,有多种土方法:

1)增加环境变量,将opencv 的site-packages 添加到PYTHONPATH中

2)使用ln 软连接,将cv2.so 链接到python 环境的 site-packages中

3)直接cp cv2.so 到 python 环境的 site-packages 目录下

更简单地是执行如下命令:

 echo /usr/local/opt/opencv3/lib/python2.7/site-packages >> /usr/local/lib/python2.7/site-packages/opencv3.pth  mkdir -p /Users/hecom/.local/lib/python2.7/site-packages  echo 'import site; site.addsitedir("/usr/local/lib/python2.7/site-packages")' >> /Users/hecom/.local/lib/python2.7/site-packages/homebrew.pth

对于强迫症患者

可以全面安装opencv的各种插件,如QT插件,视频插件等:

$brew install opencv3 --with-contrib --with-cuda --with-ffmpeg --with-tbb --with-qt5

可能会遇到很多坑,如Error: You must 'brew link texi2html’ before homebrew/science/opencv3 can be installed

当你执行 $brew link texi2html时又会遇错:Error: Cowardly refusing to 'sudo brew link' You can use brew with sudo, but only if the brew executable is owned by root. However, this is both not recommended and completely unsupported so do so atyour own risk

说明brew 的权限有问题, 需要解决:$sudo chown root:wheel 'which brew’

在Ubuntu上OpenCV3的源码安装

在Ubantu上安装先要做一下准备活动

$ aptitude -f install $ sudo apt-get update

然后安装编译环境: $sudo apt-get install build-essential

安装依赖库$sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev还要安装python 依赖及其它依赖库$sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

获得opencv源代码git clone https://github.com/Itseez/opencv.git

终于可以编译安装了:

$cd opencv $cmake -D CMAKE_INSTALL_PREFIX=/home/opencv/build -D CMAKE_BUILD_TYPE=RELEASE   ..

最后,安装python-opencv:

$sudo apt-get install python-opencv

OpenCV的Python环境简单验证

一行代码验证OpenCV的Python环境是否成功:

$python -c "import cv2; print dir(cv2)"

如果输出了很多cv2 的属性和函数名的字典,就表示成功;否则的话,还需要继续填坑。

(0)

相关推荐

  • 基于OpenCV的实时面部识别

    重磅干货,第一时间送达 我们将使用一些简单的代码来实现实时面部识别代码,我们可以对个人的面部进行预测. 现在,面部识别已成为生活中的一部分.因此,在介绍主题之前我们先看看实时面部识别示例.我们在手机. ...

  • python+opencv读入和显示图片

    多久消失不见的本人,又回来啦!!! 这段时间换了老板,嘻嘻,也换了要学习的内容了,如此不专一,流汗中... 由于是本人兴趣爱好,更新时间不一定哦 疫情当前,请大家保重自己!!! ----------- ...

  • 【从零学习OpenCV】4Ubuntu系统中安装OpenCV 4

    重磅干货,第一时间送达 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍<从零学习OpenCV 4>.为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟通 ...

  • (9条消息) Ubuntu18.04安装cuda10.0,cudnn7.6.4,opencv4.2.0,python环境

    Ubuntu18.04安装cuda10.0,cudnn7.6.4,opencv4.2.0,python环境 记录一下安装踩到的坑 1.安装cuda10.0和cudnn7.6.4 2.安装opencv ...

  • 《python opencv实践》一、基于颜色的物体追踪(上)

    cnts = cv2.findContours(mask.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[-2]

  • 快速指南:使用OpenCV预处理神经网络中的面部图像的

    重磅干货,第一时间送达 本期将介绍脸部检测.眼睛检测:图像拉直.裁剪.调整大小.归一化等内容 目前,涉及面部分类的计算机视觉问题,通常都需要使用深度学习.因此在将图像输入神经网络之前,需要经过一个预处 ...

  • 平安夜,Python送你一顶圣诞帽 @微信官方

    最后知道真相的我眼泪掉下来 (还蒙在鼓里的同学请在微信最上方的搜索栏自行搜索『圣诞帽』) 好吧,你不给,咱自己来,不就是个帽子嘛. Python 在手,圣诞帽我有! OpenCV 库加上几张圣诞帽图片 ...

  • 使用OpenCV Python进行人脸识别

    先决条件 对图像分类的基本理解 Python 和深度学习知识 对深度学习中各种模块的概念理解 介绍 在这篇文章中,我们将看看什么是人脸识别?以及它与人脸检测有何不同? 我们先简单了解一下人脸识别的原理 ...

  • 用Python写个简单但强大的人脸识别系统

    Python编程学习圈 2021-07-16 关注+星标,每天学习Python新技能 face_recognition是一个强大.简单.易上手的人脸识别开源项目,并且配备了完整的开发文档和应用案例,特 ...

  • 手把手教你用Python写个简单又强大的人脸识别系统

    face_recognition是一个强大.简单.易上手的人脸识别开源项目,并且配备了完整的开发文档和应用案例,特别是兼容树莓派系统. face_recognition一经开源发布就得到的广泛的热捧, ...

  • DeepID:Python基于Caffe的DeepID2实现人脸识别的简介、实现之详细攻略

    DeepID:Python基于Caffe的DeepID2实现人脸识别的简介.实现之详细攻略 基于Caffe的DeepID2实现人脸识别 更新-- DeepID2实现人脸识别的实现 参考链接 https ...

  • 人脸识别的基本原理

    编辑导语:人脸识别产品早已被应用到生活的各个场景之中.但是你了解它的应用原理吗?本篇文章里,作者便将人脸识别原理进行了拆解.感兴趣的话就一起看下去吧. 现在AI发展的如火如荼,我们已逐步进入智能时代. ...

  • 以人脸识别技术为主的智慧校园安防解决方案

    今天给大家带来的是以人脸识别技术为基础的智慧校园安防系统解决方案,针对学校的围墙周界.大门.档案室.校学生宿舍以及学校危险地带的危险活动检测,系统将告警信息推送给管理人员,采取应对措施,下面我们来看具 ...

  • 人脸识别行业报告(2021,全文)

    人脸识别是基于人的脸部特征信息进行身份识别的一种生物识别技术.随着深度学习.大数据和云计算等领域的不断突破,人脸识别也获得高速发展,市场潜力不断释放.全球人脸识别市场渗透率快速攀升,产业正进入增长快车 ...

  • 30行Python代码实现蚂蚁森林自动偷能量(附源码)

    虽然我支付宝加了好多好友,平时有很多能量可以偷,但由于太懒,至今一棵树都没种成,所以心心念念把偷能量这事自动化.之前通过用代码模拟手机点按的方式,实现了 朋友圈自动点赞,但当时蚂蚁森林的操作流程要比朋 ...

  • 2021年人脸识别行业白皮书

    人脸识别是基于人的脸部特征信息进行身份识别的一种生物识别技术.随着深度学习.大数据和云计算等领域的不断突破,人脸识别也获得高速发展,市场潜力不断释放.主流的生物识别方式有:指纹识别.虹膜识别.语音识别 ...