[免费本地AI绘画工具Fooocus,新手入门必备~老手也会喜欢上它!]
安装好了FOOOCUS之后,打开网页链接后进入fooocus页面正式使用。目前FOOOCUS的最新版本是2.1862,这个版本已经很完善,目前不会有太大的修改。大家可以放心使用。
虽然经常有人问我要教程,但这个教程实在太简单了。请根据下文来自己学习。
3.1 文生图 输入输入提示词
点击生成
3.2 图生图
点击图像输入,点击放大或变化;
选择 变化的力度
点击生成四、图像高清放大
四、图像高清修复 输入相同图片对比效果。更接近原图的直接高清修复。 五、高级功能 controlnet controlnet入口:点击input image(图生图),点击Image Prompt (图像提示词)。
5.1 Image Prompt (ip-adapter) 上传图片-选择_Image Prompt_
1、仅用Image Prompt 输入,无提示词
2、提示词+Image Prompt 输入
你也可以自己尝试结合不同的controlnet和IP提示来实现不同的效果。 六、局部重绘画和图像外绘
6.1 局部重绘 点击Input Image
点击 Inpaint or Outpaint 上传图片
用鼠标涂抹 重绘的画面局部
点击生成
可以看出要重绘的内容进行了局部重绘
6.2 图像外绘 只需要选择外绘方向,高级设置-设置图片大小
构图立刻改变,实现基于原图内容进行基于原内容的外绘。
以上是基础教程,因为相比于SDWEBUI和comfyUI实在是太简单了,所以,个人认为fooocus是最适合新手的AI绘画工具。
写在最后 AIGC技术的未来发展前景广阔,随着人工智能技术的不断发展,AIGC技术也将不断提高。未来,AIGC技术将在游戏和计算领域得到更广泛的应用,使游戏和计算系统具有更高效、更智能、更灵活的特性。同时,AIGC技术也将与人工智能技术紧密结合,在更多的领域得到广泛应用,对程序员来说影响至关重要。未来,AIGC技术将继续得到提高,同时也将与人工智能技术紧密结合,在更多的领域得到广泛应用。
感兴趣的小伙伴,赠送全套AIGC学习资料和安装工具,包含AI绘画、AI人工智能等前沿科技教程,具体看下方。
一、AIGC所有方向的学习路线
AIGC所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。
二、AIGC必备工具
工具都帮大家整理好了,安装就可直接上手!
三、最新AIGC学习笔记
当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
四、AIGC视频教程合集
观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
五、实战案例
纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
若有侵权,请联系删除
Windows系统安装mongodb
1、下载安装包
2、安装mongodb
3、配置环境变量
4、运行mongodb
5、配置本地windows mongodb服务
6、修改配置文件
7、使用navicat等工具连接
1、下载mongodb安装包 到网站上下载相关版本即可
https://www.mongodb.com/try/download/community 2、安装过程 下载后双击,弹出安装界面,下图中Custom 可以指定安装位置
修改后点击next
默认 'Run service as Network Service user’即可,
先不安装图形化工具,否则时间会比较漫长;
安装完成
安装后的文件夹情况如下:
**
3、配置 MongoDB 数据库的环境 **
找到环境变量path,并打开路径,将自己的 MongoDB 的 bin 文件地址添加上去;
**
4、运行 MongoDB **
创建数据库文件的存放位置:
在data目录下,创建一个db文件夹; 类似于:‘D:\mongodb\data\db’;因为启动 MongoDB 服务之前需要必须创建数据库文件的存放文件夹,否则命令不会自动创建,而且不能启动成功;
启动 MongoDB 服务
打开 cmd 命令,找到安装 MongoDB 的 db 文件夹,输入命令,来启动MongoDB 服务;
mongod --dbpath D:\mongodb\data\db 在后续的输出中会找到端口号,默认为:27017端口;
然后再浏览器中输入地址和端口号为:
http://localhost:27017 若显示结果如下,就说明安装成功并结束;
5、配置本地 Windows MongoGB 服务 这样可设置为 开机自启动,可直接手动启动关闭,可通过命令行net start MongoDB 启动。该配置会大大方便;也不要在进入bin的目录下启动了;
动态规划2.0 动态规划 - - - 路径问题1. 不同路径2. 不同路径Ⅱ3. 珠宝的最高价值4. 下降路径最小和5. 最小路径和6. 地下城游戏 动态规划 - - - 路径问题 1. 不同路径 题目链接 -> Leetcode -62.不同路径
Leetcode -62.不同路径
题目:一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。
问总共有多少条不同的路径?
示例 1:
输入:m = 3, n = 7
输出:28
示例 2:
输入:m = 3, n = 2
输出:3
解释:
从左上角开始,总共有 3 条路径可以到达右下角。
向右->向下->向下向下->向下->向右向下->向右->向下 示例 3:
输入:m = 7, n = 3
输出:28
Windows11上开启Copilot助手教程+踩坑指南 Copilot介绍Copilot开启步骤1、更新系统2、更改语言和区域3、下载 ViVeTool 工具4、开启Copilot 使用 Copilot介绍 Windows Copilot 是 Windows 11 中的一个新功能,它可以让你与一个智能助理进行对话,获取信息,执行任务,甚至创造内容。Windows Copilot 使用了 Bing Chat 的技术,它是一个基于 OpenAI 的 GPT-4 模型的聊天机器人,可以理解自然语言,回答问题,生成图片,写作,编程等等。
Copilot开启步骤 1、更新系统 你需要确保你的电脑已经安装了 Windows 11 的22H2或其余最新版本,也就是 Insider Preview Build 23493 或更高版本。你可以在设置 > Windows 更新 > Windows 预览体验计划中加入 Insider 计划,并选择 Dev Channel 来获取最新的更新。如果你已经是 Insider 成员,你可以直接在 Windows 更新中检查更新,并安装最新的版本。
2、更改语言和区域 将地区更改为美国,需要确保你的电脑的区域和语言设置为美国和英语(语言中文亲测也可行)。这是因为 Windows Copilot 目前只支持英语,并且只在美国地区开放。打开设置-时间和语言-语言和区域,在国家与地区设置中选择美国。
3、下载 ViVeTool 工具 由于现在是Copilot预览版,我们需要使用ViVetool这个工具来开启Copilot(ViVeTool是一个开源的命令行工具,主要用于在Windows系统上启用实验性的最新功能)。打开下载链接,如果打不开可用国内连接,下载下图所示zip文件后在本地解压。
4、开启Copilot 解压得到如下文件夹文件
通过管理员权限(如直接打开cmd,则会出现如下错误)打开cmd命令行,进入解压文件夹。
通过管理员权限打开cmd命令行步骤:
Step1 Win+R
Step2 输入cmd
Step3 Ctrl+Shift+Enter
点击“是”进入cmd命令行
使用cd命令切换当前目录到解压的zip文件夹
在当前目录下运行如下命令,出现如下输出,即为设置成功,重启电脑后即可生效。
在Python中,type()函数是一个非常有用的工具,它可以查看变量或对象的数据类型。了解如何使用type()函数对于编写高质量的Python代码非常重要,因为它有助于确保程序按预期运行,避免潜在的错误和异常。本文将深入探讨type()函数的用法,提供详细的示例代码,并讨论其在Python编程中的实际应用。
什么是type()函数? type()函数是Python内置的函数之一,它用于获取一个对象的数据类型。
一般语法如下:
type(object) 其中,object是您要检查其类型的变量或对象。type()函数将返回一个表示对象类型的类型对象。
基本用法 从最基本的用法开始,使用type()函数来检查一些常见的数据类型。
1. 检查整数类型 num = 42 print(type(num)) # 输出:<class 'int'> 在上面的示例中,创建了一个整数变量num,然后使用type()函数检查它的类型。结果表明,num的类型是int,这表示它是一个整数。
2. 检查浮点数类型 pi = 3.14159 print(type(pi)) # 输出:<class 'float'> 这次创建了一个浮点数变量pi,并再次使用type()函数来检查它的类型。结果显示pi的类型是float,这表示它是一个浮点数。
3. 检查字符串类型 name = "Alice" print(type(name)) # 输出:<class 'str'> 在这个示例中,定义了一个字符串变量name,然后使用type()函数查看它的类型。结果显示name的类型是str,表示它是一个字符串。
4. 检查列表类型 fruits = ["apple", "banana", "cherry"] print(type(fruits)) # 输出:<class 'list'> 这次创建了一个列表变量fruits,并使用type()函数来确定它的类型。结果表明,fruits的类型是list,这表示它是一个列表。
5. 检查字典类型 person = {"name": "Bob", "age": 30} print(type(person)) # 输出:<class 'dict'> 在这个示例中,定义了一个字典变量person,并使用type()函数查看它的类型。结果显示person的类型是dict,这表示它是一个字典。
6. 检查布尔类型 is_happy = True print(type(is_happy)) # 输出:<class 'bool'> 这次创建了一个布尔变量is_happy,并使用type()函数来确定它的类型。结果显示is_happy的类型是bool,这表示它是一个布尔值。
概述:本文详解了在C#中使用HttpClient发送HTTP请求的全面指南,包括GET、POST请求、文件上传和下载,以及设置Authorization、cookie等操作,为实现网络操作提供了清晰的方法和示例。
1. 说明 HttpClient是C#中用于发送HTTP请求的类,基于HttpClient的异步模型,可以实现GET、POST请求,处理响应数据,上传和下载文件,以及设置Authorization、cookie等。
2. 方法说明 2.1 发送GET请求 using (HttpClient client = new HttpClient()) { HttpResponseMessage response = await client.GetAsync("https://example.com/api/resource"); // 处理响应 } 2.2 发送POST请求 using (HttpClient client = new HttpClient()) { var content = new StringContent("data to send", Encoding.UTF8, "application/json"); HttpResponseMessage response = await client.PostAsync("https://example.com/api/resource", content); // 处理响应 } 2.3 上传文件 using (HttpClient client = new HttpClient()) { var content = new MultipartFormDataContent(); content.Add(new ByteArrayContent(File.ReadAllBytes("file.txt")), "file", "file.txt"); HttpResponseMessage response = await client.
Java的23种设计模式 一、创建型设计模式1.单例模式 singleton1.1.静态属性单例模式1.2 静态属性变种1.3 基础的懒汉模式1.4 线程安全的懒加载单例1.5 线程安全的懒加载 单例-改进1.6 双重检查锁1.7 静态内部类1.8 枚举单例1.9 注册表单例 2.工厂方法模式 factory3.抽象工厂模式 factory4.建造者模式 builder5.原型模式 prototype 二、结构型设计模式1.适配器模式 adapter1.1 类适配器模式1.2 对象适配器模式(接口适配器) 2.桥接模式 bridge3.组合模式:Composite /ˈkɒmpəzɪt/4.装饰模式 Decorator /ˈdekəreɪtə(r)/5.代理模式 proxy5.1 静态代理5.2 JDK动态代理5.3 CGLIB动态代理 6.外观模式 facade /fəˈsɑːd/7.享元模式 Flyweight /ˈflaɪweɪt/ 三、行为型设计模式1.解释器模式2.模版方法模式 template method3.责任链模式 chain of responsibility4.命令模式 command5.迭代器模式 iterator6.中介者模式 mediator /ˈmiːdieɪtə(r)/7.备忘录模式 memento /məˈmentəʊ/8.观察者模式 observer /əbˈzɜːvə(r)/9.状态模式 state10.策略模式 strategy /ˈstrætədʒi/11.访问者模式 visitor 设计模式就是对优良设计的总结,固化下来的写法,是业界公认的优雅设计。 一、创建型设计模式 1.单例模式 singleton 单例模式常见的不同写法有八种之多,真正完美无缺的只有一种枚举单例。其他单例都存在些许问题,但一般不会有人去用枚举来写单例,因为很怪,本来只是要搞个单例结果整了个枚举,我也不是太偏向这么写,一般使用:双重检查锁、静态内部类、静态属性三种写法都是可以接受的。我们经常使用的Spring框架的单例模式是从静态属性的单例模式变化而来,被称为注册表单例模式,后面也会说下。
1.1.静态属性单例模式 加载方式:饿汉
优势:无线程安全问题
唯一缺点:饿汉加载,存在加载不使用的可能,不使用则浪费内存(感觉其实不是事)
public class Single1 { private static final Single1 singleton = new Single1(); // 核心点是私有化构造器,让外部无法进行新对象创建 private Single1() { } public static Single1 getInstance() { return singleton; } } 1.
在新版本的sas(1.2.1)中获取token更新了授权码校验逻辑,只能用form-data传递参数,使用url-params会失败,原因见issue1451
对应的 commit 在这里: Fix to ensure endpoints distinguish between form and query parameters
前言 文章较长,步骤比较繁琐,请各位读者耐心观看。
上篇文章大概了解了下框架的相关理论,本篇文章将带大家一步步构建一个简单的认证服务器
开始之前先放一下文档的链接:官网文档
项目环境要求(当前框架版本1.1.0) Spring Boot版本大于等于3.1.0-RC1JDK版本大于等于17 认证项目搭建 1. 在Idea中或Spring Initializr中创建spring boot项目 Spring Boot版本选择3.1.0,Java版本选择17以上,在Dependencies中勾选Spring Authorization Server和spring web依赖,其它看自己需要
引入持久层框架(本人用的是MybatisPlus,读者可自选)
<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.3.1</version> </dependency> 引入webjars和bootstrap,自定义登录页和确认页面时使用
<dependency> <groupId>org.webjars</groupId> <artifactId>webjars-locator-core</artifactId> </dependency> <dependency> <groupId>org.webjars</groupId> <artifactId>bootstrap</artifactId> <version>5.2.3</version> </dependency> 项目pom.xml示例
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.1.0</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.
💂 个人网站:【 海拥】【神级代码资源网站】【办公神器】🤟 基于Web端打造的:👉轻量化工具创作平台一款不错的代理IP服务提供商可加微信联系:dailiyun1226💅 想寻找共同学习交流的小伙伴,请点击【全栈技术交流群】 直接跳到末尾 获取免费代理ip
在网络爬虫的世界中,使用代理IP是一项关键的技术,可以提高爬虫的效率、降低被封禁的风险,并实现更广泛的数据采集。本文将深入探讨如何有效地使用代理IP进行网络爬虫,解决反爬虫机制带来的挑战,提高数据获取的成功率。
1. 代理IP的基础知识 代理IP作为网络爬虫领域的一项关键技术,具有许多重要的基础知识,它是实现爬虫隐匿性、提高稳定性和绕过反爬虫机制的重要工具。在本节中,我们将深入了解代理IP的基本概念以及它在网络爬虫中的作用。
1.1 代理IP的定义与作用 代理IP指的是位于互联网上的一台中间服务器,它充当了爬虫与目标服务器之间的中介角色。通过使用代理IP,爬虫可以隐藏真实的IP地址,使得对目标服务器的请求看起来是来自代理服务器而非爬虫本身。这种方式带来了以下几个主要的作用:
1. 隐藏真实IP地址: 通过使用代理IP,爬虫可以隐藏其真实的IP地址,增强匿名性,防止被目标服务器追踪。
2. 分散请求: 代理IP允许爬虫通过多个不同的IP地址发送请求,有效地分散了请求负载,降低了单个IP的请求频率,减轻了对目标服务器的压力。
3. 绕过访问限制: 有些网站对特定IP或IP段进行了访问限制,使用代理IP可以帮助爬虫绕过这些限制,获取被封锁的内容。
1.2 代理IP的工作原理 代理IP的工作原理涉及到爬虫、代理服务器和目标服务器之间的协同作用。在使用代理IP的过程中,爬虫发送HTTP请求不再直接到达目标服务器,而是先经过代理服务器,再由代理服务器向目标服务器发起请求。
具体工作流程如下:
爬虫通过代码设置代理IP,包括代理IP的地址和端口信息。爬虫发送HTTP请求时,请求首先被发送到代理服务器。代理服务器接收请求后,将请求再次发送到目标服务器。目标服务器响应代理服务器的请求,代理服务器再将响应返回给爬虫。 这个过程中,目标服务器只能看到代理服务器的IP地址,而无法获取到爬虫真实的IP地址。这种中间层的存在使得代理IP成为维护爬虫隐匿性的关键因素。
1.3 代理IP的分类 代理IP可以根据其匿名性和使用方式进行分类。以下是一些常见的代理IP分类:
1. 透明代理: 不隐藏真实IP,仅用于访问控制。
2. 匿名代理: 隐藏了真实IP,但仍然向目标服务器透露了自己是代理。
3. 高匿代理(Elite代理): 完全隐藏了真实IP,目标服务器无法识别请求是通过代理发送的。
4. 公共代理: 免费提供的代理IP,通常稳定性较差,适用于简单任务。
5. 私密代理: 通过购买或租用的代理IP,通常提供更稳定和高质量的服务。
1.4 代理IP的使用注意事项 在使用代理IP时,需要注意一些重要的事项,以确保爬虫活动的合法性和可持续性:
1. 遵守网站规则: 爬虫应遵循目标网站的使用规则,不得进行违法或滥用的活动。
2. 谨慎选择代理IP: 选择稳定、高匿名性的代理IP,避免使用可能引起目标服务器注意的公共代理。
3. 代理IP的定期更换: 定期更换代理IP,防止被目标服务器封禁。
4. 避免过于频繁的请求: 控制爬虫请求的频率,避免对目标服务器造成过大的负载。
5. 处理代理IP的异常情况: 实现异常处理机制,及时处理代理IP失效或被封禁的情况。
通过理解代理IP的基础知识,爬虫可以更好地利用这一技术来提高自身的匿名性、稳定性,并有效地绕过一些反爬虫机制,实现更为顺畅的数据采集。接下来,我们将深入探讨如何获取可用的代理IP。
2. 如何获取代理IP 获取可用的代理IP是使用代理的第一步。我们可以通过免费代理IP网站或付费代理IP服务提供商获取IP地址。给大家推荐一款不错的代理IP服务提供商,可加微信 dailiyun1226 联系。在代码中,我们可以使用请求库(例如Requests)来发送HTTP请求,获取代理IP列表。
目录
一、ChatGPT和文心一言大模型的对比分析
1.1 二者训练的数据情况分析
1.2 训练大模型数据规模和参数对比
1.3 二者3.5版本大模型对比总结
二、ChatGPT和文心一言功能对比分析
2.1 二者产品提供的功能情况分析
2.2 测试一下各种功能的特性
2.2.1 文本创作能力
2.2.2 代码功能
2.2.3 画图功能
三、总结
前言:
ChatGPT和文心一言都是基于大模型驱动的AIGC产品,由于两者训练的基础数据不同,造成了两者功能和性能上的差异。
本文将分析两者大模型的区别,然后测试二者功能和性能上的差异。
一、ChatGPT和文心一言大模型的对比分析 对于ChatGPT和文心一言,市场上免费的最高大模型版本都是3.5,想要对比二者的区别,就要从二者大模型训练的数据集和模型参数上分析。
1.1 二者训练的数据情况分析 我们来问一下两个产品训练数据来源?
ChatGpt的回答:
文心一言的回答:
1.2 训练大模型数据规模和参数对比 问一下训练数据量级和模型参数量级?
ChatGpt回答:
GPT3.5大模型几百亿的参数量级;用于训练数据规模大,具体未知。
文心一言回答:
文心一言3.5大模型参数没有在官网找到,推论不超过千亿;用于训练清洗好的数据集有数十亿。
1.3 二者3.5版本大模型对比总结 这里我们问的是两者训练的数据量级;ChatGpt回答的是有数百亿的参数,文心一言回答的是原始数据量级;这里补充个概念B(十亿),表示用于大模型训练的参数量。
训练数据集:ChatGpt从论文、GitHub、模型、Facebook的对话数据集、SOTA38.5万个对话的高质量数据等作为训练数据,数据集很大,但具体详情数据未知;文心一言从网络、新闻、博客等清理出数十亿处理后的数据作为数据集;
模型参数:ChatGpt3.5大模型有数百亿的参数,几十B;文心一言大模型的参数没有说明,推论有几百亿的参数。
两个3.5版本大模型,从训练数据量和数据参数大小问答没有具体的指标;能从数据来源知道ChatGPT的训练数据更丰富,模型参数上没有详细的数据指标对比。
二、ChatGPT和文心一言功能对比分析 两个产品面向应用市场,可以免费使用的最新功能和性能对比分析。
2.1 二者产品提供的功能情况分析 ChatGpt回答:
文心一言回答:
总结:两者都能提供问答交流、文本创作、学科知识等交流; ChatGpt能提供编程辅助,文心一言能提供图片生成功能;
2.2 测试一下各种功能的特性 2.2.1 文本创作能力 写一首描述人工智能的七言绝句:
ChatGpt回答:
第一次写:
在芯片雄伟展神威,智慧涌动若潮汐。
代码谱写奇迹歌,铸就未来数千纸。
第二次写:
电流流转翼智慧,机械心灵识未来。
代码舞动奇思妙,数算世间新秩序。
文心一言回答:
第一次写:
智能光芒照万方,人勤智慧是吾邦。
能描妙境超凡俗,画出未来入梦乡。
第二次写:
智能科技耀乾坤, 创新发展势如虹。
#一.修改pom文件
排除tomcat <dependency> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> </dependency> 添加tongweb依赖 <properties> <tongweb.version>7.0.E.5</tongweb.version> </properties> <dependency> <groupId>com.tongweb.springboot</groupId> <artifactId>tongweb-spring-boot-starter-2.x</artifactId> <version>${tongweb.version}</version> </dependency> <dependency> <groupId>com.tongweb.springboot</groupId> <artifactId>tongweb-spring-boot-starter-2.x</artifactId> <version>${tongweb.version}</version> </dependency> <dependency> <groupId>com.tongweb</groupId> <artifactId>tongweb-embed</artifactId> <version>${tongweb.version}</version> </dependency> #二.修改application.yml文件
server.tongweb.license.type = file server.tongweb.license.path=classpath:license.dat 1.注释掉原来tomcat的相关配置
2.添加tongweb的相关配置
3添加tongweb的本地认证配置,将认证文件license.dat放到resources文件夹下
当配置项 server.tongweb.license.type = file 时,表示 license 认证方式为本地认证
通过配置项 server.tongweb.license.path 来配置文件的存放路径。
大家好,今天用SpringBoot、vue写了一个仿ChatGPT官网聊天的打字机效果。
所有代码地址:gitee代码地址 ,包含前端和后端,可以直接运行
使用本技术实现的项目:aicnn.cn,欢迎大家体验
如果文章知识点有错误的地方,请指正!大家一起学习,一起进步。
本文主要应用的技术有:SpringBoot、Vue、Reactive、WebFlux、EventSource等,学习和练手的好项目。实现效果如下:
准备好了吗,let’s get it!
采用本文技术实现的前后端项目,点击体验使用:aicnn.cn
文章目录 前言 项目运行SSE技术概览什么是Server-Sent Events?SSE与WebSockets的区别为什么选择SSE?SSE的应用场景 在Spring Boot中实现SSE设置SSE处理连接和事件处理异常和断开连接一些实用的提示 Vue前端对SSE的处理在Vue中接收SSE保证流畅的用户体验异常处理和重连小结 实际案例分析:实时通知系统场景描述为什么选择SSE?实现概览体验优化可能的挑战 结语 前言 Web开发的世界永远充满惊喜,不是吗?每当我们认为自己掌握了所有的技巧和工具,总会有新的技术出现,挑战我们的知识库。今天,我们要探讨的这项技术可能对一些人来说并不陌生,但对于其他人来说,则像是新发现的宝藏。没错,我在说的是Server-Sent Events(SSE)。
你可能会问:“SSE是什么?”简单来说,SSE是一种让服务器实时向客户端发送更新的技术。但别误会,这不是另一个WebSockets。SSE和WebSockets之间的斗争,有点像是电影《星球大战》中的帝国和反抗军的斗争——两者都有其优势和用武之地,但战场完全不同。SSE是为了解决特定类型的实时通讯问题而生,而不是为了取代WebSockets。
在本文中,我们将一探究竟,看看SSE到底是什么魔法,以及如何在Spring Boot应用程序和VUE中轻松实现它。当然,我们也不会忘记前端的小伙伴们——我们将一起探索如何在Vue应用中接收和处理这些实时数据,并一起实现类似ChatGPT官网的聊天打字机效果。准备好了吗?让我们开始这趟探索之旅吧!
项目运行 所有代码地址:代码地址 ,包含前端和后端,可以直接运行。
springboot安装依赖,并设置对应的sd-key即可:
api key 的获取方式如下:
第一步:打开aicnn.cn第二步:进入设置页面第三步:点击创建新的秘钥第四步:复制密钥值,替换上面代码中的sk-*******,替换后的代码如下所示: .header("Authorization", "Bearer sk-1234567890123456789") 前端项目采用vue3实现,
在项目中,使用如下命令运行项目,即可运行前端:
yarn install yarn serve SSE技术概览 什么是Server-Sent Events? 在深入探索Server-Sent Events(SSE)之前,让我们先搞清楚它到底是什么。简单地说,SSE是一种允许服务器主动向客户端发送信息的技术。与传统的请求-响应模式不同,SSE建立了一个单向通道,使得服务器可以实时发送更新。这听起来有点像WebSockets,但SSE的工作方式和用例却大有不同。
SSE与WebSockets的区别 SSE和WebSockets都是实现实时通信的技术,但它们各有千秋。WebSockets提供了一个全双工的通信渠道,允许数据在客户端和服务器之间双向流动。相比之下,SSE是单向的——仅从服务器到客户端。这意味着如果你需要从客户端向服务器发送数据,SSE可能就不是最佳选择了。SSE的优势在于它的简单性和轻量级,特别适用于那些仅需要服务器单向传送数据的场景,比如实时新闻更新、股票行情等。
为什么选择SSE? 现在你可能在想:“为什么我要使用SSE而不是其他技术?”好问题!首先,SSE在浏览器中有很好的支持,这使得它非常容易实现。其次,由于SSE是基于HTTP的,它可以利用现有的HTTP协议特性,如缓存、认证等。这些特性在WebSockets中可能需要额外的处理。最后,SSE的轻量级特性使其成为一种高效的实时数据传输方式,尤其是当你只需要服务器到客户端的单向数据流时。
SSE的应用场景 SSE最适合的是那些需要服务器定期或不定期推送信息到客户端的场景。例如,如果你正在开发一个需要显示实时消息、股票行情或任何形式实时数据的应用,SSE是一个不错的选择。它的轻量级和易用性使其成为这些类型应用的理想选择。
在Spring Boot中实现SSE 设置SSE 在Spring Boot中实现SSE并不复杂。其核心在于使用Spring框架的webflux。使用webflux类能够创建一个持久的连接,使服务器能够向客户端发送多个事件,而无需每次都建立新的连接。
先在pom中引入相关依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-webflux</artifactId> </dependency> 然后需要在Controller中创建一个方法来返回Flux实例。这个方法将被映射到特定的URL,客户端将使用这个URL来接收事件。
package cn.
基本于Python语言 和 Selenium框架,使用PyCharm 开发环境,详细介绍自动化测试环境的搭建 以及 基本的使用方法。
一、安装Python环境 Python环境目前已被大部分主流操作系统所支持,比如在Linux、Mac、Unix等系统上就自带了Python环境,但在Windows系统上目前还需要自己安装,(当然如已经安装过了的话,这步可以直接跳过)。
1、下载Python Python下载地址:https://www.python.org/downloads
根据自己的需求下载对应的Python版本,一般进入官网的下载地址默认是最新版。
点击Downlad Python 3.11.2 按扭后,进入下载页面,选择自己想要安装的版下载
2、安装Python 点击下载好的python-3.11.3-amd64.exe可执行文件,进入Python安装对话界面,选择各安装项,如:Documentation文档、pip包管理工具(必选)、tcl/tk等(一般全都选上)、配置安装路径(这里选择安装在D盘的Program Files (x86)目录下,[因为一般Windows系统默认C盘为系统盘,所以将软件安装在其他盘如:D盘])。
根据提示 Next 直到安装完成后,在命令窗口中输入 python --version 命令测试是否安装成功(注:若提示python命令不存在,先去检查否是有配置path环境变量(环境变量配置方法),如果path中没有配置python可手动将如下python路径添加到path中,或配置了没生效需要重启一下电脑即可)。
python --version # 或 py --version Python 3.11.3 # 显示版本号则表示安装成功! # 输入python命令 或 py命令 按回车键 python # 进入如下python命令模式 Python 3.11.3 (tags/v3.11.3:f3909b8, Apr 4 2023, 23:49:59) [MSC v.1934 64 bit (AMD64)] on win64 Type "help", "copyright", "credits" or "license" for more information. >>> 3、安装pip包管理工具 注:如果已安装过pip包管理工具的话,此步也可直接路过(一般在安装Python环境时,可以在安装配置项中勾选上pip,这样在安装Python环境时自动将pip也安装上了),以下是没有过安装pip的安装步骤!
今天分享一款适合小说推文AI创作神器,
哪怕你是一个纯小白,只需要简单的复制粘贴,
五分钟就可以生成一条这样的小说推文动漫视频,
100%原创漫画视频,而且这类视频现在的平台流量也是比较大的。
操作步骤如下:
打开爱推文(下载方法在文章后面)
1、打开爱推文主页面,
点击最上面的文章转AI动画,
将复制好的小说文章内容粘贴到这里,
2、选择适合的画面风格,
需要根据你所选择的小说推文类别,
可选风格有:二次元、都市、古风、悬疑惊悚、二次元古风、绘本、2.5D
3、设置配音员、语速、尺寸、字幕、背景音乐
4、设置标题/关键词
关键词/标题会展示在视频中,可以直接填写你申请的“关键词”,
也可以从文章内容提炼出“有吸引了的一句话”
5、点击下一步
AI会自动将小说的文章内容进行分割成一句话,然后再将每一句自动生成AI画面。每一句话就是一个画面场景,每个场景描述不超过200字,而且你还可以将每个场景里面的文字进行再次分割,将鼠标移动到需要分割的地方直接回车即可。另外也可以把上下场景的文章进行合并(合并后的文章不能超过200字),点击页面场景右边的“虚线箭头”即可完成合并。
6、以上步骤完成按照提示点击“下一步”
接下来你可以不用管了,等待AI自动生成即可。
在可预见的未来,随着AI大范围在职场推广,使用门槛降低,部分还在做重复工作的打工人会不可避免地被取代。
这也是为什么身边越来越多人都在学AI。
负责任地说,这是AI离普通人超近的一次。它——
很简单: 只要你有一个浏览器,登录一个网页,会打字、会聊微信就能够直接使用。
很实用: 任何上班族,无论你的工作涉及文字、图片、数字,或是办公软件全家桶,它都能成为你的高效助理。
很聪明: AI如同一个六边形战士,当你有个绝妙点子,它能随时点亮技能树,用编程、写作、绘画技能把你的想法落地。
随着人工智能的推广,具备AI技能的人将更容易适应未来岗位需求,成为早期吃到红利的稀缺人才。
早点开启AI学习,给自己的人生来个翻天覆地的变化吧!
如果你也对AI技术感兴趣感兴趣,可以下方扫码免费领取一份AI技术入门资料包wx扫描二v码免费领取【保证100%免费】
前言:
💥🎈个人主页:Dream_Chaser~ 🎈💥
✨✨专栏:http://t.csdn.cn/oXkBa
⛳⛳本篇内容:c语言数据结构--C语言实现栈
目录
什么是栈
栈的概念及结构
实现栈的方式
链表的优缺点:
顺序表的优缺点:
栈的实现
a.头文件的包含
b.栈的定义
c.接口函数 接口函数的实现
1.栈的初始化
2.销毁栈
3.入栈
4.检测栈是否为空
5.出栈
6.获取栈顶元素
7.获取栈中有效元素个数
完整代码
Test.c
Stack.h
Stack.c
什么是栈 栈的概念及结构 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。 进行数据插入和删除操作的一端称为 栈顶 ,另一端称为 栈底 。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。 压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在 栈顶。 出栈:栈的删除操作叫做出栈。 出数据也在 栈顶。 栈的结构: 实现栈的方式 实现栈的方式有两种: 顺序表和链表
链表的优缺点: 优点:
1、任意位置插入删除O(1)
2、按需申请释放空间
缺点:
1、不支持下标随机访问
2、CPU高速缓存命中率会更低
先说链表实现栈的缺点:
额外内存开销:链表实现的栈需要为每个节点分配内存空间来存储数据和指针。相比于数组实现的栈,链表实现需要额外的内存开销来维护节点之间的指针关系,可能导致内存碎片化。
动态内存分配:链表实现的栈需要通过动态内存分配来创建和释放节点。这涉及到频繁的内存分配和释放操作,可能导致内存管理的复杂性和性能开销。在某些情况下,可能会出现内存分配失败或内存泄漏的问题。
指针操作开销:链表实现的栈需要通过指针进行节点之间的连接操作。这包括插入和删除节点时的指针修改,可能涉及到多个指针的更新。相比于数组实现的栈,链表实现的栈需要更多的指针操作,可能会带来一定的性能开销。
随机访问的限制:链表是一种顺序访问的数据结构,无法像数组一样通过索引进行随机访问。如果需要在栈中进行随机访问元素,链表实现的栈可能不太适合,而数组实现的栈更具优势。
顺序表的优缺点: 优点:1、尾插尾删效率不错。
2、下标的随机访问。
3、CPU高速缓存命中率会更高
缺点:
1、前面部分插入删除数据,效率是O(N),需要挪动数据。
2、空间不够,需要扩容。a、扩容是需要付出代价的b、一般还会伴随空间浪费。
顺序表实现栈的优点
内存连续性:顺序表在内存中是连续存储的,相比于链表的动态内存分配,顺序表的元素在物理上更加紧凑。这样可以减少内存碎片化,提高内存的利用效率。
随机访问:顺序表可以通过索引直接访问栈中的元素,具有随机访问的能力。这意味着可以快速访问栈中任意位置的元素,而不需要遍历整个链表。
@Auto: lyyyyy_16
@Date: 2023/03/13 16:48
@Version: 1.0
Autolabelimg自动标注工具 前言 在做机器视觉有监督方面,通常会面对很多数据集,然后去进行标注,而有些时候我们面对庞大数量数据集的情况下也会感到十分头疼,这个时候Autolabelimg这个自动标注神器就应运而生了。让我们可以实现批量处理图片和标注文件。
一、 工具原理和功能 1. 原理 这个工具的原理十分简单,它是基于labelimg标注软件的改良版,利用已标注好的图片进行训练,比如说我们有1w张数据需要去进行标注,这个时候我们就不可能把这1w张数据挨个挨个标注完,当然有些肝帝的情况当我没说哈;好了不开玩笑继续下文讲解,我们可以选择把这1w张数据先标注个1k张或者2k张等一部分,然后将这些已标注数据拿来进行训练,最后将训练出的模型导入我们的工具中,在启动它的标注开关,他会根据模型去识别剩下的数据,还可以选择需要自动标注的类别,识别出来之后得到坐标点信息,然后保存为xml或者voc文件,如此一来便可以实现自动标注。
2. 功能列表 AutoLabelImg 除了labelimg的初始功能外,额外包含十多种辅助标注功能,分别在Annoatate-tools和Video-tools两个新菜单栏下面,具体如下:
• 自动标注:基于yolov5的模型自动标注,将yolov5的检测结果转化为.xml标注文件
• 追踪标注:基于opencv的追踪模块实现的视频自动标注,标注开始的一帧,利用追踪预测后续的一段视频
• 放大镜:鼠标附近区域的放大展示,方便标注一些微小目标,放大镜功能可以选择开启或关闭
• 数据增强:随机使用平移,翻转,缩放,亮度,gama,模糊等手段增强图片
• 查询系统:十多种新功能,不知道是干嘛的?没关系,搜索一下就可以了,支持模糊搜索
• 其他批量处理工具如:类别筛选/重命名/统计、标注文件属性校正、视频提取/合成、图片重命名等。
二、 实战 本人使用环境:win10 + cuda11.6 + torch1.12.0(GPU版本) + torchvision 0.13.0
好了废话不多说开始实战。
1. 下载与安装 GitHub源码链接:
https://github.com/wufan-tb/AutoLabelImg.git 复制源码链接,然后打开git clone即可:
git clone https://github.com/wufan-tb/AutoLabelImg.git 这是下载完成的Autolabeling文件夹下所有文件,长这样:
安装方法也可以参照项目仓库中的readme
2. 配置环境 文章有自带的requirements.txt文件,cd进入demo的文件夹,直接pip install –r requirements.txt 即可,需要注意的是,我之前通过pip install直接下载配置的环境torch是cpu版本的,故需自行提前配置一下gpu版本torch的环境。
觉得安装慢的可以使用镜像源安装,例:
使用豆瓣源:
pip install –r requirements.txt -i http://pypi.douban.com/simple --trusted-host pypi.
文章目录 出错场景解决方案 出错场景 从网上的下载的一个老Android项目,编译时报以下错误
> Task :app:processDebugMainManifest FAILED Execution failed for task ':app:processDebugMainManifest'. > Unable to make field private final java.lang.String java.io.File.path accessible: module java.base does not "opens java.io" to unnamed module @2afb1fb7 * Try: > Run with --info or --debug option to get more log output. > Run with --scan to get full insights. * Exception is: org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:processDebugMainManifest'. at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.lambda$executeIfValid$1(ExecuteActionsTaskExecuter.java:142) at org.gradle.internal.Try$Failure.ifSuccessfulOrElse(Try.java:282) at org.
目录 异常概念与体系结构异常的分类异常的处理防御式编程异常的抛出异常的捕获异常声明throwstry-catch捕获并处理 自定义异常类 包装类基本数据类型及其对应包装类装箱和拆箱 泛型泛型使用类型推导 裸类型说明 泛型的编译机制泛型的上界语法 异常概念与体系结构 在java中,将程序执行过程中发生的不正常行为称为异常
异常的分类 异常可能在编译时发生,也可能在程序运行时发生,根据发生的时机不同,可以将异常分为:
编译时异常
在程序编译期间发生的异常,称为编译时异常,也称为受检查异常运行时异常
在程序执行期间发生的异常,.称为运行时异常也称为运行时异常
编译时出现的语法性错误,不能称为异常 异常的处理 防御式编程 错误在代码中是客观存在的,因此我们要让程序出现问题及时报错
在检查前做好充分的检查:事前防御型
缺陷:正常流程和错误处理流程代码混在一起,代码显得乱先操作,出现问题再处理
优势:正常代码与错误代码分离开 try{ //可能报错的代码 }catch (捕获具体异常) { }finally { } 在Java中,处理异常主要的5个关键字:throw,try,catch,final,throws
异常的抛出 如何抛出异常?
程序触发throw抛出异常
在Java中借助throw关键字,抛出指定的异常对象,手动抛出异常,一般用于抛出自定义的异常 throw new XXXException("异常原因"); 注意:
throw必须写在方法内部抛出的对象必须是Exception或Exception的子类对象如果抛出RunTimeException或其子类,则可以不处理,留给JVM处理抛出编译时异常要自己解决,否则无法通过编译异常一旦抛出,后面的代码将不会执行 异常的捕获 异常的捕获,也就是异常的处理方式,主要有两种,一种是try-catch捕获处理,另一种是异常声明throws
异常声明throws 使用在方法声明之后
告诉使用者这个方法会出现XX异常
如果一个方法内部存在一个编译时异常(受查异常),此时这个编译时异常一定要进行处理,目前的处理方式是在方法定义后面加上throws来声明该异常,该异常会留给JVM来处理
处在方法声明时参数列表之后,当方法中抛出编译时异常,用户不想处理该异常,此时就可以借助throws将异常抛给方法的调用者.即当前方法不处理,提醒方法调用者处理异常
语法格式: 修饰符 返回值类型 方法名(参数列表) throws 异常类型1, 异常类型2... { } 注意:
throws必须在方法参数之后声明的异常必须是Exception或者Exception的子类方法内部如果抛出多个异常,throws之后必须跟多个异常类型,用逗号隔开,存在父子关系的,声明父类即可调用声明抛出异常的方法,调用者必须对该异常进行处理,或者继续使用throws抛出
throws抛出交给JVM处理,一旦交给JVM处理,程序就会异常终止 try-catch捕获并处理 throws并没有对异常进行处理,而是把异常报给了使用者,需要使用者进行处理.真正要对异常进行处理,要用try-catch
System.out.println("1"); System.out.println(1/0); System.out.println("2"); 使用try-catch,catch里面的参数就是你要捕获的异常,如果捕获到了才会执行catch当中的内容
System.out.println("1"); try { System.out.println(1/0); } catch (ArithmeticException e) { System.
Mac安装Adobe AE/pr/LR/ai/ps/au/dw/id 2024/2023报错问题解决合集(常见错误:已损坏/2700/146/130/127/501/试用登录提示付费如何解决)
Mac系统安装会比较多问题,今天就一次性列举10个常见问题以及解决方法。
可能暂时没有遇到,如果遇到了,可以直接查阅解决。
AePr/LR/AiPS/DW/AU/ME/ID等汇总地址:
https://pan.baidu.com/s/1D8rwcRy_rIbbE6DyfjoeJw?pwd=qd5n
TQM: qd5n
0. 打开允许“允许任何来源” 如何打开允许任何来源?在 Finder 菜单栏选择 【前往】 – 【实用工具 】,找到【终端】程序,双击打开,在终端窗口中输入:sudo spctl --master-disable
输入代码后,按【return 回车键】,这时候会提示输入密码:直接输入自己的电脑密码,然后按【return 回车键】即可, (提示:在输入密码的时候,终端不会有任何显示。密码为开机密码,不要错误)
关闭【终端】,重新打开 【系统偏好设置】 – 【安全性与隐私】 – 【通用】 中就会出现且选中 【允许任何来源】
1. 无法打开"xxx",因为它不是从App Store下载 在 系统偏好设置 - 安全性与隐私 - 通用,点击 左下方黄色的锁,输入 开机密码 解锁后,选择 App Store和被认可的开发者,再锁定。
2. 无法打开"xxx",因为 Apple无法检查其是否包含恶意软件。 在 系统偏好设置 - 安全性与隐私 - 通用,点击 仍要打开,之后就可以双击打开软件了。
3. "xxx"已损坏,无法打开。您应该推出磁盘映像。 出现损坏问题,主要还是百度网盘上传/下载会丢失文件的原权限(需要自行赋予权限),建议可以直接使用阿里云盘下载,或者通过以下方法解决。
1)临时绕过安全机制 打开终端输入以下代码,空格一个,把'Install.app拖拽桌面上,然后再拖入终端输入命令后,进去回车并输入开机密码(密码不可见)。sudo xattr-r-dcom.apple.quarantine(空格)
2)永久禁用 Gatekeeper 打开终端输入以下代码,回车并输入开机密码(密码不可见)。
macOS 10.12 - 10.15.7
centos 7 增加临时路由及永久路由
如果增加临时路由,要先安装net-tools , sudo yum install net-tools
route add -net 10.1.0.0 gw 10.1.1.1 netmask 255.255.0.0
意思是增加了一条动态路由,网关10.1.1.1 ,10.1.x.x 的所有ip都走这个网关
此种方式,开机重启后或者网络重置后路由失效
增加永久路由
在/etc/sysconfig/network-scripts/ 增加一下文件,命名规则为 route-网卡名
例route-eno1
10.1.0.0/16 via 10.1.1.1 dev eno1
查看路由
ip route show 或者 route
查看路由表优先级 route -n ####优先利用上面一种添加路由######
1.使用route命令添加 #注:使用route命令添加的路由在重启系统或重启网络后即失效 #1.添加到主机的路由 route add –host 192.168.10.110 dev eth0 route add –host 192.168.10.119 gw 192.168.10.1 #2.添加到网络的路由 route add –net IP netmask MASK eth0 route add –net IP netmask MASK gw IP route add –net IP/24 eth1 #3.