Stable Diffusion XL webui tagger 插件Linux安装(保姆级教程)

文章目录 Stable Diffusion XL webui tagger 插件Linux安装为什么要安装tagger插件安装tagger插件下载tagger仓库下载wd-v1-4-vit-tagger 模型权重 Stable Diffusion XL webui tagger 插件Linux安装 为什么要安装tagger插件 为了使SD能生成我们想要的图像效果,往往需要对SD模型进行微调,但其权重参数太多,如果是用更新全部参数的方法来微调,会耗费大量的计算资源。那么可不可以仅需少量计算资源,对模型进行微调,也有不错的效果呢?答案是肯定的,那就是:基于LoRA对其进行微调! 本文写作动机:想自己训练LoRA,需要对训练数据进行tag,但是自己手动tag,比较麻烦,于是考虑用tagger插件,来实现对每张训练图像进行tag,然后在其基础上进行修改,以减少工作量。 webui提供了插件扩展,方便我们安装tagger插件。 可以看到,tagger插件能直接生成对于训练图片的描述。 安装tagger插件 在安装前,敲黑板!!!这个插件对于webui版本有很强的依赖性,所以需要安装合适的版本,以下教程,全部基于webui v1.6.0-2版本,还没有安装的可以参考我之前的文章,传送门 有三种安装方式。分别是: 在linux终端通过git 命令来安装在webui界面,直接输入tagger仓库的URL 通过available界面直接选择 这里主要介绍第二种方式。 下载tagger仓库 输入https://github.com/toriato/stable-diffusion-webui-wd14-tagger,点击Install就行了。 如果出现以下报错: 在/stable-diffusion-webui/extensions/stable-diffusion-webui-wd14-tagger/tagger/ui.py第10行左右 修改 from webui import wrap_gradio_gpu_call 为 # from webui import wrap_gradio_gpu_call from modules.call_queue import wrap_gradio_gpu_call 如果出现以下报错: 在/stable-diffusion-webui/extensions/stable-diffusion-webui-wd14-tagger/preload.py文件第4行左右,删掉 from modules.shared import models_path default_ddp_path = Path(models_path, 'deepdanbooru') 改为 from modules import paths default_ddp_path = Path(paths.models_path, 'deepdanbooru') 下载wd-v1-4-vit-tagger 模型权重 由于huggingface被墙了,需要手动下载,URL。下载这两项即可: 然后新建一个文件夹,将下载好的两个文件放在.cache下。

Android Studio入门实战--实现数据库增删查改 备忘录实例

目录 要求目的: 效果图: Android studio sql 数据库查看工具 SQLiteStudio MainActivity内容: EditText带icon的布局文件: 定义Myhepler.java ——用户部分—— 定义注册登录事件 注册按钮绑定插入用户记录事件: 登录按钮绑定匹配数据库用户密码是否正确并且传值跳转Content页面事件: ContentActivity: 布局xml文件: 定义Myhelper.java——备忘录数据增删查改—— 长按删除数据记录: 短按编辑: 添加备忘录按钮: onResume()函数实时更新回调函数: 全部代码: 要求目的: 1. 数据库需要存储用户信息、及备忘录信息, 2. 每个用户都有各自的备忘录信息,信息互不干扰 3. 根据按钮 完成数据库 增删查改,实时更新信息 效果图: Android studio sql 数据库查看工具 SQLiteStudio 下载链接 官网 SQLiteStudiohttps://sqlitestudio.pl/ 在本地android studio 上 查询数据库并且复制到桌面用sqlitestudio 工具查看 结果如下: MainActivity内容: EditText带icon的布局文件: xml布局文件 <?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/img" tools:context=".MainActivity"> <ImageView android:id="@+id/imageView" android:layout_width="122dp" android:layout_height="109dp" android:layout_marginStart="152dp" android:layout_marginBottom="44dp" android:src="@drawable/userimg" app:layout_constraintBottom_toTopOf="@+id/loginView" app:layout_constraintStart_toStartOf="

Missing classes detected while running R8. Please add the missing classes or apply additional keep r

报错信息如下: Missing classes detected while running R8. Please add the missing classes or apply additional keep rules that are generated in E:\AndroidProject\XXX\XXX\app\build\outputs\mapping\debugAndroidTest\missing_rules.txt. Missing class com.google.errorprone.annotations.MustBeClosed (referenced from: androidx.test.platform.tracing.Tracer$Span androidx.test.platform.tracing.Tracer$Span.beginChildSpan(java.lang.String) and 2 other contexts) 解决: 打开给出的文件:\AndroidProject\XXX\XXX\app\build\outputs\mapping\debugAndroidTest\missing_rules.txt. 将里面的东西复制到 proguard-rules.pro 文件里面即可解决 然后发现并不能解决,最后检查发现当前环境是debug,并且开启了混淆,但是并没有添加混淆文件 debug { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } 结果发现,并没有解决问题,好吧,缺什么补什么,解决如下,成功了 implementation 'com.google.errorprone:error_prone_annotations:2.3.4' 后来发现这个东西可能会在使用 @keep 注解的时候会造成错误,比如那些数据类,可能会引用到 error_prone_annotations 里面的 @keep 注解,所以造成混淆之后的错误,注意看一下,反过来,也可能是因为数据类里面引用到了这个东西的 @keep 注解

AIGC原理:扩散模型diffusion综述一:面向视觉计算的扩散模型研究进展

论文地址:State of the Art on Diffusion Models for Visual Computing 👉 贴一幅SGM(Score-based Generative Model)的原因是宋飏博士将他2019年提出的SMLD模型和2020年Jonathan Ho提出的DDPM采用SDE进行一统这两大极为相似的生成式模型。殊途同归,基于概率的扩散模型DDPM和基于分数的扩散模型SMLD都是通过利用Unet训练一个通过不同时间步控制的不同噪声图片的噪声预测器、分数预测器,最终通过DDPM的采样公式或者退火的郎之万动力学采样公式进行生成图片。 🔥 摘要 由于生成式AI的出现,计算机视觉领域正在迅速发展,它为图像、视频和3D场景的生成、编辑和重建解锁了前所未有的能力。在这些领域中,扩散模型diffusion是首选的生成式AI架构。仅在去年,关于基于扩散的工具和应用的文献就呈指数级增长,每天计算机图形学、计算机视觉和AI社区都有新的作品出现在arXiv上。这一领域的迅速发展使它很难跟上最近的所有发展。这份最新报告(STAR)的目标是介绍扩散模型的基本数学概念、流行的稳定扩散模型的实现细节和设计选择,以及概述这些生成式AI工具的重要方面,包括个性化、条件调节、反演等。对快速增长的基于扩散的生成和编辑进行了全面的概述,按生成媒体的类型进行分类,包括2D图像、视频、3D物体、运动和4D场景。讨论了可用的数据集、指标、公开挑战和社会影响。这为研究人员、艺术家和从业人员等探索这个领域提供了一个直观的起点。 1. 简介 几十年来,计算机图形学和3D计算机视觉界一直在努力开发准确的物理模型,以计算机生成的图像或从照片中推断场景的物理属性。该方法包括渲染,仿真,几何处理和摄影测量,构成了多个行业的基石,包括视觉效果,游戏,图像和视频处理,计算机辅助设计,虚拟和增强现实,数据可视化,机器人,自动驾驶汽车,遥感等。 生成性(AI)的出现标志着计算机视觉的范式转变。生成式AI工具可以生成和编辑逼真和风格化的像、视频或3D对象,只有文本提示或高级用户指导作为输入。这些工具使计算机视觉中的许多费力的过程自动化,这些过程以前是由具有专业领域知识的专家生成的,现在可以更广泛地使用它们。 生成式AI以前所未有的能力被计算机视觉领域解锁为基础模型,如稳定扩散 [RBL∗22], Imagen [SCS∗22], Midjourney[Mid23],或DALL-E 2 [Ope23a]和DALL-E 3 [Ope23b]。通过对数亿到数十亿的文本-图像对进行训练,这些模型“看到了一切”,并且估计有数十亿个可学习参数。在经过大量高端图形处理单元(gpu)的训练后,这些模型构成了上述生成式AI工具的基础。通常用于图像、视频和3D对象生成。基于卷积神经网络(CNN)的扩散模型是典型,这些模型以多模态方式与基与transformer的架构的文本编码器相结合,如CLIP [RKH∗21]。 虽然许多2D图像生成基础模型的成功和训练来自资金雄厚的行业参与者,使用了大量的资源,但学术界仍然有空间以主要方式为图形和视觉工具的开发做出贡献。例如,不清楚如何将现有的图像基础模型扩展到其他更高维的领域,如视频和3D场景生成。这在很大程度上是由于缺乏某些类 型的训练数据。例如,网络包含数十亿张2D图像,但高质量和多样化的3D物体或场景的实例要少得多。此外,如何缩放2D图像生成架构以处理更高维度,如视频、3D场景或4D多视图一致场景生成所需要的。当前一个主要的限制,由于网络的规模和迭代性质,扩散模型在推理时相当缓慢,即使网络上存在大量(未标记)视频数据,当前的网络架构往往效率太低,无法在合理的时间或合理的计算资源上进行训练。 尽管仍然存在的挑战,但最近的发展在过去一年中刺激了计算机视觉学者们,使得扩散模型的爆炸式增长(见图1中的代表性示例)。这份最新报告(STAR)的目标是介绍扩散模型的基本原理,结构化地概述许多最近关于扩散模型在视觉计算中的应用的工作,并概述公开的挑战。 STAR的结构如下: 1.简介 2.概述了范围,并向感兴趣的读者介绍了这里没有涉及的密切相关主题的调查; 3.概述了二维扩散的数学基础; 4.讨论了从2D图像向视频、3D和更高维扩散模型转移的挑战; 5.概述了基于扩散的视频合成和编辑的方法; 6.总结了最近的3D对象和场景生成方法; 7.包括对多视图一致视频的4D时空扩散的讨论,人体运动和场景生成(例如,使用参数化人体模型); 8.包括对现有训练数据的简要讨论; 9.用于各种生成内容的评论指标; 10.概述了公开挑战; 11.讨论社会影响和伦理问题; 12.STAR结尾。 2. STAR的范围 本文重点介绍了扩散模型在计算机视觉中应用的最新进展。讨论了扩散模型在生成和编辑图像、视频、3D物体或场景以及多视图一致的4D动态场景中的作用。我们首先建立扩散模型的数学基础。这包括应用于2D图像的一般扩散过程的简要介绍。深入研究了这些技术如何实现高维信号的生成建模,对视频、3D和4D数据的扩散模型的主要方法进行了全面的概述。本报告旨在强调利用扩散模型解决图像域以外数据问题的技术。考虑到这一点,我们不会涵盖只适用于2D数据的每一种方法。本文也没有讨论利用扩散模型以外的生成的工作。 其他生成方法,如GANs,与扩散模型密切相关。但是,我们认为它们超出了本报告的范围。我们建议读者参考 [GSW∗21]以获得关于GANs的深入讨论, [BTLLW21,LZW∗23, SPX∗22]以获得其他生成方法的更广泛的回顾,或使用不同的生成模型架构进行多模态图像合成和编辑[ZYW∗23]。最近,基础模型已经变得类似于在互联网规模的数据图像 [RBL∗22]上训练的扩散模型。虽然本报告讨论了利用此类模型的方法,但请参阅 [BHA∗21]以了解自然语言处理、计算机视觉和其他领域中基础模型的介绍和概述。最后但并非最不重要的是,文本到图像(T2I)生成的爆炸性进展导致了大型语言模型(LLM)和扩散模型之间的内在联系;有兴趣的读者可以参考 [ZZL∗23]获取关于LLM的全面调查。 本报告涵盖了发表在《主要计算机视觉、机器学习和计算机图形会议论文集》上的论文,以及在arXiv上发布的预印本(2021- 2023)。本报告的作者根据其与本调查范围的相关性选择了论文,因为我们的目的是对视觉计算背景下扩散模型的快速进展提供一个全面的概述。然而,尽管本报告是特定领域中最先进的方法的列表,但我们不声称完整,并强烈建议读者参考引用的作品以进行深入的讨论和细节。 3. 扩散模型的基础 在本节中,我们简要概述扩散模型的基本原理。介绍了数学基础,以流行的稳定扩散模型为例,讨论了实际实现,然后概述了条件和指导的重要概念,然后讨论了与反演、图像编辑和定制相关的概念。本节涵盖了大量的参考资料,所以我们侧重于给读者一个清晰和高层次的概述,介绍二维图像背景下基于扩散的生成和编辑的最重要的概念。 3.1. 数学基础 假设我们有一个训练样本数据集,其中数据中的每个示例都独立于基础数据分布Pdata(x),我们希望用一个模型拟合到Pdata(x),以便通过从该分布中采样来合成新的图像。 去噪扩散模型推理一般流程是依次将随机噪声样本去噪为数据分布中的样本。考虑一系列的噪声水平σmax >… > σ0 = 0和相应的噪声图像分布p(x,σ)定义为向数据中添加具有方差σ^2的高斯噪声分布。对于足够大的σmax,噪声几乎完全掩盖了数据,p(x,σmax)实际上与高斯噪声无法区分。因此,我们可以对初始噪声图像xT ∼ N (0,σ2max)进行采样,并依次对其进行去噪,以便在每一步中xi ∼ p(x,σi)。这个采样链的端点x0根据数据分布。

量子计算 | 解密著名量子算法Shor算法和Grover算法

专栏集锦,大佬们可以收藏以备不时之需 Spring Cloud实战专栏:https://blog.csdn.net/superdangbo/category_9270827.html Python 实战专栏:https://blog.csdn.net/superdangbo/category_9271194.html Logback 详解专栏:https://blog.csdn.net/superdangbo/category_9271502.html tensorflow专栏:https://blog.csdn.net/superdangbo/category_8691332.html Redis专栏:https://blog.csdn.net/superdangbo/category_9950790.html AI机器学习实战: AI机器学习实战 | 使用 Python 和 scikit-learn 库进行情感分析 AI机器学习 | 基于librosa库和使用scikit-learn库中的分类器进行语音识别 Python实战: Python实战 | 使用 Python 和 TensorFlow 构建卷积神经网络(CNN)进行人脸识别 Spring Cloud实战: Spring Cloud实战 |分布式系统的流量控制、熔断降级组件Sentinel如何使用 Spring Cloud 实战 | 解密Feign底层原理,包含实战源码 Spring Cloud 实战 | 解密负载均衡Ribbon底层原理,包含实战源码 1024程序员节特辑文章: 1024程序员狂欢节特辑 | ELK+ 协同过滤算法构建个性化推荐引擎,智能实现“千人千面” 1024程序员节特辑 | 解密Spring Cloud Hystrix熔断提高系统的可用性和容错能力 1024程序员节特辑 | ELK+ 用户画像构建个性化推荐引擎,智能实现“千人千面” 1024程序员节特辑 | OKR VS KPI谁更合适? 1024程序员节特辑 | Spring Boot实战 之 MongoDB分片或复制集操作 Spring实战系列文章:

java中的String.format()方法详解

介绍 String.format() 是 Java 中的一个字符串格式化方法,它用于生成指定格式的字符串。这个方法可以接受一个或多个参数,并将它们按照指定的格式插入到字符串中。它使用了类似于 C 语言中的 printf 函数的语法。 String.format() 方法的使用格式如下: String.format(format, args) 其中,format 是一个包含格式说明符的字符串,用于指定输出的格式,args 是一个或多个要插入到格式字符串中的参数。 下面是一个简单的示例: String name = "John"; int age = 25; String message = String.format("My name is %s and I am %d years old", name, age); System.out.println(message); // 输出:My name is John and I am 25 years old 在这个示例中,%s 是一个字符串格式说明符,表示要插入一个字符串;%d 是一个整数格式说明符,表示要插入一个整数。name 和 age 是要插入的参数,它们分别被替换为字符串 “John” 和整数 25。最后,将生成的字符串打印出来。 除了 %s 和 %d 之外,String.format() 还支持其他格式说明符,例如 %f 表示浮点数、%c 表示字符、%n 表示换行符等等。可以参考 Java 官方文档了解更多关于 String.

前端vue-改造el-table,表头,表格(边框,背景色)

项目需求,表格只有最外面有边框,里面无分割线,且表头和表身的颜色不同 CSS代码如下 /* 表格内背景颜色 */ .tableMap ::v-deep .el-table th { //background-color: transparent !important; background-color: rgba(137, 42, 42, 0.5); border: none !important; //表格字体颜色 color: #ffffff; } /* 表格内背景颜色 */ // .tableMap ::v-deep .el-table th, .tableMap ::v-deep .el-table tr, .tableMap ::v-deep .el-table td { background-color: rgba(137, 42, 42, 0.1) !important; //background-color: rgba(137, 42, 42, 0.5); //表格字体颜色 color: #ffffff; } 关键点: 之前用过 >>> <<< deep,这些进行样式改进,都不行,发现得用 “表所在div名字 ::v-deep .el-table tr” 这样的格式才能更改。 额外内容: 除了在css中修改,还可以在以下代码中修改

Windows系统中,如何将Python添加到系统环境(图文教程)

报错提示: 在命令提示符中,输入“python”或“pip install pygame(安装库文件)”指令后,出现“'pip'不是内部或外部命令,也不是可运行的程序或批处理文件”报错。 报错原因: ①在安装Python时,未勾选“Add Python 3.x to Path”添加环境变量; ②安装多个Python版本软件(如PyCharm),设置的安装环境和运行环境不统一。 解决办法: ①需要把当前使用的Python软件的安装目录添加到系统环境中,添加成功后,重启命令提示框; ②若使用的是PyCharm,还可以通过软件的设置进行修改。 一、找到Python安装目录 1. 找到文件所在位置 方法一:在“桌面”中,右键点击“Python 3.x(x-bit)”快捷方式,选择“打开文件所在位置” 方法二: ① 在“开始”中,找到所安装的Python版本,右键点击“Python 3.x(x-bit)”,选择“打开文件位置” ② 在文件夹中,右键点击“Python 3.x(x-bit)”快捷方式,选择“打开文件所在位置” 2. 复制完整的安装目录 不同用户所安装位置不同,需要复制自己当前电脑的python安装目录,如“C:\Users\Janechel\AppData\Local\Programs\Python\Python312\” 二、添加Python环境变量 1. 适用所有Python软件 ① 搜索并打开“控制面板”,选择“系统和安全” ② 在“系统和安全”弹窗中,选择“系统” ③ 在“系统”弹窗中,选择“高级系统设置” ④ 在“系统属性”弹窗中,选择“环境变量” ⑤ 在“环境变量”弹窗中,点击“系统变量-Path”,再点击“编辑” ⑥ 在“编辑环境变量”弹窗中,点击“新建”,并粘贴之前找到的本机Python安装目录,如“C:\Users\Janechel\AppData\Local\Programs\Python\Python312\”,再点击“确认”关闭窗口 ⑦ 依次点击“确定”,关闭“环境变量”和“系统属性”窗口,完成将Python添加到系统环境。 ⑧ 最后,重启“命令提示框”,输入Python和所需安装的模块。 2. 仅适用于PyCharm ① 打开PyCharm,点击左上角“菜单”图标,出现菜单栏 ②在菜单栏中,点击“File(文件)”,选择“Settings(设置)” ③在“设置”弹窗中,找到“Project: pythonProject(项目:python项目)-> Project Interpreter(项目解释器)",点击右侧“下拉”,点击选择“Show All(显示所有)” ④在“Python编辑器”弹窗中,点击“+” ⑤在“添加Python编辑器”弹窗中,选择“System Interpreter(系统编辑器)”,点击“...” ⑥在“选择Python编辑器”弹窗中,粘贴之前找到的本机Python安装目录。特别注意,此时“OK”呈灰色无效,我们还需要再选择下一级“Python.exe”,这样的路径才是完整的,再点击“OK”保存设置并关闭窗口 ⑦ 依次点击“OK”,关闭所有设置窗口,完成设置默认Python的Path路径 ⑧ 最后,重启“命令提示框”,输入Python和所需安装的模块

WSL + Vscode一站式搭建Hadoop伪分布式 + Spark环境

Wsl + Vscode一站式搭建Hadoop + Spark环境 想要搭建Linux、Hadoop、Spark等环境,现在通常的做法是在VM、Virtualbox等软件上安装虚拟机 本文介绍在windows子系统(Windows Subsystem for Linux)上搭建相关环境并使用vscode进行Spark程序开发 Wsl环境准备 wsl安装文档详细请见<设置 WSL 开发环境 | Microsoft Learn> PowerShell中键入ubuntu即可进入wsl环境 注意到windows文件资源管理器已经多了一只小企鹅 搭建Hadoop伪分布式环境 资源准备 修改/opt目录权限: sudo chown -R yourname /opt # 以下的用户名xuxin替换为用户姓名. 在/opt目录下新建两个文件夹module 和 software /opt/software目录下准备jdk-1.8和hadoop-3.2.3 jdk:< Java Downloads | Oracle> hadoop:<Apache Hadoop> 将下载好的文件直接复制粘贴进/opt/software目录下 解压文件 tar -zxvf /opt/software/jdk-8u212-linux-x64.tar.gz -C /opt/module/ tar -zxvf /opt/software/hadoop-3.2.3.tar.gz -C /opt/module/ 配置ssh服务 安装ssh server sudo apt install openssh-server配置免密登录 cd ~/.ssh/ # 若没有该目录,先执行ssh localhost ssh-keygen -t rsa # 出现提示,全部回车即可 cat .

hadoop win11安装hadoop环境 winutils.exe获取,windows安装大数据运行环境 winutils文件获取,winutils文件 hadoop(十四)

注:有些win环境的大数据dll文件,winutils.exe需要积分下载,我没有积分,提供一份github链接 每个版本基本都有,挺全。 1. github地址: GitHub - cdarlint/winutils: winutils.exe hadoop.dll and hdfs.dll binaries for hadoop windows 2. 从上述链接,下载工程,复制出来自己的版本,我hadoop安装的3.3.4,这个github项目没有,所以复制的3.3.5版本一样能用;放入没有中文的路径内,然后配置环境变量 3.点击计算机,属性,找到环境变量地方: 4. 如图所示,在系统变量新增HADOOP_HOME 变量值为你自己从guthub 下载的文件,对应版本的路径,注意不要有中文,和空格 5. 还是在系统变量这个地方,找到PATH ,点击编辑: 如上图所示,新增一条: %HADOOP_HOME%\bin 6. 保存之后,重启机器。我的是保存之后,没有生效,重启之后,命令成功写入hdfs文件系统

前端获取后端接口的几种方式

前端获取后端数据的方式有多种,以下是常用的几种方式: 1. 使用Fetch API:Fetch API 是现代浏览器提供的一种网络请求API,可以使用 `fetch` 函数发送 HTTP 请求并处理响应。示例代码如下: ```javascript fetch('/api/user') .then(response => { if (!response.ok) { throw new Error('Network response was not ok'); } return response.json(); // 将响应解析为 JSON 格式 }) .then(data => { console.log(data); // 处理获取的数据 }) .catch(error => { console.error('Fetch error:', error); }); ``` 2. 使用XMLHttpRequest 对象:XMLHttpRequest 是一个老旧但广泛使用的网络请求对象。示例代码如下: ```javascript const xhr = new XMLHttpRequest(); xhr.open('GET', '/api/user'); xhr.onload = function() { if (xhr.status === 200) {

springboot整合SSE技术开发经验总结及心得

springboot整合SSE技术开发经验总结及心得 一、开发背景二、快速了解SSE1、概念2、特性 三、开发思路四、代码演示1、引入依赖2、服务端代码3、后端定时任务代码 4、解决乱码的实体类4、前端代码 五、核心代码分析 一、开发背景 公司需要开发一个大屏界面,大屏页面的数据是实时更新的,由后端主动实时推送数据给大屏页面。此时会立刻联想到:websocket 技术。当然使用websocket,确实可以解决这个场景。但是今天本文的主角是 :SSE,他和websocket略有不同,SSE只能由服务端主动发消息,而websocket前后端都可以推送消息。 二、快速了解SSE 1、概念 SSE全称 Server Sent Event,顾名思义,就是服务器发送事件,所以也就注定了他 只能由服务端发送信息。 2、特性 主动从服务端推送消息的技术本质是一个HTTP的长连接发送的是一个stream流,格式为text/event-stream 三、开发思路 要实现后端的实时推送消息,前台实时更新数据,思路如下: 1、前后端需要建立连接2、后端如何做到实时推送信息呢?可以采用定时调度 四、代码演示 1、引入依赖 原则上是不需要引入的,因为springboot底层已经整合了SSE <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> 2、服务端代码 controller层 @RestController @CrossOrigin @RequestMapping("/sse") public class SseEmitterController extends BaseController { @Autowired private SseEmitterService sseEmitterService; /** * 创建SSE连接 * * @return */ @GetMapping("/connect/{type}") public SseEmitter connect(@PathVariable("type") String type) { return sseEmitterService.connect(type); } } service层 public interface SseEmitterService { SseEmitter connect(String type); void volumeOverview(); void sysOperation(); void monitor(); .

2023最新版Python 3.12.0安装使用指南

2023最新版Python 3.12.0安装使用指南 The Tutorial of Installing the Latest Python Version 3.12.0 for Windows Python is a programming language that lets you work quickly and integrate systems more effectively. - www.python.org 1. 安装最新版Python 3.12.0 要进行Python软件开发,首先要安装Python软件包。 本文简要介绍的Python 3最新版3.12.0的安装过程,希望对您有所帮助。 首先,访问Python官网:https://www.python.org 在主页上方导航栏,选择Download,点击Python 3.12.0开始下载。 于是,Chrome浏览器开始下载安装包,在新版Chrome浏览器中,下载进程如下图: 当下载完毕时,在Windows 10/11的Downloads(下载)文件夹里,找到该安装程序:python-3.12.0-amd64.exe文件,双击启动安装向导。 为了防止C:盘文件因系统故障或者无意丢失,我们可能需要将Python安装到其它分区(例如D:),于是,选择点击Customize installation(定制安装),以便接下来选硬盘其它分区路径来安装Python。 保留默认勾选项“Use admin privileges when installing py.exe”(安装py.exe时使用管理员权限运行)。 在Optional Features(可选特性)对话框,保留默认勾选的四个选项,点击Next进入下一步。 在Advanced Options(高级选项)对话框中,增加选项Add Python to environment variables,即添加Python安装路径到环境变量;同时,为了使用便利,增加选项“Install Python 3.12 for all users”(为所有用户安装Python 3.12);然后,选择”Customize Install Location”(定制安装路径),修改默认路径到D:\Python312文件夹。 接下来,点击Install开始安装。 进入Setup Progress(安装过程), 如下图:

【WebSocket项目实战】聊天室(前端vue3、后端spring框架)

最近我学习了WebSocket,为了更好地掌握这一技术,我决定通过做一个项目来巩固学习成果。在这个项目中,我将使用JavaScript和WebSocket来实现实时通信,让客户端和服务器端能够实时地传递和接收数据。通过这个项目,我希望能够更深入地了解WebSocket的工作原理,并且能够在实际应用中灵活运用这一技术。 1.技术栈 前端:vue3 后端:spring 框架 2.项目实现 1. 前端 1.项目初始化 这里使用vue ui 创建vue 项目,具体步骤可以参考这篇文章 Vue ui 初始化项目 2.项目目录 自动生成的HelloWorld.vue文件可以删除,这里只用创建一个Chat.vue文件 3. 开发页面 项目选择了Ant Design来作为UI框架,直接去Ant Design官网上去拿一个自己看得上的组件即可。Ant Designg官网地址 进入网站后第一件事情是选择一个角色,本项目只提供了三个可选角色分别是 1.精神小伙 2.美女刺客 3. 屌丝青年 这里我们通过一个走马灯组件展示角色信息,直接在Ant Designg官网粘贴代码即可 <template> <div class="body"> <div class="character" v-if="isShow"> <a-carousel class="img" arrows :after-change="onChange"> <template #prevArrow> <div class="custom-slick-arrow" style="left: 10px; z-index: 1"> <left-circle-outlined/> </div> </template> <template #nextArrow> <div class="custom-slick-arrow" style="right: 10px"> <right-circle-outlined/> </div> </template> <div v-for="(item,i) in characterList" :key="i"> <img :src="item.url" alt="" mode="

Android OTA 升级入门篇

简介 第一次接手FOTA ,记录下app 端的实现过程,和一些基本概念,不对的地方,还望指正. Android FOTA 广义是Android 实现设备系统无线升级的全部过程和手段。如果一个设备无线升级的系统是完备的话,则一个FOTA过程主要包含以下工作: 1. 制作FOTA升级包:升级包一种可供设备实现系统更新升级的一个压缩包文件,解压缩后本质是各种img文件、被执行文件和一些配置信息等。Android升级时 会有对应的程序解析这个文件。 2. 测试FOTA升级包:在发布这个版本之后,需要测试设备是否可以进行无线升级,是否会出现问题。 3. 发布升级包:将FOTA升级包发给客户或者上传客户服务器 其实和app 升级是一个道理,下载-安装-重启生效 升级 google 已经为我们集成了升级方式,AB 升级和Recovery 升级,相对来说recovery 会进入系统recovery mode ,影响用户使用,而AB 升级是无感升级,两个slot 重启切换,不影响用户使用,体验更好. 目前android 11 默认是开启 virtural AB,对于上层来说其实没啥区别,都是调用updata_engine就可以了,参考了一部分文章,两者主要是super 分区的差异 bootloader_a bootloader_b boot_a boot_b vendor_boot_a vendor_boot_b dtbo_a dtbo_b vbmeta_a vbmeta_b super virtualAB 通过快照方式写入 super 分区,只保留一份 system product vendor AB 传统分区,两个slot system_a product_a vendor_a system_b product_b vendor_b app 实现 第一次接触的,可以参考packages/apps/Car/SystemUpdater android 系统为我们提供的demo 好了直接上代码,我把安装流程集成到service 里面.actvity 等要是想要进度条,实现 ResultReceiver,传递过来就可以了 /** 安装软件的服务 */ public class InstallService extends IntentService { private static final String TAG = "

SQL-多表查询-联合查询 union, union all

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、联合查询是什么?二、使用步骤三、使用场景及实例总结 前言 当我们需要跨多个表检索一个查询结果集时,SQL中的联合查询就十分有用了。在本文中,我们将研究什么是SQL联合查询,并提供使用场景和实例。 一、联合查询是什么? SQL联合查询(UNION)是用于从一个或多个表中检索数据的高级特性。通过联合查询,我们可以将多个SELECT语句的结果组合成一个查询结果集并返回给用户。但是,请注意,为了联接,每个查询都必须具有相同的列数和数据类型。 下面是一个简单的联合查询的语法: SELECT column1, column2, ... columnn FROM table1 UNION SELECT column1, column2, ... columnn FROM table2; 该查询将检索“ table1和table2” 中所有列的相同数据并组合起来返回结果。 二、使用步骤 语法: SELECT 字段列表 FROM 表A ... UNION [ALL] SELECT 字段列表 FROM 表B ... 注意事项: UNION ALL 会有重复结果,UNION 不会 联合查询比使用or效率高,不会使索引失效 三、使用场景及实例 SQL联合查询常用于以下情境: 需要将两个或多个查询结果组合起来成为一个结果集需要在其他列中检索时忽略重复行,而不是使用DISTINCT需要将结果按特定列进行排序 实例: 为了证明我们的观点,我们构建一个简单的数据库,包含4个表:学生(Students),课程(Courses),学生选课记录(StudentCourses),学生信息(StudentInfo)。 Students表包含学生的基本信息,Courses表包含所有可用的课程,StudentCourses表将选修某门课程的学生与该课程相关联,StudentInfo表则包含学生的详细信息。 现在,我们需要检索有关学生和课程的信息。具体来说,我们需要列出每个学生所学课程的名称,以及他们的学习成绩。 可以使用以下SQL查询这些数据: SELECT Students.Name, Courses.CourseName, StudentCourses.Score FROM Students, Courses, StudentCourses WHERE Students.Id = StudentCourses.StudentId AND Courses.Id = StudentCourses.

mysql的2059问题及解决方式

Navicat 连接 MySQL 8.0.11 时出现 2059 错误,可能由以下原因导致: MySQL 用户权限问题:在 MySQL 8.0.11 中,用户需要具有适当的权限才能连接到数据库。如果用户没有足够的权限,Navicat 将无法连接到 MySQL 服务器。MySQL 服务端配置问题:MySQL 服务端可能被配置为只允许来自特定 IP 地址的连接。如果 Navicat 尝试从其他 IP 地址连接,它将无法连接到 MySQL 服务器。网络问题:网络问题可能导致 Navicat 无法连接到 MySQL 服务器。例如,防火墙可能阻止 Navicat 与 MySQL 服务器进行通信。 以下是一些可能的解决方案: 检查 MySQL 用户权限:登录到 MySQL 服务器,检查连接 Navicat 的用户是否具有适当的权限。如果没有,请授予用户适当的权限。例如,授予用户所有数据库的所有权限: sql复制代码 GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost'; 修改mysql.ini文件 bind-address = 0.0.0.0 检查 MySQL 服务端配置:登录到 MySQL 服务器,检查服务端的配置文件(通常是 my.cnf 或 my.ini)。确保 MySQL 允许来自 Navicat 的连接。例如,确保以下行在配置文件中未被注释掉:检查网络设置:确保 Navicat 与 MySQL 服务器之间的网络连接是可用的。尝试在 Navicat 中连接到其他数据库,以检查网络是否正常工作。如果网络有问题,请联系网络管理员或 ISP。更新 Navicat:如果您使用的是较旧的 Navicat 版本,尝试更新到最新版本。新版本可能修复了与 MySQL 8.

Android App 启动流程学习

App启动 壹、App启动流程图贰、流程图详细解读2.1、系统操作Zygote 进程的孵化应用资源和类加载App在启动后立即显示应用的空白启动窗口创建应用进程 2.2、进程开始步骤3、ActivityThread 被加载到内存中步骤3.2、ActivityThread.main()步骤4、ActivityManagerService.attachApplication()步骤5.1步骤6.1、ApplicationThread.bindApplication()步骤7.1、ActivityThread.H 接收BIND_APPLICATIONLoadedApk.makeApplication()Instrumentation.newApplication() 步骤5.2、步骤6.2、ApplicationThread.scheduleLaunchActivity()步骤7.2、ActivityThread.H 接收LAUNCH_ACTIVITY 步骤8.2、handleLaunchActivityperformLaunchActivity 叁、API3.1、ActivityThread3.2、ApplicationThread3.3、ActivityManagerService3.4、ActivityStackSupervisor 参考地址 壹、App启动流程图 Android 更新后方法略不同,如下是8左右的源码。 https://www.jianshu.com/p/538dcfac774d 简述: 点击桌面应用程序图标时,Launcher的startActivity()方法通过Binder通信调用系统进程中的ActivityManagerService(AMS)的startActivity方法,启动应用程序。 系统进程(system_server)收到请求后,向Zygote进程发送创建应用程序进程的请求。 Zygote进程根据请求fork出应用程序进程,并执行应用程序的ActivityThread.main()方法。在此过程中,应用程序的主线程初始化了MainLooper和主线程Handler,并创建了ApplicationThread用于与AMS通信和协作。 应用程序进程通过Binder向system_server进程发送attachApplication请求。这实际上是应用程序进程通过Binder调用system_server进程中AMS的attachApplication方法,用于将ApplicationThread对象与AMS绑定。 system_server进程在收到attachApplication请求后,进行一些准备工作,然后通过Binder IPC向应用程序进程发送handleBindApplication请求(用于初始化Application并调用onCreate方法)和scheduleLaunchActivity请求(用于创建启动Activity)。 应用程序进程的Binder线程(ApplicationThread)收到请求后,通过Handler向主线程发送BIND_APPLICATION和LAUNCH_ACTIVITY消息。这里要注意的是,AMS和主线程并不直接通信,而是通过AMS和主线程的内部类ApplicationThread之间通过Binder通信,然后再通过Handler消息交互。 主线程收到消息后,创建Application并调用onCreate方法,然后通过反射机制创建目标Activity,并回调Activity的onCreate等方法。至此,应用程序正式启动,进入Activity的生命周期,依次执行onCreate、onStart、onResume方法,完成UI渲染并显示应用程序的主界面。 贰、流程图详细解读 2.1、系统操作 Zygote 进程的孵化 在应用启动之前,系统通常会先启动 Zygote 进程,Zygote 进程会在后台预加载一些系统类库和资源,以加速进程的创建。Zygote 进程在内部执行 main() 方法,创建 Android Runtime 环境,并等待新应用进程的请求。 应用资源和类加载 当用户启动应用或触发其他应用组件时,Zygote 进程会根据应用的包名加载应用的资源(如布局文件、字符串资源等)和类。Zygote 进程会充当应用进程的模板,根据应用的包名和所需的资源加载应用的代码和资源。 App在启动后立即显示应用的空白启动窗口 空白窗口由谁创建?? 在 Android 应用的启动过程中,这个短暂的背景通常是由系统自动创建和管理的,不需要开发者直接介入。具体来说,这个背景的创建和显示是由 Android 系统的窗口管理服务和系统框架负责处理的。 Android 系统会在应用启动时显示这个背景,以提供用户反馈并在后台进行应用的初始化。这个背景会在应用的主 Activity 准备好并开始显示用户界面之前显示。 开发者可以通过设置应用的主题和启动画面来自定义这个短暂的背景。主题和启动画面是应用外观和启动过程的一部分,允许开发者指定应用的标志、颜色、背景等。应用的主题和启动画面的设置可以在 AndroidManifest.xml 文件中进行定义。 总之,这个短暂的背景是由 Android 系统自动创建和管理的,以提供用户反馈和平滑的应用启动过渡。它不需要开发者直接创建或操作。 创建应用进程 应用进程(Application Process): 应用进程是 Android 操作系统中运行应用的一个独立的执行单元。 每个应用都运行在其自己的应用进程中,这意味着每个应用都有独立的内存空间,独立的虚拟机(Dalvik 或 ART),以及独立的运行环境。 应用进程负责执行应用的各个组件,如 Activity、Service、Broadcast Receiver 等。每个组件都在应用进程中运行。

C/C++条件编译:#ifdef、#else、#endif等

文章目录 #undef指令从C预处理器角度看已定义条件编译1.#ifdef、#else和#endif指令 #ifndef指令#ifndef指令通常用于防止多次包含一个文件程序使用#ifndef避免文件被重复包含 #if和#elif指令条件编译还有一个用途是让程序更容易移植 参考 程序员可能要为不同的工作环境准备C程序和C库包。不同的环境可能 使用不同的代码类型。预处理器提供一些指令,程序员通过修改#define的值 即可生成可移植的代码。#undef指令取消之前的#define定义。#if、#ifdef、 #ifndef、#else、#elif和#endif指令用于指定什么情况下编写哪些代码。#line 指令用于重置行和文件信息,#error指令用于给出错误消息,#pragma指令用 于向编译器发出指令。 #undef指令 #undef指令用于“取消”已定义的#define指令。也就是说,假设有如下定义: #define LIMIT 400 然后,下面的指令: #undef LIMIT 将移除上面的定义。现在就可以把LIMIT重新定义为一个新值。即使原 来没有定义LIMIT,取消LIMIT的定义仍然有效。如果想使用一个名称,又 不确定之前是否已经用过,为安全起见,可以用#undef 指令取消该名字的定 义。 从C预处理器角度看已定义 处理器在识别标识符时,遵循与C相同的规则:标识符可以由大写字 母、小写字母、数字和下划线字符组成,且首字符不能是数字。当预处理器 在预处理器指令中发现一个标识符时,它会把该标识符当作已定义的或未定 义的。这里的已定义表示由预处理器定义。如果标识符是同一个文件中由前 面的#define指令创建的宏名,而且没有用#undef 指令关闭,那么该标识符是 已定义的。如果标识符不是宏,假设是一个文件作用域的C变量,那么该标 识符对预处理器而言就是未定义的。 已定义宏可以是对象宏,包括空宏或类函数宏: #define LIMIT 1000 // LIMIT是已定义的 #define GOOD // GOOD 是已定义的 #define A(X) ((-(X))*(X)) // A 是已定义的 int q; // q 不是宏,因此是未定义的 #undef GOOD // GOOD 取消定义,是未定义的 注意,#define宏的作用域从它在文件中的声明处开始,直到用#undef指 令取消宏为止,或延伸至文件尾(以二者中先满足的条件作为宏作用域的结 束)。 另外还要注意,如果宏通过头文件引入,那么#define在文件中的位置 取决于#include指令的位置。 稍后将介绍几个预定义宏,如__DATE__和__FILE__。这些宏一定是已 定义的,而且不能取消定义。 条件编译 可以使用其他指令创建条件编译(conditinal compilation)。也就是说,

80份Python计算机毕业设计项目推荐(源码+论文+PPT)

80份Python计算机毕业设计项目推荐(源码+论文+PPT) 2024年最新计算机毕业设计,本科,项目汇总! 哈喽,大家好,大四的同学马上要开始做毕业设计了,大家做好准备了吗? 博主给大家详细整理了计算机毕业设计最新项目,对项目有任何疑问,都可以问博主哦 源码请在评论区私信哦 01:基于Python的大学教室资源管理系统的设计与实现 02:基于Python的餐饮供应链管理系统分析与设计 03:基于Python的美食推荐系统 04:基于Python的考场分配规划系统的设计与实现 05:基于Python的计算机科学研究话题管理系统的设计与实现 06:基于Python的蜂产品销售数据可视化系统的设计与实现 07:基于Python的定制化图书推荐系统设计与实现 08:基于OpenCV的网络课堂考勤监管系统的设计与实现 09:基于Python的农村振兴平台的设计与实现 10:基于Python的企业会员资源管理平台 11:基于Python的美食餐饮服务系统的设计与实现-爬虫 12:基于Python的学生宿舍管理系统 13:基于Python的房地产分析平台的设计与实现 14:基于Python的旅游数据可视化平台 15:校园人脸识别考勤管理系统的设计与实现 16:基于Python的空巢老人志愿服务平台 17:基于Python的考研调配系统 18:基于Python的高校教育教材信息管理系统的设计与实现 19:基于Python的车辆交易系统的设计与实现 20:基于Python协同过滤的新闻咨询推荐系统设计与实现 21:基于Python的个性化电影推荐系统设计与实现 22:基于Python的美食推荐系统 23:基于Python的图书馆控系统 24:校园人脸识别考勤管理系统的设计与实现 25:唯品会服装销售决策支持平台-爬虫 26:基于Python+Django的机票订购系统设计与开发 27:基于Python旅游导览系统的设计与实现-爬虫 28:基于Python的餐饮供应链管理系统分析与设计 29:基于Python的二手房数据分析与实际应用-爬虫 30:餐厅点餐系统 31:基于Python的在线房源识别系统的设计与实现 33:基于Python的医院挂号系统 34:基于爬虫的学生求职实时智能数据分析 35:基于Python的校园招聘服务平台 36:大学生网络自主学习的大数据分析与研究基础-爬虫 37:教学网站设计与实现 38:基于Python的汽车销售趋势分析系统-爬虫 39:基于Python的气象预报系统-爬虫 40:基于OpenCV的网络课堂考勤监管系统的设计与实现 41:基于Python的空巢老人志愿服务平台 42:基于Python的大学教室资源管理系统的设计与实现 43:基于Python技术的面部考勤微信小程序的设计与实现 44:基于爬虫实现数据可视化分析系统 45:基于Python的停车管理系统的设计与实现 46:基于Python的医疗机构药品及耗材信息管理系统 47:基于Python的图书馆借阅记录管理系统的设计与实现 48:基于Python的旅游数据可视化系统-爬虫 49:基于Python的酒店管理系统 50:基于Python的定制化图书推荐引擎设计与实现 51:基于Python的数据收集系统-爬虫 52:基于大数据的人才招聘数据分析与可视化系统-爬虫 53:基于Python实现潮流文化分享网站的设计与实现 54:旅游景点舆情监测系统-爬虫 55:基于Python的车辆交易系统的设计与实现 56:基于Python爬虫技术的对歌曲评论数据可视化分析系统 57:基于Python的考研调配系统-爬虫 58:大学生社会实践申报系统的设计与实现 59:基于Python的汽车代驾小程序系统 60:基于Python的比赛报名系统的设计与实现 61:数据检索系统研究与设计 62:基于Python的手机选购决策数据的分析与可视化-爬虫 63:基于Python的企业会员资源管理平台 64:基于Python的考场分配规划系统的设计与实现 65:基于Python的高校教育教材信息管理系统的设计与实现