利用 DeepSeek-R1 模型和计算机视觉微调模型实现马铃薯叶片疾病识别和分类
一、需求背景
在农业现代化进程中,作物健康监测对于保障粮食安全和提高农业生产效率起着举足轻重的作用。马铃薯作为全球重要的粮食作物之一,其种植面积广泛,产量和质量直接关系到众多农户的生计以及食品供应链的稳定。准确、快速地鉴别马铃薯叶片的健康状况,能够及时发现病害并采取相应防治措施,有效减少病害对产量的影响,降低农药使用量,促进农业可持续发展。
然而,传统的人工鉴别马铃薯叶片健康状况的方式,不仅耗费大量人力、时间,而且主观性强,容易出现误判。随着人工智能技术的飞速发展,利用图像识别技术实现马铃薯叶片健康状况的自动鉴别成为了可能。客户希望通过自定义微调模型,达成上传马铃薯叶片后迅速鉴别其健康状况的目标。该模型的运行机制是对输入的叶片进行特征抽取,并完成输入数据的多分类任务。
我们的工作核心聚焦于模型可行性验证,主要包含以下方面:
1、依托客户提供的数据,训练并构建图像分类模型,让模型能够快速且精准地依据输入图片的特征,预测出对应的类别标签。
2、需要在实现成本(涵盖训练与推理成本)和模型精准度之间,对多个视觉微调模型展开比对,从而满足客户在不同场景和架构设计下的多样化需求。
3、使用大语言模型协同给出防治建议的效率与效果,确保在满足成本与精度要求的前提下,为用户提供最优质的病害检测与防治建议一体化服务。
二、方案概述
近年来,多模态 AI 模型取得了令人瞩目的进展,这类模型具备同时处理文本和图像的能力,极大地拓展了人工智能的应用边界。像商业模型 GPT-4o、Claude3.5,它们的多模态能力十分强大,在图片分类任务中展现出了不错的表现,能够快速对图像内容进行识别和分类。
然而,当将这些多模态模型应用于马铃薯叶片健康检测这类大规模实际场景时,仍暴露出诸多局限性。一方面,模型在面对如马铃薯叶片早疫病、健康、晚疫病这种自定义标签分类场景时,为了提升精度,需要投入大量精力进行提示词工程的优化工作;另一方面,模型的升级换代可能导致之前积累的有效提示词不再适用,从而需要重新开展大量的调试工作。此外,这类模型的推理成本较高,在大规模处理马铃薯叶片图像数据时,高昂的计算成本使得其在实际应用中受到限制。
鉴于多模态模型在实际应用中的不足,本地部署微调视觉模型成为了更具可行性的方案。在图像分类领域,Yolov11、ResNet50 和 MobileNetV3 等模型有着各自独特的优势。接下来,将深入探讨这些模型在马铃薯叶片健康检测中的应用潜力与价值。
1、常见模型的优势
-
Yolov11:作为 YOLO 系列最新版本,Yolov11 基于卷积神经网络原理,采用单阶段检测器(SSD)结构,将目标检测转化为回归问题,一次前向传播即可预测目标类别与位置。相比传统 CNN,它引入高效的特征金字塔网络(FPN)变体,融合多尺度特征图,提升对不同大小目标的检测能力;数据增强上运用 Mosaic、CutMix 技术,增加数据多样性,提高模型泛化能力。在马铃薯叶片健康检测中,面对大量图像数据,Yolov11 卓越的检测速度能满足实时检测需求,改进的网络结构与数据增强技术也保证了一定精度。
-
ResNet50:基于 CNN 基本原理,ResNet50 通过引入残差模块解决深层网络训练的梯度消失问题。其残差连接允许网络学习输入输出间的残差,得以构建更深网络结构,学习高级抽象特征。在马铃薯叶片疾病检测中,其深度结构能够捕捉叶片细微纹理和形状变化等复杂特征,有效提高分类准确性,例如精准识别早期病斑的细微纹理。
-
MobileNetV3:基于 CNN 原理,MobileNetV3 采用轻量级深度可分离卷积,将标准卷积分解为深度卷积和逐点卷积,大幅减少计算量与参数量。相较于早期版本,它进一步优化网络结构,引入 h-swish 激活函数替代 ReLU,在提升性能的同时降低计算成本,适合在资源受限的移动设备或边缘计算设备上运行,满足农业监测场景中实时检测需求。
-
自定义 CNN 模型:该模型根据具体任务定制化设计。针对马铃薯叶片疾病检测,依据叶片病症的纹理、形状和颜色特征,专门设计卷积层和池化层结构。例如,针对病害特定纹理设计小尺寸卷积核捕捉细节,根据病害区域分布调整池化步长和区域大小,更精准提取关键特征,有效提升对不同健康状况叶片的识别能力,满足多样化检测需求。
上述 Yolov11、ResNet50、MobileNetV3 和自定义 CNN 模型虽都基于卷积神经网络基本原理,但在网络结构、性能和应用场景上存在明显差异与各自改进点。基于这些模型特点,我们计划运用它们实现马铃薯叶片健康状况检测,并对比评测其能力差异。为更好适应检测任务,我们将利用客户提供的数据对模型进行微调,显著提升模型在马铃薯叶片健康检测领域的性能,实现性能达标且成本低廉的图像分类模型。
2、数据准备
高质量的训练数据对于模型性能至关重要,因此需要精心准备训练数据集,具体步骤如下:
-
数据收集:数据主要来源于客户在多个马铃薯种植区域不同生长周期采集的叶片图像。这些图像涵盖了不同环境条件下,包括不同光照、湿度和土壤状况等,以确保数据的多样性。此外,还从公开的农业图像数据库中补充了部分图像数据,进一步丰富数据集的样本类型。
-
数据标注:根据叶片的实际健康状况,按照早疫病(early blight )、健康(healthy)、晚疫病(late blight)这三种分类标签,对图像进行标注。为保证标注的准确性和一致性,需要人工进行标注和核实。例如:
early blight 早疫病
healthy 健康
late blight 晚疫病
-
数据预处理:在收集到图像数据后,首先对图像进行清洗,去除模糊、损坏以及不符合要求的图像。然后,统一所有图像的尺寸,将其调整为适合模型输入的大小,例如 [224*224]。同时,对图像进行归一化处理,将像素值映射到 [0, 1] 区间,以加速模型的训练收敛速度。此外,还运用了图像增强技术,如随机灰度、Mixup、随机翻转、旋转和缩放等,以增加数据的丰富度,提升模型的泛化能力。
以下是数据预处理部分代码:
# 自定义 Mixup 函数
def mixup_data(x, y, alpha=0.2):if alpha > 0:lam = np.random.beta(alpha, alpha)else:lam = 1batch_size = x.size()[0]index = torch.randperm(batch_size)mixed_x = lam * x + (1 - lam) * x[index, :]y_a, y_b = y, y[index]return mixed_x, y_a, y_b, lam
# 自定义 Mixup 损失函数
def mixup_criterion(criterion, pred, y_a, y_b, lam):return lam * criterion(pred, y_a) + (1 - lam) * criterion(pred, y_b)
# 随机灰度化变换
class RandomGrayscale:def __init__(self, p=0.2):self.p = pdef __call__(self, img):if torch.rand(1) < self.p:return transforms.functional.rgb_to_grayscale(img, num_output_channels=3)return img
# 训练数据预处理和增强
train_transform = transforms.Compose([transforms.Resize((224, 224)),RandomGrayscale(p=0.2),transforms.RandomRotation(30),transforms.RandomAffine(degrees=0, translate=(0.3, 0.3), shear=0.3),transforms.RandomHorizontalFlip(),transforms.ToTensor(),transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
])
# 验证数据预处理
val_transform = transforms.Compose([transforms.Resize((224, 224)),transforms.ToTensor(),transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
])
需要特别注意的是,我们发现在使用图像增强特别对于 MobileNetV3 这样的轻量级模型精准度影响非常大。图像增强前后的模型准确度约提升 30%。
3、模型训练
数据准备完成后,下一步是进行模型微调。我们分别使用 Yolov11、ResNet50、MobileNetV3 和自定义 CNN 模型进行训练。
(1)YOLO:我们使用 Ultralytics 框架来完成 YOLO 模型的训练。Ultralytics 是一款基于 PyTorch 的深度学习框架,专为计算机视觉任务设计,在目标检测、图像分割和分类等领域应用广泛。其对 YOLO 系列算法进行了深度优化,极大提升了模型的训练效率与检测性能。它提供了丰富的工具和模块,比如先进的数据加载器、高效的训练循环以及灵活的超参数调整接口,能帮助我们快速搭建并训练出符合马铃薯叶片健康检测需求的 YOLO 模型。同时,Ultralytics 还支持多 GPU 训练,显著缩短训练时间,并且具备强大的模型评估与可视化功能,方便我们在训练过程中监控模型表现,及时调整优化策略。以下是训练 YOLO 的关键命令:
from ultralytics import YOLO
data_path = '*'
model = YOLO('yolo11n-cls.pt')
model.train(task='classify', mode='train', data=data_path, epochs=300)
(2)RestNet50:以下是训练 RestNet 50 的关键参数:
device = torch.device("cuda" if torch.cuda.is_available() else "cpu") train_dataset = datasets.ImageFolder(root=train_dir, transform=transform)val_dataset = datasets.ImageFolder(root=val_dir, transform=transform) train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True, num_workers=4)val_loader = DataLoader(val_dataset, batch_size=batch_size, shuffle=False, num_workers=4) num_classes = len(train_dataset.classes) model = resnet50(num_classes=num_classes).to(device) criterion = nn.CrossEntropyLoss()optimizer = optim.Adam(model.parameters(), lr=0.0001)scheduler = optim.lr_scheduler.StepLR(optimizer, step_size=5, gamma=0.1)best_acc = 0.0early_stopping_patience = 5early_stopping_counter = 0
(3)MobileNetV3:以下是训练 MobileNetV3 的关键参数:
BATCH_SIZE = 32
train_loader = DataLoader(train_dataset, batch_size=BATCH_SIZE, shuffle=True)
val_loader = DataLoader(val_dataset, batch_size=BATCH_SIZE, shuffle=False)
model = mobilenet_v3_small(pretrained=True)
num_ftrs = model.classifier[3].in_features
model.classifier[3] = nn.Linear(num_ftrs, len(train_dataset.classes))
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=0.0001, momentum=0.9)
scheduler = ReduceLROnPlateau(optimizer, mode='min', factor=0.5, patience=5, verbose=1)
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model.to(device)
train_losses = []
val_losses = []
train_accuracies = []
val_accuracies = []
best_val_loss = float('inf')
best_model_weights = copy.deepcopy(model.state_dict())
early_stopping_counter = 0
(4)自定义 CNN 模型:以下是训练自定义 CNN 模型的关键参数:
EPOCHS = 300
BATCH_SIZE = 32
model = Sequential([Conv2D(32, (3, 3), activation='relu', input_shape=(224, 224, 3)),MaxPooling2D(2, 2),Conv2D(64, (3, 3), activation='relu'),MaxPooling2D(2, 2),Conv2D(128, (3, 3), activation='relu'),Conv2D(128, (3, 3), activation='relu'),MaxPooling2D(2, 2),Flatten(),Dense(256, activation='relu'), Dropout(0.5),Dense(128, activation='relu'), Dropout(0.5),Dense(3, activation='softmax')
])
model.compile(loss='categorical_crossentropy',optimizer=RMSprop(learning_rate=0.0001),metrics=['accuracy'])
history = model.fit(train_generator,steps_per_epoch=len(train_generator.filenames) epochs=EPOCHS,validation_data=validation_generator,validation_steps=len(validation_generator.filenames) callbacks=callbacks,verbose=1
)
model.save_weights(MODEL_WEIGHTS_FILE)
model.save(MODEL_FILE)
4、分类任务测试集验证
模型微调步骤结束后,我们加载微调模型在测试数据集上进行推理测试。
以下是加载微调模型在测试集上进行推理预测的代码:
for class_folder in os.listdir(test_folder):class_folder_path = os.path.join(test_folder, class_folder)if os.path.isdir(class_folder_path):ground_truth_class = class_folder print(f"Processing class folder (Ground Truth): {ground_truth_class}")image_files = [os.path.join(class_folder_path, img) for img in os.listdir(class_folder_path) if img.endswith(('.jpg', '.jpeg', '.png'))]for img_path in image_files:results = model.predict(img_path, conf=0.50)for result in results:predicted_class_index = result.probs.top1 predicted_class = result.names[predicted_class_index] confidence = result.probs.top1conf print(f"Image: {img_path}")print(f"Ground Truth: {ground_truth_class}, Predicted class: {predicted_class}, Confidence: {confidence:.2f}")
5、调用 DeepSeek-R1 模型
微调模型给出上传叶片的健康检测分类结果之后,我们调用 DeepSeek-R1 模型(以蒸馏版 14B 为例)对马铃薯健康状况进行进一步、给出防治建议。
以下是调用 DeepSeek-R1 整理模型进行推理的代码:
def deepseek_r1_response(history, msg):messages = []for chat in history:messages.append({"role": "user", "content": chat[0]})messages.append({"role": "assistant", "content": chat[1]})messages.append({"role": "user", "content": msg})openai_api_key = "123"openai_api_base = "http://localhost:8000/v1"client = OpenAI(api_key=openai_api_key,base_url=openai_api_base,http_client=httpx.Client(timeout=1800),)completion = client.chat.completions.create(model="deepseek-ai/DeepSeek-R1-Distill-Qwen-14B",messages=messages,temperature=0.7,top_p=0.85,extra_body={"repetition_penalty": 1.05,},stream=True,)history.append([msg, ""])for chunk in completion:for choice in chunk.choices:content = choice.delta.contentif content:history[-1][1] = history[-1][1] + contenttime.sleep(0.05)yield history
6、亚马逊云科技参考架构图
马铃薯叶片疾病识别训练及推理执行过程说明:
1、数据上传与存储:
(1)用户上传训练和推理数据到 Amazon S3 存储桶;
(2)S3 存储桶用于存储中间结果和模型文件,按照不同前缀对文件进行区分。
2、数据处理:在 Amazon SageMaker Notebook 实例上使用 Pre-Process 脚本对数据进行预处理。
3、模型训练:在 SageMaker 中进行模型训练,训练完成后模型存储在 S3 存储桶中。
4、模型推理:使用训练好的模型在 SageMaker Notebook 本地进行推理;实际应用中,也可将模型部署到 SageMaker 推理端点。
5、大模型建议:微调模型推理完成后,大模型拿到推理结果,生成马铃薯叶片病虫害防治相关建议;大模型建议与推理结果一并保存到 S3 存储桶;
6、任务结果通知:使用 Amazon SNS 通知将推理任务结果和大模型生成的建议通过 Email 发送给用户。
三、总结与展望
以下表格是微调模型后的测试结果总结。将测试集准确度 95%、验证集准确度 95% 设为合格线,5 个模型综合表现如下:
YOLO11n-cls、ResNet50 以及 MobileNet 均基于 CNN 架构在不同维度进行了创新优化,以契合多样化的任务需求与应用场景,且在马铃薯叶片健康检测任务中,表现均优于自定义 CNN 模型。其中,YOLO11n-cls 在准确度、训练与推理成本以及用户友好度等多方面展现出显著优势。同时,ResNet50 和 MobileNet 可依据实际场景,如对计算资源、检测精度的不同要求,灵活作为备选方案,为不同条件下的马铃薯叶片健康检测提供了多元选择。
然而,当前工作仍存在一定局限。目前训练数据量相对较少,尽管微调后的模型在测试集上取得了较好效果,但模型可能存在泛化能力不足的问题,在面对复杂多变的实际场景时,稳定性和准确性可能受到影响。
未来工作重点主要聚焦于以下两个方面:一是拓展模型能力,使其能够支持更多样化的图片类别以及更为复杂的场景。通过引入迁移学习、多模态融合等先进技术,提升模型对不同环境、不同生长阶段马铃薯叶片的识别能力,进一步增强模型的鲁棒性和适应性。二是积极利用经市场验证的高质量数据集,持续优化模型性能。一方面,通过扩充数据集规模和多样性,减少模型过拟合风险,提升泛化能力;另一方面,运用更高效的模型训练算法和优化策略,如自适应学习率调整、正则化技术等,在保证模型准确性的同时,降低训练与推理成本,推动马铃薯叶片健康检测模型向更高效、更智能的方向发展。
*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您了解行业前沿技术和发展海外业务选择推介该服务。
本篇作者
相关文章:
利用 DeepSeek-R1 模型和计算机视觉微调模型实现马铃薯叶片疾病识别和分类
一、需求背景 在农业现代化进程中,作物健康监测对于保障粮食安全和提高农业生产效率起着举足轻重的作用。马铃薯作为全球重要的粮食作物之一,其种植面积广泛,产量和质量直接关系到众多农户的生计以及食品供应链的稳定。准确、快速地鉴别马铃…...
文章记单词 | 第39篇(六级)
一,单词释义 themselves [əmˈselvz] pron. 他们自己;她们自己;它们自己;(用以加强语气)他们亲自,她们亲自,它们亲自;(反身代词) 指某人或某物本…...
深入理解C++中string的深浅拷贝
目录 一、引言 二、浅拷贝与深拷贝的基本概念 2.1 浅拷贝 2.2 深拷贝 在C 中, string 类的深浅拷贝有着重要的区别。 浅拷贝 深拷贝 string 类中的其他构造函数及操作 resize 构造 构造(赋值构造) 构造(拼接构造…...
C++ 常用的智能指针
C 智能指针 一、智能指针类型概览 C 标准库提供以下智能指针(需包含头文件 <memory>): unique_ptr:独占所有权,不可复制, 可移动shared_ptr:共享所有权,用于引用计数weak_pt…...
【AI部署】腾讯云GPU-常见故障—SadTalker的AI数字人视频—未来之窗超算中心 tb-lightly
ERROR: Could not find a version that satisfies the requirement tb-nightly (from torchreid) (from versions: none) ERROR: No matching distribution found for tb-nightly 解决 阿里云 python -m pip install tb-nightly -i https://mirrors.aliyun.com/pypi/simple …...
三大等待和三大切换
三大等待 1、三大等待:等待的方式有三种:强制等待,隐性等待,显性等待。 1、强制等待:time.sleep(2),秒 优点:使用简单缺点:等待时间把握不准,容易造成时间浪费或者等待时…...
工程化实践:Flutter项目结构与规范
工程化实践:Flutter项目结构与规范 在Flutter项目开发中,良好的工程化实践对于提高开发效率、保证代码质量和团队协作至关重要。本文将从项目结构、代码规范、CI/CD流程搭建以及包管理等方面,详细介绍Flutter项目的工程化最佳实践。 项目结…...
数据结构-Map和Set
文章目录 1. 搜索树2. Map3. Set4. 哈希表4.1 哈希表的基本概念4.2 哈希表的实现方法4.3 Java中的哈希表实现 5. 哈希桶哈希桶的实现方式哈希桶的作用哈希桶的应用模拟实现 1. 搜索树 二叉搜索树(Binary Search Tree, BST)是一种特殊的二叉树࿰…...
cpolar 内网穿透 实现公网可以访问本机
1、登录网站,升级成专业版,测试的话建议选一个月付费,选择预留 2、保留的TCP地址增加一条记录,描述可以自己取 3、验证,生成一个Authtocken码 4、在安装目录下,打开CMD命令,复制上面的码运行aut…...
QT调用ffmpeg库实现视频录制
可以通过QProcess调用ffmpeg命令行,也可以直接调用ffmpeg库,方便。 调用库 安装ffmpeg ffmpeg -version 没装就装 sudo apt-get update sudo apt-get install ffmpeg sudo apt-get install ffmpeg libavdevice-dev .pro引入库路径,引入库 LIBS += -L/usr/lib/aarch64-l…...
AI专题(一)----NLP2SQL探索以及解决方案
前面写了很多编码、算法、底层计算机原理等相关的技术专题,由于工作方向调整的缘故,今天开始切入AI人工智能相关介绍。本来按照规划,应该先从大模型的原理开始介绍会比较合适,但是计划赶不上变化,前面通用大模型的工作…...
Redis 的指令执行方式:Pipeline、事务与 Lua 脚本的对比
Pipeline 客户端将多条命令打包发送,服务器顺序执行并一次性返回所有结果。可以减少网络往返延迟(RTT)以提升吞吐量。 需要注意的是,Pipeline 中的命令按顺序执行,但中间可能被其他客户端的命令打断。 典型场景&…...
群辉默认docker数据存储路径
做一下笔记 今天不小心路径规划错误,好不容易找到了数据,特此做个路径记录。 /var/packages/ContainerManager/var/docker/...
【C++】入门基础【上】
目录 一、C的发展历史二、C学习书籍推荐三、C的第一个程序1、命名空间namespace2、命名空间的使用3、头文件<iostream>是干什么的? 个人主页<—请点击 C专栏<—请点击 一、C的发展历史 C的起源可以追溯到1979年,当时Bjarne Stroustrup(本…...
Git LFS 学习笔记:原理、配置、实践与心路历程
最近在学习 Git LFS,把一些零散的笔记整理成一篇博文,记录我的学习思路与心路历程。以下内容均为个人理解总结,部分尚未在生产项目中验证,仅供回顾与参考。 🔍 Git LFS 是什么?原理是什么? 刚接…...
SpringBoot集成oshi 查询系统数据
实现功能: <!-- 获取系统信息 --><dependency><groupId>com.github.oshi</groupId><artifactId>oshi-core</artifactId><version>6.6.1</version></dependency><dependency><groupI…...
iOS Facebook 登录
iOS Facebook 登录 官方文档 SDK下载链接...
uniapp打包IOS私钥证书过期了,如何在非mac系统操作
在非Mac系统下解决uniapp打包iOS私钥证书过期的问题,需通过以下步骤实现: --- ### **一、重新生成iOS证书(非Mac环境操作)** 1. **生成私钥和CSR文件** 使用OpenSSL工具(需提前安装)生成私钥和证书签…...
Axios的使用
Axios 是一个基于 Promise 的现代化 HTTP 客户端库,专为浏览器和 Node.js 设计。在企业级应用中,它凭借以下核心优势成为首选方案: 一、Axios 的核心优势 特性说明Promise 支持天然支持异步编程,避免回调地狱拦截器机制可全局拦截…...
第八篇:系统分析师第三遍——3、4章
目录 一、目标二、计划三、完成情况四、意外之喜(最少2点)1.计划内的明确认知和思想的提升标志2.计划外的具体事情提升内容和标志 五、总结 一、目标 通过参加考试,训练学习能力,而非单纯以拿证为目的。 1.在复习过程中,训练快速阅读能力、掌…...
【2025-泛计算机类-保研/考研经验帖征集】
【2025-泛计算机类-保研/考研经验帖征集】 打扰您1分钟时间看下这里: 这是一个无偿为爱发电的项目,旨在收集湖南大学2025届毕业的计算机类学科同学的经验帖, 我将定期汇总链接,在校内推免群中宣传,为校内的学弟学妹们…...
Flink介绍——实时计算核心论文之Kafka论文详解
引入 我们通过S4和Storm论文的以下文章,已经对S4和Storm有了不错的认识: S4论文详解S4论文总结Storm论文详解Storm论文总结 不过,在讲解这两篇论文的时候,我们其实没有去搞清楚对应的流式数据是从哪里来的。虽然S4里有Keyless …...
细节:如何制作高质量的VR全景图
细节:如何制作高质量的VR全景图 VR全景图是通过虚拟现实和3D技术实现的全景展示方式,能够将实景以1:1的比例等比复刻,并还原到互联网上,使用户能够在线上游览世界,获得沉浸式的体验。制作高质量的VR全景图是一个复杂而…...
深度学习中的概念——元素积(哈达玛积)
元素积操作(哈达玛积) 🔢 基本定义 矩阵的哈达玛积 对于两个同维度的矩阵: A [ a i j ] , B [ b i j ] A [a_{ij}], \quad B [b_{ij}] A[aij],B[bij] 它们的哈达玛积定义为: C A ∘ B 其中 c i j a i j…...
探索 Flowable 后端表达式:简化流程自动化
什么是后端表达式? 在 Flowable 中,后端表达式是一种强大的工具,用于在流程、案例或决策表执行期间动态获取或设置变量。它还能实现自定义逻辑,或将复杂逻辑委托…… 后端表达式在 Flowable 的后端运行,无法访问前端…...
AI语音助手 React 组件使用js-audio-recorder实现,将获取到的语音转成base64发送给后端,后端接口返回文本内容
页面效果: js代码: import React, { useState, useRef, useEffect } from react; import { Layout, List, Input, Button, Avatar, Space, Typography, message } from antd; import { SendOutlined, UserOutlined, RobotOutlined, AudioOutlined, Stop…...
《软件设计师》复习笔记(11.6)——系统转换、系统维护、系统评价
目录 一、遗留系统(Legacy System) 定义: 特点: 演化策略(基于价值与技术评估): 高水平 - 低价值: 高水平 - 高价值: 低水平 - 低价值: 低水平 - 高价…...
学习threejs,使用EffectComposer后期处理组合器(采用RenderPass、GlitchPass渲染通道)
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️THREE.EffectComposer 后期…...
Yarn的定义?
YARN(Yet Another Resource Negotiator) 是 Apache Hadoop 的核心组件之一,负责集群的资源管理和任务调度。它的主要作用是将 Hadoop 的资源管理和作业调度/监控功能分离,形成一个通用的资源管理平台,可以支持多种计算…...
职坐标IT培训热门技术实战精讲
在数字化转型浪潮中,人工智能、大数据与云原生已成为驱动产业升级的核心引擎。职坐标IT培训课程以实战导向为基石,聚焦高薪岗位核心技术栈,通过拆解企业级项目案例,将复杂的技术理论转化为可落地的工程实践。课程模块涵盖从架构设…...
前端:uniapp框架中<scroll-view>r如何控制元素进行局部滚动
以下是使用 <scroll-view> 实现局部滚动的完整示例,包含动态内容、滚动控制和滚动位置监听: 一、基础局部滚动示例 <template><view class"container"><!-- 固定高度的滚动容器 --><scroll-view scroll-y :scroll…...
【KWDB 创作者计划】_算法篇---Stockwell变换
文章目录 前言一、Stockwell变换原理详解1.1 连续S变换定义1.2 离散S变换1.3简介 二、S变换的核心特点2.1频率自适应的时频分辨率2.1.1高频区域2.1.2低频区域 2.2无交叉项干扰2.3完全可逆2.4相位保持2.5与傅里叶谱的直接关系 三、应用领域3.1地震信号分析3.2生物医学信号处理3.…...
桌面级OTA测试解决方案:赋能智能网联汽车高效升级
一、前言 随着智能网联汽车的快速发展,OTA(Over-The-Air)技术已成为汽车软件更新和功能迭代的关键手段。为确保OTA升级的可靠性、安全性和效率,构建一套高效、便捷的桌面级OTA测试解决方案至关重要。 本方案基于Vector先进的软硬…...
京东物流基于Flink StarRocks的湖仓建设实践
摘要:本文整理自京东物流高级数据开发工程师梁宝彬先生在 Flink Forward Asia 2024 论坛中的分享。内容主要为以下四个部分: 1、实时湖仓探索与建设 2、实时湖仓应用 3、问题与思考 4、未来展望 今天,将分享的主题大纲包括:首先&a…...
【Test Test】灰度化和二值化处理图像
文章目录 1. 图像灰度化处理对比2. 代码示例3. 二值化处理 1. 图像灰度化处理对比 2. 代码示例 #include <opencv2/opencv.hpp> using namespace cv;int main() {Mat currentImage imread("path_to_image.jpg"); // 读取彩色图像Mat grayImage;// 将彩色图像…...
Docker快速入门
1 基本信息 1.1 基础概览 (1)容器与镜像 容器:轻量级的独立运行时环境,基于Linux的命名空间(namespace)和控制组(cgroup)技术实现资源隔离。容器通过镜像创建,每个容…...
AI 编程工具—如何在 Cursor 中集成使用 MCP工具
AI 编程工具—如何在 Cursor 中集成使用 MCP工具 这里我们给出了常用的MCP 聚合工具,也就是我们可以在这些网站找MCP服务 这是一个MCP Server共享平台,用户可以在上面发布和下载MCP Server配置。在这里可以选择你需要的MCP 服务。 如果你不知道你的mcp 对应的server 名称也不…...
航电系统通信与数据链技术分析
一、技术要点 1. 高带宽与低时延通信技术 航电系统需支持实时数据传输,如民航VDL2数据链采用D8PSK调制和Reed Solomon编码技术,传输速率达31.5Kb/s,并通过物理层优化减少码间串扰。新一代LDACS系统则利用L频段频谱,提供比传统VD…...
windwos脚本 | 基于scrcpy,只投声音、只投画面
安装scrcpy,scrcpy自带adb 写脚本命名为 .bat 结尾 注意这里的set "PATHD:\tools\scrcpy-win64-v3.2;%PATH%" 替换成scrcpy的安装目录 echo off :: 设置UTF-8编码 chcp 65001 > nul :: 设置标题 title 手机投屏工具:: 添加 scrcpy 路径到 PATH set &q…...
产品经理面试题与参考答案资料(2025年版)
一、技术背景与工具能力 问题1: 软件开发生命周期(SDLC)包括哪些阶段?作为产品经理,你如何参与每个阶段? 参考答案: 软件开发生命周期通常划分为需求分析、设计、开发、测试、部署和维护六个阶段。作为产品经理,你需要在...
HTML 初识
段落标签 <p><!-- 段落标签 -->Lorem ipsum dolor sit amet consectetur adipisicing elit. Fugiat, voluptate iure. Obcaecati explicabo sint ipsum impedit! Dolorum omnis voluptas sint unde sed, ipsa molestiae quo sapiente quos et ad reprehenderit.&l…...
CSS3笔记
文章目录 1.CSS的概念2.CSS的引入方式3.选择器3.1基础选择器3.1.1标签选择器3.1.2类选择器3.1.3id选择器3.1.4通配符选择器 4.画盒子5.文字控制属性5.1 字体大小-font-size5.2 字体粗细-font-weight5.3 字体倾斜-font-style5.4 行高-line-height5.5 字体族-font-family5.6 字体…...
yarn的定义
YARN是一个分布式资源管理平台,它通过分离资源管理和作业调度的功能,为Hadoop集群提供了一种高效、灵活且可扩展的方式来管理和分配计算资源。YARN的核心目标是将资源管理与作业调度/监控的功能分离,从而让Hadoop能够支持更多种类的计算框架&…...
CSS 美化页面(五)
一、position属性 属性值描述应用场景static默认定位方式,元素遵循文档流正常排列,top/right/bottom/left 属性无效。普通文档流布局,默认布局,无需特殊定位。relative相对定位,相对于元素原本位置进行偏…...
互联网大厂Java面试:微服务与分布式系统挑战
互联网大厂Java面试:微服务与分布式系统挑战 在互联网的大潮中,无数程序员怀揣着梦想,希望能在一线大厂找到自己的位置。今天的故事主角是马飞机,一位充满幽默感但技术略显水货的程序员。他来到了一家知名互联网公司参加Java开发…...
数据结构——顺序表(C语言实现)
1.顺序表的概述 1.1 顺序表的概念及结构 在了解顺序表之前,我们要先知道线性表的概念,线性表,顾名思义,就是一个线性的且具有n个相同类型的数据元素的有限序列,常见的线性表有顺序表、链表、栈、队列、字符串等等。线…...
FastGPT安装前,系统环境准备工作?
1.启用适用于 Linux 的 Windows 子系统 方法一:打开控制面板 -> 程序 -> 启用或关闭Windows功能->勾选 “适用于Linux的Vindows子系统” 方法二:以管理员身份打开 PowerShell(“开始”菜单 >“PowerShell” >单击右键 >“…...
【2】CICD持续集成-k8s集群中安装Jenkins
一、背景: Jenkins是一款开源 CI&CD 系统,用于自动化各种任务,包括构建、测试和部署。 Jenkins官方提供了镜像:https://hub.docker.com/r/jenkins/jenkins 使用Deployment来部署这个镜像,会暴露两个端口ÿ…...
相比其他缓存/内存数据库(如 Memcached, Ehcache 等),Redis 在微服务环境中的优势和劣势是什么?
我们来比较一下 Redis 与 Memcached、Hazelcast、Ehcache 等在微服务环境下的优势和劣势。 Redis 的优势 : 丰富的数据结构 (Rich Data Structures): 优势: 这是 Redis 最显著的优势之一。除了简单的 Key-Value (字符串) 外,Redis 还原生支持 Lists, Sets, Sorted …...
Day53 二叉树的层序遍历
给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* T…...