位置: IT常识 - 正文

基于OpenCV的图片和视频人脸识别(基于opencv的图像处理)

编辑:rootadmin
基于OpenCV的图片和视频人脸识别

推荐整理分享基于OpenCV的图片和视频人脸识别(基于opencv的图像处理),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:opencv自带图片,opencv支持的图片格式,opencv自带图片,基于opencv的图像处理,opencv自带图片,opencv自带图片,基于opencv的图像识别,基于opencv的图像识别,内容如对您有帮助,希望把文章链接给更多的朋友!

目录

🥩前言

🍖环境使用

🍖模块使用

🍖模块介绍

🍖模块安装问题:

🥩人脸检测

🍖Haar 级联的概念

🍖获取 Haar 级联数据

🍗 1.下载所需版本

🍗 2.安装文件

 🍗 3.XML文件名称

🥩使用 OpenCV 进行人脸检测

🍖静态图像中人脸检测

🍗【示例】识别图片中的人脸

🍗 运行效果:

 🍗【示例】识别图片中多张人脸

🍗 运行效果:

 🍖视频中的人脸检测

🍗【示例】识别视频中人脸

🍗 运行效果:

🥩人脸识别

🍖训练数据

🍗【示例】训练数据

🍗【示例】基于 LBPH 的人脸识别

🍗 运行效果:

🥩总结

🥩前言

我们身边的人脸识别有车站检票,监控人脸,无人超市,支付宝人脸支付,上班打卡,人脸解锁手机。

人脸检测是人脸识别系统组成的关键部分之一,其目的是检测出任意给定图片中的包含的一个或多个人脸,是人脸识别、表情识别等下游任务的基础。人脸识别是通过采集包含人脸的图像或视频数据,通过对比和分析人脸特征信息从而实现身份识别的生物识别技术,是人脸识别系统的核心组件

随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容,基于OpenCV的图片和视频人脸识别。介绍Haar的概念,以及如何对图片和视频中进行人脸检测,以及如何训练我们自己的模型,并在自己的模型下进行人脸识别。

🍖环境使用python 3.9pycharm🍖模块使用opencv-python🍖模块介绍opencv

关于OpenCv

Opencv是一个开源的的跨平台计算机视觉库,内部实现了图像处理和计算机视觉方面的很多通用算法,对于python而言,在引用opencv库的时候需要写为import cv2。其中,cv2是opencv的C++命名空间名称,使用它来表示调用的是C++开发的opencv的接口。

目前人脸识别有很多较为成熟的方法,这里调用OpenCv库,而OpenCV又提供了三种人脸识别方法,分别是LBPH方法、EigenFishfaces方法、Fisherfaces方法。本文采用的是LBPH(Local Binary Patterns Histogram,局部二值模式直方图)方法。在OpenCV中,可以用函数cv2.face.LBPHFaceRecognizer_create()生成LBPH识别器实例模型,然后应用cv2.face_FaceRecognizer.train()函数完成训练,最后用cv2.face_FaceRecognizer.predict()函数完成人脸识别。

CascadeClassifier,是Opencv中做人脸检测的时候的一个级联分类器。并且既可以使用Haar,也可以使用LBP特征。其中Haar特征是一种反映图像的灰度变化的,像素分模块求差值的一种特征。它分为三类:边缘特征、线性特征、中心特征和对角线特征。

🍖模块安装问题:如果安装python第三方模块:

win + R 输入 cmd 点击确定, 输入安装命令 pip install 模块名 (pip install requests) 回车

在pycharm中点击Terminal(终端) 输入安装命令

安装失败原因:失败一: pip 不是内部命令

                解决方法: 设置环境变量

失败二: 出现大量报红 (read time out)

                解决方法: 因为是网络链接超时, 需要切换镜像源

清华:https://pypi.tuna.tsinghua.edu.cn/simple    阿里云:https://mirrors.aliyun.com/pypi/simple/    中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/    华中理工大学:https://pypi.hustunique.com/    山东理工大学:https://pypi.sdutlinux.org/    豆瓣:https://pypi.douban.com/simple/    例如:pip3 install -i https://pypi.doubanio.com/simple/ 模块名失败三: cmd里面显示已经安装过了, 或者安装成功了, 但是在pycharm里面还是无法导入

                解决方法: 可能安装了多个python版本 (anaconda 或者 python 安装一个即可) 卸载一个就好,或者你pycharm里面python解释器没有设置好。

🥩人脸检测🍖Haar 级联的概念

        Haar级联是一种基于Haar特征的目标检测方法,它由多个级联分类器组成,每个级联分类器由多个弱分类器组成。在目标检测中,Haar级联通过逐级检测,将输入图像分成多个子区域,然后在每个子区域中应用Haar特征进行分类。这种级联的方式可以大大减少计算量,提高检测速度,同时保证较高的准确性。Haar级联在人脸识别、车辆识别等领域有着广泛的应用。

        提取出图像的细节对产生稳定分类结果和跟踪结果很有用。这些提取的结果被称为特征,专业的表述为:从图像数据中提取特征。虽然任意像素都可以能影响多个特征,但特征应该比像素少得多。两个图像的相似程度可以通过它们对应特征的欧氏距离来度量。

基于OpenCV的图片和视频人脸识别(基于opencv的图像处理)

        Haar 特征是一种用于实现实时人脸跟踪的特征。每一个 Haar 特征都描述了相邻图像区域的对比模式。例如,边、顶点和细线都能生成具有判别性的特征。

🍖获取 Haar 级联数据🍗 1.下载所需版本

        首先我们要进入 OpenCV 官网:https://opencv.org 下载你需要的版本。点击 RELEASES

(发布)。如下图所示:

         由于 OpenCV 支持好多平台,比如 Windows, Android, Maemo, FreeBSD, OpenBSD, iOS,

Linux 和 Mac OS,一般初学者都是用 windows,点击 Windows。

        点击 Windows 后跳出下面界面,等待 5s 自动下载。

🍗 2.安装文件

        文件下载好后,然后双击下载的文件,进行安装,实质就是解压一下,解压完出来一个文件夹,其他什么也没发生。安装完后的目录结构如下。其中 build 是 OpenCV 使用时要用到的一些库文件,而 sources 中则是 OpenCV 官方为我们提供的一些 demo 示例源码。

        在 sources 的一个文件夹 data/haarcascades。该文件夹包含了所有 OpenCV 的人脸检测的

XML 文件,这些可用于检测静止图像、视频和摄像头所得到图像中的人脸。

 🍗 3.XML文件名称

人脸检测器(默认):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

🥩使用 OpenCV 进行人脸检测🍖静态图像中人脸检测

        人脸检测首先是加载图像并检测人脸,这也是最基本的一步。为了使所得到的结果有意义,可在原始图像的人脸周围绘制矩形框。

🍗【示例】识别图片中的人脸

        我们首先来识别图片中的人脸,我们先识别图片中的一张人脸,假如,我们测试的照片有两张人脸的话,就会只显示一个人脸。

import cv2 as cvdef face_detect_demo(): #将图片转换为灰度图片 gray=cv.cvtColor(img,cv.COLOR_BGR2GRAY) #加载特征数据 face_detector=cv.CascadeClassifier('E:\Program Files (x86)\Python39\Lib\site-packages\cv2\data\haarcascade_frontalface_default.xml') faces=face_detector.detectMultiScale(gray) for x,y,w,h in faces: cv.rectangle(img,(x,y),(x+w,y+h),color=(0,255,0),thickness=2) cv.imshow('result',img)#加载图片img=cv.imread('text1.jpg')face_detect_demo()cv.waitKey(0)cv.destroyAllWindows()🍗 运行效果:

 

 🍗【示例】识别图片中多张人脸

        ​​​​​​​我们前面识别了图片中的一张人脸,假如,我们想测试的照片有两张人脸的话,怎么办?前面的代码就实现不了了,我们来看看多张人脸是怎么实现的。

import cv2 as cvdef face_detect_demo(): #将图片灰度 gray=cv.cvtColor(img,cv.COLOR_BGR2GRAY) #加载特征数据 face_detector = cv.CascadeClassifier( 'E:\Program Files (x86)\Python39\Lib\site-packages\cv2\data\haarcascade_frontalface_default.xml') faces = face_detector.detectMultiScale(gray) for x,y,w,h in faces: print(x,y,w,h) cv.rectangle(img,(x,y),(x+w,y+h),color=(0,0,255),thickness=2) cv.circle(img,center=(x+w//2,y+h//2),radius=w//2,color=(0,255,0),thickness=2) #显示图片 cv.imshow('result',img)#加载图片img=cv.imread('text2.jpg')#调用人脸检测方法face_detect_demo()cv.waitKey(0)cv.destroyAllWindows()🍗 运行效果:

        我们找了一个多张人脸的照片,相信大家对这张图片并不陌生,我们可以清晰的看到,我们准确无误的识别到了每一张人脸。

🍖视频中的人脸检测

        视频是一张一张图片组成的,在视频的帧上重复这个过程就能完成视频中的人脸检测。

视频中的人脸检测可以通过以下步骤实现:

图像预处理:对输入的视频帧进行预处理,包括图像增强、图像滤波、图像二值化等操作,以增强图像的对比度和亮度,减少噪声的影响,提高图像的质量。特征提取:使用图像处理算法,如SIFT、SURF、ORB等,提取视频帧中的特征,如人脸的位置、大小、形状、姿态等信息,作为人脸检测的基础。人脸检测:使用人脸检测算法,如Haar Cascade、LBPH、LBPH-SIFT等,对视频帧中的图像进行人脸检测,得到检测到的人脸的位置、大小、形状等信息。人脸跟踪:使用人脸跟踪算法,如OpenCV中的人脸跟踪算法,对检测到的人脸进行跟踪,得到人脸的位置、大小、形状等信息。人脸识别:使用人脸识别算法,如支持向量机、深度学习等,对人脸跟踪得到的人脸进行识别,得到人脸的身份信息。🍗【示例】识别视频中人脸

        视频是一张一张图片组成的,在视频的帧上重复这个过程就能完成视频中的人脸检测。我们看看代码是如何实现的。

import cv2 as cvdef face_detect_demo(img): #将图片灰度 gray=cv.cvtColor(img,cv.COLOR_BGR2GRAY) #加载特征数据 face_detector = cv.CascadeClassifier( 'E:\Program Files (x86)\Python39\Lib\site-packages\cv2\data\haarcascade_frontalface_default.xml') faces = face_detector.detectMultiScale(gray) for x,y,w,h in faces: cv.rectangle(img,(x,y),(x+w,y+h),color=(0,0,255),thickness=2) cv.circle(img,center=(x+w//2,y+h//2),radius=(w//2),color=(0,255,0),thickness=2) cv.imshow('result',img)#读取视频cap=cv.VideoCapture('video.mp4')while True: flag,frame=cap.read() print('flag:',flag,'frame.shape:',frame.shape) if not flag: break face_detect_demo(frame) if ord('q') == cv.waitKey(10): breakcv.destroyAllWindows()cap.release()🍗 运行效果:

        这里我就不放视频了,我放一张视频的截图,我们可以清楚的看到,可以清晰的识别到我们的人脸。

🥩人脸识别

        人脸检测是 OpenCV 的一个很不错的功能,它是人脸识别的基础。什么是人脸识别呢?

其实就是一个程序能识别给定图像或视频中的人脸。实现这一目标的方法之一是用一系列分好类的图像来“训练”程序,并基于这些图像来进行识别。

        这就是 OpenCV 及其人脸识别模块进行人脸识别的过程。

        人脸识别模块的另外一个重要特征是:每个识别都具有转置信(confidence)评分,因此可在实际应用中通过对其设置阈值来进行筛选。

        人脸识别所需要的人脸可以通过两种方式来得到:自己获得图像或从人脸数据库免费获得可用的人脸图像。互联网上有许多人脸数据库。

        为了对这些样本进行人脸识别,必须要在包含人脸的样本图像上进行人脸识别。这是一个学习的过程,但并不像自己提供的图像那样令人满意。

🍖训练数据

        有了数据,需要将这些样本图像加载到人脸识别算法中。所有的人脸识别算法在它们的train()函数中都有两个参数:图像数组和标签数组。这些标签表示进行识别时候某人人脸的ID,因此根据 ID 可以知道被识别的人是谁。要做到这一点,将在「trainer/trainer」目录中保存为.yml文件。

🍗【示例】训练数据import osimport cv2import sysfrom PIL import Imageimport numpy as npdef getImageAndLabels(path): facesSamples = [] ids = [] imagePaths = [os.path.join(path, f) for f in os.listdir(path)] # 检测人脸 face_detector = cv2.CascadeClassifier( 'E:\Program Files (x86)\Python39\Lib\site-packages\cv2\data\haarcascade_frontalface_default.xml') # 遍历列表中的图片 for imagePath in imagePaths: # 打开图片 PIL_img = Image.open(imagePath).convert('L') # 将图像转换为数组 img_numpy = np.array(PIL_img, 'uint8') faces = face_detector.detectMultiScale(img_numpy) # 获取每张图片的id id = int(os.path.split(imagePath)[1].split('.')[0]) for x, y, w, h in faces: facesSamples.append(img_numpy[y:y + h, x:x + w]) ids.append(id) return facesSamples, idsif __name__ == '__main__': # 图片路径 path = './data/jm/' # 获取图像数组和id标签数组 faces, ids = getImageAndLabels(path) # 获取训练对象 recognizer = cv2.face.LBPHFaceRecognizer_create() recognizer.train(faces, np.array(ids)) # 保存文件 recognizer.write('trainer/trainer.yml')

🍖基于LBPH的人脸识别

        LBPH(Local Binary Pattern Histogram)将检测到的人脸分为小单元,并将其与模型中的对应单元进行比较,对每个区域的匹配值产生一个直方图。由于这种方法的灵活性,LBPH是唯一允许模型样本人脸和检测到的人脸在形状、大小上可以不同的人脸识别算法。

        调整后的区域中调用 predict()函数,该函数返回两个元素的数组:第一个元素是所识别个体的标签,第二个是置信度评分。所有的算法都有一个置信度评分阈值,置信度评分用来衡量所识别人脸与原模型的差距,0 表示完全匹配。可能有时不想保留所有的识别结果,则需要进一步处理,因此可用自己的算法来估算识别的置信度评分。LBPH 一个好的识别参考值要低于 50 ,任何高于 80 的参考值都会被认为是低的置信度评分。

🍗【示例】基于 LBPH 的人脸识别import cv2import numpy as npimport os#加载训练数据集文件recogizer=cv2.face.LBPHFaceRecognizer_create()recogizer.read('trainer/trainer.yml')#准备识别的图片img=cv2.imread('19.pgm')gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)face_detector = cv2.CascadeClassifier( 'E:\Program Files (x86)\Python39\Lib\site-packages\cv2\data\haarcascade_frontalface_default.xml')faces = face_detector.detectMultiScale(gray)for x,y,w,h in faces: cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),2) #人脸识别 id,confidence=recogizer.predict(gray[y:y+h,x:x+w]) print('标签id:',id,'置信评分:',confidence)cv2.imshow('result',img)cv2.waitKey(0)cv2.destroyAllWindows()🍗 运行效果:

标签id: 15 置信评分: 84.05495321482604

🥩总结

        随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。介绍Haar的概念,以及如何对图片和视频中进行人脸检测,以及如何训练我们自己的模型,并在自己的模型下进行人脸识别。

本文链接地址:https://www.jiuchutong.com/zhishi/292385.html 转载请保留说明!

上一篇:威尔士中部水仙花中的蓝山雀 (© Philip Jones/Alamy)(威尔士黄水仙)

下一篇:api接口详解大全(看这篇就足以了)(api接口是干嘛的)

  • 漫步者蓝牙耳机怎么重新配对(漫步者蓝牙耳机怎么配对)

    漫步者蓝牙耳机怎么重新配对(漫步者蓝牙耳机怎么配对)

  • 自己发起的群收款自己能付款吗(自己发起的群收款包括自己吗)

    自己发起的群收款自己能付款吗(自己发起的群收款包括自己吗)

  • 华为荣耀20青春版是双系统吗(华为荣耀20青春版上市时间和价格)

    华为荣耀20青春版是双系统吗(华为荣耀20青春版上市时间和价格)

  • 拼多多怎么添加好友(拼多多怎么添加通讯录好友)

    拼多多怎么添加好友(拼多多怎么添加通讯录好友)

  • 苹果流量用不了怎么回事(苹果流量用不了了怎么回事)

    苹果流量用不了怎么回事(苹果流量用不了了怎么回事)

  • 如何查对方抖音评论(如何查对方抖音关注的人)

    如何查对方抖音评论(如何查对方抖音关注的人)

  • 苹果电脑del键在哪(苹果电脑del键在哪里)

    苹果电脑del键在哪(苹果电脑del键在哪里)

  • 重装系统用iso装还是用gho装

    重装系统用iso装还是用gho装

  • 抖音买东西可以退货吗(抖音买东西可以让别人付款吗)

    抖音买东西可以退货吗(抖音买东西可以让别人付款吗)

  • qq封号一般显示什么(qq封号一般显示几天)

    qq封号一般显示什么(qq封号一般显示几天)

  • was tl10是什么型号(was-al10什么型号)

    was tl10是什么型号(was-al10什么型号)

  • 华为路由器ax3和pro的区别(华为路由器ax3和小米路由器ax3000)

    华为路由器ax3和pro的区别(华为路由器ax3和小米路由器ax3000)

  • 共达电声是做什么的(共达电声的产品有哪些)

    共达电声是做什么的(共达电声的产品有哪些)

  • 华为nova65g上市时间(华为nova65g什么时候出来的)

    华为nova65g上市时间(华为nova65g什么时候出来的)

  • 京东退回的钱在哪里(京东退款退到,京东余额,怎么取出来)

    京东退回的钱在哪里(京东退款退到,京东余额,怎么取出来)

  • 华为mate30声音键在哪里(华为mate30声音键会无故自己调大)

    华为mate30声音键在哪里(华为mate30声音键会无故自己调大)

  • 苹果手机微信语音怎么转发给别人听(苹果手机微信语音声音小怎么调)

    苹果手机微信语音怎么转发给别人听(苹果手机微信语音声音小怎么调)

  • 华为智慧屏是什么意思(华为智慧屏是什么电视)

    华为智慧屏是什么意思(华为智慧屏是什么电视)

  • 一加7有没有耳机插孔(一加7是不是没有耳机孔)

    一加7有没有耳机插孔(一加7是不是没有耳机孔)

  • 荣耀20pro和小米9对比(荣耀20pro和小米9se哪个好)

    荣耀20pro和小米9对比(荣耀20pro和小米9se哪个好)

  • 铅酸电池有记忆效应吗(铅酸电池有记忆性吗)

    铅酸电池有记忆效应吗(铅酸电池有记忆性吗)

  • 苹果xr单卡还是双卡(苹果xr单卡还是双卡好用)

    苹果xr单卡还是双卡(苹果xr单卡还是双卡好用)

  • p30有耳机孔吗(华为p30有耳机孔吗)

    p30有耳机孔吗(华为p30有耳机孔吗)

  • qq音乐最近常听怎么改(qq音乐最近常听一直不变)

    qq音乐最近常听怎么改(qq音乐最近常听一直不变)

  • qq怎么关闭联想表情(qq怎么关闭联想表情包)

    qq怎么关闭联想表情(qq怎么关闭联想表情包)

  • 小米8步数在哪设置(小米8 步数)

    小米8步数在哪设置(小米8 步数)

  • 小米8支持无线充电吗(小米8支持无线充电吗屏幕指纹版)

    小米8支持无线充电吗(小米8支持无线充电吗屏幕指纹版)

  • 华为天际通可以开热点吗(华为天际通可以卸载吗)

    华为天际通可以开热点吗(华为天际通可以卸载吗)

  • 创业投资企业可以按照其对中小高新技术企业投资额的
  • 企业所得税会计分录怎么做
  • 汽车保养 美容
  • 租房代收水电费税率
  • 计税基础怎么算
  • 个人所得税如何入账?
  • 技术服务费怎么算成本
  • 增值税发票抵扣勾选平台
  • 为什么要结转发出材料成本差异
  • 公司改名之前发工资吗
  • 空调属于电子设备还是电气设备
  • 进项税额转出怎么算
  • 贷款利息收入要减去支付利息支出吗
  • 销售生产用原材料取得的收入计入什么科目
  • 没有单价数量只有金额的发票可以用吗
  • 企业增值税普通发票和增值税专用发票
  • 个人在电商平台购买跨境商品需要缴纳什么税
  • 银行贷款利息可以减免吗
  • 保险公司如何计算车辆折旧
  • 税控盘基本信息设置
  • 外贸出口的进项可以抵扣吗
  • 银行承兑 贷款
  • 个体户如何办税
  • 收到减免退税费是政府补助怎么记账?
  • 筹建期间的开办费包括哪些
  • 专项应付款会计科目代码
  • 跨年冲暂估如何做账?
  • 捐赠视同销售为什么不确认收入?
  • 生产车间发生的间接费用会计科目
  • 单位支付安装天然气费
  • 业务招待费汇算清缴扣除标准
  • 发出商品但货款没到账
  • 以太网默认网关不可用
  • php://input用法
  • 完工产品成本怎么分配
  • 以房产投资入股应当缴纳契税
  • php实战
  • 爬坑图片卡通
  • 季度申报怎样在网上申报
  • 计提社保会计分录金额怎么写
  • 待抵扣进项税计入其他应收款
  • C语言中指针变量指向字符串时是有效字符的长度吗
  • 酒店的销售费用和管理费用如何进行区分
  • 公司为员工代扣代缴
  • 织梦如何添加浮动广告
  • 织梦发布文章栏目怎么不显示
  • 所得税视同销售行为有哪些呢?
  • 存货的入账价值等于
  • 普通发票税额没有打印全可以用么
  • 建筑工程机械费用标准
  • MySQL中使用FREDATED引擎实现跨数据库服务器、跨实例访问
  • 厂房出租没有开发票属于违法吗?
  • 上个月的发票未开具
  • 支付给个人的佣金如何代扣个税
  • 如何理解什么是半殖民地半封建社会
  • 为什么记账能省钱
  • 代缴社保会计分录
  • 哪些个体户要报残保金
  • 固定资产一旦处于什么状态
  • 其他应收款待抵扣税金
  • 房地产开发企业土地增值税怎么计算
  • sql实现分组查询的短语
  • sql数据库建立步骤
  • mac中mysql应该怎么运行
  • windows7问题解决方案
  • win10如何查看系统日志
  • linux 操作系统
  • windows7没有声音怎么调
  • 如何去掉windows7开机密码
  • regloadr.exe - regloadr是什么进程 有什么用
  • win7禁用了管理员,怎么取消呢
  • windowsxp的功能介绍
  • win7 0x80070002处理方法
  • linux系统如何禁用光驱
  • linux的shm共享内存
  • bat for do
  • jQuery中的ajax async同步和异步详解
  • jquery获取浏览器宽度
  • 已知税率怎么求政府税收
  • 税务局窗口业务
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设