使用opencv实现简单的人脸识别
一、opencv模块的使用
1、简介
opencv-python是一个python绑定库,旨在解决计算机视觉问题。使用opencv模块,可以实现一些对图片和视频的操作。
2、安装
安装opencv之前需要先安装numpy, matplotlib。然后使用pip安装opencv库即可。
3、导入
使用import cv2进行导入即可,需要注意的是cv2读取图片的颜色通道是BGR(蓝绿红)。
4、使用
使用cv2.imread()接收读取的图片,此处需要注意的是读取路径必须为英文。
cat = cv2.imread("cat1.png")
使用cv2.imshow()函数显示读取的图片。
cv2.imshow("cat", cat)
其中,函数内的第一个参数为显示图片窗口左上角的名字,第二个参数为接收读取的图片。
注意:在调用显示图像的API后,要调用cv2.waitKey()给图像绘制留下时间,否则窗口会出现无响应情况,并且图像无法显示出来。
cv2.waitKey(0)
其中,函数内的意思是等待键盘输入的时间,单位毫秒,如果为0则无限等待。
最后,使用cv2.destroyAllWindows()释放内存。
cv2.destroyAllWindows()
显示图像结果如下。
二、实现简单的人脸识别
1、下载人类特征数据
首先在github网站下载开源人脸特征数据。网址:opencv/data at 4.x · opencv/opencv · GitHub
选择如上文件
选择人脸数据进行下载。
2、简单的人脸识别代码
首先使用cv2.imread()接收要读取的图片。
yoogni = cv2.imread("myq.jpg")
CascadeClassifier是opencv下objdetect模块中用来做目标检测的级联分类器的一个类。传入人脸特征数据,返回识别出的人脸对象。
detector = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")
使用detectMultiScale()接收返回检测出的人脸对象。
face_zone = detector.detectMultiScale(yoogni)
打印接收的对象。
print(face_zone)
输出结果如下:
输出的为检测的人类区域。
3、在图上绘制识别出的人脸区域
使用cv2.rectangle()绘制出识别成功的人脸区域。
for x, y, w, h in face_zone:
cv2.rectangle(yoogni, pt1=(x, y), pt2=(x + w, y + h), color=(0, 0, 255))
其中pt1是左上角坐标,pt2是右下角坐标,w是识别区域的宽,h是识别区域的高。颜色选择的是红色。
使用cv2.imshow()函数显示绘制完成的图片。
cv2.imshow("myq",yoogni)
输出结果如下:
三、进行多个人脸识别
在进行一张图片的多个人脸识别时,常常会出现识别错误的情况,如下图。
所以在识别时进行参数的调整。
face_zone = detector.detectMultiScale(myq, scaleFactor=1.3, minNeighbors=5)
scaleFactor表示在前后两次相继的扫描中,搜索窗口的比例系数。默认为1.1即每次搜索窗口依次扩大10%,此处调整为1.3。
minNeighbors表示构成检测目标的相邻矩形的最小个数(默认为3个)。该参数指定每一个候选矩形边界框需要有多少相邻的检测点,此处调整为5。
输出结果如下。
可以看出,检测精度明显上升。
四、进行视频人脸识别
本周在图片人脸识别的基础上进行扩展,进行视频的人脸识别。
1、视频捕获
首先进行视频捕获。
cap = cv2.VideoCapture("video2.mp4")
videocapture是按帧读取视频,就是读取视频里的图片,这个函数返回一张图片和一个布尔类型的值,布尔类型的值表示还有没有下一帧。
flag, frame = cap.read()
print(flag, frame.shape)
此时frame是第一帧图片,frame.shape输出的是图片维度。输出结果如下:
传入人脸特征数据
detector = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")
2、将图像转为黑白影像再进行人脸识别
因为在识别人脸的时候,黑白和彩色不影响识别,所以为了运行速度更快,可以将识别时候的视频转为黑白。
gray = cv2.cvtColor(luo, code=cv2.COLOR_BGR2GRAY)
对黑白图像进行人脸识别
face_zone = detector.detectMultiScale(gray)
3、对视频进行人脸识别
首先要使用while语句进行判别,判断视频是否读到最后一帧。返回全部帧,使用isOpened函数判断视频是否还打开。
while cap.isOpened():
在while语句中,首先按帧读取视频。
flag, frame = cap.read()
由于原视频过大,所以将视频重新调整一下大小,使用luo接收返回值。
luo = cv2.resize(frame, dsize=(640, 360))
再将图片转为黑白色,并进行人脸识别。
gray = cv2.cvtColor(luo, code=cv2.COLOR_BGR2GRAY)
face_zone = detector.detectMultiScale(gray)
在按帧绘制出识别区域。
for x, y, w, h in face_zone:
cv2.rectangle(luo, pt1=(x, y), pt2=(x + w, y + h), color=(0, 0, 255))
写判断语句,当视频播放到最后一帧时退出循环。
if not flag:
break
显示视频。
cv2.imshow("me", luo)
下面判断语句的意思是,等待10毫秒,如果用户没有摁下q键,就显示下一帧视频,并且cv2只读了图片没有读声音。及摁下q键退出视频。
if ord("q") == cv2.waitKey(20):
break
以上代码均写在while语句中。下面释放内存。
cv2.destroyAllWindows()
cap.release()
输出结果如下。
五、进行摄像头人脸识别
1、调取本地摄像头
还是使用videocapture函数,参数为0调取本地摄像头。
cap = cv2.VideoCapture(0, cv2.CAP_DSHOW)
2、人脸识别
与上一节的人脸识别代码一样,输出结果如下。
3、保存视频
获取宽高,方便写入视频,因为转换为整形数字时可能会把小数点后几位截走,所以+1,视频大一点可以,小一点不行。
w = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) + 1
h = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) + 1
函数内第一个参数是视频名字;第二个是视频编码,及保存的视频格式;第三个是一秒几帧,第四个是视频的高宽。此处保存的视频名字为me,视频为avi格式。
vw = cv2.VideoWriter("me.avi", cv2.VideoWriter_fourcc("M", "P", "4", "2"), 24, (w, h))
在上一节人脸识别的while语句中,
cv2.imshow("me", frame)
这一句代码后面,判断摄像头录制是否结束。
if not flag:
break
如果视频没结束,把这一帧写入视频。
vw.write(frame)
保存结果如下。
使用opencv实现简单的人脸识别相关推荐
- python+opencv最简单的人脸识别入门
0前置操作 安装python(最新3.10即可) 安装pycharm(社区版即可) 安装opencv-python(cmd输入pip install opencv-python即可,嫌慢用国内镜像也可 ...
- Python+dlib+opencv实现简单的人脸识别
目录 一.建立人脸数据集 1.采集人脸 2.采集对应20张图片的68个特征点数组和平均特征数组 二.人脸识别 三.总结 参考资料 接上一篇博客基于dlib+opencv3.4+python3.7的人脸 ...
- Python+Opencv实现简单PCA人脸识别
基本原理:人脸识别-PCA特征脸_Python_萬仟网 上面那个链接被识别成不安全网址,谨慎访问吧 PCA,principal Component Analysis(主成成分分析方法) 1.基本原理 ...
- 使用OpenCV简单实现人脸识别
简介 OpenCV是一个非常强大的计算机视觉库,现有的一系列特征检测和特征匹配算法,有很大一部分都已经在OpenCV的库中得以实现,故此我们只需调用OpenCV库中函数即可简单实现人脸识别. 开发环境 ...
- 史上最简单的人脸识别项目登上GitHub趋势榜
来源 | GitHub Trending整理 | Freesia译者 | TommyZihao出品 | AI科技大本营(ID: rgznai100) 导读:近日,一个名为 face_recogniti ...
- 用Python实现简单的人脸识别,10分钟(附源码)
前言 今天,我们用Python实现简单的人脸识别技术! Python里,简单的人脸识别有很多种方法可以实现,依赖于python胶水语言的特性,我们通过调用包可以快速准确的达成这一目的.这里介绍的是准确 ...
- 用Python几行代码实现简单的人脸识别,10分钟完成(附源码)
前言 今天,我们用Python实现简单的人脸识别技术! Python里,简单的人脸识别有很多种方法可以实现,依赖于python胶水语言的特性,我们通过调用包可以快速准确的达成这一目的.这里介绍的是准确 ...
- 10分钟手把手教你运用Python实现简单的人脸识别
欲直接下载代码文件,关注我们的公众号哦!查看历史消息即可! 前言:让我的电脑认识我 我的电脑只有认识我,才配称之为我的电脑! 今天,我们用Python实现高大上的人脸识别技术! Python里,简单的 ...
- 3d人脸识别算法opencv_用Opencv打造自己的人脸识别
# 用Opencv打造自己的人脸识别 标签: opencv 人脸识别在现在使用的越来越多,所以使用opencv构造一个简单的人脸识别.步骤包括收集及处理数据,构建人脸识别器,进行人脸识别. 收集数据 ...
- python人脸识别解锁电脑_给你的电脑做个简单的“人脸识别认证”
原标题:给你的电脑做个简单的"人脸识别认证" Simple "Face ID" for your PC 作者 | German Gensetskiy 翻译 | ...
最新文章
- 网易SRC指责白帽子私自披露已修复漏洞,强势表态违刑必究
- java try catch_Java中关于try、catch、finally中的细节分析
- android https 简书,关于Android http改为https
- Mysql合并两个sql结果
- [VNC] 云服务器 Ubuntu 16.04 安装 gnome 桌面并配置 VNC
- jbig java_jbig2 Java Develop 238万源代码下载- www.pudn.com
- SELECTION-SCREEN 加按钮
- Julia: Dates =DateFormat, format,parse.......
- 教育行业剧变:校讯通将死 家校沟通永生
- 实用的网站、工具(科研学术、wps、作图、教程和文档、在线开发工具、在线编程学习、文档笔记工具、办公工具、写作、设计制作类、素材库)
- 微生物群落基于KEGG预测功能的丰度分布图绘制
- 计算机编程 高斯消元,高斯-若尔当消元法
- ControllerRevision
- Sublime的实用汉化方法
- 网络聊天程序的设计与实现
- 计算机编程 寒假项目总结,我的软件工程之路--寒假总结
- Benji Bananas 与 ApeCoin 一起迈向边玩边赚
- FP6291芯片输出电压12V,DC-DC升压芯片
- c语言教工工资管理系统课程设计
- c++实现加法的w32控制台程序
热门文章
- 2020年9月中国旅游行业网络关注度分析报告
- 【无头浏览器】谷歌无头浏览器的几行代码简单设置?
- 时间片轮转调度算法详解
- SVN下载项目到本地
- 键盘定位板图纸_Alienware AW510K RGB矮轴机械键盘评测
- 卧槽,我司电商平台又被攻击,年终奖没了
- 解决微信二次分享失败
- 倍福RS232模块EL6002使用教程及注意事项
- NS 一张SD卡三系统(真实10.2,虚拟SX 11.0.1,虚拟大气层12.02),重启随意切换,免插线注入
- 伪代码是计算机语言的一种吗,伪代码是什么?可以取代代码存在吗?