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

Stable Diffusion +双Contronet:从 ControlNet 边缘图到双条件融合:实现服装图像生成的技术演进——项目学习记录

前言

学习记录contronet优化:最近,我基于 diffusers 库的 ControlNet,探索了如何通过 Canny 边缘图控制服装图像生成,并逐步升级到融合颜色图的双条件模型。有不断的问题、解决和进步,从最初的边缘图生成到最终实现 27 张图像的批量生成(包括边缘图、颜色图和生成图),每一步都让我对 ControlNet 的能力有了更深的理解。以下是我的技术演进全记录,梳理了从问题提出到解决的完整过程。
部署、优化顺序:
深度学习项目记录·Stable Diffusion从零搭建、复现笔记-CSDN博客
从全灰到清晰图像:我的 Stable Diffusion 多尺度优化学习记录-CSDN博客
Stable Diffusion + Contronet,调参实现LPIPS最优(带生成效果+指标对比)——项目学习记录-CSDN博客

 系统:Stable Diffusion+Pyqt5: 实现图像生成与管理界面(带保存 + 历史记录 + 删除功能)——我的实验记录(结尾附系统效果图)-CSDN博客

效果:上左(原图)、上中(高斯模糊颜色图)、上右(边缘图)。

  生成图:左到右依次:颜色因子左0.5,中0.9,前天单contronet canny边缘图效果)

 


 



颜色图因子强度对生成图的影响效果还是不足。

背景:ControlNet 与服装生成 

ControlNet 是一种强大的条件生成模型,允许用户通过额外输入(如边缘图、颜色图)控制 Stable Diffusion 的图像生成效果。我的目标是基于 DeepFashion 数据集(包含图像和文本描述,如 MEN-Denim-id_00000080-01_7_additional.jpg: "The lower clothing is of long length. The fabric is cotton and it has plaid patterns."),生成符合描述的服装图像。数据集格式为每行一个键值对(image_name:prompt),图像存储在 D:\YAN\pythonProject\diffusion\Dateset\DeepFashion\Pic,文本描述在 captions.txt

最初,我实现了基于 Canny 边缘图的 ControlNet 生成,但希望通过加入颜色图,进一步控制图像的色彩分布,提升服装图案和材质的表现。这篇博客记录了我从单条件到双条件(Canny + 颜色图)的技术升级过程。


阶段 1:提出需求——从边缘图到双条件融合

时间:2025年4月12日
问题
我的初始代码基于 lllyasviel/sd-controlnet-canny,已经可以生成边缘图控制图像生成,但希望加入颜色图作为额外条件。数据集中只有图像和描述,没有单独的颜色标签,我担心颜色图需要手动标注。

解决方案
后来明确了一点:颜色图其实可以直接从原始图像中提取,

(这里怎么理解呢?我在得知这一点之前的想法是需从文本中筛选提取颜色信息,我停顿了一会,直接能从原图提取颜色信息,都有原图了还要颜色图何用?可能有人会问相同的问题:既然有原始图像,刚好晚餐间隙看《乔布斯传》里<数字中枢>这一章,我想引用的是,对于“乔布斯为何能比其他任何人更清楚预见到未来的数字革命,并全身心投入到这一潮流之中”的回答:一直以来,他都站在人性与科技的交叉点上。乔布斯在很多次产品介绍的最后都会展示一个简单的页面:上面有一个路标:标示着“人文”和“科技”的十字路口。   乔布斯Apple产品以简洁性和人性化广受赞扬,像理解人一样思考计算机算法的优化原理,我有一个初步的联想和思考:从文本中抽取颜色信息,对于没有颜色标签数据的文本,从原图提取比从文本描述中更容易为什么呢?Python语言相比于其它语言擅长数据处理,包括图像信息处理,这里颜色信息很容易通过RGB向量表示(每个分量的值通常在 0 到 255 之间)  ,计算机与人不同,文本对它而言显然没有向量的数字好理解,相较于一整句语言描述,计算机最擅长处理的是数值。有时一些最优的算法,放到计算机视角,究其底层原理上便容易理解了,它最喜欢的是0和1二进制编码、汇编语言。回到最初的问题有原图需颜色图做何用,一个物体,人眼是能一眼看清颜色和形状等信息的,但计算机不同,理解为不同的维度,比如这里通过Canny边缘图能提取形状、图像中的人物等构造特征,但对颜色属性的考虑就极为优先,这就是为什么边缘图+颜色图,也是为什么contronet融合使用才是最优解(当然多contronet对显存要求也更高),contronet包括:语义图、草图、姿态图(类似边缘图)、法线图、深度图、涂鸦图(类似草图)、颜色图等,姿态图主要用于视频处理,提取人物关键节点,法线图主要用于控制物体表面的光照和材质,常用于3D演示,这里是图片生成则不需要。计算机读取到图片的颜色、形状等属性信息更易于应用到虚拟试衣等领域。

颜色图其实可以直接从原始图像中提取,比如:

  • 从原始图像提取:对原始图像应用高斯模糊,保留颜色分布,去除细节。

  • 提示词推断:从文本描述提取颜色信息(复杂,暂不搞),可以找有颜色标签的数据集(.csv、.json等)。

  • 用户草图:暂无。

最后采用了从图像直接生成颜色图的方式,用 StableDiffusionControlNetPipeline 同时加载两个 ControlNet:一个是边缘图模型 lllyasviel/sd-controlnet-canny,另一个用 lllyasviel/sd-controlnet-scribble 来近似处理颜色图。颜色图本质上是做了一个高斯模糊。

代码片段

controlnet_canny = ControlNetModel.from_pretrained("lllyasviel/sd-controlnet-canny", torch_dtype=torch.float16)
controlnet_color = ControlNetModel.from_pretrained("lllyasviel/sd-controlnet-scribble", torch_dtype=torch.float16)
pipe = StableDiffusionControlNetPipeline.from_pretrained("runwayml/stable-diffusion-v1-5",controlnet=[controlnet_canny, controlnet_color],torch_dtype=torch.float16
).to("cuda")# 颜色图
original_color_image = cv2.cvtColor(cv2.imread(image_path), cv2.COLOR_BGR2RGB)
blurred_image = cv2.GaussianBlur(original_color_image, (51, 51), 0)
color_image_pil = Image.fromarray(blurred_image)# 生成
image = pipe(enhanced_prompt, image=[canny_image_pil, color_image_pil], ...).images[0]

进步

  • 明确了颜色图不需要标注。

  • 高斯模糊处理方法确立。

  • 双 ControlNet 框架构建完毕,支持保存中间图。


阶段 2:适配数据集格式

问题
默认代码处理的是简单格式(image.jpg: "prompt"),但我的 captions.txt 是完整路径名 + 描述。比如:

"MEN-Denim-id_00000080-01_7_additional.jpg": "The lower clothing is of long length. The fabric is cotton and it has plaid patterns."

解决方案
调整了文件解析逻辑,处理了引号和分隔符:

dataset_path = r"D:\YAN\pythonProject\diffusion\Dateset\DeepFashion\captions.txt"
image_dir = r"D:\YAN\pythonProject\diffusion\Dateset\DeepFashion\Pic"with open(dataset_path, "r", encoding="utf-8") as file:lines = [line.strip() for line in file if line.strip()]
for i, line in enumerate(lines, 1):try:image_name, prompt = line.split(":", 1)image_name = image_name.strip().strip('"')prompt = prompt.strip().strip('"')except ValueError:print(f"第 {i} 行格式错误,跳过: {line}")continueenhanced_prompt = f"{prompt}, highly detailed fashion design, realistic textures, vivid colors, photorealistic, studio lighting, 4k quality"

进步

  • 完全适配 DeepFashion 数据格式。

  • 提示词更贴合服装风格。

  • 加入错误处理机制,鲁棒性增强。


阶段 3:解决运行卡顿

问题
运行生成脚本长时间无响应,甚至出现:

UserWarning: `huggingface_hub` cache-system uses symlinks by default...

解决方案
定位问题原因:

  • 首次模型加载很慢(大模型下载)。

  • 显存吃紧(双 ControlNet 最少 12GB)。

  • 图像过多。

  • 每张图像生成时间久。

于是进行以下优化:

  • 禁用符号链接警告:

    os.environ["HF_HUB_DISABLE_SYMLINKS_WARNING"] = "1"
    
  • 清显存:torch.cuda.empty_cache()

  • 降推理步数:从 50 → 30 步(20 秒/张)

  • 加日志输出,处理进度清晰

  • 限量测试两张图像验证稳定性

torch.cuda.empty_cache()
lines = lines[:2]  # 限量测试
for i, line in enumerate(lines, 1):print(f"\n处理第 {i}/{len(lines)} 张图像...")with autocast():image = pipe(..., num_inference_steps=30, ...)

进步

  • 程序不卡了,生成速度快了。

  • 日志显示详细,能定位问题。

  • 限量测试验证可行性。


阶段 4:确认文件夹路径

问题
我自己的路径结构比较复杂,之前的代码没对上:

  • 边缘图:generated_pic_contronet_canny1

  • 颜色图:generated_pic_contronet_color1

  • 生成图:generated_pic_contronet_2_color1

解决方案
代码更新为以下路径配置:

image_dir = r"D:\YAN\pythonProject\diffusion\Dateset\DeepFashion\Pic"
save_dir = r"D:\YAN\pythonProject\diffusion\generated_pic_contronet_2\generated_pic_contronet_2_color1"
canny_save_dir = r"D:\YAN\pythonProject\diffusion\generated_pic_contronet_2\generated_pic_contronet_canny1"
color_save_dir = r"D:\YAN\pythonProject\diffusion\generated_pic_contronet_2\generated_pic_contronet_color1"
dataset_path = r"D:\YAN\pythonProject\diffusion\Dateset\DeepFashion\captions.txt"

还加了两个优化:

  • 提示词增加:ultra-detailed clothing patterns

  • 动态模糊核(纯色用 (31, 31),其余 (51, 51)

进步
路径全部对齐,提示词更服装化,生成图像更细腻。


阶段 5:成功测试 2 张图像

问题
运行 2 张图像做稳定性测试,控制台输出如下:

开始读取 captions.txt...
共读取 27 行数据
处理第 1/2 张图像...
图像: MEN-Denim-id_00000080-01_7_additional.jpg, 提示词: The lower clothing...
Canny 边缘图已保存: ...
颜色图已保存: ...
开始生成图像,预计耗时 10-20 秒...
图像生成完成: ...

但是出现了警告:

FutureWarning: `torch.cuda.amp.autocast` is deprecated...

解决方案
警告是因为 autocast 的导入方式老了,更新如下:

from torch.amp import autocast
with autocast('cuda'):image = pipe(...)

进步

  • 2 张图像成功生成:结构准,颜色准。

  • 警告消除,代码更干净。


阶段 6:生成全部 27 张图像

问题
准备跑完整数据,生成 27 张图像(边缘 + 颜色 + 最终图)。

解决方案

  • 注释掉限量代码 lines = lines[:2]

  • 保留所有优化(步数 30、模糊核调整、提示词增强等)

  • 添加进度日志

  • 预计耗时 10~12 分钟

for i, line in enumerate(lines, 1):print(f"\n处理第 {i}/{len(lines)} 张图像...")

进步
支持完整批量生成,图像质量符合预期,生成过程稳定流畅。


总结与展望

从最初的边缘图到双条件融合,我这次探索走了六个阶段:

  1. 确定需求,确定颜色图可用高斯模糊搞定

  2. 适配 DeepFashion 数据集格式,提示词更贴合服装

  3. 优化运行,解决显存和卡顿问题

  4. 对齐路径结构,提升整体可用性

  5. 测试通过,消除所有运行警告

  6. 批量运行成功,稳定生成所有图像

技术收获:

  • 学会了 ControlNet 多条件融合方式(边缘图 + 颜色图)

  • 优化了提示词和权重组合([1.0, 0.9])

  • 提升了代码鲁棒性(错误处理 + 日志)

后续优化方向:

  • 效果评估:看看 plaid、cotton、color 表现如何

  • 添加新条件(语义图、深度图)

  • 消融实验

相关文章:

Stable Diffusion +双Contronet:从 ControlNet 边缘图到双条件融合:实现服装图像生成的技术演进——项目学习记录

前言 学习记录contronet优化&#xff1a;最近&#xff0c;我基于 diffusers 库的 ControlNet&#xff0c;探索了如何通过 Canny 边缘图控制服装图像生成&#xff0c;并逐步升级到融合颜色图的双条件模型。有不断的问题、解决和进步&#xff0c;从最初的边缘图生成到最终实现 2…...

【Hadoop入门】Hadoop生态之Spark简介

1 什么是Spark&#xff1f; Apache Spark 是一个开源的分布式计算框架&#xff0c;专为处理大规模数据而设计。它提供了高效、通用的集群计算能力&#xff0c;支持内存计算&#xff0c;能够显著提高数据处理和分析的速度。Spark 已经成为大数据处理领域的重要工具&#xff0c;广…...

深度学习学习笔记

目录 摘要 Abstracts 简介 Hourglass Module&#xff08;Hourglass 模块&#xff09; 网络结构 Intermediate Supervision&#xff08;中间监督&#xff09; 训练过程细节 评测结果 摘要 本周阅读了《Stacked Hourglass Networks for Human Pose Estimation》&#xf…...

小米运维面试题及参考答案(80道面试题)

请讲解一下 linux top 后进程的状态 在 Linux 系统中,使用top命令可以查看系统中正在运行的进程的相关信息,进程通常有以下几种状态: 运行(R):表示进程正在 CPU 上运行或者正在运行队列中等待运行。处于运行状态的进程正在积极地使用 CPU 资源来执行其任务。睡眠(S):进…...

动态多目标优化:基于可学习预测的动态多目标进化算法(DIP-DMOEA)求解CEC2018(DF1-DF14),提供MATLAB代码

一、DIP-DMOEA介绍 基于可学习预测的动态多目标进化算法&#xff08;Learning-Based Directional Improvement Prediction for Dynamic Multiobjective Optimization&#xff0c;DIP-DMOEA&#xff09;是2024年提出的一种动态多目标进化算法&#xff0c;核心在于利用神经网络学…...

第十六届蓝桥杯大赛软件赛省赛 C/C++ 大学B组

由于官方没有公布题目的数据, 所以代码仅供参考 1. 移动距离 题目链接&#xff1a;P12130 [蓝桥杯 2025 省 B] 移动距离 - 洛谷 【问题描述】 小明初始在二维平面的原点&#xff0c;他想前往坐标 (233, 666)。在移动过程中&#xff0c;他 只能采用以下两种移动方式&#xf…...

《Nature Methods》新算法|MARBLE利用几何深度学习解释神经群体动力学

一、写在前面 本次分享的是2025年2月发布于《Nature Methods》的题为"MARBLE:interpretable representations of neural population dynamics using geometric deep learning"的文章。在神经科学和机器学习领域交汇的今天&#xff0c;我们不断探索如何从复杂的神经活…...

【力扣hot100题】(093)最长公共子序列

还算是挺简单的一题。 维护二维数组代表截至至两个字符串的某个位置&#xff0c;前面的最长公共子序列长度。 状态转移方程就是当两字符相等是&#xff0c;取俩位置前一个的值加一&#xff0c;否则就直接等于俩位置前一个值。 class Solution { public:int longestCommonSub…...

(打卡)794. 高精度除法

C&#xff1a; Python&#xff1a; aint(input()) bint(input()) print(a//b) print(a%b)...

网络5 TCP/IP 虚拟机桥接模式、NAT、仅主机模式

TCP/IP模型 用于局域网和广域网&#xff1b;多个协议&#xff1b;每一层呼叫下一层&#xff1b;四层&#xff1b;通用标准 TCP/IP模型 OSI七层模型 应用层 应用层 表示层 会话层 传输层 传输层 网络层 网络层 链路层 数据链路层 物理层 链路层&#xff1a;传数据帧&#xff0…...

GPU虚拟化技术在深度学习集群中的应用实践

一、深度学习集群的算力困境 某些985高校AI实验室曾面临典型算力管理难题&#xff1a;其配备的4台8卡A100服务器&#xff08;总价值超300万元&#xff09;实际利用率仅38%。学生提交的PyTorch任务常因GPU抢占导致训练中断&#xff0c;而部分研究组独占显卡却仅运行Jupyter Not…...

从零实现基于扩散模型的文本到视频生成系统:技术详解与Pytorch代码实现

本文详细介绍了基于扩散模型构建的文本到视频生成系统&#xff0c;展示了在MSRV-TT和Shutterstock视频标注数据集上训练的模型输出结果。以下是模型在不同提示词下的生成示例。 首先展示一些模型生成效果展示 提示词&#xff1a;“A person holding a camera”&#xff08;训练…...

每天学一个 Linux 命令(14):cat

Linux 文件查看与合并命令:cat cat(全称 concatenate)是 Linux 中用于查看文件内容、合并文件或创建简单文件的基础命令。它操作简单但功能灵活,是日常文件处理的常用工具。 1. 命令作用 查看文件内容:直接输出文件内容到终端。合并文件:将多个文件内容合并输出或保存到…...

05--MQTT物联网协议

一、MQTT的概念 MQTT 协议快速入门 2025&#xff1a;基础知识和实用教程 | EMQ 1.MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;是一种轻量级、基于发布-订阅模式的消息传输协议&#xff0c;适用于资源受限的设备和低带宽、高延迟或不稳定的网络环境。它…...

免费下载 | 2025天津大学:智能制造与数字孪生技术:面向可持续制造方向发展

一、新一代智能制造模式下的思考 当代智能制造的发展阶段 智能制造定义&#xff1a;智能制造是基于新一代信息通信技术与先进制造技术深度融合&#xff0c;贯穿于设计、生产、管理、服务等制造活动的各个环节&#xff0c;具有自感知、自学习、自决策、自执行、自适应等功能的新…...

考研单词笔记 2025.04.12

aware a知道的&#xff0c;意识到的&#xff0c;警觉的 awareness n意识&#xff0c;了解&#xff0c;觉察 conscious a有意识的&#xff0c;意识到的&#xff0c;有意的&#xff0c;刻意的&#xff0c;神志清醒的&#xff0c;慎重的&#xff0c;关注的 unconscious a无意识…...

八股总结(Java)持续更新!

八股总结&#xff08;java&#xff09; ArrayList和LinkedList有什么区别 ArrayList底层是动态数组&#xff0c;LinkedList底层是双向链表&#xff1b;前者利于随机访问&#xff0c;后者利于头尾插入&#xff1b;前者内存连续分配&#xff0c;后者通过指针连接多块不连续的内存…...

SpringBoot3快速入门笔记

springboot3简介 SpringBoot 帮我们简单、快速地创建一个独立的、生产级别的 Spring 应用&#xff08;说明&#xff1a;SpringBoot底层是Spring&#xff09; 大多数 SpringBoot 应用只需要编写少量配置即可快速整合 Spring 平台以及第三方技术 特性&#xff1a; ● 快速创建…...

vue3中,element-plus中el-input的v-model和value的用法示例

el-input的v-model&#xff0c;邦定响应式变量 <el-col :span"6"><el-form-item label"检验类别" prop"verifyType"><el-input v-model"applyAllInfo.applyBasicInfo.verifyTypeName" readonly /></el-form-item…...

python求π近似值

【问题描述】用公式π/4≈1-1/31/5-1/7..1/(2*N-1).求圆周率PI的近似值。 从键盘输入一个整数N值&#xff0c;利用上述公式计算出π的近似值&#xff0c;然后输出π值&#xff0c;保留小数后8位。 【样例输入】1000 【样例输出】3.14059265 def countpi(N):p0040nowid0for i i…...

Gerapy二次开发:搜索器组件设计开发与应用(Vue父子组件通信)

搜索器组件设计开发与应用 写在前面搜索器字段定义与样式设计具体实现components/Search.vuedeploy/Index.vue后端views.py运行效果总结欢迎加入Gerapy二次开发教程专栏! 本专栏专为新手开发者精心策划了一系列内容,旨在引领你深入探索Gerapy框架的二次迭代之旅。 本专栏将全…...

深入解析Python爬虫技术:从基础到实战的功能工具开发指南

一、引言:Python 爬虫技术的核心价值 在数据驱动的时代,网络爬虫作为获取公开数据的重要工具,正发挥着越来越关键的作用。Python 凭借其简洁的语法、丰富的生态工具以及强大的扩展性,成为爬虫开发的首选语言。根据 Stack Overflow 2024 年开发者调查,68% 的专业爬虫开发者…...

Python爬虫-爬取全球股市涨跌幅和涨跌额数据

前言 本文是该专栏的第52篇,后面会持续分享python爬虫干货知识,记得关注。 本文中,笔者将基于Python爬虫,实现批量采集全球股市行情(亚洲,美洲,欧非,其他等)的各股市“涨跌幅”以及“涨跌额”数据。 具体实现思路和详细逻辑,笔者将在正文结合完整代码进行详细介绍。…...

【NLP 59、大模型应用 —— BPE 算法】

你和生生不息的河流&#xff0c;生动了我人生中的美好瞬间 —— 25.4.11 一、词表的构造问题 为了nlp模型训练&#xff0c;词表&#xff08;字表&#xff09;是必要的 统计训练语料中的所有字符&#xff08;或词&#xff09;是一种做法&#xff0c;但是容易出现一些问题&…...

SQL基础入门:从CRUD到JOIN再到索引(通俗易懂版)

一、为什么需要SQL&#xff1f; 想象你在管理一个图书馆&#xff1a; 传统方法&#xff1a;手动记录每本书的位置、借阅者、归还日期SQL方法&#xff1a;用数据库系统自动管理&#xff0c;快速查询《Java编程思想》在哪个书架 SQL&#xff08;Structured Query Language&…...

系统编程1(进程的概念与原理)

进程的概念与原理 计算机组成部分一般遵循冯诺依曼结构&#xff0c;也就是由控制器、运算器、存储器、输入设备、输出设备五个部分组成。 ⦁ 程序的编译 一般在编写出程序之后&#xff0c;并不能直接运行&#xff0c;而是需要把程序通过编译器进行编译&#xff0c;生成可执行…...

Git基础知识

Git基础知识 目录 一、Git简介 1.1 什么是Git&#xff1f;1.2 基本概念1.3 Git与其他版本控制系统的区别 二、Git安装与配置 2.1 安装Git2.2 基础配置2.3 高级配置2.4 多账户配置 三、基本操作 3.1 创建仓库3.2 基本工作流3.3 分支操作3.4 查看历史 四、高级操作 4.1 撤销修改…...

【Flink运行时架构】核心组件

在Flink的运行架构中&#xff0c;有两大比较重要的组件&#xff1a;作业管理器&#xff08;JobManager&#xff09;和任务管理器&#xff08;TaskManager&#xff09;。 Flink的作业提交与任务处理时的系统如下图所示。 其中&#xff0c;客户端并不是处理系统的一部分&#xff…...

【区块链安全 | 第四十篇】合约审计之delegatecall(二)

文章目录 漏洞代码代码分析攻击流程攻击代码前文重现修复建议审计思路 在阅读本文之前&#xff0c;请确保已先行阅读&#xff1a;【区块链安全 | 第三十九篇】合约审计之delegatecall&#xff08;一&#xff09; 漏洞代码 存在一漏洞代码如下&#xff1a; // 库合约&#xf…...

Redis实现分布式定时任务

设计思路 任务表示&#xff1a;每个任务通过一个特定格式的键来表示。键名可以包含任务ID等信息&#xff0c;值可以是任务的具体内容或指向任务详情的引用。过期机制&#xff1a;利用Redis的EXPIRE命令为任务设置过期时间&#xff0c;当到达设定的时间点时&#xff0c;Redis会…...

ERC20合约的基本调用

文章目录 ERC20合约的基本调用合约功能compile.js 代码读取文件 进行合约编译获取二进制对象导出对象 index.js 代码编译合约读取私钥设置收款账户构造 web3 对象获取账户地址获取 abi 和 bin创建合约交易部署合约构造转账交易验证转账后余额 测试项目目录执行查询 ERC20合约的…...

『Kubernetes(K8S) 入门进阶实战』实战入门 - Pod 详解

『Kubernetes(K8S) 入门进阶实战』实战入门 - Pod 详解 Pod 结构 每个 Pod 中都可以包含一个或者多个容器&#xff0c;这些容器可以分为两类 用户程序所在的容器&#xff0c;数量可多可少Pause 容器&#xff0c;这是每个 Pod 都会有的一个根容器&#xff0c;它的作用有两个 可…...

【React框架】什么是 Vite?如何使用vite自动生成react的目录?

什么是 Vite&#xff1f; Vite 是一个基于原生 ES Modules 开发的前端构建工具&#xff0c;由 Evan You&#xff08;Vue 的作者&#xff09;开发。它最大的特点包括&#xff1a; 极速冷启动&#xff1a;因为利用了浏览器原生的 ES Modules&#xff0c;所以在开发时无需等待整…...

JS实现文件点击或者拖拽上传

B站看到了渡一大师课的切片&#xff0c;自己实现了一下&#xff0c;做下记录 效果展示 分为上传前、上传中和上传后 实现 分为两步 界面交互网络请求 源码如下 upload.html <!DOCTYPE html> <html lang"zh-CN"><head><meta charset&q…...

【Vue #3】指令补充样式绑定

一、指令修饰符 Vue 的指令修饰符&#xff08;Directive Modifiers&#xff09;是 Vue 模板语法中的重要特性&#xff0c;它们以半角句号 . 开头&#xff0c;用于对指令的绑定行为进行特殊处理 修饰符作用如下&#xff1a; 简化事件处理&#xff08;如阻止默认行为、停止冒泡…...

Vue.js组件安全工程化演进:从防御体系构建到安全性能融合

——百万级流量场景下的安全组件架构与源码级解决方案 文章目录 总起&#xff1a;安全工程化的组件革命 分论&#xff1a; 一、现存组件架构的七宗罪与安全改造路径   1.1 组件生态安全赤字现状   1.2 架构级安全缺陷深度剖析   1.3 性能与安全的死亡螺旋 二、百万级…...

LINUX基础 [二] - Linux常见指令

目录 &#x1f4bb;前言 &#x1f4bb;指令 &#x1f3ae;ls指令 &#x1f3ae;pwd指令 &#x1f3ae;whoami指令 &#x1f3ae;cd指令 &#x1f3ae;clear指令 &#x1f3ae;touch指令 &#x1f3ae;mkdir指令 &#x1f3ae;rmdir指令 &#x1f3ae;rm指令 &#…...

Linux进阶命令

目录 一、touch 1. 基本语法 2. 常用选项 二、which 1. 基本语法 2. 主要功能 3. 常用选项 三、find 1. 基本语法 2. 常用选项和表达式 四、more 1. 基本语法 2. 常用操作 3. 对比 more 和 less 五、grep 1. 基本语法 2. 常用选项 六、wc 1. 基本语法 2. 常…...

【Spring Boot 过滤器】

文章目录 前言一、什么是过滤器 Filter&#xff1f;二、Spring Boot 中使用 Filter 的方式1. 使用 Component 注解2. 使用 FilterRegistrationBean 显式注册 三、自定义过滤器示例1. 引入必要依赖2. 创建一个自定义 Filter3. 使用 FilterRegistrationBean 显式注册 四、多个 Fi…...

SPI通讯的软硬件NSS SSM SSI

学习自记&#xff1a; 1. NSS&#xff08;Slave Select&#xff0c;从设备选择&#xff09;​​ ​​功能​​&#xff1a; NSS是SPI通信中用于选择从设备的信号线。主设备通过拉低NSS信号选中某个从设备&#xff0c;使其参与通信。通信结束后&#xff0c;主设备释放NSS&#…...

Java基础:集合List、Map、Set(超详细版)

集合体系概述 Collection常用方法 补充&#xff1a;addAll() Collection的遍历方式 迭代器 增强for&#xff08;空集合可以&#xff0c;null不可以&#xff09; lambda 集合对象存储对象原理 遍历方式的区别 List集合 特点、特有方法 遍历方式 &#xff08;同上&#xff09…...

vue+leaflet 区域划分_反向遮罩层

leaflet 区域划分_遮罩层 geojson在线生成器网址:(https://datav.aliyun.com/portal/school/atlas/area_selector) 点击前往阿里云geojson生成器 效果图: 实现下面效果,只需要把addSateLayer函数的调用取消掉就好了. //添加遮罩层代码function addMask() {var latlngs;var fe…...

聊一聊原子操作和弱内存序

1、原子操作概念 在并发编程中&#xff0c;原子操作&#xff08;Atomic Operation&#xff09;是实现线程安全的基础机制之一。从宏观上看&#xff0c;原子操作是“不可中断”的单元&#xff0c;但若深入微观层面&#xff0c;其本质是由底层处理器提供的一组特殊指令来保证其原…...

免费送源码:Java+ssm+MySQL 校园二手书销售平台设计与实现 计算机毕业设计原创定制

摘 要 信息化社会内需要与之针对性的信息获取途径&#xff0c;但是途径的扩展基本上为人们所努力的方向&#xff0c;由于站在的角度存在偏差&#xff0c;人们经常能够获得不同类型信息&#xff0c;这也是技术最为难以攻克的课题。针对校园二手书销售平台等问题&#xff0c;对校…...

DAPP实战篇:使用ethersjs连接智能合约并输入地址查询该地址余额

本系列目录 专栏:区块链入门到放弃查看目录-CSDN博客文章浏览阅读400次。为了方便查看将本专栏的所有内容列出目录,按照顺序查看即可。后续也会在此规划一下后续内容,因此如果遇到不能点击的,代表还没有更新。声明:文中所出观点大多数源于笔者多年开发经验所总结,如果你…...

14.【.NET 8 实战--孢子记账--从单体到微服务--转向微服务】--微服务基础工具与技术--CAP

CAP 是一款专为 .NET 生态设计的开源框架&#xff0c;其核心目标是解决微服务中跨服务数据一致性问题。在分布式系统中&#xff0c;传统事务无法跨服务保证数据一致性&#xff0c;CAP 通过本地事务与消息记录绑定&#xff0c;再利用消息中间件&#xff08;如 RabbitMQ、Kafka 等…...

智能资源管理机制-重传机制

一、发送端资源管理的核心机制 1. 滑动窗口&#xff08;Sliding Window&#xff09; 这是TCP协议的核心优化设计&#xff1a; 窗口动态滑动&#xff1a;发送端不需要保留所有已发送的分组&#xff0c;只需维护一个"发送窗口"窗口大小&#xff1a;由接收方通告的接…...

【Linux网络与网络编程】08.传输层协议 UDP

传输层协议负责将数据从发送端传输到接收端。 一、再谈端口号 端口号标识了一个主机上进行通信的不同的应用程序。在 TCP/IP 协议中&#xff0c;用 "源IP"&#xff0c;"源端口号"&#xff0c;"目的 IP"&#xff0c;"目的端口号"&…...

局域网下ESP32-S3 LED灯的UDP控制

在局域网下通过IP地址控制ESP32-S3上的LED&#xff0c;可以使用UDP或TCP协议。以下是一个基于UDP协议的完整示例&#xff0c;包括ESP32-S3的服务器代码和一个简单的Python客户端代码。 ESP32-S3 服务器代码 import socket import time import network import machineled Non…...

call、bind、apply

call、bind、apply它们三个都是函数的方法&#xff0c;都可以用于改变this的指向问题。 var person "liangxiao" let obj {name:"张三",say:function() {console.log(this.name);} }obj.say(); setTimeout(function() {obj.say(); },1000) obj.say()打…...