探索元生代:ComfyUI 工作流与计算机视觉的奇妙邂逅
目录
一、引言
二、蓝耘元生代和 ComfyUI 工作流初印象
(一)蓝耘元生代平台简介
(二)ComfyUI 工作流创建是啥玩意儿
三、计算机视觉是个啥
(一)计算机视觉的基本概念
(二)计算机视觉的应用场景
四、蓝耘元生代平台上的 ComfyUI 工作流与计算机视觉的联系
(一)数据处理方面的联系
(二)模型训练方面的联系
(三)模型部署方面的联系
五、实际案例分析
(一)基于蓝耘元生代和 ComfyUI 工作流的图像分类项目
1. 数据收集和预处理
2. 模型选择和训练
3. 模型评估和优化
4. 模型部署和应用
六、遇到的问题和解决方案
(一)数据处理方面的问题
(二)模型训练方面的问题
(三)模型部署方面的问题
七、总结
一、引言
嘿,各位计算机科学与技术专业的小伙伴们!咱们都知道,在计算机领域里,新技术就跟雨后春笋似的,一个接一个地冒出来。最近我就对蓝耘元生代这个平台特别感兴趣,尤其是它实现的工作流(ComfyUI)创建和计算机视觉之间的联系。今天呢,我就想跟大家好好唠唠这两者之间到底有啥关系,说不定能给咱们的学习和研究带来一些新的启发呢!
二、蓝耘元生代和 ComfyUI 工作流初印象
(一)蓝耘元生代平台简介
蓝耘元生代这个平台啊,在我看来就像是一个超级大的技术宝库。它整合了好多先进的技术和工具,能让我们在上面搞各种开发和研究。感觉它就像是一个充满魔法的舞台,能让我们的想法和创意尽情地展现出来。而且听说它在很多领域都有应用,像人工智能、大数据啥的,都能在这个平台上找到用武之地。
登录与注册:打开浏览器,访问蓝耘 GPU 智算云平台官网(https://cloud.lanyun.net//#/registerPage?promoterCode=0131 )。新用户需先进行注册,注册成功后即可享受免费体验 18 小时算力的优惠。登录后,用户将进入蓝耘平台的控制台,在这里可以看到丰富的功能模块,如容器云市场、应用市场等 。
(二)ComfyUI 工作流创建是啥玩意儿
ComfyUI 工作流创建呢,其实就是在蓝耘元生代平台上搭建一套工作流程。打个比方吧,就像是我们做手工,得有个步骤和顺序,先做啥后做啥都得安排好。ComfyUI 工作流就是把计算机程序里的各种任务和操作按照一定的顺序和规则组合起来,让它们能自动地完成一系列的工作。比如说,我们要处理一批图片,可能得先把图片下载下来,然后对图片进行裁剪、调整颜色啥的,最后再把处理好的图片保存起来。用 ComfyUI 工作流,我们就能把这些步骤都安排好,让程序自动地完成这些操作,是不是很方便?
三、计算机视觉是个啥
(一)计算机视觉的基本概念
计算机视觉啊,简单来说就是让计算机像人一样 “看” 东西。我们人类的眼睛能看到周围的世界,然后大脑会对看到的东西进行分析和理解。计算机视觉就是要让计算机也能做到这一点,它通过摄像头或者其他设备获取图像或视频,然后用各种算法和技术对这些图像和视频进行处理和分析,从而识别出图像里有啥东西,它们的位置在哪里,甚至还能理解图像所表达的含义。比如说,人脸识别技术就是计算机视觉的一个典型应用,它能让计算机准确地识别出人的脸,还能判断这个人是谁。
(二)计算机视觉的应用场景
计算机视觉的应用场景那可多了去了。在安防领域,它可以用于监控摄像头,自动识别出可疑人员和异常行为;在自动驾驶领域,计算机视觉能让汽车 “看” 到周围的路况,识别出道路、交通标志和其他车辆,从而实现自动驾驶;在医疗领域,它可以帮助医生分析 X 光片、CT 图像等,辅助诊断疾病。还有电商领域,计算机视觉可以用于商品识别和推荐,根据用户上传的商品图片,推荐相似的商品给用户。总之,计算机视觉在我们生活的方方面面都有着广泛的应用。
四、蓝耘元生代平台上的 ComfyUI 工作流与计算机视觉的联系
(一)数据处理方面的联系
在计算机视觉里,数据处理可是非常重要的一步。我们要对大量的图像和视频数据进行预处理,比如调整图像的大小、亮度、对比度,把图像转换成计算机能处理的格式等等。而 ComfyUI 工作流在蓝耘元生代平台上就能很好地完成这些数据处理任务。
比如说,我们有一个计算机视觉项目,需要处理一批从网上下载下来的图片。这些图片的大小和格式都不一样,我们得把它们统一成相同的大小和格式,才能进行后续的分析。这时候,我们就可以用 ComfyUI 工作流来完成这个任务。我们可以在工作流里设置一个图片处理节点,这个节点可以调用 Python 的图像处理库(像 Pillow 库)来对图片进行处理。下面是一段简单的 Python 代码示例,展示了如何用 Pillow 库来调整图片的大小:
from PIL import Imagedef resize_image(input_path, output_path, width, height):try:image = Image.open(input_path)resized_image = image.resize((width, height))resized_image.save(output_path)print(f"Image resized and saved to {output_path}")except Exception as e:print(f"Error resizing image: {e}")# 使用示例
input_image_path = 'input.jpg'
output_image_path = 'output.jpg'
new_width = 800
new_height = 600resize_image(input_image_path, output_image_path, new_width, new_height)
在 ComfyUI 工作流里,我们可以把这个函数封装成一个节点,然后通过设置节点的输入参数(比如输入图片的路径、输出图片的路径、新的宽度和高度),就可以让工作流自动地对图片进行处理。这样,我们就可以用 ComfyUI 工作流来批量处理大量的图片,提高数据处理的效率。
(二)模型训练方面的联系
计算机视觉的核心就是各种模型,像卷积神经网络(CNN)、目标检测模型(如 YOLO)等等。这些模型需要大量的数据来进行训练,才能达到较好的效果。而 ComfyUI 工作流在模型训练方面也能发挥很大的作用。
比如说,我们要训练一个人脸识别模型。在训练之前,我们需要准备好训练数据,包括人脸图片和对应的标签(也就是这个人是谁)。然后,我们需要对数据进行划分,分成训练集和测试集。接着,我们要选择合适的模型架构,设置好训练参数,开始训练模型。最后,我们还要对训练好的模型进行评估,看看它的性能怎么样。
在这个过程中,ComfyUI 工作流可以把这些步骤都整合起来。我们可以在工作流里设置数据准备节点、模型训练节点、模型评估节点等等。每个节点都可以调用相应的 Python 代码来完成特定的任务。下面是一段简单的 Python 代码示例,展示了如何用 PyTorch 来训练一个简单的卷积神经网络:
import torch
import torch.nn as nn
import torch.optim as optim
from torchvision import datasets, transforms# 定义一个简单的卷积神经网络
class SimpleCNN(nn.Module):def __init__(self):super(SimpleCNN, self).__init__()self.conv1 = nn.Conv2d(3, 16, kernel_size=3, padding=1)self.relu1 = nn.ReLU()self.pool1 = nn.MaxPool2d(2)self.fc1 = nn.Linear(16 * 16 * 16, 10)def forward(self, x):x = self.conv1(x)x = self.relu1(x)x = self.pool1(x)x = x.view(-1, 16 * 16 * 16)x = self.fc1(x)return x# 数据预处理
transform = transforms.Compose([transforms.Resize((32, 32)),transforms.ToTensor(),transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))
])# 加载训练集和测试集
train_dataset = datasets.CIFAR10(root='./data', train=True,download=True, transform=transform)
test_dataset = datasets.CIFAR10(root='./data', train=False,download=True, transform=transform)train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=32, shuffle=True)
test_loader = torch.utils.data.DataLoader(test_dataset, batch_size=32, shuffle=False)# 初始化模型、损失函数和优化器
model = SimpleCNN()
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=0.001, momentum=0.9)# 训练模型
for epoch in range(10):running_loss = 0.0for i, data in enumerate(train_loader, 0):inputs, labels = dataoptimizer.zero_grad()outputs = model(inputs)loss = criterion(outputs, labels)loss.backward()optimizer.step()running_loss += loss.item()print(f'Epoch {epoch + 1}, Loss: {running_loss / len(train_loader)}')# 评估模型
correct = 0
total = 0
with torch.no_grad():for data in test_loader:images, labels = dataoutputs = model(images)_, predicted = torch.max(outputs.data, 1)total += labels.size(0)correct += (predicted == labels).sum().item()print(f'Accuracy of the network on the test images: {100 * correct / total}%')
在 ComfyUI 工作流里,我们可以把这个训练过程封装成一个节点,然后通过设置节点的输入参数(比如训练数据的路径、模型的保存路径、训练的轮数等等),就可以让工作流自动地完成模型的训练和评估。这样,我们就可以用 ComfyUI 工作流来管理复杂的模型训练过程,提高训练的效率和可重复性。
(三)模型部署方面的联系
训练好的模型还得部署到实际的应用中才能发挥作用。在计算机视觉里,模型部署也有很多挑战,比如要考虑模型的性能、内存占用、推理速度等等。而 ComfyUI 工作流在模型部署方面也能提供一些帮助。
比如说,我们训练好了一个目标检测模型,要把它部署到一个移动设备上。在部署之前,我们需要对模型进行优化,比如量化模型、剪枝模型等等,以减少模型的内存占用和提高推理速度。然后,我们还需要把优化后的模型转换成适合移动设备的格式,比如 TensorFlow Lite 格式。
在这个过程中,ComfyUI 工作流可以把这些步骤都整合起来。我们可以在工作流里设置模型优化节点、模型转换节点等等。每个节点都可以调用相应的工具和库来完成特定的任务。下面是一段简单的 Python 代码示例,展示了如何用 TensorFlow Lite 来转换一个 TensorFlow 模型:
import tensorflow as tf# 加载训练好的TensorFlow模型
model = tf.keras.models.load_model('saved_model.h5')# 创建一个TensorFlow Lite转换器
converter = tf.lite.TFLiteConverter.from_keras_model(model)# 进行模型量化
converter.optimizations = [tf.lite.Optimize.DEFAULT]# 转换模型
tflite_model = converter.convert()# 保存转换后的TensorFlow Lite模型
with open('converted_model.tflite', 'wb') as f:f.write(tflite_model)
五、实际案例分析
(一)基于蓝耘元生代和 ComfyUI 工作流的图像分类项目
我们来详细搞一个实际的图像分类项目,看看蓝耘元生代平台上的 ComfyUI 工作流和计算机视觉是怎么完美结合起来的。就假设我们要对水果图片进行分类,把苹果、香蕉、橙子等不同的水果图片准确地区分开来。
1. 数据收集和预处理
首先,数据收集这一步至关重要。我们可以通过多种途径来获取水果图片数据。一方面,我们可以从网上搜索一些公开的水果图片数据集,这些数据集通常已经经过了一定的整理和标注,使用起来比较方便。另一方面,我们也可以自己动手,用相机拍摄一些水果图片,这样可以保证数据的多样性和真实性。
收集到数据后,就该进行预处理了。在 ComfyUI 工作流里,我们可以设置一系列的数据预处理节点。比如,我们要调整图片的大小,让所有的图片都具有相同的尺寸,这样可以方便后续的模型处理。可以使用 Python 的图像处理库 Pillow 来实现图片大小的调整,代码如下:
from PIL import Imagedef resize_image(input_path, output_path, width, height):try:image = Image.open(input_path)resized_image = image.resize((width, height))resized_image.save(output_path)print(f"Image resized and saved to {output_path}")except Exception as e:print(f"Error resizing image: {e}")# 使用示例
input_image_path = 'input.jpg'
output_image_path = 'output.jpg'
new_width = 224
new_height = 224resize_image(input_image_path, output_image_path, new_width, new_height)
除了调整大小,我们还可能需要对图片进行亮度、对比度的调整,去除噪声等操作。这些操作都可以在 ComfyUI 工作流中通过设置相应的节点来完成。
2. 模型选择和训练
接下来就是模型选择和训练的环节了。对于图像分类任务,卷积神经网络(CNN)是一个非常不错的选择。在 ComfyUI 工作流中,我们可以设置一个模型选择节点,从众多的 CNN 模型中挑选出适合我们水果分类任务的模型,比如 ResNet、VGG 等。
选好模型后,就可以开始训练了。在训练之前,我们需要对数据进行划分,分成训练集和测试集。训练集用于训练模型,让模型学习水果图片的特征;测试集用于评估模型的性能,看看模型在未见过的数据上的表现如何。
在 ComfyUI 工作流中,我们可以设置一个模型训练节点,调用深度学习框架(如 PyTorch 或 TensorFlow)来进行模型训练。以下是一个使用 PyTorch 进行水果分类模型训练的示例代码:
import torch
import torch.nn as nn
import torch.optim as optim
from torchvision import datasets, transforms
from torch.utils.data import DataLoader# 定义一个简单的卷积神经网络
class FruitCNN(nn.Module):def __init__(self):super(FruitCNN, self).__init__()self.conv1 = nn.Conv2d(3, 16, kernel_size=3, padding=1)self.relu1 = nn.ReLU()self.pool1 = nn.MaxPool2d(2)self.conv2 = nn.Conv2d(16, 32, kernel_size=3, padding=1)self.relu2 = nn.ReLU()self.pool2 = nn.MaxPool2d(2)self.fc1 = nn.Linear(32 * 56 * 56, 128)self.relu3 = nn.ReLU()self.fc2 = nn.Linear(128, 3) # 假设我们有3种水果def forward(self, x):x = self.conv1(x)x = self.relu1(x)x = self.pool1(x)x = self.conv2(x)x = self.relu2(x)x = self.pool2(x)x = x.view(-1, 32 * 56 * 56)x = self.fc1(x)x = self.relu3(x)x = self.fc2(x)return x# 数据预处理
transform = transforms.Compose([transforms.Resize((224, 224)),transforms.ToTensor(),transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))
])# 加载训练集和测试集
train_dataset = datasets.ImageFolder(root='train_data', transform=transform)
test_dataset = datasets.ImageFolder(root='test_data', transform=transform)train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True)
test_loader = DataLoader(test_dataset, batch_size=32, shuffle=False)# 初始化模型、损失函数和优化器
model = FruitCNN()
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=0.001, momentum=0.9)# 训练模型
for epoch in range(10):running_loss = 0.0for i, data in enumerate(train_loader, 0):inputs, labels = dataoptimizer.zero_grad()outputs = model(inputs)loss = criterion(outputs, labels)loss.backward()optimizer.step()running_loss += loss.item()print(f'Epoch {epoch + 1}, Loss: {running_loss / len(train_loader)}')# 评估模型
correct = 0
total = 0
with torch.no_grad():for data in test_loader:images, labels = dataoutputs = model(images)_, predicted = torch.max(outputs.data, 1)total += labels.size(0)correct += (predicted == labels).sum().item()print(f'Accuracy of the network on the test images: {100 * correct / total}%')
在 ComfyUI 工作流中,我们可以把这个训练过程封装成一个节点,通过设置节点的输入参数(如训练数据的路径、模型的保存路径、训练的轮数等),让工作流自动完成模型的训练和评估。
3. 模型评估和优化
训练好模型之后,我们要对模型进行评估,看看它的性能到底怎么样。可以使用一些评估指标,如准确率、召回率、F1 值等。在 ComfyUI 工作流中,我们可以设置一个模型评估节点,调用相应的评估函数来计算这些指标。
如果模型的性能不理想,我们就需要对模型进行优化。优化的方法有很多种,比如调整模型的架构,增加模型的层数或者神经元的数量;调整训练参数,如学习率、批次大小等;增加训练数据的数量,让模型学习到更多的特征。在 ComfyUI 工作流中,我们可以设置一个模型优化节点,根据评估结果自动调整模型的参数,进行多次训练和评估,直到模型的性能达到满意的程度。
4. 模型部署和应用
最后,我们要把训练好的模型部署到实际的应用中。可以把模型部署到一个 Web 应用中,让用户上传水果图片,然后用模型对图片进行分类,返回分类结果。在 ComfyUI 工作流中,我们可以设置一个模型部署节点,调用相应的工具和库来完成模型的部署。
以下是一个简单的使用 Flask 框架搭建 Web 应用,实现水果图片分类的示例代码:
from flask import Flask, request, jsonify
import torch
import torchvision.transforms as transforms
from PIL import Image
import ioapp = Flask(__name__)# 加载训练好的模型
model = torch.load('fruit_model.pth')
model.eval()# 数据预处理
transform = transforms.Compose([transforms.Resize((224, 224)),transforms.ToTensor(),transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))
])@app.route('/classify', methods=['POST'])
def classify():try:# 获取上传的图片file = request.files['image']image = Image.open(io.BytesIO(file.read()))# 预处理图片image = transform(image).unsqueeze(0)# 进行分类with torch.no_grad():outputs = model(image)_, predicted = torch.max(outputs.data, 1)# 返回分类结果classes = ['apple', 'banana', 'orange'] # 假设我们有3种水果result = classes[predicted.item()]return jsonify({'result': result})except Exception as e:return jsonify({'error': str(e)})if __name__ == '__main__':app.run(debug=True)
在 ComfyUI 工作流中,我们可以把这个 Web 应用的部署过程封装成一个节点,通过设置节点的输入参数(如模型的路径、端口号等),让工作流自动完成模型的部署和 Web 应用的启动。
六、遇到的问题和解决方案
(一)数据处理方面的问题
在数据处理过程中,我们可能会遇到一些问题。比如说,图片数据的质量不高,有噪声、模糊等问题。这时候,我们可以用一些图像处理技术来对图片进行去噪、锐化等处理。在 ComfyUI 工作流里,我们可以设置一个图像处理节点,调用相应的图像处理库来完成这些任务。
还有,数据的标注可能会有错误或者不一致的情况。这时候,我们可以人工检查标注数据,修正错误的标注。也可以用一些数据增强技术,比如随机裁剪、旋转、翻转等,来增加数据的多样性,减少标注错误对模型训练的影响。
(二)模型训练方面的问题
在模型训练过程中,我们可能会遇到过拟合或者欠拟合的问题。过拟合就是模型在训练集上表现很好,但是在测试集上表现很差;欠拟合就是模型在训练集和测试集上的表现都不好。
如果遇到过拟合的问题,我们可以采用一些正则化技术,比如 L1 和 L2 正则化,来减少模型的复杂度。也可以增加训练数据的数量,让模型学习到更多的特征。在 ComfyUI 工作流里,我们可以设置一个正则化节点,调用相应的深度学习框架来实现正则化。
如果遇到欠拟合的问题,我们可以增加模型的复杂度,比如增加神经网络的层数或者神经元的数量。也可以调整模型的训练参数,比如学习率、训练的轮数等等。在 ComfyUI 工作流里,我们可以设置一个模型调整节点,调用相应的深度学习框架来调整模型的参数。
(三)模型部署方面的问题
在模型部署过程中,我们可能会遇到一些性能问题。比如说,模型的推理速度太慢,不能满足实际应用的需求。这时候,我们可以对模型进行优化,比如量化模型、剪枝模型等等,以减少模型的内存占用和提高推理速度。在 ComfyUI 工作流里,我们可以设置一个模型优化节点,调用相应的工具和库来完成模型的优化。
还有,模型在不同的设备上可能会有兼容性问题。这时候,我们可以把模型转换成适合不同设备的格式,比如 TensorFlow Lite 格式、ONNX 格式等等。在 ComfyUI 工作流里,我们可以设置一个模型转换节点,调用相应的工具和库来完成模型的转换。
七、总结
通过上面的分析,我们可以看到蓝耘元生代平台上的 ComfyUI 工作流和计算机视觉之间有着非常紧密的联系。在数据处理方面,ComfyUI 工作流可以帮助我们高效地完成图像和视频数据的预处理;在模型训练方面,它可以帮助我们管理复杂的模型训练过程,提高训练的效率和可重复性;在模型部署方面,它可以帮助我们管理复杂的模型部署过程,提高部署的效率和可靠性。
相关文章:
探索元生代:ComfyUI 工作流与计算机视觉的奇妙邂逅
目录 一、引言 二、蓝耘元生代和 ComfyUI 工作流初印象 (一)蓝耘元生代平台简介 (二)ComfyUI 工作流创建是啥玩意儿 三、计算机视觉是个啥 (一)计算机视觉的基本概念 (二)计算…...
C++ 迭代器失效详解:如何避免 vector 操作中的陷阱
目录 1. 什么是迭代器失效? 2. 哪些操作会导致迭代器失效? 2.1 vector 的插入操作(push_back, insert) 示例:push_back 导致迭代器失效 如何避免? 2.2 vector 的删除操作(erase, pop_back&…...
【fisco bcos】基于ABI调用智能合约
参考官方文档:https://fisco-bcos-documentation.readthedocs.io/zh-cn/latest/docs/sdk/java_sdk/assemble_transaction.html 先放一下智能合约: (就是一个很简单的插入和查找嗯) pragma solidity ^0.4.25; pragma experimental…...
【Python学习笔记】Pandas实现Excel质检记录表初审、复核及质检统计
背景: 我有这样一个需要审核的飞书题目表,按日期分成多个sheet,有初审——复核——质检三个环节,这三个环节是不同的同学在作业,并且领到同一个题目的人选是随机的,也就是说,完成一道题的三个人…...
Springboot 自动装配原理是什么?SPI 原理又是什么?
1. Spring Boot 自动装配原理 自动装配是 Spring Boot 简化配置的核心机制,其核心思想是根据类路径中的依赖自动配置 Spring 应用。 关键步骤: 启动注解 SpringBootApplication 该注解组合了 EnableAutoConfiguration,用于激活自动配置。 …...
【英语语法】基本句型
目录 前言一:主谓二:主谓宾三:主系表四:主谓双宾五:主谓宾补 前言 英语基本句型是语法体系的基石,以下是英语五大基本句型。 一:主谓 结构:主语 不及物动词 例句: T…...
扫雷-C语言版
C语言扫雷游戏设计(完整版) 游戏背景 扫雷是一款经典的益智类单人电脑游戏,最早出现在1960年代,并在1990年代随着Windows操作系统而广为人知。游戏目标是在不触发任何地雷的情况下,揭开所有非地雷的格子。玩家需要根…...
【C++初阶】--- list容器功能模拟实现
1.什么是list容器 在 C 标准模板库(STL)中,std::list 是一个非常有用的容器,它是双向链表的实现std::list 是一种序列式容器,它允许在序列内的任意位置进行高效的插入和删除操作。与数组和 std::vector 不同ÿ…...
gRPC 介绍及在嵌入式 Linux 下的成功编译及使用详解
gRPC 是一个高性能、开源和通用的 RPC 框架,由 Google 开发。它支持多种编程语言,并且能够运行在不同的环境中,包括嵌入式系统。本文将详细介绍 gRPC,以及如何在嵌入式 Linux 系统下成功编译 gRPC,并结合 protobuf 和 …...
C语言教程(十):C 语言函数详解
一、引言 在 C 语言中,函数是一组执行特定任务的代码块。通过将复杂的程序逻辑划分为多个函数,不仅能提高代码的可读性、可维护性,还便于代码的复用。无论是简单的数学计算,还是复杂的系统操作,函数都发挥着核心作用。…...
力扣刷题-热题100题-第35题(c++、python)
146. LRU 缓存 - 力扣(LeetCode)https://leetcode.cn/problems/lru-cache/?envTypestudy-plan-v2&envIdtop-100-liked 双向链表哈希表 内置函数 对于c有list可以充当双向链表,unordered_map充当哈希表;python有OrderedDic…...
LeetCode算法题(Go语言实现)_52
题目 给你一个下标从 0 开始的整数数组 costs ,其中 costs[i] 是雇佣第 i 位工人的代价。 同时给你两个整数 k 和 candidates 。我们想根据以下规则恰好雇佣 k 位工人: 总共进行 k 轮雇佣,且每一轮恰好雇佣一位工人。 在每一轮雇佣中…...
基于尚硅谷FreeRTOS视频笔记——13—HAL库和RTOS时钟源问题
RTOS的时钟源就是系统定时器中断,通俗来说就是系统定时器每中断一次,就扫描一次RTOS,查看RTOS中有没有任务的切换。 但是,系统存在一个HAL_Delay()函数,就是使用的系统定时器中断来执行的函数。 当我们在RTOS中&…...
FPGA入门学习Day1——设计一个DDS信号发生器
目录 一、DDS简介 (一)基本原理 (二)主要优势 (三)与传统技术的对比 二、FPGA存储器 (一)ROM波形存储器 (二)RAM随机存取存储器 (三&…...
JavaScript-立即执行函数(Immediately Invoked Function Expression,IIFE)
立即执行函数(Immediately Invoked Function Expression,IIFE)是 JavaScript 里一种很独特的函数,它在定义后会马上执行。下面会详细介绍它的语法、用途、优点以及注意事项。 一、语法 立即执行函数一般有两种常见的语法形式&am…...
【Leetcode 每日一题 - 补卡】2537. 统计好子数组的数目
问题背景 给你一个整数数组 n u m s nums nums 和一个整数 k k k,请你返回 n u m s nums nums 中 好 子数组的数目。 一个子数组 a r r arr arr 如果有 至少 k k k 对下标 ( i , j ) (i, j) (i,j) 满足 i < j i < j i<j 且 a r r [ i ] a r r [ …...
【工具-Krillin AI】视频翻译、配音、语音克隆于一体的一站式视频多语言转换工具~
Krillin AI 是全能型音视频本地化与增强解决工具。这款简约而强大的工具,集音视频翻译、配音、语音克隆于一身,支持横竖屏格式输出,确保在所有主流平台(哔哩哔哩,小红书,抖音,视频号,…...
常用绑定事件方式有哪几种
绑定事件分为3种: 1、内联模式:将函数名直接作为标签属性的属性值(注意:这里是带括号的,不带括号不生效,但是在vue中可以加括号也可以不加括号,如果需要穿参数就加括号,不需要传参数可以不加&am…...
数据结构之BFS广度优先算法(腐烂的苹果)
队列这个数据结构在很多场景下都有使用,比如在实现二叉树的层序遍历,floodfill问题(等等未完成)中,都需要借助队列的先进先出特性,下面给出这几个问题的解法 经典的二叉树的层序遍历 算法图示,以下图所示的二叉树为例…...
linux 学习 1.开始学习
准备学习linux记录一下学习内容,只会包含必要的知识,和部分演示 我采用的系统是Ubuntu24.04 初始掌握 学习首先需要掌握如何查看帮助手册 man man # man 加任何命令可以看具体命令的帮助手册 man mkdir进入手册按 d(down):往下翻半页u(u…...
Flink-01学习 介绍Flink及上手小项目之词频统计
flink简介 官网 概述: 学习Flink具体包括四个关键概念:流数据的持续处理,事件时间,有状态流处理和状态快照。 Apache Flink 是一个开源的流处理框架,旨在处理批处理和实时数据处理,具有高吞吐量和低延迟的…...
【Linux我做主】探秘gcc/g++和动静态库
TOC Linux编译器gcc/g的使用 github地址 有梦想的电信狗 前言 在软件开发的世界中,编译器如同匠人的工具,将人类可读的代码转化为机器执行的指令。 对于Linux开发者而言,gcc和g是构建C/C程序的核心工具链,掌握它们的原理和使…...
工控系统前端设计(pyqt)
题目源自:白月黑羽的项目实战四-[工控系统前端] 代码已上传至gitcode https://gitcode.com/m0_37662818/Industrial_Control_System_Front_End 心得体会:直接用组态软件或者js吧 项目亮点 tablemodel的使用,绑定了表格和数据风机自定义ite…...
一台 Master 多节点玩转 Kubernetes:sealos 一键部署实践
文章目录 一台 Master 多节点玩转 Kubernetes:sealos 一键部署实践🔗 参考链接🌐 部署环境📦 安装包说明🔧 前期准备🚀 使用 sealos 安装 Kubernetes✅ 验证集群状态📌 后续可做的优化和拓展&am…...
写书的三驾马车
2019年8月19日23:52:28 先亮出我们的兵器组合: GitBook Git Markdown,享受行云流水一般的写作 个人秀 GitBook : 一个基于 Node.js 的文档格式转换工具,支持 Markdown 和 AsciiDoc 两种语法格式,可以输出 HTML、PDF等格式的…...
科学护理进行性核上性麻痹,缓解病痛提升生活质量
进行性核上性麻痹是一种罕见的神经系统变性疾病,患者常出现姿势平衡障碍、吞咽困难、眼球运动异常等症状。通过科学的健康护理,能在一定程度上减轻患者痛苦,提升生活质量。 日常护理,保障安全舒适 患者日常活动时,需确…...
第七章:7.2求方程a*x*x+b*x+c=0的根,用3个函数,分别求当:b*b-4*a*c大于0、等于0和小于0时的根并输出结果。从主函数输入a、b、c的值
//求方程a*x*xb*xc0的根,用3个函数,分别求当:b*b-4*a*c大于0、等于0和小于0时的根并输出结果。 //从主函数输入a、b、c的值 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<math.h> void s1(float a, float b, fl…...
优选算法系列(7.BFS 解决最短路问题)
简介: 先走到A,之后弹出A再把A能走到的地方加进去向外扩展把队列里面的元素(B,C)弹出来,再把B,C能到的地方入队列 一直这样那么最短路程就是扩展的层数。 迷宫中离入口最近的出口(me…...
实现定时发送邮件,以及时间同步
定时发送邮件 部署邮件服务 查看有没有安装mailx,安装了 [root192 ~]# rpm -q mailx mailx-12.5-43.fc38.x86_64去网易拿一下授权码,写到配置文件里 vim /etc/mail.rcset fromxxxxxxx163.com set smtpsmtp.163.com set smtp-auth-userxxxxxxx163.com set smtp-auth-passwor…...
Java反射知识点学习笔记
目录 一、定义 二、获取class对象的三种方式 1、Class.forName("全类名") 2、类名.class 3、对象.getClass() 三、案例 1、获取 class 反射对象三种方式 2、利用反射获取构造方法 3、利用反射获取成员变量 4、利用反射获取成员方法 Java反射是一种强大的编…...
Unity ShaderLab引用HLSL文件找不到其中函数
在写Unity Shader的过程中,常常需要将方法封装到HLSL文件中,今天遇到一个这样的报错, 明明hlsl文件路径引用没问题,却引用不到方法 并且将分散文件中的函数复制过来一切正常,最终定位到HLSL的预编译指令中 这指令的…...
【文献笔记】LLM-based control code generation using image recognition
LLM-based control code generation using image recognition 原文代码 标题翻译:基于图像识别的LLM控制代码生成 1. 内容介绍 1.1. 简介 论文提出了一种基于LLM的新方法,通过图像识别从管道仪表图(Piping and Instrumentation Diagrams,…...
算法之贪心算法
贪心算法 贪心算法核心思想常见应用场景典型案例案例一:找零问题案例二:活动选择问题案例三:货仓选址问题 贪心算法的应用详解霍夫曼编码最小生成树Dijkstra最短路径算法 总结 贪心算法 核心思想 贪心算法(Greedy Algorithm&…...
从“链主”到“全链”:供应链数字化转型的底层逻辑
1. 制造业与供应链数字化转型的必然性 1.1. 核心概念与战略重要性 制造业的数字化转型,是利用新一代数字技术(如工业互联网、人工智能、大数据、云计算、边缘计算等)对制造业的整体价值链进行根本性重塑的过程。这不仅涉及技术的应用&#…...
【Windows本地部署n8n工作流自动平台结合内网穿透远程在线访问】
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...
Python中如何加密/解密敏感信息(如用户密码、token)
敏感信息,如用户密码、API密钥、访问令牌(token)、信用卡号以及其他个人身份信息(PII),构成了现代应用程序和系统中最为关键的部分。这些信息一旦被未经授权的第三方获取,可能引发灾难性的后果,从个人隐私泄露到企业经济损失,甚至是大规模的社会安全问题。保护这些敏感…...
Win10如何一键切换IP地址教程
切换IP地址可能对于许多用户来说是一个相对陌生但又可能经常需要进行的操作。无论是出于网络安全、突破网络限制还是仅仅为了测试目的,一键切换IP地址都能带来极大的便利。以下是在 Windows 10 中通过批处理脚本实现一键切换 IP 地址的详细教程: 方法一&…...
2021-11-09 C++三位数平方含有该数
缘由求解,运算函数,哪位大神教一下-编程语言-CSDN问答 void 三位数平方含有该数() {//缘由https://ask.csdn.net/questions/7560152?spm1005.2025.3001.5141int a 100, aa 1000, f 0;while (a < aa){f a*a;while (f > a)if ((f - a) % aa)f …...
高效检测书签网址,告别无效链接烦恼
软件介绍 你是否有过面对浏览器中满满的书签,却不知道哪些网址还“健在”,哪些已经“跑路”的烦恼?别担心,今天就给大家介绍一款神奇的小工具——“网址小卫士”。 检测轻松搞定 还在一个个手动检查书签网址的有效性吗…...
SpringBoot高校学生评教系统设计实现
概述 基于SpringBoot的高校学生评教系统项目,该系统包含了学生评教、教师管理等功能,适合作为JavaWeb学习项目。 主要内容 1. 学生功能模块 查看评教信息:可以查看学期、院系、任课教师、课程名称等信息评价打分功能:可以对课…...
代码随想录算法训练营第二十天
LeetCode题目: 39. 组合总和40. 组合总和 II131. 分割回文串2176. 统计数组中相等且可以被整除的数对(每日一题) 其他: 今日总结 往期打卡 39. 组合总和 跳转: 39. 组合总和 学习: 代码随想录公开讲解 问题: 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 targ…...
C++入门基础:命名空间,缺省参数,函数重载,输入输出
命名空间: C语言是基于C语言的,融入了面向对象编程思想,有了很多有用的库,所以接下来我们将学习C如何优化C语言的不足的。 在C/C语言实践中,在全局作用域中变量,函数,类会有很多,这…...
GPU怎么绑定到服务器上
确认服务器与 GPU 兼容性1:不同的服务器和 GPU 型号连接方式有所不同,要确保所选的 GPU 卡与服务器兼容。可通过服务器和 GPU 的产品文档,或使用服务器厂商提供的兼容性查询工具进行确认。安装前准备:关闭服务器电源,并…...
opencv函数展示2
一、像素操作与算术运算 1.cv2.split() 2. cv2.merge() 3.cv2.add() 4.cv2.bitwise_and() 5.cv2.bitwise_or() 6.cv2.inRange() 二、仿射变换 1.cv2.getRotationMatrix2D() 2.cv2.warpAffine() 3.cv2.flip() 4.cv2.resize() 三、透视变换 1.cv2.getPerspectiveTransform() 2…...
零基础上手Python数据分析 (16):DataFrame 常用统计分析方法
写在前面 —— 超越简单排序,探索数据内在规律,掌握Pandas统计分析基础 上一篇博客,我们学习了如何使用 Pandas 对 DataFrame 进行排序和排名,这使得我们能够更好地组织数据并快速定位关键信息。 然而,仅仅对数据进行排序和排名,还不足以完全理解数据。 要想更深入地解…...
文件系统 软硬连接
🌻个人主页:路飞雪吖~ 🌠专栏:Linux 目录 一、理解文件系统 🌠磁盘结构 二、软硬连接 🌟软硬链接 🌠软链接: 🌠硬链接: 🌟理解软硬链接的应…...
Linux环境基础开发工具使用
本节目标: 1. 学习yum工具,进行软件安装 2. 掌握vim编辑器使用,学会vim的简单配置 3. 掌握gcc/g编译器的使用,并了解其过程,原理 4. 掌握简单gdb使用于调试 5. 掌握简单的Makefile编写,了解其运行思想…...
秘密任务 2.0:如何利用 WebSockets + DTOs 设计实时操作
在之前的文章中,我们探讨了为什么 DTO 是提升 API 效率和安全性的秘密武器。现在,我们进入了一个全新的场景——我们将深入探讨如何通过 WebSockets DTOs 实现实时操作! Agent X 正在进行一项高风险的卧底任务。突然,总部更新了…...
LeetCode hot 100—括号生成
题目 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。 示例 示例 1: 输入:n 3 输出:["((()))","(()())","(())()","()(())",&…...
2025.04.17【Dendrogram】生信数据可视化:Dendrogram图表详解
Dendrogram customization Go further with ggraph: edge style, general layout, node features, adding labels, and more. Customized circular dendrogram Learn how to build a circular dendrogram with proper labels. 文章目录 Dendrogram customizationCustomized c…...