【人工智能】-- 智能家居

news2024/11/16 12:02:23

2a20c54b85e042bfa2440367ae4807e9.gif

https://blog.csdn.net/2302_76516899?spm=1000.2115.3001.5343

个人主页:欢迎来到 Papicatch的博客

 课设专栏 :学生成绩管理系统

专业知识专栏: 专业知识 

文章目录

🍉引言

🍉基于深度卷积神经网络的表情识别

🍈流程图

🍈模型设计

🍍网络架构选择

🍍卷积层设计

🍍池化层

🍍激活函数

🍍全连接层

🍍正则化

🍍模型融合

🍈模型设计实现

🍍数据准备

🍍导入所需的库

🍍定义模型结构

🍍 数据预处理

🍍编译模型

🍍加载数据并进行训练

🍍在测试集上进行评估

🍍进行表情预测

🍈模型推理

🍉氛围灯控制

🍈照明技术

🍈通信技术

🍈传感器技术

🍈控制算法 

🍈智能控制技术

🍈电源管理技术

🍈软件和用户界面

🍈开发流程图

🍉人脸表情识别模型推理功能插件构建

🍈模型选择与训练

🍈模型转换与优化

🍈接口设计

🍈数据预处理

🍈推理引擎集成

🍈错误处理与异常情况

🍈性能优化

测试与验证

🍈系统开放插件

🍈人脸图像获取插件实现

🍍摄像头访问与控制

🍍图像采集

🍍人脸检测

🍍图像裁剪与调整

🍍图像质量优化

🍍数据格式转换

🍍实时性与性能优化

🍍跨平台支持

🍈代码实现

🍈人脸图像识别模型推理实现

🍈可视化交互界面插件实现

🍉总结


2a20c54b85e042bfa2440367ae4807e9.gif

🍉引言

        在当今科技飞速发展的时代,人工智能与智能家居的结合正逐渐改变着我们的生活方式。

        人工智能使得智能家居具备了更强的学习和适应能力。例如,智能恒温器可以通过学习用户的日常温度偏好和行为模式,自动调整室内温度,以达到节能和舒适的最佳平衡。

智能家居开发详细流程

🍉基于深度卷积神经网络的表情识别

        深度卷积神经网络(DCNN)在表情识别这一复杂任务中展现出了卓越的性能,而 OpenCV 作为一个功能强大且广泛应用的计算机视觉库,为实现基于 DCNN 的表情识别系统提供了坚实的基础和便利的工具。

        在开始构建表情识别系统之前,至关重要的一步是精心准备丰富且具有代表性的数据集。这些数据集通常包含了数量众多、涵盖各种不同场景和个体的人脸图像,并且每一张图像都被准确地标注了其所对应的表情类别,常见的表情类别如高兴、悲伤、愤怒、恐惧、惊讶、厌恶以及中性等。

        在数据预处理阶段,OpenCV 发挥了关键作用。可以运用 cv2.imread() 函数方便地读取图像文件。为了使输入模型的图像尺寸统一,便于模型处理,会使用 cv2.resize() 函数对图像进行缩放操作。同时,为了消除不同图像之间由于光照、对比度等因素造成的差异,通过 cv2.normalize() 函数对像素值进行归一化处理,将其范围限定在特定的区间内,以提高模型的训练效率和准确性。

        构建深度卷积神经网络模型是表情识别的核心部分。可以选择一些知名且性能出色的预训练模型,例如 VGG、ResNet 等。这些预训练模型在大规模图像数据集上进行过训练,已经学习到了通用的图像特征。也可以根据具体需求,自定义设计适合表情识别任务的网络结构。

        在训练过程中,为了进一步丰富数据,增加模型的泛化能力,利用 OpenCV 进行数据增强操作。例如,使用 cv2.flip() 函数实现图像的随机水平或垂直翻转,使用 cv2.rotate() 函数进行随机旋转,或者使用 cv2.addNoise() 函数为图像添加适量的噪声。

        深度学习框架(如 TensorFlow、PyTorch 等)与 OpenCV 的结合是实现高效训练的关键。在训练过程中,将经过 OpenCV 预处理和增强后的数据集输入到模型中,通过反向传播算法不断调整模型的参数,以最小化预测结果与真实标签之间的误差。

        当模型训练完成后,进入测试阶段。再次利用 OpenCV 读取待识别的人脸图像,经过与训练时相同的预处理步骤后,将其输入到训练好的模型中进行预测。模型会输出一个概率分布,表示该图像属于各个表情类别的可能性。

        假设我们训练了一个基于 ResNet 的表情识别模型,当使用 OpenCV 读取一张新的人脸图像并进行预处理后,输入到模型中。模型输出的概率分布为 [0.05, 0.85, 0.03, 0.02, 0.03, 0.02] ,分别对应悲伤、高兴、愤怒、恐惧、惊讶和厌恶。由于高兴对应的概率值 0.85 最高,所以可以判断这张图像的表情为高兴。

        然而,在实际应用中,还需要面对诸多挑战和需要优化的方面。例如,模型的复杂度可能导致计算资源需求过高,影响实时性,需要进行模型压缩和优化。不同的光照条件、拍摄角度、面部遮挡等因素可能影响识别效果,需要增强模型在这些情况下的鲁棒性。此外,还需要考虑如何将表情识别系统与实际的应用场景进行无缝集成,以实现更有价值的应用。

🍈流程图

🍈模型设计

        在设计基于深度卷积神经网络的表情识别模型时,需要综合考虑多个因素以实现准确且高效的表情分类

🍍网络架构选择

        可以采用经典的卷积神经网络架构,如 VGGNet、ResNet 或 Inception 系列。以 ResNet 为例,其通过引入残差连接解决了深度网络中的梯度消失问题,使得能够构建更深的网络以学习更复杂的特征。

🍍卷积层设计

        卷积层用于提取图像的局部特征。通常,在初始层使用较小的卷积核(如 3x3)来捕捉基本的纹理和形状信息。随着网络深度增加,可以逐渐增加卷积核的大小或数量,以获取更全局和抽象的特征。

🍍池化层

        池化层用于减少特征图的空间维度,降低计算量并引入一定的平移不变性。常见的池化方式有最大池化和平均池化。 

🍍激活函数

        ReLU(Rectified Linear Unit)是常用的激活函数,因其计算简单且能有效避免梯度消失问题。但在某些情况下,如为了处理梯度消失或提高模型的表达能力,也会使用 Leaky ReLU 或 Parametric ReLU 等变体。 

🍍全连接层

        在网络的末端,通常会连接几个全连接层来将学到的特征映射到表情类别空间。全连接层的神经元数量根据表情类别的数量进行调整。 

🍍正则化

        为了防止过拟合,可以采用 L1 和 L2 正则化、Dropout 等技术。Dropout 会在训练过程中随机将神经元的输出设置为 0,强制网络学习更具鲁棒性的特征。 

🍍模型融合

        还可以考虑将多个不同架构或在不同数据集上训练的模型进行融合,以综合它们的优势,提高识别性能。 

例如,设计一个简单的表情识别模型,可能包含以下结构:

  • 输入层:接收预处理后的人脸图像,例如尺寸为 224x224 的彩色图像。
  • 卷积层 1:使用 32 个 3x3 的卷积核,步长为 1,ReLU 激活函数,输出 224x224x32 的特征图。
  • 池化层 1:2x2 的最大池化,步长为 2,输出 112x112x32 的特征图。
  • 卷积层 2:64 个 3x3 的卷积核,步长为 1,ReLU 激活函数,输出 112x112x64 的特征图。
  • 池化层 2:2x2 的最大池化,步长为 2,输出 56x56x64 的特征图。
  • .....
  • 全连接层 1:512 个神经元,ReLU 激活函数。
  • 全连接层 2:输出为表情类别数量(假设 7 种表情),Softmax 激活函数用于最终的分类。

🍈模型设计实现

        以下是一个使用 Python 和深度学习框架(如 TensorFlow 或 PyTorch)来实现基于深度卷积神经网络的表情识别模型的基本步骤: 

🍍数据准备

  • 收集大量带有表情标签的人脸图像数据集。
  • 将数据集划分为训练集、验证集和测试集。

🍍导入所需的库

    import tensorflow as tf
    import numpy as np
    import cv2

🍍定义模型结构

    def create_model():
        model = tf.keras.Sequential([
            tf.keras.layers.Conv2D(32, (3, 3), activation='relu', input_shape=(224, 224, 3)),
            tf.keras.layers.MaxPooling2D((2, 2)),
            tf.keras.layers.Conv2D(64, (3, 3), activation='relu'),
            tf.keras.layers.MaxPooling2D((2, 2)),
            tf.keras.layers.Conv2D(128, (3, 3), activation='relu'),
            tf.keras.layers.MaxPooling2D((2, 2)),
            tf.keras.layers.Flatten(),
            tf.keras.layers.Dense(128, activation='relu'),
            tf.keras.layers.Dense(7, activation='softmax')  # 假设 7 种表情类别
        ])
        return model

🍍 数据预处理

    def preprocess_image(image_path):
        image = cv2.imread(image_path)
        image = cv2.resize(image, (224, 224))
        image = image / 255.0  # 归一化
        return image

🍍编译模型

    model = create_model()
    model.compile(optimizer='adam',
                  loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False),
                  metrics=['accuracy'])

🍍加载数据并进行训练

    train_images = []
    train_labels = []
    for image_path, label in training_data:
        image = preprocess_image(image_path)
        train_images.append(image)
        train_labels.append(label)

    train_images = np.array(train_images)
    train_labels = np.array(train_labels)

    model.fit(train_images, train_labels, epochs=10, batch_size=32, validation_split=0.1)

🍍在测试集上进行评估

    test_images = []
    test_labels = []
    for image_path, label in test_data:
        image = preprocess_image(image_path)
        test_images.append(image)
        test_labels.append(label)

    test_images = np.array(test_images)
    test_labels = np.array(test_labels)

    loss, accuracy = model.evaluate(test_images, test_labels)

🍍进行表情预测

    new_image_path = 'new_image.jpg'
    new_image = preprocess_image(new_image_path)
    prediction = model.predict(np.expand_dims(new_image, axis=0))
    predicted_label = np.argmax(prediction)

🍈模型推理

        模型推理是将训练好的表情识别模型应用于新的未知数据以进行表情预测的过程。

        首先,需要确保已经完成了模型的训练,并保存了训练好的模型参数。在实际推理时,加载这些保存的模型参数。

        对于输入的新图像,同样需要进行与训练数据相同的预处理步骤。这可能包括图像的读取、裁剪、调整大小、归一化等操作,以确保输入数据的格式和范围与训练时一致。

        将预处理后的图像数据输入到加载的模型中。模型会根据其学习到的特征和模式,计算出每个表情类别的概率分布。

        例如,假设我们的模型预测结果是一个包含 7 个元素的概率数组 [0.1, 0.2, 0.05, 0.3, 0.15, 0.1, 0.1] ,分别对应 7 种表情类别(高兴、悲伤、愤怒、恐惧、惊讶、厌恶、中性)。

        为了确定最终的表情预测类别,通常会选择概率最大的类别作为输出结果。在上述例子中,概率最大的是第四个元素 0.3 ,对应的表情类别可能是恐惧,那么就预测该图像的表情为恐惧。

        为了提高推理的效率和准确性,还可以采用一些优化技术,如模型量化、剪枝等,以减少模型的计算量和参数数量,同时不显著降低性能。

        此外,在实际应用中,可能需要对连续的图像帧进行推理,以获取更准确和稳定的表情识别结果。可以通过对多个帧的预测结果进行平滑处理或采用基于时间序列的分析方法来实现。

        例如,在视频流的表情识别中,可以设置一个时间窗口,对窗口内的帧进行综合分析,而不是仅仅依赖于单个帧的预测结果。

🍉氛围灯控制

🍈照明技术

  • 发光二极管(LED):是氛围灯最常用的光源。其具有高效、节能、寿命长、颜色多样等优点。不同类型的 LED 如 RGB LED 或 RGBW LED 能够提供更丰富的色彩组合。
  • 光学设计:包括透镜、反射器等的设计,用于控制灯光的发散角度、均匀度和亮度分布,以达到理想的照明效果。

🍈通信技术

  • 蓝牙:常用于短距离无线控制,例如通过手机与氛围灯进行连接和控制。
  • Wi-Fi:提供更稳定和高速的数据传输,适用于大规模的氛围灯系统或需要与其他智能设备集成的场景。
  • Zigbee:一种低功耗、短距离的无线通信技术,适合构建大规模的传感器和控制网络。

🍈传感器技术

  • 环境光传感器:用于检测周围环境的光线强度,从而自动调整氛围灯的亮度,以保持舒适的视觉效果。
  • 人体传感器:可以感知人的存在和活动,实现当有人进入房间时自动开启氛围灯,或者根据人的位置调整灯光的照射方向。

🍈控制算法 

  • 颜色混合算法:对于 RGB 类型的氛围灯,需要精确的颜色混合算法来实现准确的色彩输出。
  • 亮度调节算法:确保在调节亮度时,灯光的颜色和均匀度不受影响。
  • 场景模式算法:根据不同的预设场景(如阅读、聚会、睡眠等),自动配置灯光的颜色、亮度和变化模式。

🍈智能控制技术

  • 语音控制:通过语音识别技术,用户可以通过语音指令来控制氛围灯的开关、颜色和模式等。
  • 自动化控制:结合时间、天气、室内温度等因素,实现氛围灯的自动控制。例如,在夜晚自动开启柔和的灯光,在寒冷的天气中使用暖色调灯光。

🍈电源管理技术

  • 高效的电源转换:确保将输入电源有效地转换为适合 LED 工作的电压和电流,提高能源利用效率。
  • 电源稳定性:提供稳定的电源输出,防止电压波动对灯光效果产生影响。

🍈软件和用户界面

  • 移动应用程序:提供直观、友好的用户界面,方便用户进行各种控制操作和场景设置。
  • 云服务:支持远程控制、数据存储和设备管理,实现多设备的统一控制和个性化配置。

        例如,在一个智能家居的氛围灯系统中,通过 Wi-Fi 连接到家庭网络,利用环境光传感器自动根据室内光线调整亮度,用户可以通过手机应用选择不同的颜色和场景模式,同时系统还支持语音控制,如“打开阅读模式的灯光”。电源管理模块保证了灯光的稳定工作和节能效果。

🍈开发流程图

🍉人脸表情识别模型推理功能插件构建

构建人脸表情识别模型推理功能插件需要以下关键步骤:

🍈模型选择与训练

  • 选择适合的深度卷积神经网络架构,如 ResNet、VGG 等,并在大规模的人脸表情数据集上进行训练。
  • 确保模型能够准确地识别多种常见的表情类别。

🍈模型转换与优化

  • 将训练好的模型转换为适合在插件中使用的格式,例如 TensorFlow Lite 格式,以减少模型大小和提高推理速度。
  • 进行模型量化、剪枝等优化操作,降低计算量和内存占用。

🍈接口设计

  • 定义清晰的输入和输出接口。输入通常是预处理后的人脸图像数据,输出是表情类别的预测结果。
  • 设计友好的 API,以便其他应用程序能够方便地调用插件。

🍈数据预处理

  • 在插件中实现图像的读取、裁剪、尺寸调整、归一化等预处理操作,确保输入数据符合模型的要求。

🍈推理引擎集成

  • 选择高效的推理引擎,如 TensorFlow Lite 推理引擎或 ONNX Runtime 等,并将其集成到插件中。

🍈错误处理与异常情况

  • 设计完善的错误处理机制,处理输入数据异常、模型加载失败、推理过程中的错误等情况。

🍈性能优化

  • 利用多线程、并行计算等技术提高推理效率。
  • 对内存使用进行优化,避免内存泄漏。

测试与验证

  • 使用大量的测试数据对插件进行准确性和性能测试。
  • 与其他已有的表情识别方法进行对比,验证插件的优越性。

        例如,假设我们构建了一个基于 TensorFlow Lite 的人脸表情识别插件。在输入一张人脸图像后,插件首先读取图像并进行预处理,然后通过 TensorFlow Lite 推理引擎进行计算,最终输出表情类别为“高兴”的预测结果。在整个过程中,如果出现图像格式错误或模型加载异常,插件会返回相应的错误代码和提示信息。

🍈系统开放插件

🍈人脸图像获取插件实现

        实现人脸图像获取插件通常涉及以下关键步骤和技术

🍍摄像头访问与控制

  • 使用相关的库和 API 来访问计算机或移动设备的摄像头。例如,在 Windows 平台上可以使用 DirectShow 库,在 Android 上可以使用 Camera2 API 等。
  • 实现对摄像头参数的设置,如分辨率、帧率、对焦模式等,以满足不同的需求。

🍍图像采集

  • 按照设定的参数从摄像头实时获取图像帧。
  • 可以选择采集单帧图像或连续的视频流。

🍍人脸检测

  • 集成人脸检测算法或使用现有的人脸检测库,如 OpenCV 中的人脸检测模块。
  • 在获取的图像中检测并定位人脸区域。

🍍图像裁剪与调整

  • 基于人脸检测的结果,裁剪出只包含人脸的图像区域。
  • 对裁剪后的人脸图像进行大小调整、旋转校正等操作,以确保图像的一致性和规范性。

🍍图像质量优化

  • 进行图像去噪、增强对比度等处理,提高图像质量。

🍍数据格式转换

  • 将获取和处理后的图像数据转换为适合后续处理或传输的格式,如 JPEG、PNG 或 RAW 格式。

🍍实时性与性能优化

  • 采用缓冲机制和多线程技术,确保图像获取的实时性,避免卡顿和延迟。
  • 对图像处理算法进行优化,减少计算量和内存占用。

🍍跨平台支持

  • 确保插件能够在多种操作系统(如 Windows、Mac OS、Linux、Android、iOS 等)上运行,并提供一致的接口和功能。

🍈代码实现

        以下是一个使用 Python 和 OpenCV 库实现简单人脸图像获取插件的示例代码:

import cv2

def get_face_image():
    # 打开摄像头
    cap = cv2.VideoCapture(0)

    if not cap.isOpened():
        print("无法打开摄像头")
        return

    # 加载人脸检测模型
    face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')

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

        if not ret:
            print("无法获取图像")
            break

        # 转换为灰度图像,便于人脸检测
        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

        # 进行人脸检测
        faces = face_cascade.detectMultiScale(gray, 1.3, 5)

        for (x, y, w, h) in faces:
            # 裁剪出人脸区域
            face_image = frame[y:y + h, x:x + w]
            # 调整人脸图像大小
            face_image_resized = cv2.resize(face_image, (200, 200))
            # 显示人脸图像
            cv2.imshow('Face Image', face_image_resized)

        # 按 'q' 键退出
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break

    # 释放摄像头资源
    cap.release()
    cv2.destroyAllWindows()

if __name__ == "__main__":
    get_face_image()

        这段代码首先打开摄像头,加载人脸检测模型,然后在每一帧图像中检测人脸,裁剪并调整人脸图像大小进行显示。用户按下 q 键可退出程序。

🍈人脸图像识别模型推理实现

        以下是一个使用 TensorFlow 和 OpenCV 实现简单人脸图像识别模型推理的示例代码。这里假设已经有训练好的模型并保存为 model.h5 文件。

import tensorflow as tf
import cv2
import numpy as np

def recognize_face(image_path):
    # 加载模型
    model = tf.keras.models.load_model('model.h5')

    # 读取图像
    image = cv2.imread(image_path)
    image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
    image = cv2.resize(image, (224, 224))  # 根据模型输入要求调整大小

    # 归一化
    image = image / 255.0
    image = np.expand_dims(image, axis=0)

    # 推理
    predictions = model.predict(image)
    predicted_class = np.argmax(predictions)

    # 假设类别标签为 0: 高兴, 1: 悲伤, 2: 愤怒 等
    classes = ['高兴', '悲伤', '愤怒', '其他']
    print(f'预测的表情是: {classes[predicted_class]}')

if __name__ == "__main__":
    recognize_face('test_image.jpg')

🍈可视化交互界面插件实现

        以下是一个使用 Python 的 Tkinter 库来创建简单可视化交互界面插件的示例代码:

from tkinter import Tk, Label, Button, Entry

def on_button_click():
    input_text = entry.get()
    label.config(text=f"您输入的是: {input_text}")

root = Tk()

# 标签
label = Label(root, text="这是一个示例界面")
label.pack()

# 输入框
entry = Entry(root)
entry.pack()

# 按钮
button = Button(root, text="点击我", command=on_button_click)
button.pack()

root.mainloop()

        在上述代码中,我们创建了一个窗口,包含一个标签用于显示提示信息,一个输入框用于用户输入,以及一个按钮。当点击按钮时,会获取输入框中的内容,并更新标签的显示内容。

🍉总结

        总的来说,人工智能为智能家居带来了巨大的潜力和机遇,将为我们创造更加便捷、舒适和安全的家居环境。但同时,我们也需要关注并解决相关的问题,确保其健康、可持续的发展。

2a20c54b85e042bfa2440367ae4807e9.gif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1906230.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

安全防御(防火墙)

第二天: 1.恶意程序---一般会具有一下多个或则全部特点 1.非法性:你未经授权它自动运行或者自动下载的,这都属于非法的。那恶意程序一般它会具有这种特点, 2.隐蔽性:一般隐藏的会比较深,目的就是为了防止…

UML建模工具Draw.io简介

新书速览|《UML 2.5基础、建模与设计实践 Draw.io是一个非常出色的免费、开源、简洁、方便的绘图软件,利用这款软件可以绘制出生动有趣的图形,包括流程图、地图、网络架构图、UML用例图、流程图等。它支持各种快捷键,免费提供了1000多张画图…

80+ ChatGPT 文献综述指令

进行文献综述通常似乎是一项艰巨的任务。它是学术和研究工作的重要组成部分,涉及对先前发表的与特定主题相关的研究进行全面和批判性分析。目标是深入了解该主题的知识状况,找出差距,并为进一步研究奠定基础。 传统上,文献综述是…

GuLi商城-商品服务-API-品牌管理-OSS整合测试(续)

Spring Alibaba简介 Spring官网:https://spring.io/projects/spring-cloud-alibaba GitHub:https://github.com/alibaba/spring-cloud-alibaba GitHub中文文档:https://github.com/alibaba/spring-cloud-alibaba/blob/master/README-zh.md…

气膜建筑如何在文化旅游行业中应用—轻空间

一、气膜建筑简介 气膜建筑是一种新型建筑形式,其主要结构由高强度膜材、空气支撑系统和固定系统组成。通过不断向膜体内部充气,使其形成稳定的内部压力来支撑整个建筑结构。气膜建筑因其建设速度快、成本相对较低、环保节能等优点,近年来在各…

怎么给电子文档批量盖骑缝章或公章?

怎么给电子文档批量盖骑缝章或公章?假如你有100个PDF电子文档要同时盖缝章,如果不借助专业的盖电子骑缝章软件,还真不好干。下面讲述如何利用e-章宝批量盖电子骑缝章。 1.在软件中导入待批量盖章的PDF文件 如下图,在“待盖章PDF文件”区域…

MySQL之表的约束(上)

目录 空属性(NULL) 实例建表 插入操作 默认值(default) 建表 插入操作 NULL与default的结合 列描述 建表 zerofill 建表 插入操作 主键 建表 插入 主键的增加与去掉 去掉 增加 复合主键 插入的影响 真正约束字段的是数据类型,但是数据类型约束很单一&a…

阶段三:项目开发---搭建项目前后端系统基础架构:任务13:实现基本的登录功能

任务描述 任务名称: 实现基本的登录功能 知识点: 了解前端Vue项目的基本执行过程 重 点: 构建项目的基本登陆功能 内 容: 通过实现项目的基本登录功能,来了解前端Vue项目的基本执行过程,并完成基…

【机器学习】属性降维:揭示数据的简化之美

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 属性降维:揭示数据的简化之美引言什么是属性降维?为何降…

(二)前端javascript中的数据结构之栈

栈是一种遵从后进先出(LIFO)原则的有序集合。新添加的或待删除的元素都保存在栈的 同一端,称作栈顶,另一端就叫栈底。在栈里,新元素都靠近栈顶,旧元素都接近栈底。 栈是限定仅在表的一端进行插入和删除操作…

SpringBoot源码阅读(3)——监听器

ApplicationListener类初始化位置 在类SpringApplication的构造方法,第267行 在META-INFO/spring.factories中配置的实现类 spring-boot # Application Listeners org.springframework.context.ApplicationListener\ org.springframework.boot.ClearCachesApplic…

一分钟教会你,iPhone和安卓手机虚拟摄像头如何连接电脑?手机连接电脑虚拟摄像头!

在当今的远程工作和在线学习时代,摄像头的需求日益增长。然而,有时我们可能会遇到电脑摄像头画质不佳或无法使用的情况。此时,利用手机的高清摄像头作为电脑的虚拟摄像头,便成了一个理想的选择。本文将为您介绍如何将iPhone和安卓…

SpringMVC系列十三: SpringMVC执行流程 - 源码分析

源码分析 执行流程图实验设计前端控制器分发请求处理器映射器处理器适配器调用目标方法调用视图解析器渲染视图作业布置 执行流程图 实验设计 1.新建com.zzw.web.debug.HelloHandler Controller public class HelloHandler {//编写方法, 响应请求, 返回ModelAndViewRequestMa…

拥抱 AGI:PieDataCS 引领云原生数据计算系统新范式

自2023年后,人工智能技术进入了一个更为成熟和广泛应用的阶段,人工通用智能(AGI)这一概念也成为了科技界和产业界热议的焦点。本文将结合 AGI 时代背景,从架构设计到落地实践,详细介绍拓数派云原生数据计算…

掌握全球通用的建模语言,从《Archimate®3.2规范参考卡》开始!

作为企业架构设计的通用语言,Archimate更是一种愿景的体现,一个变革的引擎,它不仅可以与TOGAF标准高效结合,还可助力全球企业无边界协作使用(下滑可了解更多Archimate建模语言的发展和演进)! 本…

PMP 认证权威吗?对项目…业生涯的发展有帮助?

PMP认证到底权威吗? 首先在我看来,PMP认证是否权威要从各个角度进行综合考虑。入行这么多年个人也有不少的体会,那么我们就从多个角度进行分析一下,PMP认证的权威性与促进方面。 在深入探讨这个话题前,我分享一下近期…

双向链表 -- 详细理解和实现

欢迎光顾我的homepage 前言 双向链表是一种带头双向循环的链表。在双向链表中,首先存在着一个头结点;其次每个节点有指向下一个节点的指针next 和指向上一个节点的指针prev &#xff1b…

《网络安全和信息化》是什么级别的期刊?是正规期刊吗?能评职称吗?

​问题解答 问:《网络安全和信息化》是不是核心期刊? 答:不是,是知网收录的正规学术期刊。 问:《网络安全和信息化》级别? 答:国家级。主管单位:工业和信息化部 主办单位&#…

脑干出血:揭秘其成因、症状与治疗方法

脑干出血,作为脑出血中尤为凶险的一种,主要袭击脑部的核心——脑干区域。脑干,作为连接大脑与脊髓的桥梁,掌管着呼吸、心跳、意识等至关重要的生命功能,一旦受损,后果不堪设想。 脑干出血的成因 首要元凶…

python爬虫入门(四)之Beautiful Soup库

一、什么是Beautiful Soup库 1、Beautiful Soup库是用来做HTML解析的库 Beautiful Soup把看起来复杂的HTML内容,解析成树状结构,让搜索和修改HTML结构变得更容易 2、第三方库,先安装 终端输入pip install bs4 from bs4 import Beautiful…