Python黑科技:50行代码运用Python+OpenCV实现人脸追踪

嗨,我最亲爱的伙计们,很高兴我们又见面了。

首先先感谢朋友们的关注。当然我更希望认识与计算机相关的领域的朋友咱们一起探讨交流。重点说一下,我是真人,不是那些扒文章的自媒体组织,大家可以相互交流的!

本篇文章我们来讲一下关于AI相关的人脸追踪,人脸识别相关的一些知识。当然本篇教程为(上)部分,讲一下利用python+opencv来实现人脸识别与追踪,明后天出(下)部分,用python来通过指纹对比实现人脸验证、人脸解锁(大家感兴趣的可以提前关注哦)。

这两节课呢,代码量都不是很多,鄙人尽量多注释点,便于大家理解。那我们就不多啰嗦废话了,直接上干货!

OpenCV:

opencv目前来讲是十分流行的视觉库,而且可以支持多语言。说到opencv就不得不说它的cascades分类器。

如果我们要判断一张图片是不是有一张脸,早期方式是通过成千上万的分类器去从头匹配到尾,这样看并没有什么什么毛病,但判断的图片多了呢?那可能需要猴年马月。opencv的cascades呢,就把这些用来判断人脸特征的容器划分成多块层层匹配,到一层不匹配就被丢弃。

这好比一群人去公司面试,公司第一个要求是只要男人,那一批女人就走了,公司说只要本科,一批专科走了,公司说要两年工作经验的,又会走一批,直到最后。这样的工作量比每个人面试不管男女都过一遍流程轻松的多。

环境拓扑:

操作系统:windows7

python版本:2.7.14

opencv版本:3.x

环境配置:

1.安装python(额...这个当我没说)

2.安装Opencv

这个从官网下载就OK啦

下载完之后直接解压就行,推荐解压到跟你的python安装的父路径。

3.使用pip安装numpy

打开cmd输入:

pip install numpy

进行安装,安装完毕后会给提示。

4.找到你的opencv安装路径(比如我的是D盘)

复制D:opencvopencv3.xuildpython.7\x64路径下的cv2.py

注意:我的windows版本为64位所以我选择的是X64,如果你的是32位的话你需要选择X86文件夹下的cv2.pyd

复制完之后,粘贴到你的python安装路径下的Lib/site-packages这个文件夹下。

完成上面这些就基本OK啦,我们在写代码之前先来测试一下,环境是否配置成功。

在CMD命令行下运行python:

import numpy

import cv2

如果没有报错,说明安装完成。

实现原理:

1.调用计算机摄像头

cv2.Videocamture(0)

2.将摄像头数据按帧来取(相当于给每一帧图片的人脸加框框)

cam.red()

3.将每一帧摄像头记录的数据带入opencv让classifier去判断人脸

detectMultiScale()

4.如果存在人脸给人脸标记画框

cv2.rectangle()

5.输出画框后的帧动画

cv2.imshow('My Camera',frame)

代码实现:

第一步定义一个识别函数:

先放图片,这个地方比较重要,我在下面会详细的说一下。

6-7行代码说明:

首先创建classifier,为什么要弄这个呢?

引用的haarcascade开头的文件是opencv里面关于人脸级联分类器,你在opencv文件夹下的sourcesdatahaarcascades可以看到:

说明功能:

人脸检测器(默认):haarcascade_frontalface_default.xml

人脸检测器(快速Harr):haarcascade_frontalface_alt2.xml

人脸检测器(侧视):haarcascade_profileface.xml

眼部检测器(左眼):haarcascade_lefteye_2splits.xml

眼部检测器(右眼):haarcascade_righteye_2splits.xml

嘴部检测器:haarcascade_mcs_mouth.xml

鼻子检测器:haarcascade_mcs_nose.xml

身体检测器:haarcascade_fullbody.xml

人脸检测器(快速LBP):lbpcascade_frontalface.xml

1:haarcascade_frontalface_alt.xml

Stump-based 20x20 gentle adaboost frontal face detector.

2:haarcascade_frontalface_alt2.xml

Tree-based 20x20 gentle adaboost frontal face detector.

3:haarcascade_frontalface_alt_tree.xml

Stump-based 20x20 gentle adaboost frontal face detector.This detector uses tree of stage classifiers instead of a cascade

4:haarcascade_frontalface_default.xml

Stump-based 24x24 discrete(?) adaboost frontal face detector.

以上这四个鄙人都测试过,haarcascade_frontalface_alt.xml这个效果是最好的,其它的大家可以单个测试。

设定灰度:

灰度的设定是为了增强面部轮廓的对比度,这是增加精度必不可少的。

核心代码解剖:

DetectMultiScale 函数是一个检测物体的通用函数,我们介绍一下:

gray:这是转换成灰度后的图片

scaleFactor:补偿参数,一般设置值为1.1-1.5比较好,效果大家自己改着看

minNeighbors:对当前其周围有多少物体进行定义

minSize:设定窗口大小

flags:略抽象,选择默认或者上图即可

画方框:

定义xywh利用for循环读取faces变量里面的坐标,然后通过rectangle()函数进行画方框。

代码下部分:

OK,写完代码之后,我们把上部分代码跟下部分代码拼凑起来,运行下试一下:

大家凑合看吧,我笔记本cam有点渣,不过随着人的晃动,都可以完美的识别出来,由于没法上视频,大家就自行测试吧。

最后再强调一点:明后天出(下)部分,用python来通过指纹对比实现人脸验证、人脸解锁(大家感兴趣的可以提前关注哦)。

大家如果有问题都可以评论区留言,另外如果需要一个学习交流的平台可以加小编的群:719+139+688,群里面有很多学习资料还有大神的直播分享,希望对大家有所帮助,另外在这个上面我回复可能稍微慢一点,但是你们有问题在评论区留言我都会帮你们解决的。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏ATYUN订阅号

【实践操作】在iPhone上创建你的第一个机器学习模型

最近的苹果iPhone X发布会,你会看到iPhone X有一些很酷的功能,比如FaceID,Animoji和AR。我们需要弄明白建立这样一个系统需要什么。 当...

37560
来自专栏Soul Joy Hub

tensorflow架构

TensorFlow 又是好久没有写博客了,上班以来,感觉时间过得飞快,每天时间很紧,过得有点累,不知道自己的博客能坚持到何时,且行且珍惜。 本片博文是参...

39190
来自专栏企鹅号快讯

如何对机器学习代码进行单元测试?

作者|Chase Roberts 译者|庄道玉 编辑|Emily 目前,关于神经网络代码,并没有一个特别完善的单元测试的在线教程。甚至像 OpenAI 这样的站...

285100
来自专栏算法channel

机器学习|PageRank算法原理

01 — 网页排名主要考虑因素 学术界评判学术论文重要性通用方法是看论文的引用次数,原理很多时候都是可以通用的,学术界的思想可以应用到工业界。 google创始...

37060
来自专栏机器之心

资源 | Facebook开源人工智能框架ParlAI:可轻松训练评估对话模型

选自GitHub 机器之心编译 参与:吴攀、晏奇 Facebook 近日在 GitHub 上开源了一个可用于在多种开放可用的对话数据集上训练和评估人工智能模型...

35680
来自专栏ATYUN订阅号

【学术】如何在15分钟内建立一个深度学习模型?

我们正在开源Lore,它是一个框架,可供机器学习研究人员使用。 Lore地址:https://github.com/instacart/lore 机器学习常常给...

52070
来自专栏AI科技大本营的专栏

学术 | DeepMind最新研究:使用更简单的环境就能检测AI是否安全

随着人工智能系统在现实生活中变得通用和实用,确保系统的安全运行变得越来越重要。迄今为止,大部分技术人工智能安全研究都集中在,对不安全行为的性质和原因的理论学习上...

28750
来自专栏PPV课数据科学社区

一万元搭建深度学习系统:硬件、软件安装教程,以及性能测试

Macbook这种轻薄的笔记本,是搞不了深度学习的。亚马逊P2云服务,会给堆积越来越多的账单,换个便宜的服务,训练时间又太长…… 没办法,已经十多年没用过台式机...

34540
来自专栏人工智能LeadAI

OpenCV人脸识别之一:数据收集和预处理

本系列人脸识别文章用的是opencv2,最新版的opencv3.2的代码请参考文章: 《OpenCV之识别自己的脸——C++源码放送》; 《人脸识别源码运行指南...

98850
来自专栏SDNLAB

ONOS:负载均衡路由算法及应用开发(一)

一、应用介绍 当新流量发起时,本应用将为其选择一条路由路径,这条路径具有全局负载均衡意义上的最小权值(Weight/Cost)。 本应用即将开源在笔者的Gith...

38770

扫码关注云+社区

领取腾讯云代金券