7行Python代码的人脸识别

简介: 版权声明:本文为半吊子子全栈工匠(wireless_com,同公众号)原创文章,未经允许不得转载。 https://blog.csdn.net/wireless_com/article/details/64120516 随着去年alphago 的震撼表现,AI 再次成为科技公司的宠儿。
版权声明:本文为半吊子子全栈工匠(wireless_com,同公众号)原创文章,未经允许不得转载。 https://blog.csdn.net/wireless_com/article/details/64120516

AI

随着去年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中默认提供的haarcascade_frontalface_default.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的各种插件,如3方插件,视频插件等:

$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 的属性和函数名的字典,就表示成功;否则的话,还需要继续填坑。

这里写图片描述

目录
相关文章
|
14天前
|
开发框架 数据建模 中间件
Python中的装饰器:简化代码,增强功能
在Python的世界里,装饰器是那些静悄悄的幕后英雄。它们不张扬,却能默默地为函数或类增添强大的功能。本文将带你了解装饰器的魅力所在,从基础概念到实际应用,我们一步步揭开装饰器的神秘面纱。准备好了吗?让我们开始这段简洁而富有启发性的旅程吧!
25 6
|
7天前
|
数据可视化 Python
以下是一些常用的图表类型及其Python代码示例,使用Matplotlib和Seaborn库。
通过这些思维导图和分析说明表,您可以更直观地理解和选择适合的数据可视化图表类型,帮助更有效地展示和分析数据。
46 8
|
15天前
|
API Python
【Azure Developer】分享一段Python代码调用Graph API创建用户的示例
分享一段Python代码调用Graph API创建用户的示例
38 11
|
16天前
|
测试技术 Python
探索Python中的装饰器:简化代码,增强功能
在Python的世界中,装饰器是那些能够为我们的代码增添魔力的小精灵。它们不仅让代码看起来更加优雅,还能在不改变原有函数定义的情况下,增加额外的功能。本文将通过生动的例子和易于理解的语言,带你领略装饰器的奥秘,从基础概念到实际应用,一起开启Python装饰器的奇妙旅程。
31 11
|
12天前
|
Python
探索Python中的装饰器:简化代码,增强功能
在Python的世界里,装饰器就像是给函数穿上了一件神奇的外套,让它们拥有了超能力。本文将通过浅显易懂的语言和生动的比喻,带你了解装饰器的基本概念、使用方法以及它们如何让你的代码变得更加简洁高效。让我们一起揭开装饰器的神秘面纱,看看它是如何在不改变函数核心逻辑的情况下,为函数增添新功能的吧!
|
13天前
|
程序员 测试技术 数据安全/隐私保护
深入理解Python装饰器:提升代码重用与可读性
本文旨在为中高级Python开发者提供一份关于装饰器的深度解析。通过探讨装饰器的基本原理、类型以及在实际项目中的应用案例,帮助读者更好地理解并运用这一强大的语言特性。不同于常规摘要,本文将以一个实际的软件开发场景引入,逐步揭示装饰器如何优化代码结构,提高开发效率和代码质量。
39 6
|
17天前
|
Python
Python编程入门:从零开始的代码旅程
本文是一篇针对Python编程初学者的入门指南,将介绍Python的基本语法、数据类型、控制结构以及函数等概念。文章旨在帮助读者快速掌握Python编程的基础知识,并能够编写简单的Python程序。通过本文的学习,读者将能够理解Python代码的基本结构和逻辑,为进一步深入学习打下坚实的基础。
|
7月前
|
机器学习/深度学习 监控 算法
m基于深度学习网络的活体人脸和视频人脸识别系统matlab仿真,带GUI界面
m基于深度学习网络的活体人脸和视频人脸识别系统matlab仿真,带GUI界面
100 0
|
7月前
|
算法 安全 搜索推荐
深入浅出:使用Python实现人脸识别系统
在当今数字化时代,人脸识别技术已成为安全验证、个性化服务等领域的关键技术。本文将引导读者从零开始,逐步探索如何利用Python和开源库OpenCV来构建一个基础的人脸识别系统。本文不仅会详细介绍环境搭建、关键算法理解,还会提供完整的代码示例,帮助读者理解人脸识别的工作原理,并在实际项目中快速应用。通过本文,您将能够掌握人脸识别的基本概念、关键技术和实现方法,为进一步深入学习和研究打下坚实的基础。
|
存储 编解码 数据库
基于人脸识别的智能门锁系统
基于人脸识别的智能门锁系统
190 0