借助 ControlNet 生成艺术二维码 – 基于 Stable Diffusion 的 AI 绘画方案

news2024/12/24 8:46:33

d86c634eaf38977f1d33171b48d2b39a.gif

背景介绍

在过去的数月中,亚马逊云科技已经推出了多篇博文,来介绍如何在亚马逊云科技上部署 Stable Diffusion,或是如何结合 Amazon SageMaker 与 Stable Diffusion 进行模型训练和推理任务。

为了帮助客户快速、安全地在亚马逊云科技上构建、部署和管理应用程序,众多合作伙伴与亚马逊云科技紧密合作。他们提供各种各样的服务、深入的技术知识、最佳实践和解决方案,包括基础设施迁移、应用程序现代化、安全和合规性、数据分析、机器学习、人工智能、云托管、DevOps、咨询和培训。

最近,亚马逊云科技核心级服务合作伙伴 eCloudrover(伊克罗德) 推出了基于 Stable Diffusion 的 AI 绘画解决方案—— imAgine,既拥有经过广泛验证且易于部署的先进 AI 算法模型,又提供丰富且高性价比的云端资源以优化成本,旨在帮助游戏、电商、媒体、影视、广告、传媒等行业快速构建 AIGC 应用通路,打造 AI 时代的领先生产力。

本文主要分享我们在帮助客户使用 Stable Diffusion 时总结的实战经验,以及使用基于 Stable Diffusion 研发的 imAgine 产品生成艺术二维码的最佳实践。

我们将以 QRCode 作为 ControlNet 的输入,使 QRCode 数据点融入到艺术图像中,同时仍然可以被 QRCode 阅读器扫描。借助这项技术,您可以将任何二维码转化为独特的艺术作品,以一种全新的方式来表达和传递信息。以下为几张图片案例:

e4309dfeeb002cce5cf7b325e3a65218.png

Stable Diffusion 实战技巧

古语有云:“万事开头难”,“致广大而尽精微”。这对应了在 Stable Diffusion 实战中,客户最常遇到的两方面问题,一是如何选择合适的提示词起手式,来生成满足期望的图片;二是如何对图片进行细节优化,使最终产出的结果能够满足生产应用需求。

我们根据过往服务客户使用 Stable Diffusion 的经验,整理了以下内容作为我们推荐的最佳实践,希望对读者使用 Stable Diffusion 进行创作时提供参考。

提示词工程

随着 Stable Diffusion 版本不断迭代,AI 对语义的理解越来越接近“常识”之后,对提示词(Prompts)的要求也会越来越高。很多提示词上的误区有时会对绘图产生反作用。

Prompt 的基本概念

  • 提示词分为正向提示词(positive prompt)和反向提示词(negative prompt),用来告诉 AI 哪些需要,哪些不需要。

Prompt 的误区

  • Prompt 在于精确,不在于数量;用最简短的单词阐述画面,比自然语言要更有效。

  • 提升质量的描绘词绝不是无脑堆砌、越多越好。

  • 经常出现的起手式:“masterpiece” “best quality” 等,很多时候会成为提示词中的累赘。这些词语在 NovelAI 时代是有意义的,因为当时 NovelAI 训练模型时大量使用了这些词汇来对图像进行评价;但在如今,经过 Civitai 上模型作者们不断重新炼制模型,这些提示词已经很难在生图结果中展现应有的作用。

调整提示词的权重

  • 词缀的权重默认值都是 1,从左到右依次减弱

  • 提示词权重会显著影响画面生成结果

  • 通过小括号+冒号+数字来指定提示词权重,写法如 (one girl:1.5)

注意提示词的顺序

  • 比如景色 Tag 在前,人物就会小,相反的人物会变大或半身

  • 选择正确的顺序、语法来使用提示词,将更好、更快、更有效率地展现所想所愿的画面

Prompt 中的 Emoji

  • Prompt 支持使用 emoji,且表现力较好,对于特定的人脸表情或动作,可通过添加 emoji 图来达到效果

  • 为了防止语义偏移,优先考虑 emoji,然后少用不必要的 with 一类的复杂语法

视角 Prompt 推荐

5a78817aab93ff2b60c432a69ff03f9a.png

图片优化

很多时候我们生成了一张差强人意的图片,希望对这个结果进行进一步的优化,但往往不知道从何下手。这时您或许可以参考以下图片参数调优的最佳实践:

哪些参数需要调整

CFG Scale:图像与提示词的相关度。该值越高,提示词对最终生成结果的影响越大,契合度越高。 

  • CFG 2-6:有创意,但可能太扭曲,没有遵循提示。对于简短的提示来说,可以很有趣和有用。

  • CFG 7-10:推荐用于大多数提示。创造力和引导力度之间的良好平衡。

  • CFG 10-15:当您确定提示是详细且非常清晰的,对图片内容有极明确的要求时使用。

  • CFG 16-20:除非提示非常详细,否则通常不推荐。可能影响一致性和质量。

  • CFG >20:几乎无法使用。

Sampling Steps 迭代步数:步骤越多,每一步图像的调整也就越小、越精确。同时也会成比例地增加生成图像所需要的时间。 

  • 对于大部分采样器,迭代越多次效果越好,但超过 50 步后就收效甚微。

Sampling method 采样方法:不同的采样方法,对应的最佳迭代步数是不同的,在进行对比时需要综合考虑。 

  • Euler a:富有创造力,不同步数可以生产出不同的图片。并且这是一个效率较高的采样方法,可以用来快速检查 prompt 效果的好坏。

  • DPM2 a Karras:适合跑真实模型,30 步以后不好把控。

  • DPM++ 2M Karras:在高步数下表现优异,步数越高细节越多。

  • DDIM:收敛快,但效率相对较低,因为需要很多 step 才能获得好的结果,适合在重绘时候使用。

  • 不同模型与采样方法搭配出的结果也不同,以上仅供参考,在进行采样方法的选择时,最好使用 X/Y/Z 图表进行对比。

Seed 随机种子:随机种子值很多时候对构图的影响是巨大的,这也是 SD 生图随机性的最主要来源。

  • 保持种子不变,同样的提示词和模型,保持所有参数一致的情况下,相同的种子可以多次生成(几乎)相同的图像。

  • 在确定好一个合适的画面构图时,固定种子,对细节进行进一步打磨,是最合适的做法。

如何对比寻找最佳参数

利用 X/Y/Z 图找最佳参数:通过使用 X/Y/Z 图,我们可以很清晰地对比不同参数下的结果,快速定位合适的参数范围,进行进一步的生成控制。

d1db96bf2ca1c2e24157eab7e0e167ad.png

图片尺寸优化

  • 图片质量并不直接与图像尺寸挂钩。

  • 但尺寸在一定程度上影响了主题/图片内容,因为它潜在代表选择的类别(比如竖屏人物,横屏风景,小分辨率表情包等)。

  • 当出图尺寸太宽时,图中可能会出现多个主体。

  • 1024 之上的尺寸可能会出现不理想的结果,并且对服务器显存压力是巨大的。推荐使用小尺寸分辨率 + 高清修复

优化多人物 / 宽幅单人物的生成

  • 单纯使用 txt2img 无法有效指定多人物情况下,单个人物的特征。

  • 较为推荐的方案是制作草稿 + img2img 或 ControlNet 的方式。

  • 宽幅画作+单人物生成最好打草图,进行色彩涂抹,确定画面主体;或使用 ControlNet 的 OpenPose 做好人物骨架。

  • 多人物确定人物数量,最好使用 ControlNet 的 OpenPose 来指定;该方案也适合画同一人物的三视图。

进行手部修复

  • 将图片送入 img2img inpaint,使用大致相同的提示词,将关于“手”的提示放在前面,根据希望手部特征变动多少来设置重绘幅度(如果只是希望手更完整,调至 0.25 以下),然后保留步骤和 CFG 与 txt2img 相同。

  • 找到一个满足期望的手部图片,借助 ControlNet 的 Canny 或 OpenPose_hands 等预处理器+模型,结合 inpaint 操作,能实现更精确的手部控制。

进行面部修复

  • 在绘制人物主体较小的图片时,经常会出现面部崩坏的情况。尤其是本文之后会介绍的生成艺术二维码流程,人物的面部经常会因为二维码码点的存在而崩坏。

  • 对面部的重绘,更推荐使用 !After Detailer 插件实现,通称 ADetailer。

  • 该插件会使用 yolo 算法对图片中的物体进行识别,我们设定其识别人物面部,并提供面部重绘的提示词和模型;该插件会在识别到的面部位置进行局部重绘,完成面部修复。

  • ADetailer 插件可以满足面部和手部的识别与修复。

  • 在 ADetailer 中也能引用 Lora 模型进行局部重绘生成。

bc91a142272acbe546e6ded6745e54b8.png

借助 ControlNet 生成艺术二维码

Step1:优化二维码

二维码是一种借助特定几何图形分配,在二维空间上分布的、黑白相间的、记录数据符号信息的图形。二维码有多种不同的编码方式,我们此处采用通用度最高也是最基础的编码方式:QR Code。

03ab8e46afab270a6208457a2872ea0d.png

输入的二维码是借助 SD 生成艺术二维码过程中最重要的部分之一。我们主要关心输入的二维码的以下两个特点:

1. 二维码中包含的信息量

无论二维码采用何种编码方式,承载的字符信息越多,二维码在视觉上呈现的黑白结构就越复杂。复杂的结构很容易导致我们在生成艺术创意时,极大地收到二维码本身信息的掣肘。因此我们首先要想办法精简二维码中包含的字符长度。

对于最广泛的应用场景,二维码通常会包含一个网页链接;为了提升二维码生成的美观性,我们首先需要对网页链接进行缩短。市面上的链接缩短工具有很多,您可以自由选择。但需要注意,在中国大陆境内请选择有域名备案的缩链平台,否则会被微信、浏览器等阻挡。

例如我们有一个希望制作成二维码的网址:https://www.ecloudrover.com/aigc/

通过缩链处理后为:http://c.suo.nz/7KZrF。

通过下图可以比较直观地看出链接长短对于二维码视觉的影响,缩短的链接将更有利于我们接下来的创作。

a8683e5b42a8e1ca0156e4237052369a.png

2. 二维码的呈现形式

随着技术发展,二维码不仅只支持黑白方块状的图案样式,定位点和码元都支持多样化的呈现,例如以下几种样式:

281a534c1b8a6a8fad4eb674bd8a6d1d.png

在实际操作中,我们可以尝试多种不同的码点形式,以使得生图效果符合我们的预期。

下图展示了不同的二维码形式对最终效果图的影响:

b1db9335e8bef0bfedfd7f0161307e31.png

生成参数:

Prompt: mountain, green grassland, sky, cloud, bird, blue sky, no human, day, wide shot, flying, border, outdoors, white bird, scenery
Negative prompt: easynegative
Steps: 40, Sampler: DPM++ 2M Karras, CFG scale: 6, Seed: 3943213078, Size: 872x872, Model hash: 876b4c7ba5, Model: cetusMix_Whalefall2, Clip skip: 2, ControlNet: "preprocessor: none, model: control_v1p_sd15_qrcode_monster [a6e58995], weight: 1.35-1.5, starting/ending: (0.05, 1), resize mode: Resize and Fill, pixel perfect: True, control mode: Balanced, preprocessor params: (512, 64, 64)", Version: v1.3.

左滑查看更多

Step2:制作基础二维码

了解了上述要点后,我们将要开始使用二维码制作工具,生成一个输入给 SD 的基础二维码。互联网上有多种网页二维码生成工具,您可以自由选择。同时为了方便您使用,我们在 Blog 专用的 AMI 中已经预装了 QRCode 生成插件,只要您从正确的版本中启用 AMI,都可以直接在 Webui 上看到下述的 QRCode Toolkit:

  • Anthony’s QR Toolkit:整合在 Webui 的 QRCode 生成与优化工具

    https://github.com/antfu/sd-webui-qrcode-toolkit

接下来我们演示如何使用 Anthony’s QR Toolkit 来生成二维码,您可以参考下图完成二维码参数的配置。

c20ffb40c5ff6c7adaebf05375090997.png

完成二维码制作后,可以点击右侧的 “Download” 以下载到本地。或点击 “Send to ControlNet”,直接将二维码发送至 ControlNet 以进行下一步操作。

Step3:确定艺术风格

使用 Stable Diffusion 进行艺术创作的核心是选择合适的模型+提示词。我们在创作艺术二维码之前,建议先不使用 ControlNet,先进行一次普通的图片生成,以测试生图效果。

此处我希望二维码中有山川、蓝天、白云等自然景观,因此先使用以下参数,测试提示词和模型的生成效果。

50d4154cc6aff98eeef878583d013e6f.png

生成参数:

Prompt: mountain, green grassland, sky, cloud, bird, blue sky, no human, day, wide shot, flying, border, outdoors, white bird, scenery
Negative prompt: easynegative
Steps: 20, Sampler: Euler a, CFG scale: 7, Seed: 4078355702, Face restoration: CodeFormer, Size: 512x512, Model hash: 876b4c7ba5, Model: cetusMix_Whalefall2, Clip skip: 2, Version: v1.3.2

左滑查看更多

Step4:在 ControlNet 中导入二维码

确认好图片风格后,我们将未经处理的二维码上传 ControlNet。请注意以下几个选项的配置:

  • “启用” 按钮:勾选以确保 ControlNet 在图片生成过程中生效;

  • 模型选框:请选择 “control_v1p_sd15_qrcode_monster” 来加强二维码的控制力度;

  • 控制权重:对于 qrcode_monster 模型,我们建议设置在 1.1-1.6 之间;

  • 引导介入/终止时机:介入时机建议在 0-0.1 之间,终止时机建议为 1

d2c811ab05ca299e4c3b836bc98dcdcf.png

在文生图配置中建议调整两组数值:

  • 迭代步数:建议在 30-50 之间,默认值 20 不足以引导生成一个高质量的二维码图片

  • 宽度/高度:建议直接从 ControlNet 发送二维码原图的宽高比至上方

92bb2467f541fc048d500ad0f6be85f9.png

参数全部配置完成后,点击生成即可,可以看到此处我们生成了一个效果不错的图片,使用手机扫码测试也完全通过。

048444218901ea05368c2b00e63ea389.png

如果生成的二维码不能够达到期望,可以选择微调以下几个参数,并增加生成的总批次数,不断尝试抽卡以逼近最终期望的效果:

  • 提示词

  • 采样方法

  • ControlNet 控制权重

  • ControlNet 引导介入/终止时机

59bf7935d21262ae46e95ab0ae58c7f2.png

必要时可以选择使用 “脚本” 中的 X/Y/Z Plot,来对比不同参数下生成二维码的效果。我们此处对比了 ControlNet 的控制权重和引导介入时机:

7591ec802f8e51120b562af547fc9d14.png

附录

附录1:ControlNet QRCode 模型的选择

为方便您使用,我们在 Blog 专用的 AMI 中已经完成了 ControlNet QRCode 模型的植入,只要您从正确的版本中启用 AMI,都可以直接在 ControlNet 中选择模型。

截至目前,QRCode Monster是我们测试后认为控制二维码成功率最高,也是二维码融入图像效果最好的模型,该模型可以在 HuggingFace 下载到:

https://huggingface.co/monster-labs/control_v1p_sd15_qrcode_monster

市面上也有另一个二维码模型:QR Pattern v2.0。该模型我们建议结合使用IoC Lab的 Brightness 模型作为辅助模型来提高局部对比度,也会产出不错的效果。但根据我们的测试,该模型自带的干扰内容较多,可能会导致图像风格发生很大的变化。这两个模型可以在下方链接下载:

https://civitai.com/models/90940/controlnet-qr-pattern-qr-codes

https://huggingface.co/ioclab/ioc-controlnet

附录2:如何使用 Stable Diffusion AI 绘图解决方案

imAgine 是一款由亚马逊云科技核心级服务合作伙伴伊克罗德,基于 Automatic1111 Stable Diffusion Webui,结合亚马逊云科技多种托管服务定制开发的AI绘图解决方案。imAgine 目前已经上线亚马逊云科技MarketPlace,用户能够在 Marketplace 中一键订阅,快速启动,无需进行复杂的环境配置,敏捷地在云上部署 AI 绘画环境。

同时还结合亚马逊云科技无服务器服务 Amazon API Gateway、Amazon DynamoDB 等,将 WebUI 前端的训练、推理请求,无缝转发到 Amazon SageMaker 后端的专用推理、训练服务器上,实现算力的无缝扩展,并基于此架构基础实现前后端分离、精确的成本管控。

对于任何希望快速上手 AIGC 技术,并且希望得到全生命周期维护与技术支持的客户订阅并测试解决方案,限于篇幅,订阅 imAgine 解决方案的详细操作流程请参考 WorkShop 页面:https://catalog.us-east-1.prod.workshops.aws/workshops/facdf921-2eea-4638-bc01-522e1eef3dc5

参考链接

  • Stable Diffusion AI 方案 MarketPlace 订阅链接:https://aws.amazon.com/marketplace/pp/prodview-ohjyijddo2gka?sr=0-1&ref_=beagle&applicationId=AWSMPContessa

  • Stable Diffusion AI 方案 Workshop:

    https://catalog.us-east-1.prod.workshops.aws/workshops/facdf921-2eea-4638-bc01-522e1eef3dc5

  • Stable Diffusion AI 方案解决方案官网:

    https://www.ecloudrover.com/aigc/

  • QR Toolkit 插件作者 Anthony Fu 的 QRCode 共创文档:

    https://antfu.me/posts/ai-qrcode-101

  • IoC Lab 模型展示:

    https://mp.weixin.qq.com/s/i4WR5ULH1ZZYl8Watf3EPw

  • IoC Lab Stable Diffusion 文档:

    https://aigc.ioclab.com/

本篇作者

78995079d3a7f1fad3d411121e34eaa8.png

诸葛瑞麟

南京伊克罗德信息科技有限公司解决方案架构师经理,专注于亚马逊云原生的架构设计与解决方案实践。擅长云上数据湖仓、数据分析与机器学习的规划与实施。目前主要负责伊克罗德自有解决方案研发,与云上 ISV 合作伙伴能力集成。

10ac4cbccc75aa248a74b21118c8d38d.png

苏喆

亚马逊云科技解决方案架构师,负责亚马逊云科技的云计算方案架构咨询和设计,致力于亚马逊云科技服务在电商、教育以及开发者群体中的推广。曾就职于 IBM,担任 IT 解决方案架构师,负责云原生与容器架构的设计及开发。

99545f18e03359556686e1d71da49357.png

于涛

亚马逊云科技解决方案架构师,负责亚马逊云科技云计算方案咨询和设计。目前主要专注在现代化应用改造和机器学习领域的技术研究和实践。加入亚马逊云科技之前曾服务于大型运营商及 IT 解决方案供应商,积累了丰富的跨境电商/快消行业项目经验。

ae980b116657923521a5b03f1b8051af.png

苏礼军

亚马逊云科技资深解决方案架构师,致力于亚马逊云科技云技术的推广应用以及生态发展,拥有多年的 IT Planning 咨询规划、架构师设计、落地交付经验,在制造业、零售快消、教育、医疗、金融等行业都有众多的数字化转型案例积累。

1e7598d3a0ab4a9a069cb63899b05c3c.png

姜萌

亚马逊云科技合作伙伴解决方案架构师,负责亚马逊云科技合作伙伴解决方案咨询和设计,专注于合作伙伴云科技核心能力体系开发。曾就职于 IBM 担任技术顾问,并积累了数字孪生/流程自动化领域解决方案经验。

eadee3bc14c728306b20bf4c131f9dcd.gif

星标不迷路,开发更极速!

关注后记得星标「亚马逊云开发者」

a5f2e3caa79340ae6bb92c19a0f572eb.gif

听说,点完下面4个按钮

就不会碰到bug了!

3a8e8c61dc0d586d9d87f06f1333ecc5.gif

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

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

相关文章

抽象轻松java

嗨嗨嗨! 没想到吧,出现了抽象轻松第4种语言系列(我也没想到) 简单的java程序,看完就懂的简单逻辑——购物车系统 购物车,首先要有商品吧,现实中的商品有什么属性? 名字&#xff0…

JavaSE 基础(十三)网络编程

1. 概述 计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。 网络编程主要工作是在发…

基于ModebusRTU通信采集温度湿度项目案例

目录 一、模拟温湿度模拟 【1.1】温湿度仪表参数 【1.1】使用电脑模拟传感器 【1.2】使用Codesys软件模拟传感器 二、自定义控件UI设计 【2.1】自定义控件温度湿度柱状设计 ​编辑 【2.1.1】设置温度湿度柱状实际显示【属性】 【2.1.2】设置温度湿度柱状的背景颜色【属…

工具篇 | Gradle入门与使用指南 - 附Github仓库地址

介绍 1.1 什么是Gradle? Gradle是一个开源构建自动化工具,专为大型项目设计。它基于DSL(领域特定语言)编写,该语言是用Groovy编写的,使得构建脚本更加简洁和强大。Gradle不仅可以构建Java应用程序&#x…

用AI解决量子学问题

3 人工智能用于量子力学 在这一部分中,我们提供了有关如何设计高级深度学习方法以有效学习神经波函数的技术评述。在第3.1节中,我们概述了一般情况下定义和解决量子多体问题的方法。在第3.2节中,我们介绍了学习量子自旋系统基态的方法。在第…

Python3操作SQLite3创建表主键自增长|CRUD基本操作

Python3操作MySQL8.XX创建表|CRUD基本操作 Python3操作SQLite3创建表主键自增长|CRUD基本操作 一: SQLite3创建表时主键自增长 1: sqlite支持建立自增主键 create table t_user (id integer primary key autoincrement,age int(2), name varchar(10),address varchar(100) )…

YOLOv5、YOLOv8改进:ConvNeXt(backbone改为ConvNextBlock)

目录 1.介绍 2. YOLOv5修改backbone为ConvNeXt 2.1修改common.py 2.2 修改yolo.py 2.3修改yolov5.yaml配置 1.介绍 论文地址:https://arxiv.org/abs/2201.03545官方源代码地址:https://github.com/facebookresearch/ConvNeXt.git 自从ViT(Vision T…

Linux 权限相关例题练习

目录 一、前期准备工作: 1)新建redhat用户 2)新建testdir目录及其file1 二、例题详解 1、当用户redhat对/testdir目录无写权限时,该目录下的只读文件file1是否可修改和删除? 2、复制/etc/fstab文件到/var/tmp下&…

C++11之新的类功能

这里写目录标题 新的类功能默认成员函数类成员变量初始化强制生成默认函数的关键字default禁止生成默认函数的关键字deletefinal与override关键字override 新的类功能 默认成员函数 原来C类中,有6个默认成员函数: 构造函数析构函数拷贝构造函数拷贝赋…

Spring学习笔记13 Spring对事务的支持

Spring学习笔记12 面向切面编程AOP-CSDN博客 什么是事务:在一个业务流程当中,通常需要多条DML(insert delete update)语句共同联合才能完成,这多条DML语句必须同时成功,或者同时失败,这样才能保证数据的安全. 多条DML要么同时成功,要么同时失败,叫做事务(Transaction) 事务四…

安防视频平台EasyCVR视频调阅全屏播放显示异常是什么原因?

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…

Apache DolphinScheduler在中国信通院“2023 OSCAR开源尖峰案例”评选中荣获「尖峰开源项目奖」!

在近日由中国信息通信研究院(以下简称“中国信通院”)和中国通信标准化协会联合主办的“2023 OSCAR 开源产业大会”上,主办方公布了 2023 年“OSCAR 开源尖峰案例”评选结果,包括“开源人物”“开源项目”“开源社区”“开源企业”…

python+vue实验室课程预约管理系统

实验室课程管理系统运用计算机完成数据收集、查询、修改和删除以及统计等工作,提高了管理者工作效率,避免了因信息量巨大,造成的人为错误.通过前面的功能分析可以将实验室课程管理系统的功能分为管理员、学生和教师三个部分&#…

Linux高性能服务器编程 学习笔记 第八章 高性能服务器程序框架

TCP/IP协议在设计和实现上没有客户端和服务器的概念,在通信过程中所有机器都是对等的。但由于资源(视频、新闻、软件等)被数据提供者所垄断,所以几乎所有网络应用程序都采用了下图所示的C/S(客户端/服务器)…

LeetCode_BFS_中等_1926.迷宫中离入口最近的出口

目录 1.题目2.思路3.代码实现(Java) 1.题目 给你一个 m x n 的迷宫矩阵 maze (下标从 0 开始),矩阵中有空格子(用 ‘.’ 表示)和墙(用 ‘’ 表示)。同时给你迷宫的入口 …

电脑提示vcruntime140.dll缺失重新安装的修复方法

电脑出现 vcruntime140.dll 丢失的情况,通常是由于系统缺失了 Microsoft Visual C Redistributable 的运行库文件。这个文件是许多应用程序在运行时所需的依赖库,如果丢失了该文件,可能会导致某些软件无法正常运行。 下面是关于 vcruntime140…

免费录音软件推荐,告别杂音,音质更清晰!

“求推荐一款免费的录音软件!最近下载了好多的录音软件,不是音质太差,就是需要收费解锁新的功能,根本不好用,有没有人知道一款免费优秀的录音软件呀,告诉我一下。” 录音已成为现代人们学习和工作中的一项…

DataExcel控件读取和保存excel xlsx 格式文件

需要引用NPOI库 https://github.com/dotnetcore/NPOI 调用Read 函数将excel读取到dataexcel控件 调用Save 函数将dataexcel控件文件保存为excel文件 using NPOI.HSSF.UserModel; using NPOI.HSSF.Util; using NPOI.SS.UserModel; using NPOI.SS.Util; using System; using …

pytho实例--pandas读取表格内容

前言:由于运维反馈帮忙计算云主机的费用,特编写此脚本进行运算 如图,有如下excel数据 计算过程中需用到数据库中的数据,故封装了一个读取数据库的类 import MySQLdb from sshtunnel import SSHTunnelForwarderclass SSHMySQL(ob…

Java BigDecimal 详解

目录 一、BigDecimal 1、简介 2、构造器描述 3、方法描述 4、使用 一、BigDecimal float和double类型的主要设计目标是为了科学计算和工程计算。他们执行二进制浮点运算,这是为了在广域数值范围上提供较为精确的快速近似计算而精心设计的。然而,它…