一、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实现简单的人脸识别相关推荐

  1. python+opencv最简单的人脸识别入门

    0前置操作 安装python(最新3.10即可) 安装pycharm(社区版即可) 安装opencv-python(cmd输入pip install opencv-python即可,嫌慢用国内镜像也可 ...

  2. Python+dlib+opencv实现简单的人脸识别

    目录 一.建立人脸数据集 1.采集人脸 2.采集对应20张图片的68个特征点数组和平均特征数组 二.人脸识别 三.总结 参考资料 接上一篇博客基于dlib+opencv3.4+python3.7的人脸 ...

  3. Python+Opencv实现简单PCA人脸识别

    基本原理:人脸识别-PCA特征脸_Python_萬仟网 上面那个链接被识别成不安全网址,谨慎访问吧 PCA,principal Component Analysis(主成成分分析方法) 1.基本原理 ...

  4. 使用OpenCV简单实现人脸识别

    简介 OpenCV是一个非常强大的计算机视觉库,现有的一系列特征检测和特征匹配算法,有很大一部分都已经在OpenCV的库中得以实现,故此我们只需调用OpenCV库中函数即可简单实现人脸识别. 开发环境 ...

  5. 史上最简单的人脸识别项目登上GitHub趋势榜

    来源 | GitHub Trending整理 | Freesia译者 | TommyZihao出品 | AI科技大本营(ID: rgznai100) 导读:近日,一个名为 face_recogniti ...

  6. 用Python实现简单的人脸识别,10分钟(附源码)

    前言 今天,我们用Python实现简单的人脸识别技术! Python里,简单的人脸识别有很多种方法可以实现,依赖于python胶水语言的特性,我们通过调用包可以快速准确的达成这一目的.这里介绍的是准确 ...

  7. 用Python几行代码实现简单的人脸识别,10分钟完成(附源码)

    前言 今天,我们用Python实现简单的人脸识别技术! Python里,简单的人脸识别有很多种方法可以实现,依赖于python胶水语言的特性,我们通过调用包可以快速准确的达成这一目的.这里介绍的是准确 ...

  8. 10分钟手把手教你运用Python实现简单的人脸识别

    欲直接下载代码文件,关注我们的公众号哦!查看历史消息即可! 前言:让我的电脑认识我 我的电脑只有认识我,才配称之为我的电脑! 今天,我们用Python实现高大上的人脸识别技术! Python里,简单的 ...

  9. 3d人脸识别算法opencv_用Opencv打造自己的人脸识别

    # 用Opencv打造自己的人脸识别 标签: opencv 人脸识别在现在使用的越来越多,所以使用opencv构造一个简单的人脸识别.步骤包括收集及处理数据,构建人脸识别器,进行人脸识别. 收集数据 ...

  10. python人脸识别解锁电脑_给你的电脑做个简单的“人脸识别认证”

    原标题:给你的电脑做个简单的"人脸识别认证" Simple "Face ID" for your PC 作者 | German Gensetskiy 翻译 | ...

最新文章

  1. 网易SRC指责白帽子私自披露已修复漏洞,强势表态违刑必究
  2. java try catch_Java中关于try、catch、finally中的细节分析
  3. android https 简书,关于Android http改为https
  4. Mysql合并两个sql结果
  5. [VNC] 云服务器 Ubuntu 16.04 安装 gnome 桌面并配置 VNC
  6. jbig java_jbig2 Java Develop 238万源代码下载- www.pudn.com
  7. SELECTION-SCREEN 加按钮
  8. Julia: Dates =DateFormat, format,parse.......
  9. 教育行业剧变:校讯通将死 家校沟通永生
  10. 实用的网站、工具(科研学术、wps、作图、教程和文档、在线开发工具、在线编程学习、文档笔记工具、办公工具、写作、设计制作类、素材库)
  11. 微生物群落基于KEGG预测功能的丰度分布图绘制
  12. 计算机编程 高斯消元,高斯-若尔当消元法
  13. ControllerRevision
  14. Sublime的实用汉化方法
  15. 网络聊天程序的设计与实现
  16. 计算机编程 寒假项目总结,我的软件工程之路--寒假总结
  17. Benji Bananas 与 ApeCoin 一起迈向边玩边赚
  18. FP6291芯片输出电压12V,DC-DC升压芯片
  19. c语言教工工资管理系统课程设计
  20. c++实现加法的w32控制台程序

热门文章

  1. 2020年9月中国旅游行业网络关注度分析报告
  2. 【无头浏览器】谷歌无头浏览器的几行代码简单设置?
  3. 时间片轮转调度算法详解
  4. SVN下载项目到本地
  5. 键盘定位板图纸_Alienware AW510K RGB矮轴机械键盘评测
  6. 卧槽,我司电商平台又被攻击,年终奖没了
  7. 解决微信二次分享失败
  8. 倍福RS232模块EL6002使用教程及注意事项
  9. NS 一张SD卡三系统(真实10.2,虚拟SX 11.0.1,虚拟大气层12.02),重启随意切换,免插线注入
  10. 伪代码是计算机语言的一种吗,伪代码是什么?可以取代代码存在吗?