嵌入式C++、MQTT、数据库、Grafana、机器学习( Scikit-learn):智能建筑大数据管理平台(代码示例)

项目概述

智能建筑管理系统(Intelligent Building Management System, IBMS)是一个集成多种技术的复杂系统,旨在通过智能化手段提升建筑的管理效率、节能效果和居住舒适度。该系统涉及嵌入式系统、物联网(IoT)、大数据分析、云计算等多个领域,构建出一个高效、可靠和智能的建筑环境。

系统设计

硬件设计

  1. 微控制器

    • 采用ARM Cortex-M系列和ESP32微控制器作为核心控制单元,负责数据采集和处理。
  2. 传感器

    • 温度传感器:监测室内外温度。
    • 湿度传感器:监测环境湿度。
    • CO2传感器:监测空气质量。
    • 光照传感器:检测照明需求。
    • 能耗传感器:实时监控能耗情况。
  3. 执行器

    • 智能开关、阀门控制器等,用于自动化控制。
  4. 通信模块

    • Wi-Fi、Zigbee、LoRa等,支持设备间的无线通信。
硬件架构示意图

软件设计

  1. 物联网协议

    • 采用MQTT、CoAP、HTTP/HTTPS和Modbus等协议,确保设备间的有效通信。
  2. 嵌入式软件开发

    • 使用C/C++进行底层开发,Python用于快速原型开发,基于FreeRTOS构建实时操作系统。
  3. 边缘计算

    • 采用Docker容器化部署,利用Kubernetes管理分布式边缘节点,提高系统稳定性与扩展性。
  4. 数据存储

    • 使用时序数据库(InfluxDB、TimescaleDB)存储传感器数据,NoSQL数据库(MongoDB、Cassandra)进行非结构化数据存储,关系型数据库(PostgreSQL、MySQL)用于用户管理与应用数据存储。
  5. 大数据处理

    • 采用Apache Hadoop和Apache Spark处理历史数据,利用Apache Flink进行实时数据处理。
  6. 数据分析与机器学习

    • 使用Python(Pandas, NumPy, Scikit-learn)进行数据分析,深度学习框架(TensorFlow或PyTorch)用于构建预测模型。
  7. 数据可视化

    • 使用Grafana、Tableau和D3.js进行数据展示,帮助管理人员实时监控建筑状态。
  8. 云平台

    • 选择Amazon AWS、Microsoft Azure或Google Cloud Platform提供基础设施支持。
  9. Web开发(管理界面)

    • 前端使用React、Vue.js或Angular,后端使用Node.js、Django或Flask进行API开发。

硬件端代码

以下是一个简单的传感器数据采集和上传的代码实现示例。

代码示例

1. 传感器数据采集
#include <Wire.h>
#include <DHT.h>#define DHTPIN 2     // DHT传感器连接引脚
#define DHTTYPE DHT11   // DHT 11类型传感器DHT dht(DHTPIN, DHTTYPE); // 初始化DHT传感器void setup() {Serial.begin(9600); // 启动串口通信dht.begin(); // 启动DHT传感器
}void loop() {// 读取温度和湿度数据float h = dht.readHumidity();float t = dht.readTemperature();// 检查读取是否成功if (isnan(h) || isnan(t)) {Serial.println("读取失败!");return;}Serial.print("湿度: ");Serial.print(h);Serial.print(" %\t");Serial.print("温度: ");Serial.print(t);Serial.println(" *C");// 延时2秒delay(2000);
}

代码讲解:

  • 该代码使用DHT传感器读取温度和湿度数据。
  • setup()函数中初始化串口和传感器。
  • 在 loop() 函数中,代码每2秒钟读取一次温度和湿度信息。
  • 通过 dht.readHumidity() 和 dht.readTemperature() 函数获取湿度和温度数据。
  • 使用 isnan() 函数检查读取的数据是否有效,如果无效,则打印错误消息。
  • 有效的数据将被打印到串口监视器,便于调试和监控。
2. 数据上传到云平台

以下是一个简单的Python代码示例,用于将传感器数据上传到云端(例如使用MQTT协议)。

import paho.mqtt.client as mqtt
import json
import time# MQTT服务器配置
broker = "mqtt.example.com"
port = 1883
topic = "building/sensors"# MQTT回调函数
def on_connect(client, userdata, flags, rc):print("连接成功, 返回码: " + str(rc))# 创建MQTT客户端
client = mqtt.Client()
client.on_connect = on_connect# 连接到MQTT服务器
client.connect(broker, port, 60)while True:# 模拟传感器数据sensor_data = {"temperature": 22.5,"humidity": 60.0}# 将数据转换为JSON格式payload = json.dumps(sensor_data)# 发布消息到指定主题client.publish(topic, payload)print("数据已发布: " + payload)# 延时5秒time.sleep(5)

数据存储

1. 使用时序数据库(InfluxDB)

以下示例展示如何使用Python将传感器数据存储到InfluxDB中。

from influxdb import InfluxDBClient
import random
import time# 创建InfluxDB客户端
client = InfluxDBClient(host='localhost', port=8086, database='building')while True:# 模拟传感器数据temperature = random.uniform(20.0, 25.0)  # 生成20-25之间的随机温度humidity = random.uniform(30.0, 60.0  )   # 生成30-60之间的随机湿度# 构造数据点json_body = [{"measurement": "sensor_data","tags": {"location": "office"},"fields": {"temperature": temperature,"humidity": humidity}}]# 写入数据到InfluxDBclient.write_points(json_body)print(f"写入数据: 温度={temperature:.2f}, 湿度={humidity:.2f}")# 延时5秒time.sleep(5)

代码讲解:

  • 该代码使用influxdb Python库连接到InfluxDB。
  • 在无限循环中,随机生成温度和湿度数据,并将这些数据格式化为JSON结构。
  • 使用client.write_points()方法将数据写入InfluxDB的sensor_data测量中。
  • 通过time.sleep(5)实现每5秒写入一次数据。

2. 使用NoSQL数据库(MongoDB)

以下示例展示如何使用Python将传感器数据存储到MongoDB中。

代码讲解:

  • 该Python脚本使用Paho MQTT库创建MQTT客户端,与MQTT服务器建立连接。
  • 在 on_connect 回调函数中,打印连接状态。
  • 使用 client.publish() 方法将传感器模拟数据(温度和湿度)发布到指定的MQTT主题。
  • 数据以JSON格式发送,便于后端系统解析和存储。
  • 代码延时5秒后再次发送数据,形成数据流。

2. 使用NoSQL数据库(MongoDB)

以下示例展示如何使用Python将传感器数据存储到MongoDB中。

from pymongo import MongoClient
import random
import time# 创建MongoDB客户端
client = MongoClient('localhost', 27017)
db = client['building']
collection = db['sensor_data']while True:# 模拟传感器数据sensor_data = {"temperature": random.uniform(20.0, 25.0),"humidity": random.uniform(30.0, 60.0),"timestamp": time.time()}# 插入数据到MongoDBcollection.insert_one(sensor_data)print(f"插入数据: {sensor_data}")# 延时5秒time.sleep(5)

代码讲解:

  • 使用pymongo库连接到MongoDB数据库。
  • 在无限循环中,生成一个包含温度、湿度和时间戳的字典。
  • 使用collection.insert_one()方法将数据插入到MongoDB的sensor_data集合中。
  • 每5秒插入一次数据。

3. 使用关系型数据库(PostgreSQL)

以下示例展示如何使用Python将传感器数据存储到PostgreSQL中。

import psycopg2
import random
import time# 连接到PostgreSQL数据库
conn = psycopg2.connect(dbname="building",user="your_username",password="your_password",host="localhost",port="5432"
)
cur = conn.cursor()# 创建表(如果不存在)
cur.execute('''CREATE TABLE IF NOT EXISTS sensor_data (id SERIAL PRIMARY KEY,temperature FLOAT NOT NULL,humidity FLOAT NOT NULL,timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP)
''')
conn.commit()while True:# 模拟传感器数据temperature = random.uniform(20.0, 25.0)humidity = random.uniform(30.0, 60.0)# 插入数据到PostgreSQLcur.execute('''INSERT INTO sensor_data (temperature, humidity)VALUES (%s, %s)''', (temperature, humidity))conn.commit()print(f"插入数据: 温度={temperature:.2f}, 湿度={humidity:.2f}")# 延时5秒time.sleep(5)# 关闭连接
cur.close()
conn.close()

代码讲解:

  • 使用psycopg2库连接到PostgreSQL数据库。
  • 在程序启动时创建sensor_data表(如果不存在)。
  • 在无限循环中生成温度和湿度数据,使用cur.execute()将数据插入到表中。
  • 使用conn.commit()提交事务,确保数据写入数据库。

大数据处理

1. 使用Apache Hadoop

以下是一个简单的Hadoop MapReduce示例,展示如何处理存储在HDFS中的传感器数据。

Mapper(mapper.py)
#!/usr/bin/env python
import sys# Mapper:读取每一行数据,输出温度和湿度
for line in sys.stdin:line = line.strip()if line:# 假设数据格式为: timestamp, temperature, humiditytimestamp, temperature, humidity = line.split(',')print(f"{timestamp}\t{temperature}\t{humidity}")
Reducer(reducer.py)

#!/usr/bin/env python
import sys# Reducer:计算平均温度和湿度
total_temperature = 0
total_humidity = 0
count = 0for line in sys.stdin:line = line.strip()if line:_, temperature, humidity = line.split('\t')total_temperature += float(temperature)total_humidity += float(humidity)count += 1if count > 0:avg_temperature = total_temperature / countavg_humidity = total_humidity / countprint(f"Average Temperature: {avg_temperature:.2f}, Average Humidity: {avg_humidity:.2f}")

代码讲解:

  • mapper.py读取输入的传感器数据,每行数据格式为timestamp, temperature, humidity,并输出到标准输出。
  • reducer.py接收Mapper的输出,计算温度和湿度的平均值,并将结果打印到标准输出。
  • 这个示例展示了Hadoop的基本MapReduce工作原理,适合批量处理历史数据。

2. 使用Apache Spark

以下是使用PySpark进行数据处理的示例,计算传感器数据的平均值。

from pyspark.sql import SparkSession
from pyspark.sql.functions import avg# 创建Spark会话
spark = SparkSession.builder \.appName("SensorDataProcessing") \.getOrCreate()# 读取CSV文件
df = spark.read.csv("hdfs://path/to/sensor_data.csv", header=True, inferSchema=True)# 计算平均温度和湿度
avg_df = df.select(avg("temperature").alias("avg_temperature"), avg("humidity").alias("avg_humidity"))# 显示结果
avg_df.show()# 关闭Spark会话
spark.stop()

代码讲解:

  • 使用SparkSession创建Spark应用。
  • 从HDFS中读取CSV格式的传感器数据,自动推断数据类型。
  • 使用avg()函数计算温度和湿度的平均值,并将结果显示。
  • avg_df.show()打印结果,便于查看数据处理结果。

3. 使用Apache Flink

以下是使用Apache Flink进行实时数据处理的示例,计算实时传感器数据的平均值。

from pyflink.datastream import StreamExecutionEnvironment
from pyflink.common.serialization import SimpleStringSchema
from pyflink.datastream import StreamExecutionEnvironment
from pyflink.datastream.connectors import KafkaSource
from pyflink.common import Types# 创建Flink执行环境
env = StreamExecutionEnvironment.get_execution_environment()# 读取数据流(假设数据从Kafka读取)
data_stream = env.add_source(KafkaSource.builder().set_bootstrap_servers("localhost:9092").set_topic("sensor_data").set_group_id("sensor_group").set_value_only_deserializer(SimpleStringSchema()).build())# 定义处理逻辑
def process_data(data):# 解析数据fields = data.split(',')temperature = float(fields[1])humidity = float(fields[2])return (temperature, humidity)# 转换数据流并计算平均值
avg_stream = data_stream \.map(process_data) \.key_by(lambda x: 0) \.reduce(lambda x, y: (x[0] + y[0], x[1] + y[1])) \.map(lambda x: (x[0] / 2, x[1] / 2))  # 计算平均值# 输出结果
avg_stream.print()# 启动Flink程序
env.execute("Sensor Data Average Calculation")

代码讲解:

  • StreamExecutionEnvironment:创建Flink执行环境,作为数据流处理的上下文。
  • KafkaSource:从Kafka读取数据流,假设传感器数据以CSV格式存储,格式为timestamp,temperature,humidity
  • process_data函数:解析输入数据,将温度和湿度转换为浮点数,返回一个元组。
  • key_by(lambda x: 0):将所有数据分配到同一组,以便后续的聚合操作。
  • reduce函数:累加温度和湿度的值。这里假设每次调用reduce的输入都是一对温度和湿度元组。
  • 第二个map操作用于计算平均值(除以2,假设每次输入一对数据)。
  • avg_stream.print():打印计算出的平均值到控制台。
  • env.execute():启动Flink程序。

数据分析与机器学习

1. 数据分析(使用Pandas)

以下示例展示如何使用Pandas分析传感器数据并计算温度和湿度的平均值。

import pandas as pd# 从CSV文件读取传感器数据
df = pd.read_csv('sensor_data.csv')# 显示数据的前5行
print(df.head())# 计算平均温度和湿度
average_temperature = df['temperature'].mean()
average_humidity = df['humidity'].mean()print(f"平均温度: {average_temperature:.2f}")
print(f"平均湿度: {average_humidity:.2f}")

代码讲解:

  • 使用pandas库读取存储在CSV文件中的传感器数据。
  • df.head()显示数据的前5行,便于检查数据格式。
  • 使用mean()函数计算温度和湿度的平均值,并打印结果。

2. 机器学习(使用Scikit-learn)

以下示例展示如何使用Scikit-learn构建一个简单的线性回归模型,预测温度。

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score# 从CSV文件读取传感器数据
df = pd.read_csv('sensor_data.csv')# 准备特征和目标变量
X = df[['humidity']]  # 特征:湿度
y = df['temperature']  # 目标:温度# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 创建线性回归模型
model = LinearRegression()
model.fit(X_train, y_train)  # 训练模型# 进行预测
predictions = model.predict(X_test)# 打印预测结果
for actual, predicted in zip(y_test, predictions):print(f"实际温度: {actual:.2f}, 预测温度: {predicted:.2f}")# 评估模型性能
mse = mean_squared_error(y_test, predictions)
r2 = r2_score(y_test, predictions)
print(f"均方误差: {mse:.2f}")
print(f"R²得分: {r2:.2f}")

代码讲解:

  • 使用pandas库读取存储在CSV文件中的传感器数据。
  • 特征变量X是湿度,目标变量y是温度。
  • 使用train_test_split函数将数据划分为训练集(80%)和测试集(20%)。
  • 创建线性回归模型LinearRegression()并使用fit()方法在训练数据上训练模型。
  • 使用模型的predict()方法对测试集进行预测。
  • 使用mean_squared_errorr2_score评估模型性能,计算均方误差(MSE)和R²得分,并打印实际温度和预测温度的比较结果。

3. 深度学习(使用TensorFlow或PyTorch)

以下是使用TensorFlow构建一个简单的神经网络模型来预测传感器数据的示例。

import pandas as pd
import numpy as np
import tensorflow as tf
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler# 从CSV文件读取传感器数据
df = pd.read_csv('sensor_data.csv')# 准备特征和目标变量
X = df[['humidity']].values  # 特征:湿度
y = df['temperature'].values  # 目标:温度# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 标准化特征
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)# 创建神经网络模型
model = tf.keras.Sequential([tf.keras.layers.Dense(64, activation='relu', input_shape=(X_train.shape[1],)),tf.keras.layers.Dense(64, activation='relu'),tf.keras.layers.Dense(1)  # 输出层
])# 编译模型
model.compile(optimizer='adam', loss='mean_squared_error')# 训练模型
model.fit(X_train, y_train, epochs=100, batch_size=32, verbose=1)# 进行预测
predictions = model.predict(X_test)# 打印预测结果
for actual, predicted in zip(y_test, predictions):print(f"实际温度: {actual:.2f}, 预测温度: {predicted[0]:.2f}")# 评估模型性能
mse = model.evaluate(X_test, y_test)
print(f"均方误差: {mse:.2f}")

代码讲解:

  • 使用pandas读取传感器数据,并准备特征和目标变量。
  • 将数据分为训练集和测试集。
  • 使用StandardScaler进行标准化,确保输入特征的均值为0,标准差为1。
  • 使用tf.keras.Sequential构建一个简单的神经网络模型,包括两层隐藏层和一个输出层。
  • 编译模型时指定优化器(Adam)和损失函数(均方误差)。

 

数据可视化

1. 使用Matplotlib和Seaborn可视化传感器数据

以下示例展示如何使用Matplotlib和Seaborn对传感器数据进行可视化。

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns# 从CSV文件读取传感器数据
df = pd.read_csv('sensor_data.csv')# 设置绘图风格
sns.set(style='whitegrid')# 绘制温度和湿度的散点图
plt.figure(figsize=(12, 6))
sns.scatterplot(data=df, x='humidity', y='temperature', color='blue', alpha=0.6)
plt.title('温度与湿度的关系')
plt.xlabel('湿度 (%)')
plt.ylabel('温度 (°C)')
plt.show()

代码讲解:

  • 使用pandas读取传感器数据。
  • 使用seaborn设置绘图风格。
  • 创建一个散点图,x轴为湿度,y轴为温度,使用scatterplot()函数进行绘制。
  • 设置图表标题和坐标轴标签,最后通过plt.show()显示图表。

2. 使用Grafana可视化时序数据

Grafana是一个强大的开源可视化工具,通常与时序数据库(如InfluxDB)配合使用。以下是使用Grafana可视化传感器数据的基本步骤:

  1. 安装Grafana

    • 可以通过Docker或直接在本地系统上安装Grafana。
  2. 连接InfluxDB

    • 在Grafana的管理界面中,添加数据源,选择InfluxDB,配置连接信息。
  3. 创建仪表盘

    • 在Grafana中创建一个新的仪表盘,添加图表面板。
    • 使用InfluxQL或Flux查询语言从InfluxDB中查询传感器数据。
  4. 可视化数据

    • 根据需要选择合适的图表类型(如折线图、柱状图等)进行数据可视化。

3. 使用Tableau可视化数据

Tableau是一个用户友好的数据可视化工具,适合进行复杂数据分析和可视化。以下是使用Tableau可视化传感器数据的步骤:

  1. 导入数据

    • 将传感器数据导入Tableau,支持多种数据源,如Excel、CSV、数据库等。
  2. 创建视图

    • 使用拖放界面创建视图,选择维度(如时间、湿度)和度量(如温度)。
    • 可以创建散点图、折线图、仪表等多种可视化类型。
  3. 交互式分析

    • 利用Tableau的过滤器和参数功能,实现交互式数据分析,用户可以根据需要选择不同的视图。

项目总结

智能建筑管理系统是一个跨领域的协同应用,涉及嵌入式系统、物联网、大数据、云计算等众多技术。通过整合这些技术,系统能够实现对建筑环境的实时监控和管理,提升了建筑的能源效率和用户的舒适度。

主要特点:

  • 实时监控:通过传感器数据实时监测建筑环境。
  • 智能控制:利用执行器实现自动化控制,提高管理效率。
  • 数据分析:通过大数据技术和机器学习算法,挖掘潜在的节能机会。
  • 灵活部署:基于云计算和边缘计算,系统具备良好的扩展性和可维护性。

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

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

相关文章

光明乳业:以科技赋能品质,引领乳业绿色新未来

近日&#xff0c;光明乳业再次成为行业焦点&#xff0c;其在科技创新与绿色发展方面的卓越表现赢得了广泛赞誉。作为中国乳制品行业的领军企业&#xff0c;光明乳业始终坚守品质至上的原则&#xff0c;不断探索科技创新之路&#xff0c;致力于为消费者提供更高品质、更健康的乳…

vdb:虚拟数据库

将文件虚拟成数据库&#xff0c;序列化写入、反序列化读取、直接读取。

Adobe正通过数字体验改变世界

在当今这个数字化飞速发展的时代&#xff0c;Adobe公司正以其创新的技术和卓越的产品引领着创意设计领域的变革。从Adobe发布的生成式AI工具&#xff08;Adobe Firefly&#xff09;&#xff0c;到Illustrator和Photoshop的新AI功能&#xff0c;再到广受认可的Adobe国际认证&…

GLSL教程 第5章:光照和材质

目录 5.1 光照模型基础 5.2 Phong光照模型 5.3 Blinn-Phong光照模型 5.4 Cook-Torrance光照模型 5.5 Lambert光照模型 5.6 材质属性的深入讲解 小结 光照和材质是计算机图形学中至关重要的元素&#xff0c;它们共同决定了渲染图像的视觉效果。光照模型用于模拟光源与物体…

政安晨【零基础玩转各类开源AI项目】基于Ubuntu系统部署LivePortrait :通过缝合和重定向控制实现高效的肖像动画制作

目录 项目论文介绍 论文中实际开展的工作 非扩散性的肖像动画 基于扩散的肖像动画 方法论 基于Ubuntu的部署实践开始 1. 克隆代码并准备环境 2. 下载预训练权重 3. 推理 快速上手 驱动视频自动裁剪 运动模板制作 4. Gradio 界面 5. 推理速度评估 社区资源 政安…

electron安装及快速创建

electron安装及快速创建 electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 详细内容见官网&#xff1a;https://www.electronjs.org/zh/docs/latest/。 今天来记录下练习中的安装过程和hello world的创建。 创建项目文件夹&#xff0c;并执行npm 初始化命…

迅雷强制升级,漠视用户权力

用着迅雷&#xff0c;突然闪退&#xff0c;弹出升级界面。没有任何经过我的同意和操作&#xff0c;直接退出&#xff0c;强制升级。非常的蛮横和强硬。 升级完成之后&#xff0c;弹出一个提示框&#xff0c;提示框里有一个启动按钮&#xff0c;和一个加入开机自启的勾选框。意…

【Python实战】Google Chrome的离线小恐龙游戏

文章目录 Google Chrome的离线小恐龙游戏项目结构大纲 &#x1f4ca;&#x1f463;逐步编码过程 &#x1f9e9;&#x1f4a1;第一步&#xff1a;项目初始化与主程序框架第二步&#xff1a;实现T-Rex的跳跃功能第三步&#xff1a;添加障碍物和碰撞检测第四步&#xff1a;添加得分…

前端面试项目细节重难点分享(十三)

面试题提问&#xff1a;分享你最近做的这个项目&#xff0c;并讲讲该项目的重难点&#xff1f; 答&#xff1a;最近这个项目是一个二次迭代开发项目&#xff0c;迭代周期一年&#xff0c;在做这些任务需求时&#xff0c;确实有很多值得分享的印象深刻的点&#xff0c;我讲讲下面…

go语言学习文档精简版

Go语言是一门开源的编程语言&#xff0c;目的在于降低构建简单、可靠、高效软件的门槛。Go平衡了底层系统语言的能力&#xff0c;以及在现代语言中所见到的高级特性。 你好&#xff0c;Go package main // 程序组织成包import "fmt" // fmt包用于格式化输出数据// …

排序算法详解

​ &#x1f48e;所属专栏&#xff1a;数据结构与算法学习 &#x1f48e; 欢迎大家互三&#xff1a;2的n次方_ &#x1f341;1. 插入排序 &#x1f341;1.1 直接插入排序 插入排序是一种简单直观的排序算法&#xff0c;它的原理是通过构建有序序列&#xff0c;对于未排序数…

使用 Visual Studio 2022 自带的 cl.exe 测试编译 opencv helloworld

1. 参考博客&#xff1a;https://blog.csdn.net/yangSHU21/article/details/130237669( 利用OpenCV把一幅彩色图像转换成灰度图 )( 代码用的此博客的&#xff0c;就改了下图片文件路径而已 )。 2. 编译探索步骤&#xff1a; test.cpp&#xff1a; #include <iostream>…

Golang | Leetcode Golang题解之第283题移动零

题目&#xff1a; 题解&#xff1a; func moveZeroes(nums []int) {left, right, n : 0, 0, len(nums)for right < n {if nums[right] ! 0 {nums[left], nums[right] nums[right], nums[left]left}right} }

单证不一致清关难题 | 国际贸易综合服务平台 | 箱讯科技

什么是单证一致&#xff1f; 单证一致出口方所提供的所有单据要严格符合进口方开证银行所开信用证的要求&#xff0c;或者说出口方制作和提供的所有与本项货物买卖有关的单据&#xff0c;与进口方申请开立的信用证对单据的要求完全吻合&#xff0c;没有矛盾。 添加图片注释&am…

【Stable Diffusion】(基础篇四)—— 模型

模型 本系列博客笔记主要参考B站nenly同学的视频教程&#xff0c;传送门&#xff1a;B站第一套系统的AI绘画课&#xff01;零基础学会Stable Diffusion&#xff0c;这绝对是你看过的最容易上手的AI绘画教程 | SD WebUI 保姆级攻略_哔哩哔哩_bilibili 本文主要讲解如何下载和使…

Spire.PDF for .NET【文档操作】演示:在 PDF 中添加、隐藏或删除图层

PDF 图层是一种将 PDF 文件的内容按图层排列的功能&#xff0c;允许用户在同一个 PDF 文件中选择性地将某些内容设置为可见&#xff0c;将其他内容设置为不可见。PDF 图层是分层艺术品、地图和 CAD 图纸中使用的常见元素。本文将演示如何使用Spire.PDF for .NET以编程方式在 PD…

分类常用的评价指标-二分类/多分类

二分类常用的性能度量指标 精确率、召回率、F1、TPR、FPR、AUC、PR曲线、ROC曲线、混淆矩阵 「精确率」查准率 PrecisionTP/(TPFP) 「召回率」查全率RecallTP/(TPFN) 「真正例率」即为正例被判断为正例的概率TPRTP/(TPFN) 「假正例率」即为反例被判断为正例的概率FPRFP/(TNFP)…

唯众物联网(IOT)全功能综合实训教学解决方案

一、引言 在信息技术日新月异的今天&#xff0c;物联网&#xff08;IoT&#xff09;作为推动数字化转型的关键力量&#xff0c;其触角已延伸至我们生活的方方面面&#xff0c;深刻地重塑了工作模式、生活习惯乃至社会结构的每一个角落。面对这一前所未有的变革浪潮&#xff0c…

Java的类加载机制

Java的类加载机制是指将类的字节码文件&#xff08;.class文件&#xff09;加载到JVM中并将其转换为Class对象的过程。这个过程由类加载器&#xff08;ClassLoader&#xff09;完成。Java的类加载机制具有动态性和灵活性&#xff0c;使得Java能够支持动态加载类、实现模块化开发…

day4 vue2以及ElementUI

创建vue2项目 可能用到的命令行们 vue create 项目名称 // 创建项目 cd 项目名称 // 只有进入项目下&#xff0c;才能运行 npm run serve // 运行项目 D: //切换盘符 更改 Vue项目的端口配置 基础语法 项目创建完成之后&#xff0c;会有一个组件HelloWorld.vue&#xff0c;…