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

【机器学习实战入门】使用OpenCV和Keras的驾驶员疲劳检测系统

在这里插入图片描述

嗜睡驾驶者警报系统

在这里插入图片描述
防止司机疲劳驾驶警报系统
中级 Python 项目 - 司机疲劳检测系统

疲劳检测是一种安全技术,能够预防因司机在驾驶过程中入睡而造成的事故。

本中级 Python 项目的目标是建立一个疲劳检测系统,该系统将检测到一个人的眼睛闭合了一段时间。当检测到疲劳时,该系统会向司机发出警报。

司机疲劳检测系统
在这个 Python 项目中,我们将使用 OpenCV 从网络摄像头获取图像,并将其输入到一个深度学习模型中,该模型将分类人的眼睛是“睁着”还是“闭着”。我们为这个 Python 项目采用的方法如下:

步骤 1 - 从相机接收图像作为输入。

步骤 2 - 检测图像中的人脸,并创建一个感兴趣区域 (ROI)。

步骤 3 - 从 ROI 中检测眼睛,并将其输入到分类器中。

步骤 4 - 分类器将对眼睛的状态进行分类,确定是睁着还是闭着。

步骤 5 - 计算得分以检查该人是否疲劳。

司机疲劳检测数据集
用于构建这个模型的数据集是我们自行创建的。为了构建数据集,我们编写了一个脚本,该脚本从相机捕获眼睛图像并存储在本地磁盘上。我们将这些图像按照“睁着”和“闭着”两个标签进行了分类。数据经过了手动清理,移除了对构建模型不必要的图片。数据集包括在不同光照条件下大约 7000 张人眼图像。在用我们的数据集训练模型后,我们附上了模型权重和模型架构文件“models/cnnCat2.h5”。

现在,您可以使用这个模型来分类一个人的眼睛是睁着还是闭着的。

另外,如果您想构建和训练您自己的模型,您可以下载数据集:如果您想要构建和训练自己的模型,可以下载数据集:链接: 驾驶员嗜睡检测数据集
数据介绍:
Driver Drowsiness Data
The dataset consists of 2900 images which include both normal and yawning images. Dataset is divided into training and testing, which is used in the project for training and testing respectively.

It is an excellent dataset for people who want to learn machine learning techniques for driver drowsiness detection.

Sample Data:
在这里插入图片描述

模型架构
我们使用的模型是基于 Keras 构建的卷积神经网络 (CNN)。卷积神经网络是一种专门用于图像分类的深度神经网络,其表现极其出色。CNN 通常包括一个输入层、一个输出层和一个可能包含多个隐藏层的结构。卷积操作使用一个滤波器在各层上进行 2D 矩阵乘法。

CNN 模型架构包含以下层:

  • 卷积层;32 个节点,内核大小为 3
  • 卷积层;32 个节点,内核大小为 3
  • 卷积层;64 个节点,内核大小为 3
  • 全连接层;128 个节点
  • 最终层也是一个全连接层,包含 2 个节点。除了输出层使用了 Softmax 激活函数外,所有的层都使用了 ReLU 激活函数。

项目先决条件
本 Python 项目需要一个网络摄像头来捕获图像。您需要在系统上安装 Python(推荐版本 3.6),然后使用 pip 安装必要的包。

  • OpenCV - pip install opencv-python(用于脸部和眼睛检测)
  • TensorFlow - pip install tensorflow(Keras 使用 TensorFlow 作为后端)
  • Keras - pip install keras(用于构建分类模型)
  • Pygame - pip install pygame(用于播放警报声)

执行司机疲劳检测的步骤
从提供的 zip 文件中下载司机疲劳检测系统的项目源代码,并将文件解压到您的系统中:: 司机疲劳检测项目代码链接

zip 文件的内容:
在这里插入图片描述

项目文件结构 - 中级 Python 项目

“Haar 级联文件”文件夹包含用于从图像中检测对象的 xml 文件。我们的情况下,用于检测人的脸部和眼睛。
models 文件夹包含我们的模型文件“cnnCat2.h5”,该文件是在卷积神经网络上训练的。
我们有一个音频文件“alarm.wav”,在检测到人感到疲劳时会播放。
“Model.py”文件包含了我们通过训练数据集构建分类模型的程序。您可以在这个文件中看到卷积神经网络的实现。
“Drowsiness_detection.py”是我们项目的主要文件。要开始检测过程,我们需要运行这个文件。

现在我们来逐步了解算法的工作原理。

步骤 1 - 从相机接收图像作为输入

使用网络摄像头,我们将接收图像作为输入。为了访问摄像头,我们创建了一个无限循环,该循环将捕获每一帧。我们使用 OpenCV 提供的方法 cv2.VideoCapture(0) 来访问摄像头并设置捕获对象 (cap)。cap.read() 会读取每一帧,并将其存储在 frame 变量中。

步骤 2 - 检测图像中的人脸并创建感兴趣区域 (ROI)

为了在图像中检测人脸,我们首先需要将图像转换为灰度图,因为 OpenCV 的对象检测算法接受灰度图像作为输入。检测对象时我们不需要颜色信息。我们将使用 Haar 级联分类器来检测人脸。这行代码用于设置我们的分类器:face = cv2.CascadeClassifier(‘路径到我们的 Haar 级联 xml 文件’)。然后我们使用 faces = face.detectMultiScale(gray) 来完成检测任务。它返回一个检测结果数组,包含检测对象的 x 和 y 坐标,以及边界框的高度和宽度。我们现在可以遍历所有检测到的人脸,并为每个人脸绘制边界框。

for (x,y,w,h) in faces:cv2.rectangle(frame, (x,y), (x+w, y+h), (100,100,100), 1 )

步骤 3 - 从 ROI 中检测眼睛并将其输入到分类器中

使用与检测人脸相同的程序来检测眼睛。首先,我们分别在 leye 和 reye 中设置眼睛的级联分类器,然后用 left_eye = leye.detectMultiScale(gray) 来检测左眼。接下来,我们需要从完整的图像中仅提取眼睛数据。通过提取眼睛的边界框,然后使用以下代码从帧中单独拉出眼睛图像,可以实现这一点。

l_eye = frame[ y : y+h, x : x+w ]

l_eye 仅包含眼睛的图像数据。这个数据将被输入到我们的 CNN 分类器中,该分类器将预测眼睛是睁着还是闭着。同样地,我们将利用 r_eye 提取右眼。

步骤 4 - 分类器将对眼睛是睁着还是闭着进行分类

我们使用 CNN 分类器来预测眼睛状态。为了将图像输入模型,需要执行某些操作,因为模型需要正确的维度才能开始工作。首先,我们使用 r_eye = cv2.cvtColor(r_eye, cv2.COLOR_BGR2GRAY) 将彩色图像转换为灰度图。然后,我们将图像大小调整为 2424 像素,因为我们的模型是在 2424 像素的图像上训练的,cv2.resize(r_eye, (24,24))。为了更好的收敛,我们对数据进行归一化处理 r_eye = r_eye/255(所有值都在 0-1 之间)。扩展维度以输入到分类器中。我们使用 model = load_model(‘models/cnnCat2.h5’) 加载我们的模型。现在使用模型预测每个眼睛的状态

lpred = model.predict_classes(l_eye)

如果 lpred[0] 的值为 1,说明眼睛是睁着的;如果 lpred[0] 的值为 0,则说明眼睛是闭着的。

步骤 5 - 计算得分以检查该人是否疲劳

得分基本上是用于判断一个人闭眼时间的一个值。如果两个眼睛都闭着,我们将不断增加得分;眼睛睁开时,我们则减少得分。使用 cv2.putText() 函数在屏幕上绘制结果,这将显示人的实时状态。

cv2.putText(frame, “Open”, (10, height-20), font, 1, (255,255,255), 1, cv2.LINE_AA )

例如,如果得分大于 15,这意味着人的眼睛闭合了一段时间。此时,我们将使用 sound.play() 发出警报声。

主文件的源代码如下所示:

import cv2
import os
from keras.models import load_model
import numpy as np
from pygame import mixer
import time
mixer.init()
sound = mixer.Sound('alarm.wav')
face = cv2.CascadeClassifier('haar cascade files\haarcascade_frontalface_alt.xml')
leye = cv2.CascadeClassifier('haar cascade files\haarcascade_lefteye_2splits.xml')
reye = cv2.CascadeClassifier('haar cascade files\haarcascade_righteye_2splits.xml')
lbl=['Close','Open']
model = load_model('models/cnncat2.h5')
path = os.getcwd()
cap = cv2.VideoCapture(0)
font = cv2.FONT_HERSHEY_COMPLEX_SMALL
count=0
score=0
thicc=2
rpred=[99]
lpred=[99]
while(True):ret, frame = cap.read()height,width = frame.shape[:2]gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)faces = face.detectMultiScale(gray,minNeighbors=5,scaleFactor=1.1,minSize=(25,25))left_eye = leye.detectMultiScale(gray)right_eye = reye.detectMultiScale(gray)cv2.rectangle(frame, (0,height-50) , (200,height) , (0,0,0) , thickness=cv2.FILLED )for (x,y,w,h) in faces:cv2.rectangle(frame, (x,y) , (x+w,y+h) , (100,100,100) , 1 )for (x,y,w,h) in right_eye:r_eye=frame[y:y+h,x:x+w]count=count+1r_eye = cv2.cvtColor(r_eye,cv2.COLOR_BGR2GRAY)r_eye = cv2.resize(r_eye,(24,24))r_eye= r_eye/255r_eye= r_eye.reshape(24,24,-1)r_eye = np.expand_dims(r_eye,axis=0)rpred = model.predict_classes(r_eye)if(rpred[0]==1):lbl='Open'if(rpred[0]==0):lbl='Closed'breakfor (x,y,w,h) in left_eye:l_eye=frame[y:y+h,x:x+w]count=count+1l_eye = cv2.cvtColor(l_eye,cv2.COLOR_BGR2GRAY)l_eye = cv2.resize(l_eye,(24,24))l_eye= l_eye/255l_eye=l_eye.reshape(24,24,-1)l_eye = np.expand_dims(l_eye,axis=0)lpred = model.predict_classes(l_eye)if(lpred[0]==1):lbl='Open'if(lpred[0]==0):lbl='Closed'breakif(rpred[0]==0 and lpred[0]==0):score=score+1cv2.putText(frame,"Closed",(10,height-20), font, 1,(255,255,255),1,cv2.LINE_AA)# if(rpred[0]==1 or lpred[0]==1):else:score=score-1cv2.putText(frame,"Open",(10,height-20), font, 1,(255,255,255),1,cv2.LINE_AA)if(score<0):score=0cv2.putText(frame,'Score:'+str(score),(100,height-20), font, 1,(255,255,255),1,cv2.LINE_AA)if(score>15):# 该人感到困倦,我们发出警报声cv2.imwrite(os.path.join(path,'image.jpg'),frame)try:sound.play()except: # isplaying = Falsepassif(thicc<16):thicc= thicc+2else:thicc=thicc-2if(thicc<2):thicc=2cv2.rectangle(frame,(0,0),(width,height),(0,0,255),thicc)cv2.imshow('frame',frame)if cv2.waitKey(1) & 0xFF == ord('q'):break
cap.release()
cv2.destroyAllWindows()

司机疲劳检测系统执行
现在让我们执行司机疲劳检测系统,并看看我们 ML 项目的工作情况。要开始项目,您需要打开命令提示符,进入“drowsiness detection.py”主要文件所在的目录。使用以下命令运行脚本。

python “drowsiness detection.py”

打开摄像头和开始检测可能需要几秒钟的时间。

示例截图:

  • 运行疲劳检测程序 - 带有源代码的 Python 项目
    在这里插入图片描述

  • 训练新手的闭眼检测 Python 项目
    在这里插入图片描述

  • 初学者 Python 开源项目的睁眼检测
    在这里插入图片描述

  • 带有警报的 Python 开源项目
    在这里插入图片描述

总结
在这个 Python 项目中,我们构建了一个可以以多种方式实施的疲劳驾驶警报系统。我们使用 OpenCV 通过 Haar 级联分类器检测人脸和眼睛,然后使用 CNN 模型预测状态。

参考资料

  1. Haar 级联分类器介绍
  2. 卷积神经网络基础
  3. 如何使用 OpenCV 进行面部检测
  4. Python 用于图像处理的教程
  5. 使用 Keras 构建深度学习模型的指南
  6. 理解 Softmax 激活函数
  7. Pygame 的简介与使用
  8. 实时视频处理中的 OpenCV 用法
  9. 在汽车中实现疲劳检测的技术探讨
  10. 机器学习在疲劳检测中的应用研究
  11. 用于检测驾驶员疲劳的深度学习模型详解

参考链接:https://data-flair.training/blogs/python-project-driver-drowsiness-detection-system/

相关文章:

【机器学习实战入门】使用OpenCV和Keras的驾驶员疲劳检测系统

嗜睡驾驶者警报系统 防止司机疲劳驾驶警报系统 中级 Python 项目 - 司机疲劳检测系统 疲劳检测是一种安全技术&#xff0c;能够预防因司机在驾驶过程中入睡而造成的事故。 本中级 Python 项目的目标是建立一个疲劳检测系统&#xff0c;该系统将检测到一个人的眼睛闭合了一段时…...

使用 spring boot 2.5.6 版本时缺少 jvm 配置项

2.5.6我正在使用带有版本和springfox-boot-starter版本的Spring Boot 项目3.0.0。我的项目还包括一个WebSecurityConfig扩展WebSecurityConfigurerAdapter并实现WebMvcConfigurer的类。但是&#xff0c;我面临的问题是指标在端点jvm_memory_usage_after_gc_percent中不可见/act…...

【强化学习】Soft Actor-Critic (SAC) 算法

&#x1f4e2;本篇文章是博主强化学习&#xff08;RL&#xff09;领域学习时&#xff0c;用于个人学习、研究或者欣赏使用&#xff0c;并基于博主对相关等领域的一些理解而记录的学习摘录和笔记&#xff0c;若有不当和侵权之处&#xff0c;指出后将会立即改正&#xff0c;还望谅…...

2024年博客之星主题创作|Android 开发:前沿技术、跨领域融合与就业技能展望

目录 引言 一、推动 Android 应用创新的核心力量 1.1 人工智能与机器学习的崛起 1.2 增强现实&#xff08;AR&#xff09;与虚拟现实&#xff08;VR&#xff09;的应用扩展 1.3 5G技术的推动 1.4 跨平台开发技术的成熟 1.4.1 React Native 1.4.2 Flutter 1.4.3 Taro …...

Spring Boot--@PathVariable、@RequestParam、@RequestBody

目录 声明&#xff01;&#xff01; 什么是RESTful&#xff1f; RESTful 的基本原则 无状态性&#xff08;Stateless&#xff09; 统一接口&#xff08;Uniform Interface&#xff09; 分层系统&#xff08;Layered System&#xff09; 缓存&#xff08;Cacheable&#…...

网站HTTP改成HTTPS

您不仅需要知道如何将HTTP转换为HTTPS&#xff0c;还必须在不妨碍您的网站自成立以来建立的任何搜索排名权限的情况下进行切换。 为什么应该从HTTP转换为HTTPS&#xff1f; 与非安全HTTP于不同&#xff0c;安全域使用SSL&#xff08;安全套接字层&#xff09;服务器上的加密代…...

Spring Boot + Netty + WebSocket 实现消息推送

1、关于Netty Netty 是一个利用 Java 的高级网络的能力&#xff0c;隐藏其背后的复杂性而提供一个易于使用的 API 的客户端/服务器框架。 2、Maven依赖 <dependencies><!-- https://mvnrepository.com/artifact/io.netty/netty-all --><dependency><gr…...

AI之HardWare:英伟达NvidiaGPU性价比排名(消费级/专业级/中高端企业级)以及据传英伟达Nvidia2025年将推出RTX 5090/5080、华为2025年推出910C/910D

AI之HardWare&#xff1a;英伟达NvidiaGPU性价比排名(消费级/专业级/中高端企业级)以及据传英伟达Nvidia2025年将推出RTX 5090/5080、华为2025年推出910C/910D 目录 英伟达NvidiaGPU性能排名(消费级/专业级/中高端企业级) NVIDIA中消费级和专业级 GPU NVIDIA中高端企业GPU …...

ESP32云开发二( http + led + lcd)

文章目录 前言先上效果图platformio.iniwokwi.tomldiagram.json源代码编译编译成功上传云端完结撒花⭐⭐⭐⭐⭐ 前言 阅读此篇前建议先看 此片熟悉下wokwi https://blog.csdn.net/qq_20330595/article/details/144289986 先上效果图 Column 1Column 2 platformio.ini wokwi…...

JavaScript语言的软件工程

JavaScript语言的软件工程 引言 在当今软件开发的浪潮中&#xff0c;JavaScript已不仅仅是一个简单的前端脚本语言。它的位置已经升华为全栈开发的重要语言之一&#xff0c;借助Node.js等技术&#xff0c;JavaScript不仅可以用于浏览器环境&#xff0c;还可以在后端服务器中运…...

【Qt】04-Lambda表达式

前言一、概念引入二、使用方法2.1 基本用法代码示例2.2 捕获外部变量2.3 参数列表 三、完整代码mywidget.cppsecondwidget.cppmywidget.hsecondwidget.h 总结 前言 一、概念引入 Lambda表达式&#xff08;Lambda Expressions&#xff09;是C11标准引入的一种匿名函数对象&…...

Golang 生态学习

1. Go 语言基础 在深入 Go 语言的生态之前&#xff0c;首先需要掌握 Go 语言本身的核心特性。 • Go 语言官方文档&#xff1a;https://golang.org/doc/ Go 官方文档是学习语言基础和标准库的首选资源。 • 学习内容&#xff1a; • 基础语法&#xff1a;数据类型、控制流…...

Arcgis Pro安装完成后启动失败的解决办法

场景 之前安装的Arcgis Pro 今天突然不能使用了&#xff0c;之前是可以使用的&#xff0c;自从系统更新了以后就出现了这个问题。 环境描述 Arcgis Pro 3.0 Windows 10 问题描述 打开Arcgis Pro&#xff0c;页面也不弹出来&#xff0c;打开任务管理器可以看到进程创建之后&…...

支持向量机SVM的应用案例

支持向量机&#xff08;Support Vector Machine,SVM&#xff09;是一种强大的监督学习算法&#xff0c;广泛应用于分类和回归任务。 基本原理 SVM的主要目标是周到一个最优的超平面&#xff0c;该超平面能够将不同类别的数据点尽可能分开&#xff0c;并且使离该超平面最近的数…...

Linux中的Iptables介绍

文章目录 iptables1. 概述2. **工作原理**3. 数据包处理流程与规则匹配顺序4. 常用的匹配条件5. 动作类型6. 基本命令7. 高级功能 iptables 1. 概述 Iptables 是一个用于配置 Linux 内核防火墙的用户空间工具。它能够对进出服务器的网络数据包进行过滤、修改和转发等操作&…...

14天学习微服务-->第2天:Spring Cloud深入与实践

第2天&#xff1a;Spring Cloud深入与实践 一、Spring Cloud核心组件深入 在微服务架构中&#xff0c;Spring Cloud 提供了一系列核心组件来支持服务的注册与发现、配置管理、负载均衡等功能。今天我们将深入学习其中的三个关键组件&#xff1a;Eureka/Nacos&#xff08;服务…...

使用 Box2D 库开发愤怒的小鸟游戏

使用 Box2D 库开发愤怒的小鸟游戏 Box2D 是一个开源的 2D 物理引擎&#xff0c;广泛应用于游戏开发中&#xff0c;特别是在模拟物体的运动、碰撞、重力等方面。在本文中&#xff0c;我们将利用 Box2D 库开发一个简化版的 愤怒的小鸟 游戏。我们将一步步展示如何实现物理引擎的…...

C# ComboBox 控件属性

ComboBox 的基本属性 在C#中&#xff0c;ComboBox控件具有多种属性&#xff0c;这些属性可以帮助开发者更好地控制和管理控件的各个方面。以下是一些基本的ComboBox属性及其功能&#xff1a; 公共属性 AccessibilityObject&#xff1a;获取分配给该控件的AccessibleObject。 Ac…...

《keras 3 内卷神经网络》

keras 3 内卷神经网络 作者&#xff1a;Aritra Roy Gosthipaty 创建日期&#xff1a;2021/07/25 最后修改时间&#xff1a;2021/07/25 描述&#xff1a;深入研究特定于位置和通道无关的“内卷”内核。 &#xff08;i&#xff09; 此示例使用 Keras 3 在 Colab 中查看 GitHub …...

Linux:文件描述符fd、系统调用open

目录 一、文件基础认识 二、C语言操作文件的接口 1.> 和 >> 2.理解“当前路径” 三、相关系统调用 1.open 2.文件描述符 3.一切皆文件 4.再次理解重定向 一、文件基础认识 文件 内容 属性。换句话说&#xff0c;如果在电脑上新建了一个空白文档&#xff0…...

ToDesk设置临时密码和安全密码都可以当做连接密码使用

ToDesk 在各领域办公都已经是非常常见了 为了安全 ToDesk 设置了连接密码&#xff0c;想连接 需要输入远程码和连接密码 我们刚打开 系统默认给我们用的是临时密码&#xff0c;安全性确实很强 和定时Tokey一样&#xff0c;固定时间切换。 但是 如果我们要经常连接这个电脑&a…...

C#防止重复提交

C#防止重复提交 文章目录 C#防止重复提交前言防止重复提交的思路Web API 防止重复提交代码实现代码讲解使用方法 MVC防止重复提交总结 前言 当用户在前端进行提交数据时&#xff0c;如果网络出现卡顿和前端没有给出响应的话顾客通常都会狂点提交按钮&#xff0c;这样就很容易导…...

递归算法学习v2.2

46. 全排列 class Solution {List<List<Integer>> ret;List<Integer> path;boolean[] check;public List<List<Integer>> permute(int[] nums) {ret new ArrayList<>();path new ArrayList<>();check new boolean[nums.length…...

unity插件Excel转换Proto插件-ExcelToProtobufferTool

unity插件Excel转换Proto插件-ExcelToProtobufferTool **ExcelToProtobufTool 插件文档****1. 插件概述****2. 默认配置类&#xff1a;DefaultIProtoPathConfig****属性说明** **3. 自定义配置类****定义规则****示例代码** **4. 使用方式****4.1 默认路径****4.2 自定义路径**…...

manim(manimgl)安装教学-win11(2024-08)

manim 目前的两种版本&#xff1a;★★ 稍微捋一捋【项目中的 readme.md 十分重要】 manimgl 是 Grant Sanderson&#xff08;YouTube频道 3Blue1Brown的作者&#xff09;等人开发。 现在为 manimgl&#xff0c;在维护中。 manimCE 是2020年后的 manim 分支 manim community e…...

【语言处理和机器学习】概述篇(基础小白入门篇)

前言 自学笔记&#xff0c;分享给语言学/语言教育学方向的&#xff0c;但对语言数据处理感兴趣但是尚未入门&#xff0c;却需要在论文中用到的小伙伴&#xff0c;欢迎大佬们补充或绕道。ps&#xff1a;本文不涉及公式讲解&#xff08;文科生小白友好体质&#xff09;&#xff…...

脚本工具:PYTHON

Python 是一种高级编程语言&#xff0c;以其简洁清晰的语法和强大的功能被广泛应用于各种领域&#xff0c;包括自动化脚本编写、数据分析、机器学习、Web开发等。以下是一些关于使用 Python 编写脚本工具的基本介绍、常用库以及一些实用技巧总结。 这里写目录标题 基础知识安装…...

一文讲解Redis常见使用方式

1. 单机模式部署 适用场景&#xff1a; • 开发和测试环境&#xff0c;或者对高可用性要求不高的小型项目。 部署步骤&#xff1a; 1. 拉取 Redis 镜像&#xff1a; docker pull redis:latest 2. 运行 Redis 容器&#xff1a; docker run -d --name redis-single -p 637…...

Gin 源码概览 - 路由

本文基于gin 1.1 源码解读 https://github.com/gin-gonic/gin/archive/refs/tags/v1.1.zip 1. 注册路由 我们先来看一段gin代码&#xff0c;来看看最终得到的一颗路由树长啥样 func TestGinDocExp(t *testing.T) {engine : gin.Default()engine.GET("/api/user", f…...

【计算机网络】传输层协议TCP与UDP

传输层 传输层位于OSI七层网络模型的第四层&#xff0c;主要负责端到端通信&#xff0c;可靠性保障&#xff08;TCP&#xff09;&#xff0c;流量控制(TCP)&#xff0c;拥塞控制(TCP)&#xff0c;数据分段与分组&#xff0c;多路复用与解复用等&#xff0c;通过TCP与UDP协议实现…...

iOS UIScrollView的一个特性

1如果UIScrollView 的contentSize.height > scrollView.bounds.size.height - scrollView.contentInset.top - scrollView.contentInset.bottom &#xff0c; 则scrollView就可以滚动&#xff0c;否则无法滚动 并且最大的滚动范围就是 contentSize.height - &#xff08; s…...

Docker 实现MySQL 主从复制

一、拉取镜像 docker pull mysql:5.7相关命令&#xff1a; 查看镜像&#xff1a;docker images 二、启动镜像 启动mysql01、02容器&#xff1a; docker run -d -p 3310:3306 -v /root/mysql/node-1/config:/etc/mysql/ -v /root/mysql/node-1/data:/var/lib/mysql -e MYS…...

python爬虫入门(实践)

python爬虫入门&#xff08;实践&#xff09; 一、对目标网站进行分析 二、博客爬取 获取博客所有h2标题的路由 确定目标&#xff0c;查看源码 代码实现 """ 获取博客所有h2标题的路由 """url "http://www.crazyant.net"import re…...

通过Ukey或者OTP动态口令实现windows安全登录

通过 安当SLA&#xff08;System Login Agent&#xff09;实现Windows安全登录认证&#xff0c;是一种基于双因素认证&#xff08;2FA&#xff09;的解决方案&#xff0c;旨在提升 Windows 系统的登录安全性。以下是详细的实现方法和步骤&#xff1a; 1. 安当SLA的核心功能 安…...

C 语言雏启:擘画代码乾坤,谛观编程奥宇之初瞰

大家好啊&#xff0c;我是小象٩(๑ω๑)۶ 我的博客&#xff1a;Xiao Xiangζั͡ޓއއ 很高兴见到大家&#xff0c;希望能够和大家一起交流学习&#xff0c;共同进步。* 这一课主要是让大家初步了解C语言&#xff0c;了解我们的开发环境&#xff0c;main函数&#xff0c;库…...

【Linux系统编程】—— 进程替换及其在操作系统中的应用与实现

文章目录 什么是进程替换&#xff1f;进程替换当中的接口单进程替换多进程的替换详解exec接口execlexeclpexecv 前言&#xff1a; 本篇博客将深入探讨进程替换的概念及其在操作系统中的作用。我们将介绍进程替换的基本原理&#xff0c;探讨操作系统如何通过进程的切换来实现任务…...

“裸奔”时代下该如何保护网络隐私

网络隐私的保护之道 引言 在这个信息爆炸的时代&#xff0c;网络已经深入到我们生活的每一个角落。你是否曾想过&#xff0c;在享受这些便利时&#xff0c;你的个人隐私正面临着严峻的挑战&#xff1f;网络隐私的现状警示着我们&#xff0c;信息泄露的事件屡见不鲜&#xff0…...

分类问题(二元,多元逻辑回归,费歇尔判别分析)spss实操

分类模型&#xff1a; 二分类和多分类&#xff1a; 对于二分类模型 &#xff0c;我们将介绍逻辑回归和Fisher线性判别分析两种分类算法; 对于多分类模型&#xff0c;我们将简单介绍Spss中的多分类线性判别分析和多分类逻辑回归的操作步骤 二分类: 基于广义线性模型&#x…...

推荐一个开源的轻量级任务调度器!TaskScheduler!

大家好&#xff0c;我是麦鸽。 这次推荐一款轻量级的嵌入式任务调度器&#xff0c;目前已经有1.4K的star&#xff0c;这个项目比较轻量化&#xff0c;只有5个源文件&#xff0c;可以作为学习的一个开源项目。 核心文件 项目概述&#xff1a; 这是一个轻量级的协作式多任务处理&…...

Spring 核心技术解析【纯干货版】- IV:Spring 切面编程模块 Spring-Aop 模块精讲

随着软件开发技术的不断进步&#xff0c;面向切面编程&#xff08;AOP&#xff09;作为一种重要的编程思想&#xff0c;已经在现代开发中占据了重要地位。它通过将横切逻辑从业务逻辑中分离出来&#xff0c;使得代码更加清晰、易于维护。Spring AOP 作为 Spring 框架的核心模块…...

STM32之FreeRTOS开发介绍(十九)

STM32F407 系列文章 - freertos&#xff08;十九&#xff09; 目录 前言 一、简述 二、开源网址 三、原理及功能特性 1.原理简介 2.功能介绍 1.任务调度 2.任务管理 3.中断管理 4.消息队列 3.特点说明 4.优缺点 四、参考书籍 五、实现方式 总结 前言 FreeRTOS是…...

2024年美赛C题评委文章及O奖论文解读 | AI工具如何影响数学建模?从评委和O奖论文出发-O奖论文做对了什么?

模型假设仅仅是简单陈述吗&#xff1f;允许AI的使用是否降低了比赛难度&#xff1f;还在依赖机器学习的模型吗&#xff1f;处理题目的方法有哪些&#xff1f;O奖论文的优点在哪里&#xff1f; 本文调研了当年赛题的评委文章和O奖论文&#xff0c;这些问题都会在文章中一一解答…...

第14篇:从入门到精通:掌握python上下文管理器

第14篇&#xff1a;上下文管理器 内容简介 本篇文章将深入探讨Python中的上下文管理器&#xff08;Context Manager&#xff09;。您将了解上下文管理器的概念与用途&#xff0c;学习如何实现自定义的上下文管理器&#xff0c;以及如何使用contextlib模块来简化上下文管理器的…...

cuda从零开始手搓PB神经网络

cuda实现PB神经网络 基于上一篇的矩阵点乘&#xff0c;实现了矩阵的加减乘除、函数调用等。并且复用之前元编程里面写的梯度下降、Adam、NAdam优化方法。实现PB神经网络如下&#xff1a; #ifndef __BP_NETWORK_HPP__ #define __BP_NETWORK_HPP__ #include "matrix.hpp&quo…...

Java 大视界 -- Java 大数据物联网应用:数据处理与设备管理(八)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…...

大模型之三十三- 开源Melo 语音合成

大模型之三十三- 开源Melo 语音合成 文本到语音(TTS)系统从基于基础音素的模型演变成复杂的端到端神经方法,这种方法可以直接将文本转换为语音。这一变革得益于深度学习的进步和计算能力的提升,已经在语音的自然度、韵律控制和跨语言能力方面取得了重大进展 。现代TTS系统…...

全同态加密理论、生态现状与未来展望(上)

《全同态加密理论、生态现状与未来展望》系列由lynndell2010gmail.com和mutourend2010gmail.com整理原创发布&#xff0c;分为上中下三个系列&#xff1a; 全同态加密理论、生态现状与未来展望&#xff08;上&#xff09;&#xff1a;专注于介绍全同态加密理论知识。全同态加密…...

cursor重构谷粒商城02——30分钟构建图书管理系统【cursor使用教程番外篇】

前言&#xff1a;这个系列将使用最前沿的cursor作为辅助编程工具&#xff0c;来快速开发一些基础的编程项目。目的是为了在真实项目中&#xff0c;帮助初级程序员快速进阶&#xff0c;以最快的速度&#xff0c;效率&#xff0c;快速进阶到中高阶程序员。 本项目将基于谷粒商城…...

提升大语言模型的三大策略

1.概述 随着大语言模型&#xff08;LLMs&#xff09;在技术和应用上的不断发展&#xff0c;它们已经深刻地改变了我们与计算机的互动方式。从文本生成到语言理解&#xff0c;LLMs的应用几乎涵盖了各个行业。然而&#xff0c;尽管这些模型已展现出令人印象深刻的能力&#xff0c…...

Ubuntu 24.04 LTS 安装 Docker Desktop

Docker 简介 Docker 简介和安装Ubuntu上学习使用Docker的详细入门教程Docker 快速入门Ubuntu版&#xff08;1h速通&#xff09; Docker 安装 参考 How to Install Docker on Ubuntu 24.04: Step-by-Step Guide。 更新系统和安装依赖 在终端中运行以下命令以确保系统更新并…...