网站建设与应用岗位/十大放黄不登录不收费
1. 项目简介
本项目旨在实现基于眼部特征的眨眼检测,通过监测眼睛开闭状态来计算眨眼次数,从而应用于疲劳监测、注意力检测等场景。使用了面部特征点检测算法,以及眼部特征比率(EAR, Eye Aspect Ratio)来判断眼睛的闭合状态。当EAR值低于设定的阈值时,系统判定为眨眼。整个项目采用了Dlib库进行面部特征点定位,并使用OpenCV进行视频流的实时处理和可视化。通过设定合适的阈值和连续帧数参数,该模型能够准确判断并统计眨眼次数。该项目适用于基于视频流的实时眨眼检测场景,并可进一步扩展到疲劳驾驶检测、医疗健康监测以及基于表情的交互应用中。
2.技术创新点摘要
- 基于面部特征点的眼部状态检测: 代码使用Dlib库进行面部特征点检测,并通过预测68个关键点来定位眼部区域。该方法能够精确定位每个关键点的位置,确保眼部区域的检测具有较高的准确性。相比于传统的基于像素的眼部检测方法,这种基于特征点的方式更加鲁棒,能够在不同光照、角度和面部姿态下保持稳定的检测效果。
- 提出眼部特征比率(EAR)的判定机制: 项目中定义了眼部特征比率(EAR, Eye Aspect Ratio),通过计算眼部竖直方向的两个特征点距离与水平方向的距离比值,动态反映眼睛的开闭状态。这一比率的设计能够在眨眼时有效地捕捉眼部变化,并且与传统的基于面积或形状的检测方法相比,受噪声干扰较小。同时,EAR的阈值判定法具有较强的普适性,不同用户仅需微调参数即可适应多种应用场景。
- 实时眨眼检测与连续帧闭合判定: 在项目中,通过实时视频流获取用户眼部图像并进行处理,利用EAR值与预设阈值进行实时判定。创新地引入了“连续帧闭合判定”机制,即只有当眼部EAR值连续多帧低于设定阈值时,才计为一次有效的眨眼行为。该机制避免了因瞬时噪声或轻微眼部动作(如快速眨眼或眼球移动)引起的误判,提升了检测的精度和可靠性。
- 可视化与交互设计: 该项目在实时检测过程中提供了可视化展示,包括眨眼次数统计、EAR值的动态变化以及眼部轮廓的实时标注。通过这种可视化方式,用户能够直观地了解系统的检测状态,从而提升了模型的可解释性与交互体验。
3. 数据集与预处理
本项目的眨眼检测主要依赖于视频流数据和面部特征点检测模型进行实时处理,因此数据集以动态视频帧为主,并通过Dlib提供的预训练面部特征点模型来提取特征。视频源可以是实时摄像头输入或预录制的视频文件,通过OpenCV进行逐帧处理。该项目不直接使用大规模的图像数据集,而是通过Dlib模型的shape_predictor_68_face_landmarks.dat
权重文件来对面部进行特征点定位。特征点数据能够精准定位眼睛、嘴巴、鼻子等关键面部区域,因此,项目中没有传统数据集的标注步骤,而是基于特征点模型的输出进行二次处理。
在数据预处理方面,该项目采取了以下步骤:
- 图像尺寸调整: 每帧图像在输入时会被统一调整到指定大小(宽度1200像素),保证所有帧的尺度一致,从而避免因不同视频分辨率带来的计算误差。此外,项目通过OpenCV对帧数据进行灰度化处理,减少色彩冗余,提升检测速度和准确性。
- 面部特征点提取: 使用Dlib的面部检测器(
detector = dlib.get_frontal_face_detector()
)来检测每一帧中的人脸区域,并通过68个面部特征点预测模型(shape_predictor
)提取关键点坐标,主要关注眼部区域的特征点。然后将提取的特征点转换为Numpy数组格式,便于后续计算和处理。 - 眼部区域特征工程: 项目中定义了眼部特征比率(EAR)作为核心判定特征。通过计算左眼和右眼的竖直与水平距离比率,并进一步结合两眼的平均值来判断眼部状态。EAR特征能够有效区分眨眼和非眨眼状态,是项目的重要特征工程步骤。
4. 模型架构
- 模型结构的逻辑
本项目主要使用传统的计算机视觉方法,而非典型的深度学习神经网络模型。其核心检测部分依赖于基于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=(x2−x6)2+(y2−y6)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=(x3−x5)2+(y3−y5)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=(x1−x4)2+(y1−y4)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值计算、阈值判定、以及可视化输出几个步骤组成。所有这些步骤在代码中被集成在同一个脚本中,以逐帧的方式处理视频流。
- 模型的整体训练流程与评估指标
由于本项目并非深度学习模型,因此没有典型的训练流程和神经网络的训练阶段。相反,它主要依赖于预训练的Dlib面部特征点检测模型(shape_predictor_68_face_landmarks.dat
),该模型本身已经通过大规模的人脸关键点数据集进行训练。
项目的整体工作流程如下:
- 模型加载与参数初始化: 首先通过Dlib加载面部特征点检测模型,并初始化EAR阈值与连续帧检测参数。
- 视频流逐帧处理: 从输入视频或实时摄像头中逐帧读取图像,并转换为灰度图以提升检测速度。
- 面部特征点检测: 使用Dlib模型在每一帧中检测人脸,并定位眼部的6个关键点坐标。
- EAR值计算与判定: 基于提取的眼部特征点,逐帧计算EAR值,并与预设阈值进行比较,判断当前帧是否为眨眼状态。
- 眨眼次数统计与可视化: 当连续帧数低于阈值时,判定为一次眨眼,并在总次数上累加,同时在图像中实时显示眨眼次数。
评估指标:
该项目没有传统模型训练的评估指标,如损失函数或精确度,但可通过以下两个指标来评估其效果:
- 眨眼检测准确率: 即检测到的眨眼次数与实际眨眼次数的比例。
- 误报率(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. 模型优缺点评价
优点:
- 轻量化与实时性: 本项目采用传统的计算机视觉方法(面部特征点检测与EAR值计算),而非复杂的深度学习模型,能够在普通CPU上实现实时的眨眼检测,具有较低的计算开销,适合于移动设备或嵌入式系统的应用。
- 特征工程稳定性: 通过EAR(眼部特征比率)这一简单而有效的几何特征来判断眼睛的开闭状态,避免了传统基于像素点或面积的特征易受光线和噪声干扰的问题。同时,EAR对不同用户的眼部形状具有较好的鲁棒性,适用范围广。
- 高可解释性: 使用几何比率来描述眼睛状态,模型输出的EAR值能够直接反映当前眼部状态的变化,使得模型的行为具有较高的可解释性。
缺点:
- 对人脸检测器依赖较高: 该项目依赖于Dlib的人脸检测与特征点定位模型,因此在实际应用中,人脸姿态变化、部分遮挡或光照变化会导致特征点定位不准,从而影响EAR的计算结果,导致检测精度下降。
- 缺乏深度学习特征表示: EAR值作为单一的几何特征,在处理复杂场景(如快速眨眼、疲劳检测)时可能存在误判,无法有效捕捉更多上下文信息或复杂表情。
- 缺乏适应性: EAR阈值与连续帧数阈值是通过人工设定的超参数,对不同用户或不同视频数据源的适应性差,可能需要频繁调整参数。
模型改进方向:
- 引入深度学习模型: 考虑使用卷积神经网络(CNN)或更复杂的模型(如LSTM、RNN)来捕捉视频中的时间序列特征,通过端到端训练来提升模型对复杂场景的鲁棒性。
- 改进人脸检测与特征点提取方法: 可以引入更先进的面部特征点检测模型(如OpenFace或MediaPipe),提升对不同姿态、光照和遮挡情况的检测效果。
- 参数自适应调整: 采用自适应参数调整策略,或通过深度学习模型自动学习不同用户的特征,使系统能够在不同应用场景下自我优化。
↓↓↓更多热门推荐:
transformers和bert实现微博情感分类模型提升
基于ResNet50模型的船型识别与分类系统研究
全部项目数据集、代码、教程进入官网zzgcz.com
相关文章:

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

aeo认证需要什么材料
AEO(Authorized Economic Operator)认证,即经认证的经营者认证,是企业信用管理体系的一种高级认证。申请AEO认证时,企业需要准备一系列的材料以证明其符合认证标准。以下是一份详细的AEO认证申请材料清单: …...

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

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

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

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

记录一次从nacos配置信息泄露到redis写计划任务接管主机
经典c段打点开局。使用dddd做快速的打点发现某系统存在nacos权限绕过 有点怀疑是蜜罐,毕竟nacos这实在是有点经典 nacos利用 老规矩见面先上nacos利用工具打一波看看什么情况 弱口令nacos以及未授权访问,看这记录估计被光顾挺多次了啊 手动利用Nacos-…...

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

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

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

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

XHCI 1.2b 规范摘要(五)
系列文章目录 XHCI 1.2b 规范摘要(一) XHCI 1.2b 规范摘要(二) XHCI 1.2b 规范摘要(三) XHCI 1.2b 规范摘要(四) XHCI 1.2b 规范摘要(五) 文章目录 系列文章目…...

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

C++进阶之路:再谈构造函数、static成员、友元(类与对象_下篇)
✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…...

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

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

三种单例实现
1、不继承Mono的单例 实现 使用 注: 使用需要继承BaseManager 泛型填写自己本身 需要实现无参构造函数 2、挂载式的Mono单例 实现 使用 注: 使用需要继承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.题目代码: 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…...

WPF中Grid、StackPanel、Canvas、WrapPanel的区别
WPF 中的 Grid、StackPanel、Canvas 和 WrapPanel 都是布局控件,用于在用户界面中组织和排列元素,但它们各自有不同的布局行为和用途。以下是它们的主要区别: Grid: Grid 是最灵活的布局控件,类似于 HTML 中的表格&…...

昇思MindSpore进阶教程--开发常见问题
大家好,我是刘明,明志科技创始人,华为昇思MindSpore布道师。 技术上主攻前端开发、鸿蒙开发和AI算法研究。 努力为大家带来持续的技术分享,如果你也喜欢我的文章,就点个关注吧 MindSpore官网提供了一份在使用MindSpore…...

【Linux】Linux进程地址空间
1.程序地址空间分配回顾 在前⾯C语⾔以及C部分介绍过⼆者的内存分配如下图所示: 全局变量区和未初始化全局变量区也被称为数据区,数据区中除了有全局变 量,还有静态变量和常量 使⽤下⾯的代码演示不同的内容所处的地址: #includ…...

创建包含可导入浏览器信任的SSL自签名证书
问题:现在的三大浏览器,chrome、edge、firefox 一般都默认启用https检查,这就要求我们自建的局域网内的网址和其他诸如nextcloud、photoprism、tiddlywiki等应用也必须要有证书。解决方法是使用openssl自己生成一个。由此则会再衍生出一个问题…...

[Windows] 很火的开源桌面美化工具 Seelen UI v2.0.2
最近,一款来自Github的开源桌面美化工具突然在网上火了起来,引发了大家的关注,不少小伙伴纷纷开始折腾了起来。而折腾的目的,无非是为了一点点乐趣而已,至于结果如何,并不是最要紧的,反倒是体验…...

华帝携手抖音头部达人,金牌导演李力持量身打造厨电定制微短剧
10月21日,由华帝独家冠名,金牌导演李力持执导,抖音头部达人逆袭丁姐领衔主演,ATV亚洲电视、知行易达、抖音商城联合出品的24集现代家庭治愈美食定制微短剧《女厨神》上线抖音。 该剧讲述了热爱生活和美食的丁姐,为了家…...

监控易监测对象及指标之:JBoss 7.1.x中间件监控
监控易是一款功能全面的监控软件,能够实时追踪和分析各类IT资源的性能数据,提供及时的故障预警和性能报告。本文将对监控易针对JBoss 7.1.x中间件的监控指标进行深入解读,以帮助用户更好地理解和应用这些数据。 JBoss 7.1.x作为一款广泛使用的…...

Java 模拟退火算法
模拟退火算法(Simulated Annealing, SA)是一种用于全局优化的启发式搜索算法,它模仿了物理学中金属退火的过程。该算法在搜索空间中逐步降低“温度”,以寻找全局最优解。下面是一个用Java实现模拟退火算法的简单示例。 假设我们要…...

LeetCode[中等] 80. 删除有序数组中的重复项 II
给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。 public cl…...

机器学习5
1.1 决策树的定义 决策树是用于分类和回归的机器学习算法。它通过一系列的“是或否”的决策来分类数据。每个决策是基于数据的某个属性进行的,如“色泽是青绿吗?”。决策树的核心是通过树状结构,将一个复杂的问题逐步拆解为多个简单的二元问…...