手把手带你体验Python实现人脸识别

简介: 前几天唠了一些Python的基础知识,确实无聊,但是无聊归无聊确实有用.今天来搞点有趣的事情--利用计算机视觉实现人脸检测和识别.计算机视觉是人工智能的一个重要分支.计算机视觉中的人脸识别现在是我们生活最常出现的功能,比如刷脸打卡,这是每个打工人上班必备.人脸识别门禁,身份验证等等.看过钢铁侠的童鞋是否还记得,钢铁侠初次飞行时.他的人工智能系统头盔中显示了道路上的车辆信息.包括车辆的品牌和车中的人物,当时我们把它当成科幻来看,其实在现实中我们利用计算机视觉技术完全可以做到,而且我们目前已在运用,比如停车场系统车辆自动识别闸机.人流量检测,还有我们的无人驾驶汽车,都在使用计算机视觉技术中的人

1.前言


前几天唠了一些Python的基础知识,确实无聊,但是无聊归无聊确实有用.今天来搞点有趣的事情--利用计算机视觉实现人脸检测和识别.


计算机视觉是人工智能的一个重要分支.计算机视觉中的人脸识别现在是我们生活最常出现的功能,比如刷脸打卡,这是每个打工人上班必备.人脸识别门禁,身份验证等等.看过钢铁侠的童鞋是否还记得,钢铁侠初次飞行时.他的人工智能系统头盔中显示了道路上的车辆信息.包括车辆的品牌和车中的人物,当时我们把它当成科幻来看,其实在现实中我们利用计算机视觉技术完全可以做到,而且我们目前已在运用,比如停车场系统车辆自动识别闸机.人流量检测,还有我们的无人驾驶汽车,都在使用计算机视觉技术中的人物检测识别技术.在现实当中,计算机视觉技术的使用远不止如此.例如,军事导弹的巡航系统,交通道路的监控,医学影像的处理,机器人,还有目前最火的VR全息.是不是非常炫酷,计算机视觉涉及到的东西太多,太高深了.一篇文章道不尽,而且毕竟我也能力有限,本文仅从应用的角度来体验一下使用计算机视觉技术实现人脸识别


2.准备


2.1视觉库OpenCV


计算机视觉的学习离不开OpenCV.OpenCV是非常著名的视觉库,相信很多小伙伴都听说过它,英文全称Open Source Computer Vision Library.OpenCV于1999年由Intel建立,如今由Willow Garage提供支持。OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、MacOS操作系统上。它轻量级而且高效——由一系列 C 函数和少量C++类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。通过openCV可实现计算机图像、视频的编辑。广泛应用于图像识别、运动跟踪、机器视觉、特征提取等领域。

说明:本文环境基于Python3.8+windows7 64位系统+OpenCV4.5


安装OpenCV:

pip install opencv-python

也可下载安装包进行安装(https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple/opencv-python/

网络异常,图片无法展示
|


下载对应版本,解压后执行以下命令:

pip install opencv_python-****-win_amd64.whl

引入:

importcv2

注意:引入包是cv2,不是opencv

3.视频捕捉

体验下捕捉摄像头视频:

importcv2capture=cv2.VideoCapture(0,cv2.CAP_DSHOW)
whileTrue:
res, frame=capture.read()
cv2.imshow('Output', frame)
ifcv2.waitKey(1) ==ord('q'):
break


利用VideoCapture可以打开本机文件夹内的视频文件或者启用摄像装置,本例就是启用摄像头。使用默认参数0,摄像头打开之后就可以看到一个连续的动态画面,我们分析时对视频的处理需要逐帧画面,所以这里使用while循环来实现对视频帧的逐一提取。我们还可以利用cvtColor函数进行颜色转换,比如转化为灰度图(cv2.COLOR_BGR2GRAY),最后使用waitKey()函数监控键盘操作来退出程序,这里定位光标按字母q键就会退出程序


网络异常,图片无法展示
|

注意:如果项目中与dshow相关,dshow显示的摄像头顺序与opencv默认的打开顺序不同,则可以使用第二个参数与之对应,可能会出先现以下错误


CvCapture_MSMF::initStreamFailedtosetmediaType (stream0, (640x480@30) MFVideoFormat_RGB24(unsupportedmediatype)


则需要传入第二个参数:cv2.CAP_DSHOW


摄像头获取的视频画面:

网络异常,图片无法展示
|


整个流程如下:

网络异常,图片无法展示
|



4.人脸检测与识别


前面我们初步感受了opencv的基本使用,我们继续是opencv实现人脸识别.如今人脸识别已经是各大企业,单位,机场,地铁等场所的身份认证流程.人脸识别系统顾名思议就是采集人脸图像并与数据库中的已采集过的人脸图像作比对.人脸识别系统大概的工作流程如下图所示:

网络异常,图片无法展示
|


人脸图像采集是通过摄像机对进行信息采集的人员进行拍摄,形成面部图像文件,保存在数据库中;预处理是因为在不同的环境中对人脸的采集受到光线等诸多外部因素影响,不利用后续的特征提取以及与数据库进行比对,所以要对采集到的人脸图像进行预处理.这个预处理操作就是灰度变化和直方图均衡化以及光线补偿,归一化等操作.

特征提取是基于人的面部器官进行建模,比如五官之间的距离,各个特征之间的角度变化关系等等

最后是对人脸识别操作,通过对摄像头采集到的人脸特征模型与数据库中已经采集过的并保存的数据进行比对.确定身份

人脸识别比较复杂,本文只通过人脸识别系统中的人脸检测环节来体验人脸识别

素材是网上找的一张星爷的照片:


网络异常,图片无法展示
|


importcv2# 采集到的图人脸图片imgfile='r1.jpg'# 获取人脸实例训练数据face_cascade=cv2.CascadeClassifier(r'E:\Anaconda3\Lib\site-packages\cv2\data\haarcascade_frontalface_default.xml')
# 读取图片img=cv2.imread(imgfile)
# 灰度转换gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
# 检测人脸faces=face_cascade.detectMultiScale(gray,1.3,5)
for(x,y,w,h) infaces:
cv2.rectangle(img,(x,y),(x+w,y+w),(0,255,0),2)
cv2.putText(img,'zhouxc',(x+10,y-10),cv2.FONT_HERSHEY_SIMPLEX,1.2,(0,255,0),1)
# 显示图像中人脸cv2.namedWindow('find face')
cv2.imshow('find face',img)
cv2.imwrite('findfaces.jpg',img)
cv2.waitKey(0)
cv2.destroyAllWindows()


网络异常,图片无法展示
|


获取人脸实例训练数据的环节中的CascadeClassifier()函数是一种级联分类器.这里的是haarcascade_frontalface_default.xml,这个文件在'Python安装目录\Lib\site-packages\cv2\data\'下.一定要指定文件或者把文件复制到当前目录.否则使用默认的路径可能会报错


灰度转换后,接着使用detectMultiScale()函数可以检测出照片中的人脸.


总结


我们大致了解了人脸识别系统的工作过程,人脸识别过程看似很简单,但是里面包含了很多的算法和模型,涉及到的知识非常之多,需要考虑到的情况更加复杂,如人的衰老,体型的胖瘦,是否化妆,头发的遮挡等等都需要考虑到.后续还会随着技术的不断深入,可能还有很多可以优化的环节


人脸识别只是计算机视觉领域的一个小成果,计算机视觉的发展远非于此,未来还会有更多更好的发展,就像十几年前钢铁侠只是科幻,如今却是所有人触手可及的一种科技

题外话:人脸识别技术为人们提供了很大的便利,同时不可避免存在安全漏洞.比如:我们在社交网络上上传我们的照片,不良商家就可以利用人脸识别系统对用户进行个人信息的窃取,就好像之前有新闻报道:一些楼盘售楼部通过监控视频对看房的客户通过人脸识别来进行获取该客户的购房基本信息,通过售楼处人脸识别系统识别到与该名消费者相似人员曾经独自来过售楼处看房,判定其为售楼处自访客户,非中介渠道客户,无法享受相关优惠。这几乎是所有人都很反感的操作,报道还称有客户知道售楼部有人脸识别这回事之后甚至戴头盔去看房.那么人脸识别技术和反人脸识别技术,究竟哪个对我们生活更有好处?是否应该为了保护个人信息而弃用人脸识别系统呢?


目录
相关文章
|
2月前
|
算法 安全 搜索推荐
深入浅出:使用Python实现人脸识别系统
在当今数字化时代,人脸识别技术已成为安全验证、个性化服务等领域的关键技术。本文将引导读者从零开始,逐步探索如何利用Python和开源库OpenCV来构建一个基础的人脸识别系统。本文不仅会详细介绍环境搭建、关键算法理解,还会提供完整的代码示例,帮助读者理解人脸识别的工作原理,并在实际项目中快速应用。通过本文,您将能够掌握人脸识别的基本概念、关键技术和实现方法,为进一步深入学习和研究打下坚实的基础。
|
4月前
|
算法 计算机视觉 开发者
OpenCV中使用Eigenfaces人脸识别器识别人脸实战(附Python源码)
OpenCV中使用Eigenfaces人脸识别器识别人脸实战(附Python源码)
74 0
|
1天前
|
机器学习/深度学习 存储 监控
数据分享|Python卷积神经网络CNN身份识别图像处理在疫情防控下口罩识别、人脸识别
数据分享|Python卷积神经网络CNN身份识别图像处理在疫情防控下口罩识别、人脸识别
|
4月前
|
计算机视觉 开发者 Python
OpenCV中Fisherfaces人脸识别器识别人脸实战(附Python源码)
OpenCV中Fisherfaces人脸识别器识别人脸实战(附Python源码)
66 0
|
2月前
|
机器学习/深度学习 XML 数据库
深入浅出:使用Python实现人脸识别系统
在本文中,我们将探索如何使用Python和开源库OpenCV来构建一个基础的人脸识别系统。不同于传统的技术文章摘要,这里我们将以故事化的方式引入问题背景,带领读者从零开始,逐步深入到人脸识别技术的核心原理和实现过程中。我们将讨论人脸识别技术的基本概念、所面临的挑战、以及如何通过Python代码解决这些问题。最终,读者将获得足够的知识和技能,去实现一个简单的人脸识别系统,为进一步的学习和研究打下坚实的基础。
|
2月前
|
算法 计算机视觉 开发者
如何在Python中使用OpenCV实现人脸识别
人脸识别技术在当今社会得到了广泛的应用,如何在Python中使用OpenCV实现人脸识别成为了很多开发者关注的话题。本文将介绍如何使用OpenCV库进行人脸检测和人脸识别,并提供完整的代码示例。
|
3月前
|
算法 计算机视觉 Python
python实战演练之电梯人脸识别
python实战演练之电梯人脸识别
|
4月前
|
人工智能 定位技术 API
【Python】初学者也可以实现的人脸识别系统-0x1
【Python】初学者也可以实现的人脸识别系统-0x1
49 0
|
4月前
|
算法 计算机视觉 开发者
OpenCV中LBPH人脸识别器识别人脸实战(附Python源码)
OpenCV中LBPH人脸识别器识别人脸实战(附Python源码)
97 0
|
4月前
|
机器学习/深度学习 TensorFlow 算法框架/工具
【Python深度学习】Tensorflow+CNN进行人脸识别实战(附源码和数据集)
【Python深度学习】Tensorflow+CNN进行人脸识别实战(附源码和数据集)
143 0