首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

人脸识别:半小时get到此炫酷技能

人脸识别:半小时get到此炫酷技能

在AI深度学习火遍全世界之时,拥有能驾驭其的能力(看起来)一定会帮助你在学习(装逼,不会翻车的那种!)生涯中更上一层楼。鉴于深度学习的复杂性(及小编水平有限),本文不会对其做系统的介绍,但一定会教会你如何利用现有资源。先放上成品图:

工具

毫无疑问,人脸识别程序的编写,以及训练具有很大的难度,因此,我们所要做的是站在巨人的肩膀上,使用一些前人做出的成果。首先,我们需要一种编程语言。

Python是目前人工智能领域中非常火的一种语言。python意为大蟒蛇,但其名字其实源于英国的喜剧团队monty python。

若读者对任何一种编程语言有一定了解,上手都会很迅速,因为python的语法非常简单。如果读者从未接触过编程,上手也会很迅速,还是因为python的语法很简单(所以不要被编程这两个字吓跑了)!python简单的语法也导致在写代码时需要了解一些琐碎的技巧,但这都是后话了。

准备工作

程序的运行需要软件的支撑,因此我们需要能够运行python程序的软件。python官方提供免费的软件,但小编不建议使用官方版本,因为它其实并不是很方便(并且界面太丑了)。

推荐使用anaconda(估计是为了保持队形,anaconda的意思也是蟒蛇,该软件的图标就是蟒蛇,虽然一点都不像)。anaconda同样是免费的,其优势会在后文提到,在这里小编先放上它的安装步骤。

首先,前往这个网站:https://www.anaconda.com/download/#macos(不需要梯子),会看到这样的界面

注意图中Windows/Mac/Linux的标志,选择对应的系统下载。

下载后,根据软件的指引安装,过程简单,在此不做赘述。安装完成后双击打开软件,来到其主页。

该页面的几个软件都非常实用,但我们只会用到Spyder,也就是右上角的那个。点击launch。

在经历了一段时间的安装后,你就能成功打开Spyder了,来到这样的界面:

上图中,左边的界面叫编辑器(editor),右下的界面叫console(控制台),右上的界面是帮助,有兴趣的读者可以了解一下,但本文不会用到。那么编辑器和控制台有什么不同?

在控制台输入的代码,按下回车后会立即执行,比如输入2+3,结果5会立即显示。对于一些简单的代码,控制台会提供一些便利,但如果是一长串,那就不太合适了。

这时候我们就需要编辑器了。在编辑器中输入的程序,只有当保存并点击运行后才会执行。

那么现在,小编就正式开始介绍“人脸识别”,先附上基础代码。

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);

这段代码并非小编所写,读者可在GitHub或者CSDN等多个网站上找到它。小编把它发出来的意义在于,几乎没有电脑可以运行它。因此,对它的修改是非常必要的。

如果我们直接运行它,第一个报错就是“ModuleNotFoundError“,也就是说,cv2这个模块(如果读者只是对人脸识别感兴趣,便不需要知道模块是什么,对python感兴趣者可自行上网查找)在环境中不存在。因为小编已经安装了这个模块,自然就不会报错。因此,小编选择了一个不知道是否存在的模块(nn)作为例子。

安装模块是一件很麻烦的事情(如果读者没有anaconda)。其繁琐程度让小编。。。还是不说了吧,放张图就一目了然了。

这是配置环境中的一步,在终端中安装homebrew(Windows用户可省略的一步),看着就瘆人对不对?(整个过程大概能写十几页)所以anaconda是非常重要的(不是广告,不是广告,不是广告)

anaconda能够让我们的生活变得非常简单。配置环境只需要进入environment选项(如下图所示)

找到我们需要的模块cv2,全称opencv,点击安装,跟随指引,等待一段时间后就好了!

但即便是安装了opencv模块,该程序在运行时依旧会报错,如下图所示:

把这个问题翻译成中国话,就是系统找不到在opencv模块中定义的detectMultiScale(这听起来依旧不像中国话)。再通俗一点,就是face_patterns = cv2.CascadeClassifier('/usr/local/opt/opencv3/share/OpenCV/haarcascades/haarcascade_frontalface_default.xml'这段路径错了,如下图所示

修改的方式很简单,在所有文件中查找“haarcascade_frontalface_default.xml“,右键显示其路径,再复制到上文的括号中。小编用的是mac系统,路径如下,可以参考/Users/bala/anaconda3/pkgs/opencv-3.3.1-py36h60a5f38_1/share/OpenCV/haarcascades/haarcascade_frontalface_default.xml'(mac用户将第二个分隔符后的bala改成自己电脑的用户名即可)

再次运行,依旧报错

这次的问题非常简单,输入图片(带人脸的)的路径不对,同理,将图片的路径填入sample image后。

做到这里依旧逃不出报错的命运,而且这一次的报错非常玄学,有时候报有时候不报,并且整个程序看起来没有问题。经过小编的多次尝试以及查找资料,发现是cv2.CascadeClassifier路径指代问题,因此修改代码为:

经历一系列完善,得到:

import cv2

filename=('/Users/bala/Desktop/input.jpeg')

face_cascade=cv2.CascadeClassifier('haarcascade_frontalface_default.xml')

face_cascade.load('/Users/bala/anaconda3/pkgs/opencv-3.3.1-py36h60a5f38_1/share/OpenCV/haarcascades/haarcascade_frontalface_default.xml')

img=cv2.imread(filename)

gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

faces=face_cascade.detectMultiScale(gray,1.3,5)

for (x,y,h,w) in faces:

img=cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)

cv2.namedWindow('faces Detected!')

cv2.imshow('faces Detected!',img)

cv2.imwrite('faces.jpg',img)

cv2.waitKey(0)

最后,小编对以上代码做一下简短的说明。

第一行,载入模块

第二行,待识别照片路径

第三行、第四行,加载分类器 cv2.CascadeClassifier

第五行,读取图片

第六行,将彩色图像转为灰度图像

第七、八、九行,进行识别

第10,11,12行,显示图片

最后一行再次多说两句,waitkey(0)的含义是显示的照片会一直等待按键的命令(enter),不按下enter它是不会被关掉的,并且无法输入新的程序。

效果图在这里:

Sheldon

以及牛顿

在人脸过小的情况下,该程序可能无法正常工作,比如下图:

但大多数时候,该程序对合影照片的识别是无压力的,比如:

喜欢就关注吧

参考文献:

“2. Built-in Functions¶.” 2. Built-in Functions - Python 3.6.5rc1 Documentation, docs.python.org/3/library/functions.html

M. Moussa, M. Leila, H. Khalid, M. Lolah, Detection of Silent Type I Choroidal Neovascular Membrane in Chronic Central Serous Chorioretinopathy Using En Face Swept-Source Optical Coherence Tomography Angiography. J Ophthalmol 2017, 6913980 (2017).

D. T. Nguyen, T. D. Pham, N. R. Baek, K. R. Park, Combining Deep and Handcrafted Image Features for Presentation Attack Detection in Face Recognition Systems Using Visible-Light Camera Sensors. Sensors (Basel) 18, (2018).

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180322G16WMB00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券