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

基于opencv的人脸闭眼识别疲劳监测


1. 项目简介

本项目旨在实现基于眼部特征的眨眼检测,通过监测眼睛开闭状态来计算眨眼次数,从而应用于疲劳监测、注意力检测等场景。使用了面部特征点检测算法,以及眼部特征比率(EAR, Eye Aspect Ratio)来判断眼睛的闭合状态。当EAR值低于设定的阈值时,系统判定为眨眼。整个项目采用了Dlib库进行面部特征点定位,并使用OpenCV进行视频流的实时处理和可视化。通过设定合适的阈值和连续帧数参数,该模型能够准确判断并统计眨眼次数。该项目适用于基于视频流的实时眨眼检测场景,并可进一步扩展到疲劳驾驶检测、医疗健康监测以及基于表情的交互应用中。

在这里插入图片描述

2.技术创新点摘要

  1. 基于面部特征点的眼部状态检测: 代码使用Dlib库进行面部特征点检测,并通过预测68个关键点来定位眼部区域。该方法能够精确定位每个关键点的位置,确保眼部区域的检测具有较高的准确性。相比于传统的基于像素的眼部检测方法,这种基于特征点的方式更加鲁棒,能够在不同光照、角度和面部姿态下保持稳定的检测效果。
  2. 提出眼部特征比率(EAR)的判定机制: 项目中定义了眼部特征比率(EAR, Eye Aspect Ratio),通过计算眼部竖直方向的两个特征点距离与水平方向的距离比值,动态反映眼睛的开闭状态。这一比率的设计能够在眨眼时有效地捕捉眼部变化,并且与传统的基于面积或形状的检测方法相比,受噪声干扰较小。同时,EAR的阈值判定法具有较强的普适性,不同用户仅需微调参数即可适应多种应用场景。
  3. 实时眨眼检测与连续帧闭合判定: 在项目中,通过实时视频流获取用户眼部图像并进行处理,利用EAR值与预设阈值进行实时判定。创新地引入了“连续帧闭合判定”机制,即只有当眼部EAR值连续多帧低于设定阈值时,才计为一次有效的眨眼行为。该机制避免了因瞬时噪声或轻微眼部动作(如快速眨眼或眼球移动)引起的误判,提升了检测的精度和可靠性。
  4. 可视化与交互设计: 该项目在实时检测过程中提供了可视化展示,包括眨眼次数统计、EAR值的动态变化以及眼部轮廓的实时标注。通过这种可视化方式,用户能够直观地了解系统的检测状态,从而提升了模型的可解释性与交互体验。

3. 数据集与预处理

本项目的眨眼检测主要依赖于视频流数据和面部特征点检测模型进行实时处理,因此数据集以动态视频帧为主,并通过Dlib提供的预训练面部特征点模型来提取特征。视频源可以是实时摄像头输入或预录制的视频文件,通过OpenCV进行逐帧处理。该项目不直接使用大规模的图像数据集,而是通过Dlib模型的shape_predictor_68_face_landmarks.dat权重文件来对面部进行特征点定位。特征点数据能够精准定位眼睛、嘴巴、鼻子等关键面部区域,因此,项目中没有传统数据集的标注步骤,而是基于特征点模型的输出进行二次处理。

在数据预处理方面,该项目采取了以下步骤:

  1. 图像尺寸调整: 每帧图像在输入时会被统一调整到指定大小(宽度1200像素),保证所有帧的尺度一致,从而避免因不同视频分辨率带来的计算误差。此外,项目通过OpenCV对帧数据进行灰度化处理,减少色彩冗余,提升检测速度和准确性。
  2. 面部特征点提取: 使用Dlib的面部检测器(detector = dlib.get_frontal_face_detector())来检测每一帧中的人脸区域,并通过68个面部特征点预测模型(shape_predictor)提取关键点坐标,主要关注眼部区域的特征点。然后将提取的特征点转换为Numpy数组格式,便于后续计算和处理。
  3. 眼部区域特征工程: 项目中定义了眼部特征比率(EAR)作为核心判定特征。通过计算左眼和右眼的竖直与水平距离比率,并进一步结合两眼的平均值来判断眼部状态。EAR特征能够有效区分眨眼和非眨眼状态,是项目的重要特征工程步骤。

4. 模型架构

  1. 模型结构的逻辑

本项目主要使用传统的计算机视觉方法,而非典型的深度学习神经网络模型。其核心检测部分依赖于基于Dlib库的面部特征点检测算法,并未使用典型的卷积神经网络(CNN)或循环神经网络(RNN)模型。项目的关键算法部分包括以下结构逻辑:

  • 面部特征点检测模型: 使用Dlib的shape_predictor来检测面部的68个关键点,该模型是基于监督学习的回归树(Regression Trees)算法实现的。它通过逐步调整面部区域的坐标,最终确定68个特征点的精确位置。模型输入为图像的灰度值矩阵,输出为面部68个关键点的二维坐标。
  • 眼部特征比率(Eye Aspect Ratio, EAR)计算: 通过面部特征点定位获取眼部区域(左眼和右眼各6个点),定义竖直方向上的点对距离为 A 和 B,水平方向的点对距离为 C。具体公式如下:

A = ( x 2 − x 6 ) 2 + ( y 2 − y 6 ) 2 A = \sqrt{(x_2 - x_6)^2 + (y_2 - y_6)^2} A=(x2x6)2+(y2y6)2

B = ( x 3 − x 5 ) 2 + ( y 3 − y 5 ) 2 B = \sqrt{(x_3 - x_5)^2 + (y_3 - y_5)^2} B=(x3x5)2+(y3y5)2

C = ( x 1 − x 4 ) 2 + ( y 1 − y 4 ) 2 C = \sqrt{(x_1 - x_4)^2 + (y_1 - y_4)^2} C=(x1x4)2+(y1y4)2

其中,(x1,y1) 到 (x6,y6) 表示眼睛周围的6个关键点。眼部特征比率(EAR)的定义如下:

E A R = A + B 2 × C EAR = \frac{A + B}{2 \times C} EAR=2×CA+B

EAR值反映了眼睛的开合状态,当EAR值低于某个设定的阈值时,即判断为眨眼状态。

  • 阈值判定与计数机制: 在模型中设定了两个关键参数:EAR阈值(EYE_AR_THRESH = 0.3)和连续帧计数阈值(EYE_AR_CONSEC_FRAMES = 3)。当EAR值低于0.3且连续低于3帧时,系统会判定为一次有效的眨眼行为,并在计数器中累加。

整体来看,本项目的结构较为简单,主要由图像预处理、面部特征点检测、EAR值计算、阈值判定、以及可视化输出几个步骤组成。所有这些步骤在代码中被集成在同一个脚本中,以逐帧的方式处理视频流。

  1. 模型的整体训练流程与评估指标

由于本项目并非深度学习模型,因此没有典型的训练流程和神经网络的训练阶段。相反,它主要依赖于预训练的Dlib面部特征点检测模型(shape_predictor_68_face_landmarks.dat),该模型本身已经通过大规模的人脸关键点数据集进行训练。

项目的整体工作流程如下:

  1. 模型加载与参数初始化: 首先通过Dlib加载面部特征点检测模型,并初始化EAR阈值与连续帧检测参数。
  2. 视频流逐帧处理: 从输入视频或实时摄像头中逐帧读取图像,并转换为灰度图以提升检测速度。
  3. 面部特征点检测: 使用Dlib模型在每一帧中检测人脸,并定位眼部的6个关键点坐标。
  4. EAR值计算与判定: 基于提取的眼部特征点,逐帧计算EAR值,并与预设阈值进行比较,判断当前帧是否为眨眼状态。
  5. 眨眼次数统计与可视化: 当连续帧数低于阈值时,判定为一次眨眼,并在总次数上累加,同时在图像中实时显示眨眼次数。

评估指标:

该项目没有传统模型训练的评估指标,如损失函数或精确度,但可通过以下两个指标来评估其效果:

  • 眨眼检测准确率: 即检测到的眨眼次数与实际眨眼次数的比例。
  • 误报率(False Positive Rate, FPR): 系统误判为眨眼的帧数与总检测帧数的比例。

5. 核心代码详细讲解

1. 面部特征点定位与初始化
detector = dlib.get_frontal_face_detector()
predictor = dlib.shape_predictor(args["shape_predictor"])

详细解释:

  • detector = dlib.get_frontal_face_detector(): 这行代码使用 dlib 的内置函数 get_frontal_face_detector() 加载一个预训练的人脸检测器。该检测器采用基于方向梯度直方图(HOG, Histogram of Oriented Gradients)和线性分类器的方法来快速定位图像中的人脸位置,返回的是一个 detector 对象。这个对象用于检测输入图像中的人脸区域。
  • predictor = dlib.shape_predictor(args["shape_predictor"]): 该行代码加载了预训练的面部特征点模型 shape_predictor。这个模型通常是 shape_predictor_68_face_landmarks.dat 文件,用于检测人脸中的68个关键点(例如眼睛、鼻子、嘴巴、下巴等位置)。它将返回一个 predictor 对象,该对象可用于进一步获取每个面部特征点的坐标。
2. EAR(眼部特征比率)计算函数
def eye_aspect_ratio(eye):A = dist.euclidean(eye[1], eye[5])B = dist.euclidean(eye[2], eye[4])C = dist.euclidean(eye[0], eye[3])ear = (A + B) / (2.0 * C)return ear

详细解释:

  • def eye_aspect_ratio(eye): 定义了一个名为 eye_aspect_ratio 的函数,该函数用于计算眼睛的特征比率(EAR)。它的输入参数 eye 是一个包含6个面部关键点坐标的列表,表示当前帧中检测到的一个眼部区域。
  • A = dist.euclidean(eye[1], eye[5]): 使用 scipy.spatial.distance 模块中的 euclidean 函数计算眼部竖直方向上两个点(第2个点和第6个点)之间的欧氏距离。该值存储在变量 A 中。
  • B = dist.euclidean(eye[2], eye[4]): 计算竖直方向上另一对点(第3个点和第5个点)之间的距离,并存储在变量 B 中。
  • C = dist.euclidean(eye[0], eye[3]): 计算水平方向上两个端点(第1个点和第4个点)之间的距离,并存储在变量 C 中。
  • ear = (A + B) / (2.0 * C): 根据EAR公式 EAR=A+B2×C\text{EAR} = \frac{A + B}{2 \times C}EAR=2×CA+B 计算眼睛的特征比率。该比率反映了眼睛的开闭程度,EAR值越低表示眼睛越闭合。
  • return ear: 返回当前眼部区域的EAR值。
3. 逐帧处理与眼部状态判断
if ear < EYE_AR_THRESH:COUNTER += 1else:if COUNTER >= EYE_AR_CONSEC_FRAMES:TOTAL += 1COUNTER = 0

详细解释:

  • if ear < EYE_AR_THRESH: 检查计算得到的 ear 值是否小于设定的阈值 EYE_AR_THRESH(在代码中设定为0.3)。如果 ear 值小于该阈值,表示眼睛处于闭合状态。
  • COUNTER += 1: 当眼睛处于闭合状态时,累加闭眼计数器 COUNTER。这个计数器用于统计当前连续闭眼的帧数。
  • else: 如果 ear 值大于或等于阈值,表示眼睛处于睁开状态,进入 else 分支。
  • if COUNTER >= EYE_AR_CONSEC_FRAMES: 检查 COUNTER 是否大于等于设定的连续帧阈值 EYE_AR_CONSEC_FRAMES(设定为3)。这表示眼睛已经连续闭合了3帧,判定为一次有效的眨眼行为。
  • TOTAL += 1: 当满足连续闭眼帧数条件时,眨眼总数 TOTAL 加1。
  • COUNTER = 0: 重置 COUNTER 计数器,表示从当前帧开始重新统计。
4. 实时视频流处理与展示
cv2.putText(frame, "Blinks: {}".format(TOTAL), (10, 30),cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2)
cv2.putText(frame, "EAR: {:.2f}".format(ear), (300, 30),cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2)

详细解释:

  • cv2.putText(frame, "Blinks: {}".format(TOTAL), (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2): 使用 OpenCV 的 putText 函数在当前帧 frame 中显示文本信息。文本内容为当前检测到的眨眼总次数 TOTAL,显示位置为图像左上角(坐标 (10, 30)),字体类型为 FONT_HERSHEY_SIMPLEX,字体大小为 0.7,颜色为红色 (0, 0, 255),粗细为2。
  • cv2.putText(frame, "EAR: {:.2f}".format(ear), (300, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2): 显示当前帧中计算的 EAR 值(保留两位小数),显示位置为图像的 (300, 30),格式与上一行相同。这些实时信息有助于用户直观地看到当前检测状态。
5. 视频流结束与资源释放
vs.release()
cv2.destroyAllWindows()

详细解释:

  • vs.release(): 释放视频流对象 vs 占用的资源,确保程序退出时不会发生内存泄漏或资源占用。
  • cv2.destroyAllWindows(): 关闭所有由 OpenCV 创建的窗口。该行代码用于清理与视频流处理相关的可视化窗口,保证程序顺利退出。

6. 模型优缺点评价

优点:

  1. 轻量化与实时性: 本项目采用传统的计算机视觉方法(面部特征点检测与EAR值计算),而非复杂的深度学习模型,能够在普通CPU上实现实时的眨眼检测,具有较低的计算开销,适合于移动设备或嵌入式系统的应用。
  2. 特征工程稳定性: 通过EAR(眼部特征比率)这一简单而有效的几何特征来判断眼睛的开闭状态,避免了传统基于像素点或面积的特征易受光线和噪声干扰的问题。同时,EAR对不同用户的眼部形状具有较好的鲁棒性,适用范围广。
  3. 高可解释性: 使用几何比率来描述眼睛状态,模型输出的EAR值能够直接反映当前眼部状态的变化,使得模型的行为具有较高的可解释性。

缺点:

  1. 对人脸检测器依赖较高: 该项目依赖于Dlib的人脸检测与特征点定位模型,因此在实际应用中,人脸姿态变化、部分遮挡或光照变化会导致特征点定位不准,从而影响EAR的计算结果,导致检测精度下降。
  2. 缺乏深度学习特征表示: EAR值作为单一的几何特征,在处理复杂场景(如快速眨眼、疲劳检测)时可能存在误判,无法有效捕捉更多上下文信息或复杂表情。
  3. 缺乏适应性: EAR阈值与连续帧数阈值是通过人工设定的超参数,对不同用户或不同视频数据源的适应性差,可能需要频繁调整参数。

模型改进方向:

  1. 引入深度学习模型: 考虑使用卷积神经网络(CNN)或更复杂的模型(如LSTM、RNN)来捕捉视频中的时间序列特征,通过端到端训练来提升模型对复杂场景的鲁棒性。
  2. 改进人脸检测与特征点提取方法: 可以引入更先进的面部特征点检测模型(如OpenFace或MediaPipe),提升对不同姿态、光照和遮挡情况的检测效果。
  3. 参数自适应调整: 采用自适应参数调整策略,或通过深度学习模型自动学习不同用户的特征,使系统能够在不同应用场景下自我优化。

↓↓↓更多热门推荐:
transformers和bert实现微博情感分类模型提升
基于ResNet50模型的船型识别与分类系统研究

全部项目数据集、代码、教程进入官网zzgcz.com

相关文章:

基于opencv的人脸闭眼识别疲劳监测

1. 项目简介 本项目旨在实现基于眼部特征的眨眼检测&#xff0c;通过监测眼睛开闭状态来计算眨眼次数&#xff0c;从而应用于疲劳监测、注意力检测等场景。使用了面部特征点检测算法&#xff0c;以及眼部特征比率&#xff08;EAR, Eye Aspect Ratio&#xff09;来判断眼睛的闭…...

aeo认证需要什么材料

AEO&#xff08;Authorized Economic Operator&#xff09;认证&#xff0c;即经认证的经营者认证&#xff0c;是企业信用管理体系的一种高级认证。申请AEO认证时&#xff0c;企业需要准备一系列的材料以证明其符合认证标准。以下是一份详细的AEO认证申请材料清单&#xff1a; …...

【iOS】YYModel

目录 什么是YYModel &#xff1f; 如何使用YYModel &#xff1f; 最简单的Model 与网络请求结合 属性为容器类的Model 白名单和黑名单 Model的嵌套 结语 什么是YYModel &#xff1f; YYModel是一个用于 iOS 和 macOS 开发的高性能的模型框架&#xff0c;主要用于对象和…...

Cadence元件A属性和B属性相互覆盖

最近在使用第三方插件集成到Cadence,协助导出BOM到平台上&#xff0c;方便对BOM进行管理和修改&#xff0c;结果因为属性A和属性B不相同&#xff0c;导致导出的BOM错误。如下图&#xff1a; ​​ 本来我们需要导出Q12&#xff0c;结果给我们导出了Q13&#xff0c;或者反之&…...

【火山引擎】语音合成 | HTTP接口 | 一次性合成 | python

目录 一 准备工作 二 HTTP接口(一次性合成-非流式) 1 接口说明 2 身份认证 3 请求方式 三 实践 四 注意事项 火山引擎语音合成TTS(Text-to-Speech)是一种基于云计算的语音合成服务,可以将文本转化为自然、流畅的语音。以下是火山引擎TTS的主要功能和特点: ①多种语音…...

YOLOv11改进-卷积-空间和通道重构卷积SCConv

本篇文章将介绍一个新的改进模块——SCConv&#xff08;小波空间和通道重构卷积&#xff09;&#xff0c;并阐述如何将其应用于YOLOv11中&#xff0c;显著提升模型性能。为了减少YOLOv11模型的空间和通道维度上的冗余&#xff0c;我们引入空间和通道重构卷积。首先&#xff0c;…...

记录一次从nacos配置信息泄露到redis写计划任务接管主机

经典c段打点开局。使用dddd做快速的打点发现某系统存在nacos权限绕过 有点怀疑是蜜罐&#xff0c;毕竟nacos这实在是有点经典 nacos利用 老规矩见面先上nacos利用工具打一波看看什么情况 弱口令nacos以及未授权访问&#xff0c;看这记录估计被光顾挺多次了啊 手动利用Nacos-…...

Unity加载界面制作

效果 UI部分 结构 说下思路: 因为是加载界面,所以最上层是一个Panel阻止所有的UI交互,这个Panel如果有图片就加一个图片,如果没有可以把透明度调到最大,颜色设为黑色. 下面最核心的就是一个进度条了,有图片的话,将进度条的底放进来,将进度条锚点设为下中,将滑动块的尺寸设为0.…...

最好的ppt模板网站是哪个?做PPT不可错过的18个网站!

现在有很多PPT模板网站&#xff0c;但真正免费且高质量的不多&#xff0c;今天我就分享主流的国内外PPT模板下载网站&#xff0c;并且会详细分析这些网站的优缺点&#xff0c;这些网站都是基于个人实际使用经验的&#xff0c;免费站点会特别标注&#xff0c;让你可以放心下载&a…...

煤矿安全监测监控作业题库

第一部分 安全法律法规知识子题库 单选题 1.《安全生产法》规定&#xff0c;生产经营单位应当向从业人员如实告知作业场所和工作岗位存在的(A)、防范措施以及事故应急措施。 A. 危险因素    B. 人员状况    C. 设备状况    D. 环境状况 2.《安全生产法》规定&…...

【记录】Django数据库的基础操作

数据库连接 在Django中使用 mysqlclient 这个包用于数据库的连接&#xff0c;切换至 Django环境中直接 pip install mysqlclient 安装此包 1 数据库连接配置 在项目目录下的setting.py中配置 DATABASES {default: {ENGINE: django.db.backends.mysql,NAME: mini,#数据库名US…...

XHCI 1.2b 规范摘要(五)

系列文章目录 XHCI 1.2b 规范摘要&#xff08;一&#xff09; XHCI 1.2b 规范摘要&#xff08;二&#xff09; XHCI 1.2b 规范摘要&#xff08;三&#xff09; XHCI 1.2b 规范摘要&#xff08;四&#xff09; XHCI 1.2b 规范摘要&#xff08;五&#xff09; 文章目录 系列文章目…...

小程序短链接生成教程

文章目录 一、小程序短链接&#xff08;必须发布正式的小程序才能生成短链接&#xff01;&#xff01;&#xff01;&#xff09;二、使用步骤1.获取token信息2.获取短链接 总结 一、小程序短链接&#xff08;必须发布正式的小程序才能生成短链接&#xff01;&#xff01;&#…...

C++进阶之路:再谈构造函数、static成员、友元(类与对象_下篇)

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…...

C 函数指针与回调函数

C 函数指针与回调函数 在C语言中&#xff0c;函数指针和回调函数是两个非常强大的概念&#xff0c;它们在提高代码的灵活性和模块化方面发挥着重要作用。本文将详细介绍C语言中的函数指针和回调函数&#xff0c;包括它们的定义、用法和实际应用场景。 函数指针 定义 函数指…...

CTF(九)

导言&#xff1a; 本文主要讲述在CTF竞赛网鼎杯中&#xff0c;web类题目AreUSerialz。 靶场链接&#xff1a;BUUCTF在线评测 一&#xff0c;分析代码。 看到了一大段php代码。 <?php// 引入flag.php文件 include("flag.php");// 高亮显示当前文件 highlight…...

三种单例实现

1、不继承Mono的单例 实现 使用 注&#xff1a; 使用需要继承BaseManager 泛型填写自己本身 需要实现无参构造函数 2、挂载式的Mono单例 实现 使用 注&#xff1a; 使用需要继承SingletonMono 泛型填写自己本身 需要挂载在unity引擎面板 3、不用挂载式的单例 实现 使…...

Spring XML配置方式和Spring Boot注解方式的详细对照关系

功能/配置项Spring XML配置方式Spring Boot注解方式定义Beanxml <bean id"myBean" class"com.example.MyBean"/>javaBeanpublic MyBean myBean() { return new MyBean(); }注入Beanxml <bean id"myBean" class"com.example.MyBea…...

leetcode 无重复字符串的排列和组合

1.题目要求: 2.题目代码&#xff1a; class Solution { public:vector<string> result;string str;//利用回溯去解决此问题void backtricking(string S,vector<bool>& used){if(str.size() S.size()){result.push_back(str);}//用used去掉重复的排列与组合f…...

7. 配置

三种获取配置的方法 返回 /config/config.php 、/config/autoload/xxx.php 中的值 <?php namespace App\Controller;use Hyperf\Config\Annotation\Value; use Hyperf\Contract\ConfigInterface; use Hyperf\Di\Annotation\Inject; use Hyperf\HttpServer\Annotation\AutoC…...

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面&#xff0c;开源代码 作为一个电子罗盘模块&#xff0c;我们可以通过I2C从中获取偏航角yaw&#xff0c;相对于六轴陀螺仪的yaw&#xff0c;qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年&#xff0c;作为行业领先的3D工业相机及视觉系统供应商&#xff0c;累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成&#xff0c;通过稳定、易用、高回报的AI3D视觉系统&#xff0c;为汽车、新能源、金属制造等行…...

聊一聊接口测试的意义有哪些?

目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开&#xff0c;首…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法&#xff0c;当前调用一个医疗行业的AI识别算法后返回…...

AspectJ 在 Android 中的完整使用指南

一、环境配置&#xff08;Gradle 7.0 适配&#xff09; 1. 项目级 build.gradle // 注意&#xff1a;沪江插件已停更&#xff0c;推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP

编辑-虚拟网络编辑器-更改设置 选择桥接模式&#xff0c;然后找到相应的网卡&#xff08;可以查看自己本机的网络连接&#xff09; windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置&#xff0c;选择刚才配置的桥接模式 静态ip设置&#xff1a; 我用的ubuntu24桌…...

Linux 中如何提取压缩文件 ?

Linux 是一种流行的开源操作系统&#xff0c;它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间&#xff0c;使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的&#xff0c;要在 …...

Python 实现 Web 静态服务器(HTTP 协议)

目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1&#xff09;下载安装包2&#xff09;配置环境变量3&#xff09;安装镜像4&#xff09;node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1&#xff09;使用 http-server2&#xff09;详解 …...