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,群里面有很多学习资料还有大神的直播分享,希望对大家有所帮助,另外在这个上面我回复可能稍微慢一点,但是你们有问题在评论区留言我都会帮你们解决的。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
Java并发机制底层实现原理-volatile
章节目录 volatile的实现原理与应用 1.volatile的实现原理与应用 Java source code->Java class->JVM->汇编指令->cpu执行 java中使用的并发机制依赖于JVM实现和cpu指令。 1.1 volatile应用 volatile-保证可见性 volatile 是轻量级 synchronized,在多处理器并发中保证了共享变量的"可见性"。 可见性含义: 当一个线程修改共享变量时,另一个线程能立即读到这个修改的值。 volatile-执行成本低 volatile不会引起线程上下文的切换和调度。 使用合适,volatile的使用代价会比synchronized小。 volatile 如何保证可见性 class A{ private volatile Singleton instance ; public A(){ instance = new Singleton(); } } 转成汇编代码,如下: movb, lock add1 上述对volatile共享变量instance进行写操作的时候会多出第二行汇编代码,Lo...
-
下一篇
还在找远控?来看我用十几行python代码写个简易远程控制
刚开始学习编程的同学可能经常会问:“我学了这个干什么用?买菜的时候掏出电脑来编个程序算算多少钱?” 其实,这跟大家的知识面和入门选择的语言有很大关系,大部分同学会选择C语言来入门编程,C语言虽然简洁,但是面向过程的编程方式总会让人觉得枯燥无味,无所适从。 那咱们现在做个有意思的,做个超级简易的远程控制软件,好吧~其实顶多算个脚本。 既然是远控,那就需要确定两个功能: 1、远程 即通过网络访问外部主机(包括内网),我们可以利用Python中封装好的 socket库,可以实现远程传输文本、文件、视频等。 Python socket详情介绍 2、控制 控制,最简单的理解就是执行命令,那么我们可以采用Python中的 os库,即可执行Linux shell 命令。 Python os详情介绍 下面就是代码,保存成.py文件,然后先执行server.py 再执行 client.py。 服务端,保存成 server.py #!/usr/bin/env python # -*- coding:utf-8 -*- import socket import os line=socket.socket(s...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2全家桶,快速入门学习开发网站教程
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- MySQL数据库在高并发下的优化方案