当前位置: 首页 > news >正文

【计算机视觉】人脸识别

一、简介

人脸识别是将图像或者视频帧中的人脸与数据库中的人脸进行对比,判断输入人脸是否与数据库中的某一张人脸匹配,即判断输入人脸是谁或者判断输入人脸是否是数据库中的某个人。
人脸识别属于1:N的比对,输入人脸身份是1,数据库人脸身份数量为N,一般应用在办公室门禁,疑犯追踪;人脸验证属于1:1的比对,输入人脸身份为1,数据库中为同一人的数据,在安全领域应用比较多。
一个完整的人脸识别流程主要包括人脸检测、人脸对齐、特征提取、人脸对比几个部分。

二、人脸检测

人脸检测是寻找并定位人脸在输入图像中的位置。

传统人脸检测算法

Viola-Jones人脸检测活Haar特征级联分类器

import cv2# 加载预训练模型
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
eye_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_eye.xml')# 读取输入图像
image_path = "path_to_image.jpg"  # 替换为你的图片路径
image = cv2.imread(image_path)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)  # 转为灰度图# 检测人脸
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))# 绘制人脸矩形框
for (x, y, w, h) in faces:cv2.rectangle(image, (x, y), (x+w, y+h), (255, 0, 0), 2)roi_gray = gray[y:y+h, x:x+w]roi_color = image[y:y+h, x:x+w]# 在每张人脸区域内检测眼睛eyes = eye_cascade.detectMultiScale(roi_gray)for (ex, ey, ew, eh) in eyes:cv2.rectangle(roi_color, (ex, ey), (ex+ew, ey+eh), (0, 255, 0), 2)# 显示结果
cv2.imshow("Detected Faces and Eyes", image)
cv2.waitKey(0)
cv2.destroyAllWindows()
1. 加载预训练模型
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
eye_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_eye.xml')
  • 功能:加载 OpenCV 提供的预训练 Haar 级联分类器模型,用于检测人脸和眼睛。
  • 参数
    • cv2.CascadeClassifier:加载 XML 模型文件。
    • cv2.data.haarcascades:OpenCV 提供的 Haar 分类器模型的默认路径。
    • 'haarcascade_frontalface_default.xml':用于检测正面人脸。
    • 'haarcascade_eye.xml':用于检测眼睛。
2. 读取并预处理图像
image_path = "path_to_image.jpg"  # 替换为你的图片路径
image = cv2.imread(image_path)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)  # 转为灰度图
  • 功能
    1. 使用 cv2.imread 读取图像。
    2. 转换为灰度图(灰度图检测效率更高,级联分类器对彩色图像没有直接支持)。
  • 原因:级联分类器的训练和使用都基于灰度图像。
3. 检测人脸
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))
  • 功能:检测图像中的所有人脸。
  • 参数
    • gray:输入的灰度图。
    • scaleFactor=1.1:每次图像缩小时的比例因子,较大的值降低检测时间但可能错过较小的人脸。
    • minNeighbors=5:每个候选矩形需满足的邻近矩形数量。值越大,检测结果越严格。
    • minSize=(30, 30):目标检测框的最小尺寸,用于过滤过小的区域。
  • 输出:返回一个列表,每个元素是一个 (x, y, w, h) 元组,表示检测到的人脸的矩形框。
4. 绘制人脸矩形框并检测眼睛
for (x, y, w, h) in faces:cv2.rectangle(image, (x, y), (x+w, y+h), (255, 0, 0), 2)roi_gray = gray[y:y+h, x:x+w]roi_color = image[y:y+h, x:x+w]
  • 功能
    • 遍历 faces 中的每个人脸检测框 (x, y, w, h)
    • 使用 cv2.rectangle 在原图上绘制蓝色框((255, 0, 0))表示人脸区域。
    • 提取每个人脸的灰度子图 roi_gray 和原图的子图 roi_color,用于后续的眼睛检测。
  • 原因:减少检测区域,提高眼睛检测的精度和速度。
5. 在每张人脸区域内检测眼睛
eyes = eye_cascade.detectMultiScale(roi_gray)
for (ex, ey, ew, eh) in eyes:cv2.rectangle(roi_color, (ex, ey), (ex+ew, ey+eh), (0, 255, 0), 2)
  • 功能:使用 eye_cascade.detectMultiScale 在人脸区域内检测眼睛。
  • 参数:同人脸检测,输入的灰度子图为 roi_gray
  • 绘制结果:用绿色框((0, 255, 0))表示检测到的眼睛。
6. 显示结果
cv2.imshow("Detected Faces and Eyes", image)
cv2.waitKey(0)
cv2.destroyAllWindows()
  • 功能
    1. 使用 cv2.imshow 显示图像。
    2. cv2.waitKey(0):等待用户按键关闭窗口。
    3. cv2.destroyAllWindows:销毁所有窗口,释放资源。
总结
  1. 输入:一张图片(RGB 格式)。
  2. 处理
    • 转为灰度图。
    • 使用预训练的 Haar 级联模型检测人脸和眼睛。
    • 在检测到的区域绘制矩形框。
  3. 输出:在窗口中显示标注了人脸和眼睛的图片。

基于深度学习的人脸检测算法

基于深度学习的人脸检测算法经历了从传统方法到现代深度学习方法的演变,其发展历程可以划分为几个重要阶段。以下是基于深度学习的人脸检测算法的主要发展历史:

1. 传统方法阶段(2000年以前)
  • 特点
    • 依赖于手工设计特征和传统机器学习方法(如 Haar 特征、HOG 特征)。
    • 算法代表:Haar 级联分类器(Viola-Jones,人脸检测的重要突破)。
  • 局限
    • 对光照、姿态、遮挡等情况敏感。
    • 检测速度快但精度有限。

这一阶段虽然不基于深度学习,但奠定了人脸检测的基础。

2. 深度学习的初步应用(2012年左右)
  • 背景:2012年 AlexNet 在 ImageNet 比赛中获胜,深度学习开始广泛应用于计算机视觉。
  • 特点
    • 使用卷积神经网络(CNN)作为特征提取器。
    • 算法代表:DeepFace(Facebook, 2014)
      • 使用深度神经网络(DNN)对人脸检测和识别进行处理。
      • 首次将深度学习应用于人脸检测和识别任务,性能显著提升。
  • 局限
    • 网络规模较小,无法应对复杂场景(如多角度、遮挡)
3. 基于回归的方法(2015年左右)
  • 背景:深度学习框架和硬件性能的进步,使得更复杂的网络架构成为可能。
  • 特点
    • 使用 CNN 直接回归人脸框的坐标。
    • 算法代表:
      • Cascade CNN(2015):使用多个 CNN 逐步回归人脸位置,提高检测精度。
      • MTCNN(Multi-task Cascaded CNN, 2016):结合多任务学习,联合进行人脸检测和关键点定位。
        • 特点:多阶段检测框架,利用级联网络逐步细化结果。
        • 优点:检测速度和精度兼顾,成为经典方法。
4. 单阶段和双阶段目标检测器的引入(2016年-2018年)
  • 背景:通用目标检测器如 Faster R-CNN、SSD、YOLO 等在物体检测任务中的成功,推动了它们在人脸检测领域的应用。
  • 特点
    • 单阶段方法:如 SSD 和 YOLO,将人脸检测视为通用物体检测任务。
    • 双阶段方法:如 Faster R-CNN,将区域建议网络(RPN)与分类器结合。
  • 算法代表
    • Face R-CNN:使用 Faster R-CNN 对人脸进行检测。
    • S3FD(Single Shot Scale-invariant Face Detector, 2017):基于 SSD 的改进,解决了人脸大小变化的问题。
    • RetinaFace(2019):结合关键点检测,性能优异。
5. 基于关键点检测和自监督学习(2018年后)
  • 特点
    • 强调对复杂场景(如遮挡、多角度、低光照)的鲁棒性。
    • 将人脸关键点检测和人脸检测结合,进一步提升精度。
  • 算法代表
    • DSFD(Dual Shot Face Detector, 2019):多分辨率特征融合,更适合检测小人脸。
    • CenterFace(2020):轻量级人脸检测器,结合人脸框和关键点检测,适合实时应用。
    • SCRFD(2021):针对边缘设备优化的高效人脸检测器。
6. 大模型和自监督学习的影响(2021年后)
  • 背景:大规模预训练模型(如 Vision Transformer, CLIP)的兴起,为人脸检测带来了新的可能性。
  • 特点
    • 使用自监督学习方法,通过大规模无标签数据学习强大的特征表征。
    • 将 Transformer 等新架构引入人脸检测任务。
  • 算法代表
    • DEtection TRansformer (DETR):结合 Transformer 架构的人脸检测方法。
    • YOLO 系列最新版本:如 YOLOv5、YOLOv8,在人脸检测任务中的应用。

三、人脸对齐

人脸对齐是将检测得到的人脸图像变换到标准正脸姿态,在实际图片中,由于头部姿态各异、人脸尺度不一,所呈现的形式也各不相同。

  1. 人脸检测
    • 检测人脸框,提取人脸区域。
    • 使用 OpenCV 提供的 Haar 或 DNN 检测器。
  2. 关键点检测
    • 使用关键点检测模型提取人脸的关键点(如眼睛、鼻尖等)。
    • 关键点可以用 Dlib 或深度学习模型(如 MTCNN)提取。
  3. 仿射变换
    • 根据检测到的关键点,定义源点(人脸关键点)和目标点(标准模板关键点)。
    • 计算仿射变换矩阵并应用变换,将人脸对齐。

四、特征提取

特征提取是将输入的人脸图像用一个高维特征向量来表示;如果同一个人,则两个高维特征向量的距离近;如果不同,则距离远。人脸特征提取的方法也可以分为传统方法和深度学习两大类。
人脸特征提取算法经历了从早期的几何特征分析到现代深度学习的转变,其发展历史可以分为以下几个阶段:

1. 几何特征阶段(20世纪70-90年代)
代表方法
  • 几何特征分析
    • 利用人脸的几何属性(如眼睛间距、鼻梁长度、脸型轮廓)作为特征。
    • 通过手工定义的特征点计算欧氏距离等度量方式。
  • 模板匹配
    • 使用平均脸模板,匹配输入人脸与模板的相似度。
优缺点
  • 优点:简单直观,计算量小。
  • 缺点:对光照、姿态和遮挡不鲁棒,特征维度较低。
代表研究
  • 1973年,Bledsoe 提出的人脸几何模型匹配方法
  • 1987年,Sirovich 和 Kirby 提出的脸空间方法,为 PCA 奠定了基础。
2. 统计学习阶段(1990-2010年)
代表方法
  • 主成分分析(PCA)
    • 把人脸图像作为高维向量,降维成低维特征表示(如特征脸)。
    • 1991年,Turk 和 Pentland 提出了Eigenfaces 方法
  • 线性判别分析(LDA)
    • 增强类间区分能力,用于人脸识别。
    • 解决了 PCA 的类间可分性不足问题。
  • 独立成分分析(ICA)
    • 分离人脸的非高斯成分,适合表情和姿态变化分析。
  • 局部二值模式(LBP)
    • 基于纹理模式的人脸描述,提取局部区域的纹理特征。
  • Fisherfaces
    • 综合 PCA 和 LDA 方法,提升对光照变化的鲁棒性。
优缺点
  • 优点:提出了许多经典算法,对光照、姿态变化有一定鲁棒性。
  • 缺点:对非线性特征无法很好建模,提取的特征不够高维,难以处理复杂场景。
代表研究
  • 1991年,Eigenfaces。
  • 1997年,Belhumeur 提出的 Fisherfaces。
  • 2002年,LBP 被引入人脸识别领域。
3. 局部特征阶段(2000-2015年)
代表方法
  • SIFT (Scale-Invariant Feature Transform)
    • 提取图像中的局部关键点和特征描述。
    • 对光照、尺度、旋转变化鲁棒。
  • HOG (Histogram of Oriented Gradients)
    • 提取梯度方向分布,用于描述人脸的全局形状。
  • Gabor 特征
    • 模拟人类视觉皮层特性,用 Gabor 滤波器提取人脸纹理。
优缺点
  • 优点:提升了对光照和局部细节的鲁棒性。
  • 缺点:局部特征无法很好表达全局信息,算法复杂度较高。
代表研究
  • 2004年,Lowe 提出的 SIFT。
  • 2005年,Dalal 和 Triggs 提出的 HOG。
  • 2006年,Gabor 特征被广泛应用于人脸识别。
4. 深度学习阶段(2014年至今)
关键技术
  • 卷积神经网络(CNN)
    • 自适应提取多层次特征,捕捉人脸的纹理、形状、表情等信息。
    • 提取的特征更具辨别性。
  • 预训练模型
    • 使用大规模人脸数据集进行训练,如 LFW、CASIA-WebFace 等。
    • 模型具备迁移学习能力。
代表算法
  • DeepFace (2014, Facebook)
    • 首个端到端人脸识别深度学习模型。
    • 采用卷积神经网络,实现接近人类的识别精度。
  • DeepID (2014-2015, 中国科学院)
    • 提出多层 CNN 架构,特征更加鲁棒。
    • 引入多个子网络对不同区域进行特征提取。
  • FaceNet (2015, Google)
    • 基于深度学习的人脸特征提取算法。
    • 使用 Triplet Loss 学习特征嵌入,支持高效人脸验证和聚类。
  • ArcFace (2018, InsightFace)
    • 提出了 Additive Angular Margin Loss,进一步优化特征的判别性。
    • 被广泛用于工业人脸识别系统。
  • CosFace、SphereFace
    • 聚焦于特征分布的角度约束,提升类间分离度。
优缺点
  • 优点:特征表示能力强,适用于大规模人脸识别。
  • 缺点:需要大量数据和计算资源,可能存在隐私问题。
代表研究
  • 2014年,Facebook 提出 DeepFace。
  • 2015年,Google 提出 FaceNet。
  • 2018年,ArcFace 成为人脸识别领域的主流算法。

五、人脸比对

获取了人脸特征后,对于不同人脸图像,通过比对其人脸特征之间的距离远近,就可以判断人脸身份。
在 Python 中,OpenCV 提供的 cv2.FaceRecognizerSF 模块可以用于人脸识别任务,match 是其方法之一,用于比较两个特征向量之间的相似度。以下是 facerecognizer.match 方法的详细介绍:

函数原型
cv2.FaceRecognizerSF.match(face1: numpy.ndarray, face2: numpy.ndarray, disType: int = 0) -> float
参数说明
  1. face1

    • 类型: numpy.ndarray
    • 描述: 第一个人脸的特征向量。
      • 特征向量通常由 cv2.FaceRecognizerSF.feature() 方法生成,表示人脸的深度特征。
  2. face2

    • 类型: numpy.ndarray
    • 描述: 第二个人脸的特征向量。
      • 同样通过 feature() 方法提取,用于与 face1 比较。
  3. disType

    • 类型: int
    • 描述: 指定距离度量的类型,用于衡量两个特征向量之间的相似性。
    • 可选值:
      • 0 (cv2.FaceRecognizerSF.FR_COSINE): 使用余弦相似度。
      • 1 (cv2.FaceRecognizerSF.FR_NORM_L2): 使用 L2 范数(欧几里得距离)。
返回值
  • 类型: float
  • 描述: 返回两个特征向量的相似度分数。
    • 对于余弦相似度,值越大表示越相似(最大值为1)。
    • 对于 L2 范数,值越小表示越相似。

六、开源项目盘点

  • CompreFace
  • Deepface
  • InsightFace
  • Face Recognition
  • FaceNet
  • OpenFace

相关文章:

【计算机视觉】人脸识别

一、简介 人脸识别是将图像或者视频帧中的人脸与数据库中的人脸进行对比,判断输入人脸是否与数据库中的某一张人脸匹配,即判断输入人脸是谁或者判断输入人脸是否是数据库中的某个人。 人脸识别属于1:N的比对,输入人脸身份是1&…...

linux环境变量配置文件区别 /etc/profile和~/.bash_profile

在 Linux 系统中,环境变量可以定义用户会话的行为,而这些变量的加载和配置通常涉及多个文件,如 ~/.bash_profile 和 /etc/profile。这些文件的作用和加载时机各有不同。以下是对它们的详细区别和用途的说明: 文章目录 1. 环境变量…...

mac 配置 python 环境变量

最新 mac 电脑,配置原理暂未研究,欢迎答疑 方案一 获取python的安装路径 which python3 配置环境变量 open ~/.bash_profile 末尾添加: PATH"/Library/Frameworks/Python.framework/Versions/3.13/bin:${PATH}" export PATH …...

终极的复杂,是简单

软件仿真拥有最佳的信号可见性和调试灵活性,能够高效捕获很多显而易见的常见错误,被大多数工程师熟练使用。 空间领域应用的一套数据处理系统(Data Handling System),采用抗辐FPGA作为主处理器,片上资源只包含10752个寄存器,软仿也是个挺花时间的事。 Few ms might take …...

软件开发中的密码学(国密算法)

1.软件行业中的加解密 在软件行业中,加解密技术广泛应用于数据保护、通信安全、身份验证等多个领域。加密(Encryption)是将明文数据转换为密文的过程,而解密(Decryption)则是将密文恢复为明文的过程。以下…...

【豆包MarsCode 蛇年编程大作战】蛇形烟花

项目体验地址:项目体验地址 官方活动地址:活动地址 目录 【豆包MarsCode 蛇年编程大作战】蛇形烟花演示 引言 豆包 MarsCode介绍 项目准备 第一步:安装插件 第二步:点击豆包图标来进行使用豆包 使用豆包 MarsCodeAI助手实…...

Jmeter使用Request URL请求接口

简介 在Jmeter调试接口时,有时不清楚后端服务接口的具体路径,可以使用Request URL和cookie来实现接口请求。以下内容以使用cookie鉴权的接口举例。 步骤 ① 登录网站后获取具体的Request URL和cookie信息 通过浏览器获取到Request URL和cookie&#…...

使用Pytest Fixtures来提升TestCase的可读性、高效性

关注开源优测不迷路 大数据测试过程、策略及挑战 测试框架原理,构建成功的基石 在自动化测试工作之前,你应该知道的10条建议 在自动化测试中,重要的不是工具 在编写单元测试时,你是否发现自己有很多重复代码? 数据库设…...

Arduino大师练成手册 -- 读取DHT11

要在 Arduino 上控制 DHT11 温湿度传感器,你可以按照以下步骤进行: 硬件连接: 将 DHT11 的 VCC 引脚连接到 Arduino 的 5V 引脚。 将 DHT11 的 GND 引脚连接到 Arduino 的 GND 引脚。 将 DHT11 的 DATA 引脚连接到 Arduino 的数字引脚&am…...

【Jave全栈】Java与JavaScript比较

文章目录 前言一、Java1、 历史与背景2、语言特点3、应用场景4、生态系统 二、JavaScript1、历史与背景2、语言特点3、应用场景4、 生态系统 三、相同点四、不同点1、语言类型2、用途3、语法和结构4、性能5、生态系统6、开发模式 前言 Java和JavaScript是两种不同的编程语言&a…...

【高项】6.2 定义活动 ITTO

定义活动是识别和记录为完成项目可交付成果而须采取的具体行动的过程。 作用:将工作包分解为进度活动,作为对项目工作进行进度估算、规划、执行、监督和控制的基础 输入 项目管理计划 ① 进度管理计划:定义进度计划方法、滚动式规划的持续…...

openlava/LSF 用户组管理脚本

背景 在openlava运维中经常需要自动化一些常规操作,比如增加用户组以及组成员、删除用户组成员、删除用户组等。而openlava的配置文件需要手动修改,然后再通过badmin reconfig激活配置。因此开发脚本将手工操作自动化就很有必要。 通过将脚本中的User…...

数据结构与算法之贪心: LeetCode 649. Dota2 参议院 (Ts版)

Dota2 参议院 https://leetcode.cn/problems/dota2-senate/ 描述 Dota2 的世界里有两个阵营:Radiant(天辉)和 Dire(夜魇) Dota2 参议院由来自两派的参议员组成。现在参议院希望对一个 Dota2 游戏里的改变作出决定。…...

西藏酥油茶:高原上的醇香温暖

西藏酥油茶:高原上的醇香温暖 在西藏高原,有一种饮品,它不仅滋养了一代又一代的藏民,还承载着丰富的文化与历史,它就是西藏酥油茶。酥油茶,藏语称为“恰苏玛”,意为搅动的茶,是藏族人民日常生活中不可或缺的一部分,更是待客、祭祀等活动中的重要礼仪物品。 历史与文化渊源 酥…...

【模型】RNN模型详解

1. 模型架构 RNN(Recurrent Neural Network)是一种具有循环结构的神经网络,它能够处理序列数据。与传统的前馈神经网络不同,RNN通过将当前时刻的输出与前一时刻的状态(或隐藏层)作为输入传递到下一个时刻&…...

C++----STL(list)

介绍 list的数据结果是一个带头双向链表。 使用 有了前面string、vector的基础,后续关于list使用的讲解主要提及与string和vector的不同之处。 使用文档:cplusplus.com/reference/list/list/?kwlist 迭代器问题 insert以后迭代器不失效 #include…...

数据结构——AVL树的实现

Hello,大家好,这一篇博客我们来讲解一下数据结构中的AVL树这一部分的内容,AVL树属于是数据结构的一部分,顾名思义,AVL树是一棵特殊的搜索二叉树,我们接下来要讲的这篇博客是建立在了解搜索二叉树这个知识点…...

知识图谱在个性化推荐中的应用:赋能智能化未来

目录 前言1. 知识图谱的基本概念2. 个性化推荐的挑战与知识图谱的优势2.1 个性化推荐的主要挑战2.2 知识图谱在个性化推荐中的优势 3. 知识图谱赋能推荐系统的具体实现3.1 数据增强与关系建模3.2 嵌入技术的应用3.3 图神经网络(GNN)的应用3.4 多模态数据…...

C语言自定义数据类型详解(一)——结构体类型(上)

什么是自定义数据类型呢?顾名思义,就是我们用户自己定义和设置的类型。 在C语言中,我们的自定义数据类型一共有三种,它们分别是:结构体(struct),枚举(enum),联合(union)。接下来,我…...

使用 Tailwind CSS + PostCSS 实现响应式和可定制化的前端设计

随着前端开发框架和工具的不断更新,设计和样式的管理已经成为前端开发中的一项核心任务。传统的 CSS 编写方式往往让样式的复用和可维护性变得困难,而 Tailwind CSS 和 PostCSS 作为当下流行的工具,提供了强大的功能来简化开发过程&#xff0…...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...

C++:std::is_convertible

C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议&#xff08;EPSFD 2025&#xff09;将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会&#xff0c;EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

在rocky linux 9.5上在线安装 docker

前面是指南&#xff0c;后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

css的定位(position)详解:相对定位 绝对定位 固定定位

在 CSS 中&#xff0c;元素的定位通过 position 属性控制&#xff0c;共有 5 种定位模式&#xff1a;static&#xff08;静态定位&#xff09;、relative&#xff08;相对定位&#xff09;、absolute&#xff08;绝对定位&#xff09;、fixed&#xff08;固定定位&#xff09;和…...

什么是Ansible Jinja2

理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具&#xff0c;可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板&#xff0c;允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板&#xff0c;并通…...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)

前言&#xff1a; 最近在做行为检测相关的模型&#xff0c;用的是时空图卷积网络&#xff08;STGCN&#xff09;&#xff0c;但原有kinetic-400数据集数据质量较低&#xff0c;需要进行细粒度的标注&#xff0c;同时粗略搜了下已有开源工具基本都集中于图像分割这块&#xff0c…...

AGain DB和倍数增益的关系

我在设置一款索尼CMOS芯片时&#xff0c;Again增益0db变化为6DB&#xff0c;画面的变化只有2倍DN的增益&#xff0c;比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析&#xff1a; 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...

【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制

使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下&#xff0c;限制某个 IP 的访问频率是非常重要的&#xff0c;可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案&#xff0c;使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...

比较数据迁移后MySQL数据库和OceanBase数据仓库中的表

设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...