首页 > 其他分享 >人脸识别学习

人脸识别学习

时间:2024-03-24 21:44:39浏览次数:25  
标签:人脸识别 frame cap cv2 学习 灰度 图像 摄像头

基于人脸识别及反作弊技术的在线评测系统

如何使用摄像头

Python调用摄像头

Python调用摄像头是通过调用摄像头设备来实现的。具体来说,可以使用Python的OpenCV库来打开摄像头设备,并使用摄像头进行图像捕捉和处理。

Python调用摄像头示例代码

import cv2

# 打开摄像头设备
# 0 表示默认摄像头
cap = cv2.VideoCapture(0)
# 用cap读取视频文件
# cap = cv2.VideoCapture(path)
# path为想要捕获的视频文件路径

while True:
    # 读取摄像头图像
    # cap.read()方法中的ret表示是否成功读取图像,frame表示读取到的图像
    # 如果读取成功,ret为True,frame为图像数据
    # 如果读取失败,ret为False,frame为None
    ret, frame = cap.read()
    
    # 在图像上显示图像
    if ret == True:
        cv2.imshow('Camera', frame)
    else:
        print("Error [reason: frame read failed]")


    # 按下q键退出循环
    # waitkey()方法用于等待用户按下键盘按键
    # 1表示等待1毫秒,如果用户没有按下按键,则继续等待
    # ord()方法用于获取按键的ASCII码值
    # ord('q')表示按下q键
    # 0xFF表示按下键盘上的任意键
    if cv2.waitKey(1) == ord('q'):
        break       
    
# 释放摄像头设备
cap.release()

# 关闭图像窗口
cv2.destroyAllWindows()

Dlib库

Dlib库的介绍

Dlib是一个用于机器学习、图像处理和模式识别的开源C++库。它包含机器学习、图像处理和模式识别的算法,并且可以与Python、Ruby、Matlab和Java等语言进行交互。

Dlib进行人脸识别

Dlib库调用摄像头

Dlib库调用摄像头是通过调用Dlib库中的相关函数来实现的。具体来说,可以使用Dlib库中的函数来打开摄像头设备,并使用摄像头进行图像捕捉和处理。

Dlib库调用摄像头示例代码

import dlib
import cv2

# 创建一个detector对象,用于人脸检测        
detector = dlib.get_frontal_face_detector()

# 打开摄像头设备
cap = cv2.VideoCapture(0)

while True:
    # 读取摄像头图像    
    ret, frame = cap.read()

    # 将图像转换为灰度图像
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)   
    # 问题一:为什么需要将图像转换为灰度图像?

    # 使用detector对象进行人脸检测
    faces = detector(gray)

    # 在图像上绘制人脸矩形框
    for face in faces:  
        x, y, w, h = face.left(), face.top(), face.width(), face.height()  
        cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)

    # 在图像上显示图像
    cv2.imshow('Camera', frame)
    
    # 按下q键退出循环
    if cv2.waitKey(1) == ord('q'):
        break
    
# 释放摄像头设备
cap.release()   

# 关闭图像窗口
cv2.destroyAllWindows()                         

问题一:为什么需要将图像转换为灰度图像?

gpt给出的解释:

  1. 简化计算:灰度图像只有一个通道(亮度),而彩色图像通常有三个通道(红、绿、蓝)。处理单个通道的图像比处理三个通道的图像要快得多,并且需要的内存也更少。
  2. 减少噪声:彩色图像中的颜色信息有时会引入额外的噪声,这些噪声对于某些类型的图像分析(如边缘检测、形态学操作等)是不必要的。转换为灰度图像可以减少这些噪声的影响。
  3. 统一处理:对于一些算法来说,颜色信息并不是关键因素,或者在不同的光照和颜色条件下需要一致的处理结果。灰度图像可以消除颜色变化带来的影响,使得算法更加鲁棒。
  4. 历史原因:早期的图像处理算法和硬件大多只能处理灰度图像,因此很多传统方法和理论都是基于灰度图像开发的。
  5. 特定应用需求:有些应用领域,如某些类型的生物特征识别(指纹识别)、文档分析等,主要关注图像的纹理和形状信息,这些信息在灰度图像中更容易提取。

暂不关心4、5两条

[1. 简化计算],很好理解 黑白图像只需要关心像素的明亮程度

img
[2. ]

标签:人脸识别,frame,cap,cv2,学习,灰度,图像,摄像头
From: https://www.cnblogs.com/rufu/p/18093124

相关文章

  • 电学——线性电路与叠加定理 学习笔记
    电学——线性电路与叠加定理学习笔记线性元件线性元件,是在电路中电流与电压有线性关系的电子元件,例如金属导体和电解液。在温度不变的情况下,其两端电压和电流的关系就可以近似的认为是线性的。(理想的)电阻是最普遍的线性元件,常见的线性元件还有(理想的)电容和电感。在伏安特性......
  • 机器学习概念、步骤、分类和实践
    一、人工智能与机器学习1.1人工智能的定义和发展历程        人工智能(ArtificialIntelligence,AI)是一门致力于研究和开发能够模拟人类智能行为的理论、方法、技术及应用系统的科学。人工智能的起源可以追溯到20世纪40年代,经过数十年的发展,已经渗透到了生活的方......
  • 电学——电流源和电压源 学习笔记
    电学——电流源和电压源学习笔记前置知识:常见的电池及其符号符号符号理想电压源理想电流源受控电压源受控电流源单电池电池组电流源电流源(理想电流源)具有两个基本的性质:第一,它提供的电流是定值\(I\),或是一定的时间函数\(I(t)\)与两端的电压......
  • 逆向学习笔记(1)
    1.32,16,8位寄存器对应的关系2.MOV的语法总结:既能从寄存器写道内存,也能从内存写到寄存器,从寄存器写道寄存器,还能写入常量寄存器内存常量寄存器110内存100常量100所以,任何数据都可传给寄存器,寄存器能传数据给寄存器和内存3.内存操......
  • 电学——基尔霍夫电路定律 学习笔记
    电学——基尔霍夫电路定律学习笔记基尔霍夫电路定律(基尔霍夫定律)涉及了电荷的守恒及电势的保守性,指的是两条电路学定律:基尔霍夫电流定律(基尔霍夫第一定律,KCL)、基尔霍夫电压定律(基尔霍夫第二定律,KVL)。基本概念支路:每个元件就是一条支路。串联的元件我们视它为一条支路。......
  • C#学习——基本类——Math类
    原文链接:https://blog.csdn.net/lihongmao5911/article/details/132492916在C#中,Math.Ceiling()是Math类方法。此方法用于查找最小整数,该整数大于或等于传递的参数。Math类中的常用函数常规运算余数:IEEERemainder函数:doubleIEEERemainder(doublex,doubley);描述:摘要:返回......
  • 基于PyTorch深度学习实战入门系列-PyTorch基础全
    Torch的基本使用判断GPU是否可用torch.cuda.is_available()张量Torch定义了10种张量类型,包括CPU和GPU形式,如下表所示:数据类型dtypeCPU张量GPU张量32位浮点数torch.float32、torch.floattorch.FloatTensortorch.cuda.FloatTensor64位浮点数torch.float64、t......
  • 一分钟学习Markdown语法
    欢迎来到Markdown语法的世界!Markdown是一种简单而直观的标记语言,让文本排版变得轻松有趣。接下来,我们将带你逐步学习Markdown的基本语法。标题在Markdown中,使用#符号可以创建不同级别的标题,例如:  #一级标题##二级标题###三级标题文本格式想要文本加粗、斜体......
  • ELK学习记录 - elasticsearch 7.9.1安装
    说明:以7.9.1版本为例,运行环境RockyLinuxrelease9.3elasticsearch下载:https://mirrors.huaweicloud.com/elasticsearch/7.9.1/elasticsearch-7.9.1-linux-x86_64.tar.gz解压:$tar-xfelasticsearch-7.9.1-linux-x86_64.tar.gz修改配置文件:$cdelasticsearch-7.9.1/$vi......
  • 编译实践学习 Part3
    License:CCBY-SA4.0闲话看了半天文档终于懂了Bison里怎么处理带|的语法了。为什么info要做成Emacs格式啊?Vimer无能狂怒(Lv3.1一元表达式首先当然是设计AST了。这里我用std::varient,不知道有没有更优雅的写法。classPrimaryExpAST:publicBaseAST{public......