浅谈人工智能背景下基于 OpenCv的人脸识别技术
摘要:近年来,随着科技进步,人脸识别技术得到了空前高度的发展,广泛应用于安防、金融领域等部门。人脸识别技术是指通过计算机分析人脸,根据生物特征区分个体,是一项生物特征识别技术,随着人工智能技术的深入研究,基于原创的人脸识别算法,准确率达到98.52%,首次超越人眼识别能力(97.53%),文章分析了基于OpenCv的人脸识别模型构建的原理与过程,具有广阔的发展性。
关键词:人脸识别;OpenCv;CV2;中职智能电子教学;人工智能
引 言
随着人工智能、物联网等前沿技术的高速发展,不少职校开展了物联网专业、AI机器人、大数据专业等。智能时代已悄然到来,其中“刷脸”已成为新的风潮,人脸识别,是基于人的脸部特征信息进行身份识别的一种生物识别技术,该项技术涉及到大数据、虚拟网络、云计算、实体感应等多项核心技术,其中深度学习中的CNN卷积神经网络和RNN循环神经网络技术,对于中职学生的知识体系来说是讳莫如深的,教学开展难度较高,所以引入了python第
rectangle函数opencv三方库OpenCv,OpenCv是计算机视觉库,里面有大量的训练好的模型,自带数据库和检测分类器,对于智能电子专业学生学习人工智能视觉模块有非常重要的意义。
一、OpenCv简介
OpenCv是一个基于BSD许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上,它轻量级且高效,同时可支持C ++,Python,Java和MATLAB等语言的编写,实现图像处理和计算机视觉方面的很多通用计算。
(一)OpenCv中的人脸特征检测分类器
HAAR哈尔特征是一种反映图像的灰度变化的,像素分模块块求差值的一种特征。它分为四类:边缘特征、线性特征、中心特征和对角线特征。用黑白两种矩阵框组合成特征模块,在特征模块版内用黑矩形像素和减去白矩形像素和来表示这个模板的特征值。人脸部的一些特征能由矩形模块差值特征简单描述,如:眼睛要比脸颊颜要深,鼻梁两侧要比鼻梁颜要深,嘴巴比周围颜要深等,但矩形特征只对一些简单的图形结构,如边
缘、线段较为敏感,所以只描述特定方向(水平、垂直、对角)上的明显像素模块梯度变化结构。
(二)OpenCv中的级联分类器
OpenCv的级联分类器里面有自行训练好的模型,直接调用即可,如人脸识别,人眼识别,左眼识别、右眼识别、微笑识别,上半身识别等不同生物特征的识别,当然,OpenCv也提供不同模型可供学习者自行设计模型。学习理论和操作难度对于中职的学生是非常适中的。在此文章我们可以直接调用其中的人脸识别。
二、基于OpenCv人脸识别模型的设计流程
此人脸识别系统运行流程为:调用电脑摄像头,摄像头初始化,载入级联分类器,读取每一帧图像数据,级联分类器对图像做多尺度检测,按照坐标圈出人脸,结束,主要流程图如下:
1.
载入人脸级联分类器
首先我们要做人脸识别,就必须下载配套的人脸识别第三方库,OpenCv视觉库因为它适用于C ++,Python,Java和MATLAB等不同语言的编写,但是我们此次编写使用的编程语言是Python,所以我们必须从python,下载配套的OpenCV的whl文件,或则直接在PyCharm编译器下下载CV2,即可得到匹配使用的视觉库。然后 调用CV2下的CascadeClassifier函数的haarcascade_l,这是训练好的人脸模型,调用方式为到存放人脸级联分类器的地址进行调用,代码如下:face_cascade=cv2.CascadeClassifier(cv2.data.haarcascades+'h aarcascade_frontalface
_l')
如果没有调用成功,须根据地址去检查人脸识别模型函数是否下载成功,如果没下载成功也可以用pip下载。
Cv2里面的haarcascade的级联分离器除了有人脸分类器,还有眼睛、左眼、右眼、上半身等不同的级联分类器,如l、l、l等丰富多彩的已训练好的模型。这个人脸识别系统可进行替代兼容。
(二)读取每一帧图像数据
打开视像头,我们获取的得到的是实时的视频流,对人脸进行识别的基础是需要把一帧帧的视频转变为一张张图进行处理的。代码一运行,循环打开电脑摄像头,则用ad()函数获取摄像头拍摄到的画面,频率。窗口大小为d默认值320*240,frame为视频流的频率。代码如下:
ret,ad() #获取摄像头拍摄到的画面
(三)级联分类器对图像做人脸检测
人脸识别最重要的任务是人脸检测,这也是人脸识别系统最关键的一步。我们的任务是,在摄像头打开后,由人脸出现,则会对人脸进行框选。所以首先捕捉到人脸,才能在捕捉到的人脸上进行框选,在此人脸识别系统中,所用的人脸检测方式是使用Haar级联分类器,这是一种高效目标检测方法。这种机器学习方法基于大量正类(人脸图像),负类(不带人脸的图像)来训练分类器和从中提取特征。
在此模型中,我们需要从一直开着的视频中捕获动态的人脸图像,用face_cascade.detectMultiScale()函数获取人脸,同时我们把人脸放大倍数设置为1.3,5次得到一张人脸,经试验5次为较为稳定的获得频率,可以根据不同的系统频率进行调整。每五个频率获取一张人脸图赋值为img。
faces = face_cascade.detectMultiScale(frame, 1.3, 5)
img=frame
(四)按照坐标进行人脸标记
这是代码的核心功能部分,用上述函数捕捉完图像的人脸后,对图像中的人脸进行标志,这里用的是蓝矩形框,利用的是angle()函数,原理是在faces上到脸部的坐标轴,x,y为脸部框选的左下角,w为长度,h为框图的宽,所以人脸标记范围就是y轴范围为y-y+h,x轴范围为x-x+w,在脸进行画框,框的设置为蓝,线条宽度为2.运行代码如下:da
for (x, y, w, h) in faces:
img = angle(img, (x, y), (x + w, y + h),
(255, 0, 0,), 2)
face_area = img[y:y + h, x:x + w]
(五)展示与结束
当所有的操作完毕,我们需要把人脸框展示在视频流上。我们用cv2.inshow()函数,在摄像头启动后识别出人脸,并用蓝方框进行框选,这就达到了人脸识别的功效.
如果想要退出,这里用的是cv2.waitKey()函数,键盘检测‘q’键被a持续按下5ms后,触发退出系统,关闭视像头并退出人脸识别系统。退出代码一定要写,否则会进入死循环,导致电脑乱码,大家可以根据需要改变‘q’值,展示与结束代码如下:
cv2.imshow('frame2',img) #实时展示效果画面
if cv2.waitKey(5) & 0xFF == ord('q'): #输入‘q’结束检测
break
三、拓展与分析
为了增加教学的丰富性与难度,我们还可以把cv2下的其他训练模型也进行调用,作为学生的拓展任务,提高学生的应用和创新精神,可以再进行眼睛的识别、微笑的识别、上半身的识别等。在这只讲述眼睛识别。
眼睛识别原理:是基于人脸识别技术,当上面步骤的人脸的区域范围坐标被框选出来后,我们再在着人脸的区域,进行眼睛的识别,这样子可以大幅度的提高计算机计算的效率,这里设置的用绿进行框选,框选线条宽度设置为1。整体代码如下:
for (x, y, w, h) in faces:
img = angle(img, (x, y), (x + w, y + h),
(255, 0, 0,), 2)
face_area = img[y:y + h, x:x + w]
eyes= eye_cascade.detectMultiScale(face_area,1.3,15)
for (ex, ey, ew, eh) in eyes:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论