高通 Android 12 Settings不显示版本号问题

1、最近项目遇到一个奇葩问题,编译系统版本号不见了? 2、一开始我想着可能是自己代码没有make clean结果编译几个小时,然后烧录固件发现还是未生效。 3、然后这时候我又去看git log review最近修改也没有太大发现(待定) 4、于是网上搜了一翻,说可能在build/make/tools/buildinfo_common.sh 没有添加ro.build.display.id节点 结果添加也是没用 这是什么鬼??? 5、于是去某群问了一些某佬说可能是Settings/res/xml/my_device_info.xml隐藏掉 ,于是又去里面查看然后按着大佬思路修改,结果还是fail.难道是大佬不靠谱?肯定不是,肯定是我自己的问题? 6、于是群里面又一个大佬说可能是Settings/res/xml/top_level_settings.xml尝试注释掉一个然后看下是否生效?结果还是fail,这还让不让活?难道根本不走Settings这一块(某佬说)烦死了 7、遇到问题有时候方向错了,就会瞎搞,这时候我得冷静,于是去某网站查看aosp源码看下到底走的那个流程,正常都是会去读取system/build.prop这个属性。但是确实没有,我也对比其他的项目但是也是一样没有ro.build.display.id? 8、就在我搞这搞那的时候,我突然脑袋不发热到settings里面上拉发现有字?难道是分辨率的问题?于是通过adb shell wm size 查看当前分辨率 1920x1080(1080p),改小点试试?或者把wm density 200 奇迹出现了?请看大屏幕? 9、但是这样我不可能这样改?意思关于手机还是存在?尝试添加一个view让他实现滚动?类似于Android里面的ScrollView 添加子view开始滚动完美实现?于是又开始编译验证 结果fail 这..............,不可能,绝对不可能。 10、我的头很大,脑壳很痛? 到这里基本结束,反正我就是糊里糊涂解决这个问题?哈哈?有需要知道具体解法可以私聊探讨哈,转载请注明出处谢谢!高通 Android 12 Settings不显示版本号问题-CSDN博客

# java实现学生管理系统(GUI和数据库)(思路与功能详解,文末附上源码链接)(实现了学生、课程和账号三张表)

文章目录 1.项目需求2.项目框架3.项目概述4.项目设计1.建立数据库2.项目功能1.创建学生类、课程类和用户类2.创建基础工具类3.创建功能类4.单元测试5.创建界面类1.界面管理类2.登录界面3.菜单界面4.增加学生信息界面5.增加课程信息界面6.删除学生信息界面7.删除课程信息界面8.修改学生信息界面9.修改课程信息界面10.查询学生信息界面11.查询课程信息界面 6.创建测试类 5.项目总结 1.项目需求 ​ 开发一个包含学生信息、课程信息和成绩信息的学生管理系统。这可以让用户轻松地添加、删除、编辑和搜索学生信息和课程信息。 (1)要求使用数据库存储信息,数据库中要有3个表 学生信息表(学号 姓名 性别 年龄 专业 班级) 和 课程信息表(学号、姓名、课程、学分)用户表用于登录(账号 密码 权限) (2)GUI界面实现 登录和增删改查4个功能 (3)用户权限设置,普通同学可以查看全部和改自己的信息,管理员可以更改全部。 2.项目框架 bean包:其中包含了学生信息类StudentInfo,课程信息类CourseInfo,用户信息类Users; JDBCUtil包:工具包,其中的JDBCUtil类包含了连接数据库,资源关闭等基础功能的方法。 Function包:功能包,其中的Function类涵盖了实现指定界面的功能方法。其中还是调用了JDBCUtil包中的方法。 MyFrame包:界面包,其中有每一个界面的界面类 UunitDemo包:测试包,里面有单元测试类JuniTestDemo、JunitTestFrame,以及测试类TestDemo 该项目主要实现流程是:通过界面类中获取文本框中的数据,在根据获得的数据通过调用功能包中的方法与数据进行交互并返回一个结果(或对象),再将返回的数据填入文本框中。当然在实现每一个模块后,都可以在测试包中进行单独模块的测试,比如单独测试功能类中的某一个方法是否有效,或者单独测试某一个界面是否合理,在每一个模块都测试成功后,就可以将整个项目进行运行了。大多数情况下是没有太大的问题的,这样就可以避免运行项目时出现奇奇怪怪的错误。 3.项目概述 利用学生学号将三张表联系起来。即学号同样也是账号,那么这三张表都有学号这一个共同的属性,利用学号可同时操作这三张表。具体实现思路如下: ​ 1、在数据库创建相对应的三张表 ​ 2、利用JDBC操作数据库 ​ (1)基于三张表创建三个对应的类。 ​ (2)创建工具类。工具类分为实现对表进行增删改、查询、连接数据库、关闭资源等基本操作。 ​ (3)基于工具类从而创建对应的功能类。每个功能类相对应一个操作界面(如增加学生信息界面)。功能类 通过界面传入的数据进行实现相对应的功能。 ​ (4)基于GUI设计学生管理系统界面。每一个界面创建一个界面类,该界面利用输入的数据从而调用对应该 界面功能的功能类,从而实现每一个界面的功能。 (5)创建单元测试类。创建多个单元测试类,每一个单元测试类都测试每一个模块的功能类以及每一个界面 功能的实现。比如:单独测试增加学生信息功能类、修改课程信息界面类等等。 (6)创建测试类。通过测试类进行整体地测试该项目。 4.项目设计 1.建立数据库 在Navicat或SQLyog上使用以下SQL语句创建三张表 同时,先声明我的数据库账号为root,密码为root,数据库名为db01 建立学生信息表 # 创建学生信息表 CREATE TABLE studentinfo( num INT(11), NAME VARCHAR(11), gender VARCHAR(11), age INT(11) ); # 插入学生信息 INSERT INTO studentinfo VALUE(1,'麦当','男',16); INSERT INTO studentinfo VALUE(2,'笛亚','女',16); INSERT INTO studentinfo VALUE(3,'柯南','男',7); INSERT INTO studentinfo VALUE(4,'小哀','女',7); INSERT INTO studentinfo VALUE(5,'新一','男',17); INSERT INTO studentinfo VALUE(6,'小兰','女',17); INSERT INTO studentinfo VALUE(7,'沸羊羊','男',4); INSERT INTO studentinfo VALUE(8,'美羊羊','女',4); 建立课程信息表

VPN的介绍及自建点对点的OpenVPN和使用方法:保姆级详细教程,(windou客户端版)后附脚本

VPN到底是啥? VPN即虚拟专用网,泛指通过VPN技术在公用网络上构建的虚拟专用网络。 VPN用户在此虚拟网络中传输私网流量,在不改变网络现状的情况下实现安全、可靠的连接。 1.VPN和传统的数据专网相比,优势很多: 安全: 在远端用户、驻外机构、合作伙伴、供应商与公司总部之间建立可靠的连接,保证数据传输的安全性。这对于实现电子商务或金融网络与通讯网络的融合特别重要。 廉价: 利用公共网络进行信息通讯,企业可以用更低的成本连接远程办事机构、出差人员和业务伙伴。 支持移动业务: 支持驻外VPN用户在任何时间、任何地点的移动接入,能够满足不断增长的移动业务需求。 可扩展性: 由于VPN为逻辑上的网络,物理网络中增加或修改节点,不影响VPN的部署。 公共网络又经常被称为VPN骨干网(VPN Backbone),公共网络可以是Internet,也可以是企业自建专网或运营商租赁专网。 工作在网络层和数据链路层的VPN又被称为三层VPN和二层VPN。 2.VPN关键技术:隧道技术 VPN技术的基本原理是利用隧道(Tunnel)技术,对传输报文进行封装,利用VPN骨干网建立专用数据传输通道,实现报文的安全传输。 位于隧道两端的VPN网关,通过对原始报文的“封装”和“解封装”,建立一个点到点的虚拟通信隧道。 隧道的功能就是在两个网络节点之间提供一条通路,使数据能够在这个通路上透明传输。 VPN隧道一般是指在VPN骨干网的VPN节点之间建立的用来传输VPN数据的虚拟连接。 隧道是构建VPN不可或缺的部分,用于把VPN数据从一个VPN节点透明传送到另一个上。 隧道通过隧道协议实现 目前已存在不少隧道协议,如GRE(Generic Routing Encapsulation)、L2TP(Layer 2 Tunneling Protocol)等。 隧道协议通过在隧道的一端给数据加上隧道协议头,即进行封装,使这些被封装的数据能都在某网络中传输,并且在隧道的另一端去掉该数据携带的隧道协议头,即进行解封装。 报文在隧道中传输前后都要通过封装和解封装两个过程。 部分隧道可以混合使用,如GRE Over IPSec隧道。 3.VPN关键技术:身份认证、数据加密与验证 身份认证、数据加密和认证技术可以有效保证VPN网络与数据的安全性: 身份认证: 可用于部署了远程接入VPN的场景,VPN网关对用户的身份进行认证,保证接入网络的都是合法用户而非恶意用户。也可以用于VPN网关之间对对方身份的认证。 数据加密: 将明文通过加密变成密文,使得数据即使被黑客截获,黑客也无法获取其中的信息。 数据验证: 通过数据验证技术对报文的完整性和真伪进行检查,丢弃被伪造和被篡改的报文。 4.常见VPN技术—IPSec (1) IPSec概述 IPSec(IP Security) VPN一般部署在企业出口设备之间,通过加密与验证等方式,实现了数据来源验证、数据加密、数据完整性保证和抗重放等功能。 数据来源验证:接收方验证发送方身份是否合法。 数据加密:发送方对数据进行加密,以密文的形式在Internet上传送,接收方对接收的加密数据进行解密后处理或直接转发。 数据完整性:接收方对接收的数据进行验证,以判定报文是否被篡改。 抗重放:接收方拒绝旧的或重复的数据包,防止恶意用户通过重复发送捕获到的数据包所进行的攻击。 (2) IPSec协议体系 IPSec不是一个单独的协议,它给出了IP网络上数据安全的一整套体系结构,包括AH(Authentication Header)、ESP(Encapsulating Security Payload)、IKE(Internet Key Exchange)等协议。 IPSec使用认证头AH(Authentication Header)和封装安全载荷ESP(Encapsulating Security Payload)两种安全协议来传输和封装数据,提供认证或加密等安全服务。 AH和ESP协议提供的安全功能依赖于协议采用的验证、加密算法。 AH仅支持认证功能,不支持加密功能。ESP支持认证和加密功能。 安全协议提供认证或加密等安全服务需要有秘钥的存在。 (3)秘钥交换的方式有两种 带外共享密钥: 在发送、接收设备上手工配置静态的加密、验证密钥。

Python 中实现优雅的 switch 操作的几种方法

更多Python学习内容:ipengtao.com 在编程中,经常会遇到需要根据不同的条件执行不同操作的情况。在其他编程语言中,可能会使用 switch 或 case 语句来实现这种逻辑。然而,Python 中并没有内置的 switch 语句,但可以通过一些技巧和Python的特性来实现类似的功能。本文将介绍如何在Python中优雅地实现 switch 操作,并提供丰富的示例代码。 使用字典实现简单的 Switch 在 Python 中,可以使用字典来模拟 switch 语句的功能。字典的键可以是条件,值可以是对应的操作或函数。 def case1(): print("执行操作1") def case2(): print("执行操作2") def case3(): print("执行操作3") switch_dict = { "option1": case1, "option2": case2, "option3": case3, } def switch(option): case = switch_dict.get(option, lambda: print("默认操作")) case() # 示例 switch("option1") # 输出:执行操作1 switch("option2") # 输出:执行操作2 switch("option3") # 输出:执行操作3 switch("option4") # 输出:默认操作 在上面的示例中,定义了三个操作函数 case1、case2 和 case3,然后将它们存储在一个字典 switch_dict 中,键是条件,值是对应的操作函数。然后定义了一个 switch 函数,根据传入的条件从字典中获取相应的操作函数,并执行它。 使用类和方法实现更复杂的 Switch 如果需要更复杂的逻辑,可以使用类和方法来实现 switch。这种方法可以更好地封装每个条件对应的操作,并提供更灵活的扩展性。

oracle 之 replace替换

Oracle中的REPLACE函数用于将字符串中指定的子字符串替换为新的子字符串。 REPLACE(string1, string2, string3 其中,string1表示要进行替换操作的原始字符串;string2表示需要被替换的子字符串;string3表示用来替换的新子字符串。 以下是一些使用REPLACE函数的示例: 将字符串"你好!朋友"中的朋友替换为兄弟: sqlSELECT REPLACE('你好!朋友', '朋友', '兄弟') FROM dual; -- 输出结果为 "你好!兄弟" 将字符串"abcdefg"中的所有'a'替换为'x': sqlSELECT REPLACE('abcdefg', 'a', 'x') FROM dual; -- 输出结果为 "xbcdexfg"

81、为什么SpringBoot的jar可以直接运行?

一、为什么SpringBoot的jar可以直接运行? 1.SpringBoot提供了一个插件spring-boot-maven-plugin用于把程序打包成一个可执行的jar包。 2.Spring Boot应用打包之后,生成一个Fat jar(jar包中包含jar),包含了应用依赖的jar包和Spring Boot loader相关的 类。 3.java -jar会去找jar中的manifest文件,在那里面找到真正的启动类(Main-Class); 4.Fat jar的启动Main函数是JarLauncher,它负责创建一个LaunchedURLClassLoader来加载boot-lib下面的jar,并以 一个新线程启动应用的启动类的Main函数(找到manifest中的Start-Class)。 二、知识延伸 Spring Boot可以使用JAR包启动的原因 嵌入式Servlet容器:Spring Boot默认使用嵌入式的Servlet容器(如Tomcat、Jetty、Undertow等)。这使得应用程序可以打包成一个可执行的JAR文件,包含了所有的依赖以及一个嵌入式的Servlet容器,而无需外部容器的支持。 Spring Boot Maven插件:Spring Boot提供了Maven和Gradle插件,可以将应用程序打包成可执行的JAR文件。这个JAR文件中包含了应用程序的所有依赖以及一个主类,使得它可以被直接运行。 自动化配置:Spring Boot采用自动化配置的方式,大大减少了开发者的配置工作。这使得应用程序可以更容易地打包成一个独立的可执行JAR文件,而不需要太多手动配置。 内嵌属性文件:Spring Boot支持使用application.properties或application.yml文件来配置应用程序。这些配置文件可以被打包进JAR文件,使得应用程序在不同环境中可以方便地切换配置。 总的来说,Spring Boot通过嵌入式Servlet容器、构建工具插件以及自动化配置等机制,使得应用程序可以方便地打包成一个JAR文件,并通过java -jar命令直接运行。这种方式简化了部署和运维的流程。 原理 在Spring Boot项目的jar中会生成一个MANIFEST.MF文件(路径:META-INF\MANIFEST.MF),打开该文件你会看到有一个MainClass的映射,其对应的值是一个类,就是执行‘java -jar’命令后正式执行的类,mainclass类是springboot插件引入后自动添加的 Manifest-Version: 1.0 Implementation-Title: executable-jar Implementation-Version: 1.0-SNAPSHOT Archiver-Version: Plexus Archiver Built-By: Format Start-Class: spring.study.executablejar.ExecutableJarApplication Implementation-Vendor-Id: spring.study Spring-Boot-Version: 1.3.5.RELEASE Created-By: Apache Maven 3.2.3 Build-Jdk: 1.8.0_20 Implementation-Vendor: Pivotal Software, Inc. Main-Class: org.springframework.boot.loader.JarLauncher 如果想看JarLauncher类的源码需要手动引入‘spring-boot-loader’依赖,其实声明‘spring-boot-maven-plugin’插件也会自动引入其依赖,但不能查看到源码内容 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-loader</artifactId> </dependency> 打开之后可以看到此类有一个主程序入口,main方法 protected void launch(String[] args) throws Exception { JarFile.

如何在Java 8中获取一个月的第一天和最后一天

前言 在处理只包含年份和月份信息的问题时,java.time.YearMonth类提供了便捷的操作方式。以下是如何将LocalDate转换为YearMonth并从中获取该月的第一天和最后一天。 步骤详解 1. 导入必要的库 首先确保导入了相关的Java时间API类: import java.time.LocalDate; import java.time.YearMonth; import java.time.format.DateTimeFormatter; 2. 创建一个表示月份的LocalDate对象 假设我们有一个LocalDate对象代表某个月份(即使是该月的任意一天): LocalDate monthDate = LocalDate.of(2024, 2, 15); // 这里以2024年2月的任意一天为例 3. 将LocalDate转换为YearMonth 为了专注于年份和月份部分,我们可以将LocalDate对象转换为YearMonth: YearMonth yearMonth = YearMonth.from(monthDate); 4. 获取该月的第一天 利用YearMonth.atDay()方法指定月份中的具体日期来获取该月的第一天: LocalDate firstDayOfMonth = yearMonth.atDay(1); 5. 获取该月的最后一天 由于YearMonth类本身没有直接提供获取最后一天的方法,我们可以采取一种间接的方式:先加上一个月,得到下个月的第一天,然后减去一天,即得到了当前月的最后一天: LocalDate lastDayOfMonth = yearMonth.plusMonths(1).atDay(1).minusDays(1); 6. 输出结果 最后,我们可以打印出本月的第一天和最后一天: System.out.println("本月第一天: " + firstDayOfMonth); System.out.println("本月最后一天: " + lastDayOfMonth); 总结 通过Java 8的java.time包及其YearMonth类,我们可以轻松地从包含年份和月份信息的对象中获取目标月份的第一天和最后一天。尽管YearMonth本身不提供直接获取最后一天的方法,但通过巧妙运用日期加减操作,仍然可以方便地获取所需结果。同时要注意,虽然上述示例使用了LocalDate进行转换,但如果你已经有了YearMonth对象,可以直接跳过转换步骤,直接在其基础上进行操作。

Python round函数

在Python编程中,round()函数是一个内置函数,用于对浮点数进行四舍五入的操作。这个函数可以对浮点数进行近似处理,使得结果更加清晰和易于理解。本文将深入探讨Python中的round()函数,包括基本用法、参数详解、特殊情况处理以及应用场景,并提供丰富的示例代码来帮助您更好地理解和使用round()函数。 基本用法 round()函数的基本语法如下: rounded_number = round(number, ndigits) 其中,number是要进行四舍五入的浮点数,ndigits是保留的小数位数。 参数详解 1. number number是要进行四舍五入的浮点数。 示例: rounded_number = round(3.14159, 2) print(rounded_number) # 输出:3.14 在这个示例中,对浮点数3.14159进行了四舍五入,并保留了两位小数。 2. ndigits ndigits是保留的小数位数,默认值为0。 示例: rounded_number = round(123.456789) print(rounded_number) # 输出:123 在这个示例中,对浮点数123.456789进行了四舍五入,并保留了0位小数。 特殊情况处理 1. 四舍五入规则 round()函数的四舍五入规则是基于银行家舍入法(Bankers’ rounding),也称为偶数舍入。这意味着如果要舍弃的数字是5,而前面的数字是偶数,则舍入到最接近的偶数。如果前面的数字是奇数,则向上舍入到最接近的偶数。 示例: rounded_number = round(2.5) print(rounded_number) # 输出:2 rounded_number = round(3.5) print(rounded_number) # 输出:4 在这个示例中,round(2.5)将结果舍入为2,而round(3.5)将结果舍入为4。 2. 对负数的处理 对于负数,round()函数采用的是“远离零的方向舍入”(round away from zero)的方式。 示例: rounded_number = round(-2.5) print(rounded_number) # 输出:-3 rounded_number = round(-3.5) print(rounded_number) # 输出:-4 在这个示例中,round(-2.

Android学习(二):onCreateView()和onViewCreated区别?

1. onCreateView()介绍: onCreateView()是Android中Fragment生命周期方法的一部分,用于创建Fragment的用户界面(UI)。在这个方法中,你可以通过填充布局文件来创建Fragment的视图,并返回该视图作为Fragment的根视图。 下面是一个示例的使用onCreateView()方法的代码: @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View view = inflater.inflate(R.layout.fragment_example, container, false); // 获取视图控件并进行操作 return view; } 在上面的示例中,我们使用inflater.inflate()方法来填充指定的布局文件(例如R.layout.fragment_example),并将其实例化为一个View对象。你可以将自己的布局文件替换成需要的布局。 接着,我们可以通过view.findViewById()方法获取到布局文件中的视图控件,并进行进一步操作,如设置文本、添加监听器等等。 最后,我们返回创建的视图对象(view)作为Fragment的根视图。 需要注意的是,onCreateView()方法是在Fragment生命周期中的早期阶段调用的,用于构建Fragment的UI。如果你需要在Fragment视图创建完毕后进行操作,例如初始化控件、设置监听器等,可以考虑使用onViewCreated()方法。 2. onViewCreated介绍: onViewCreated()是Android中Fragment中的一个回调方法,用于在Fragment的视图已经创建完毕后进行操作。在该方法中,你可以对Fragment的视图进行初始化、设置监听器、绑定数据等操作。下面是一个示例的使用onViewCreated()方法的代码: @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); // 初始化视图控件 TextView textView = view.findViewById(R.id.textView); Button button = view.findViewById(R.id.button); // 设置监听器 button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 处理按钮点击事件 } }); // 绑定数据 textView.

30个AI变现案例,太全了,赶紧实操起来

精心整理了30个AI变现案例,每一个都可以作为一个完整的副业去实践,AI时代已经来了,所有不甘于现状的朋友,都应该去下场,先把手弄脏,不要怕,实践起来! 1.【副业创业】AI+剧本 项目: Al技术手剧本创作商单 市场分析: 客户群体: 需求简单、成本敏感的商单, 适合Al剧本创作, 可以实现低成本交付。 项目痛点 :原创剧本生产不足, 且人力成本高昂, Al创作可提供高效解决方 市场商机:在小红书、拼多多、淘宝等平台上的竞争较小,且有机会与商家建立长期合作。 执行策略: 1.寻找投稿渠道 2.需求拆解与试稿 3.测试迭代优化 4.项目放大 2 · 【副业创业】AI+LOGO建筑 项目: 将众所周知的公司LOGO或者相关熟悉的内容和其他日常物品转化为建筑设计,吸引眼球。通过引导评论以及回复粉丝来获得更多评论,从而涨高账号杈重来达到快速起号的目的。后面可以通过定制化设计、Al绘画培训等进行变现 操作: 1.本地部署Stable Diffusion或者进行云端部Stable Diffusion 2.将相应要转换的LOGO进行抠图处理 3.然后用到Stab Diffusion中的segment anything进行处理,或者使用局部重绘 4.进行小红书的专题号发布,可以对标下方的账号 引流: 到私域进行定制化的设计方案或者进行相关培训收费,质量只要过关有很多的转介绍和复购 3.【副业创业】Al +宠物定制小夜灯/肖像彩绘 项目: 利用Stable diffusion可以快速画出宠物灯或者壁画的线稿投入生产。引图的博主是否运用Al技术未知,但是SD已经能够做到相同的效果 操作: 1.熟悉使用Midjourny中的局部重绘或者是Stable diffusion中的语义分割功能,能够做到定制宠物像的海报或者 像彩绘。 2.在某红薯或者某音上进行账号注册,以及视频的发布。在这里可以结合小故事,也可以做图文视频的矩阵账号。 3.引导到私域或者粉丝群促达成交。 4.【副业创业】Al +口播视频 项目: 基于小红书半台,利用从ChatGPT生成科普文案,可以是专业领域的干货,也可以是一些冷门的生活常识,后续可以通过带货来进行变现。引图的博主专注于减肥知识赛道,从8月份开始输出内容,目前已经3万多粉丝,可以进行对标参考 操作: 1.注册小红书账号,可以进行矩阵的配合 2.完成账号专题化,把该账号培养成专门的专题号 3.完成赛道选择,如果是批量生成的话,可以多个话题都进行测试,比如一个号做减肥,一个号分享生活冷知识,一个号分享教师资格证考试经验等等 4.利用ChatGPT完成口播文案的生成,同时配合口播软件,比如说得相等app。可以进行对标参考,参考你想要的账号,把他们的文章爬取下来进行投喂给ChatGPT再进行生成 5.结合热门话题和关键词进行内容创作和发布 5.【副业创业】Al +婚礼定制 项目: 利用Midjourney Al技术大幅提升婚礼布场设计的效率,创造出传统手绘难以比拟的效果图,并开辟Al赋能在婚礼策划行业中的新商机。后面可以通过婚礼策划师的Midjourney培训、开发行业小程序以及销售成熟prompt等等途径进行变现。 操作: 1)婚礼策划师的Midjourney使用培训 课程大纲:介绍Midjourney的基础知识,历史背景,主要功能和特点如何在Midjourney上创建、编辑和保存婚礼布场设计。深入讨论特定婚礼的设计技巧,如何选择正确的颜色、布局和元素如何解决在使用Midjourney时可能遇到的常见问题Q&A环节,解答策划师在使用过程中可能出现的疑惑 2)开发行业小程序 设计工具集成:集成Midjourney的核心功能,允许用户通过小程序进行直观的婚礼布场设计模板库:提供多种婚礼场景模板,从室外到室内,从传统风格到现代风格,满足不同客户的需求实时预览:允许用户在设计过程中实时查看效果图,包括不同视角和光线条件下的预览教学区:提供视频教学和文字指南,帮助新手快速掌握小程序的使用 3)销售成熟的prompt集 需求调查:与婚礼策划师进行深度访谈,了解他们在设计婚礼布场时面临的挑战和需求prompt创作:基于需求调查,创作多种婚礼布场设计的prompt,每个prompt应具有独特性,能满足不同风格和主题的婚礼需求测试与反馈:在少量目标用户中测试这些prompt,根据反馈进行调整和优化分层定价:将prompt集分为初级、中级和高级三个层次,根据其复杂性和应用范围进行定价组合包装:提供不同数量的prompt组合包,如“初级套餐”,“婚礼主题套餐”等,满足不同策划师的需求 6.【副业创业】AI+家居家装小红书号 项目: 基于小红书平台,利用Stable Diffusion对毛坯房进行Instagram和国内内家居应用获取的家居图片进行内容创作,通过精准关键词和简介吸引用户,实现引流并变现。

Python 中的 dir() 函数详解

更多Python学习内容:ipengtao.com 在 Python 中,dir() 是一个内置函数,用于查找对象的所有属性和方法。它返回一个字符串列表,包含了对象的所有属性和方法的名称。虽然在日常编程中可能不经常使用,但了解和掌握 dir() 函数的使用方法对于深入理解 Python 的对象模型和调试程序是非常有帮助的。本文将详细介绍 dir() 函数的用法、返回值以及实际应用场景,并提供丰富的示例代码来帮助读者更好地理解。 dir() 函数的基本用法 dir() 函数可以应用于任何对象,包括模块、类、实例等。 它的基本语法如下: dir([object]) 其中,object 是要查找属性和方法的对象。如果省略 object 参数,则返回当前作用域中的所有变量、方法和定义的类型。 返回值 dir() 函数返回一个包含对象的所有属性和方法名称的字符串列表。 这些名称按照字母顺序排序,并包括以下几种类型的信息: 对象的属性(变量) 对象的方法(函数) 内置函数和变量 类型信息 示例代码 通过一些示例代码来演示 dir() 函数的用法: 1 查找模块的属性和方法 import math print("模块 math 的属性和方法:", dir(math)) 输出: 模块 math 的属性和方法: ['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'comb', 'copysign', 'cos', 'cosh', 'degrees', 'dist', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'isqrt', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'perm', 'pi', 'pow', 'prod', 'radians', 'remainder', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc'] 2 查找对象的属性和方法 class MyClass: def __init__(self): self.

一款免费的 AI 写代码工具

在GPT 可以写代码啦!文中,我们分享了 Github Copilot 这款 GPT 产品,它可以帮助我们有效的提高代码速度,但是,这款产品每个月需要支付 10$, 很多小伙伴还是比较心疼,因此今天推荐一款免费的产品:Codeium。 到目前为止:Codeium 非常慷慨!仅对企业用户收费,对个人开发者永久完全免费。 一、功能介绍 Codeium的官网:codeium.com/ ,Codeium可以在浏览器插件中使用(chrome.google.com/webstore/de… 在 Intelli IDEA 中安装,如下图:Plugins -> Marketplace -> 搜索 Codeium -> 选择第一款安装 安装之后的效果:安装后,会在 IDEA的右下角有一个 {...} 图标,点击图标,需要登录授权才能使用,因此,需要到官网上注册一个账户:codeium.com/ 登录后的体验:写一个简单的hello world 例子,如下图,当你输入完hello之后,灰色字体的world就是 Codeium自动补充代码的,你只需要点击 Enter键就可以接受建议。这个功能相当强大,在日常的开发中,很多逻辑可以直接通过自动补齐功能完成,省去重复敲代码 另外,在main方法上面,Codeium插入了 Codeium: Refactor Expalin Docstring 功能, 下面简单地介绍这些功能,点击 Refactor会有一个弹框,如下图: Refactor:自动重构代码,对于历史代码,可以很好地进行重构 Explain:解释代码,可以帮助你快速阅读他人源代码 Add comments and docstrings to the code帮助代码添加注释和帮助文档 Add logging statements so that it can be easily debugged 添加日志语句,方便调试 Clean up this code 清除代码 Check for bugs and null pointers 检查bug和NPE空指针

【Vue】本地使用 axios 调用第三方接口并处理跨域

前端处理跨域 一. 开发准备 开发工具:VScode框架:Vue2项目结构:vue脚手架生成的标准项目(以下仅显示主要部分) 本地已搭建好的端口:8080要请求的第三方接口:http://1.11.1.111:端口号/xxx-api/code 注意:前端环境已搭建好,必须确保axios 已下载 二. 需求分析 前端登录页(login - index.vue)的验证码需调用第三方的验证码接口,并将其显示 三. 跨域 3.1 直接调用(跨域) 代码实现 <script> import axios from "axios"; export default { data(){ return { } }, methods:{ fetchCode(){ axios.get('http://1.11.1.111:端口号/xxx-api/code').then(res=>{ console.log(res,"直接调用第三方接口") }) } } } </script> 结果:跨域 3.2 解决跨域:poxy 配置 main.js // 跨域代码,qualityPlatform可替换为任意 axios.defaults.baseURL = "/qualityPlatform" 配置 config.js module.exports = { dev:{ assetsSubDirectory: 'static', assetsPublicPath: '/', proxyTable: { // 配置多个代理 '/qualityPlatform': { target: 'http://1.11.1.111:端口号', pathRewrite: { '^/qualityPlatform': '/' }, changeOrigin: true }, '/api': { target: 'http://localhost:80', // 本地后端抛出的接口 secure: false, pathRewrite: { // 路径重写 '^/api': '/' // 替换target中的请求地址 }, changeOrigin: true // 在本地会创建一个虚拟服务端,然后发送请求的数据,并同时接收请求的数据,这样服务端和服务端进行数据的交互就不会有跨域问题 }, }, host: '0.

探索Redis是否为单线程的奥秘(文末送书)

🌈个人主页:聆风吟 🔥系列专栏:数据结构、网络奇遇记 🔖少年有梦不应止于心动,更要付诸行动。 文章目录 📋前言一. Redis中的多线程二. I/O多线程三. Redis中的多进程四. 结论五. 书籍推荐5.1 书籍介绍5.2 作者简介5.3 粉丝福利 参与活动方式文末详见。 📋前言 很多人都遇到过这么一道面试题:Redis是单线程还是多线程?这个问题既简单又复杂。说他简单是因为大多数人都知道Redis是单线程,说复杂是因为这个答案其实并不准确。 难道Redis不是单线程?我们启动一个Redis实例,验证一下就知道了。Redis安装部署方式如下所示: // 下载 wget https://download.redis.io/redis-stable.tar.gz tar -xzvf redis-stable.tar.gz // 编译安装 cd redis-stable make // 验证是否安装成功 ./src/redis-server -v Redis server v=7.2.4 接下来启动Redis实例,使用命令ps查看所有线程,如下所示: // 启动Redis实例 ./src/redis-server ./redis.conf // 查看实例进程ID ps aux | grep redis root 385806 0.0 0.0 245472 11200 pts/2 Sl+ 17:32 0:00 ./src/redis-server 127.0.0.1:6379 // 查看所有线程 ps -L -p 385806 PID LWP TTY TIME CMD 385806 385806 pts/2 00:00:00 redis-server 385806 385809 pts/2 00:00:00 bio_close_file 385806 385810 pts/2 00:00:00 bio_aof 385806 385811 pts/2 00:00:00 bio_lazy_free 385806 385812 pts/2 00:00:00 jemalloc_bg_thd 385806 385813 pts/2 00:00:00 jemalloc_bg_thd 竟然有6个线程!不是说Redis是单线程吗?怎么会有这么多线程呢?

PHP 502bad gateway原因及解决方案

nginx+php 出现502 bad gateway,一般这都不是nginx的问题,而是由于 fastcgi或者php的问题导致的,常见的有以下几种。 1. php.ini 的memory_limit 过小(如果有个别php程序进程需要占用极大内存时这个必须注意) 2. php-fpm.conf 中max_children或者max_requests 设置不合理(设置过小会因为没有足够的cgi进程处理请求,设置过大会出 现一会儿有响应正常,一会儿等很久才有响应的情况,一般情况下children 按 照内存计算,比如说1G设置64,2G128。这个 根据实际情况自行调整。另外查看当前的PHP FastCGI进程数是否够用的命令为:netstat -anpo |grep &ldquo;php-cgi&rdquo; | wc -l 如果实际使用的&ldquo;FastCGI进程数&rdquo;接近预设的&ldquo;FastCGI进程 数&rdquo;,那么,说明 &ldquo;FastCGI进程数&rdquo;不够用,需要增大。) 3. 查看nginx错误日志,发现 pstream sent too big header while reading response headerfrom upstream ,则检查client head buffer,fastcgi buffer size是否过小,可设置为32K。 4. php 程序执行时间过长而超时,检查nginx和fastcgi中各种timeout设置。(nginx 中的 fastcgi_connect_timeout 300;fastcgi_send_timeout 300 :fastcgi_read_timeout300; keepalive_timeout ; php-fpm中的 request_terminate_timeout,php.ini中的max_execution_time) 5. php-fpm 有一个参数 max_requests ,该参数指明了每个children最多处理多少个请求后便会被关闭。在大量处理请求下, 如果该值设置过小会导致 children频繁的自杀和建立而浪费 大量时间,若所有的children差不多都在这个时候自杀,则重建前 将没有children响应请求,于是出现502 。可以将该值设置大一些或者是0[无限]。 以上差不多是比较常见的502的问题原因以及解决办法,其实解决问题的最好的方式还是自己去看nginx和fastcgi的errorlog。 最后借用网上的万金油说法做个总结: php-cgi进程数不够用、php执行时间长、或者是php-cgi进程死掉,都会出现502错

【Windows上同时安装两个不同版本MYSQL】MySQL安装教程--5.7和8.0版本

一、MySQL官网下载对应版本的zip文件 最新版本8.0.34下载链接:https://dev.mysql.com/downloads/mysql/ MySQL 5.7下载链接:https://downloads.mysql.com/archives/community/ 二、将下载到的压缩包解压到指定目录 使用解压工具将下载到的压缩包解压:如:解压到D:/software/目录下(自己选择),解压之后建议重命名该解压出来的文件:如mysql-8.0.34-winx64文件夹名,可将后面的winx64去掉,得到mysql-8.0.34(方便查看和理解,此处可不修改,但后续内容需对应更改) 三、添加环境变量 右键我的电脑->属性->高级系统设置->环境变量 选择系统变量Path,在其后添加:你的mysql安装文件下面的bin文件夹 四、在与bin同级的文件夹下新建,my.ini文件(注意:此处5.7版本和8.0版本操作不同) 4.1、编辑my.ini文件的内容(MySQL 5.7版本,路径改为自己电脑上对应的路径) [mysqld] basedir=D:\\software\\mysql-5.7\\ datadir=D:\\software\\mysql-5.7\\data\\ port=3306 skip-grant-tables #免登陆检查 4.2、编辑my.ini文件的内容(MySQL 8.0版本,不需要加skip-grant-tables,路径改为自己电脑上对应的路径) [mysqld] basedir=D:\\software\\mysql-8.0.34\\ datadir=D:\\software\\mysql-8.0.34\\data\\ port=3307 注意:此处如果是\,会报错,修改为\\,且端口号需要自行调整 五、启动管理员模式下的CMD,并将路径切换至mysql下的bin目录,然后输入:mysqld -install(安装mysql) 1.启动管理员模式下的CMD 2.将目录切换到解压的mysql文件中的bin文件夹的位置: 输入:cd /d D:\software\mysql-8.0.34\bin (路径换为你电脑对应的位置即可) 3.此时输入:mysqld -install (安装mysql服务) 这种安装方式服务名默认为MySQL,如果已有同名服务名,安装方式参考目录十二第二种安装方式 命令行界面出现:Service successfully installed.即可 图中是已装了的情况。 六、再输入 mysqld --initialize-insecure --user=mysql初始化数据文件 输入之前目录如下: 执行 mysqld --initialize-insecure --user=mysql(没输出ERROR信息则没报错) 执行成功:生成data和docs文件夹 data文件夹,即为存储数据库的地方,之前有数据库可拷贝到该目录下就可以使用了。 七、启动mysql,然后用命令 mysql -uroot -p 进入mysql管理界面 7.1、控制台继续输入: net start mysql 7.2、再输入:mysql -h127.0.0.1 -P3307 -uroot 直接输入回车,就可以进入到mysql管理界面(因为我们没有密码)。 其中,-h 参数指定连接的主机名(或 IP 地址),-P (大写的P)参数指定连接的端口号,-u 参数指定连接的用户名。

Springboot整合WebSocket实现主动向前端推送消息

前言 在上篇文章tcp编程中,我们实现了C++客户端与java服务器之间的通信,客户端发送了一个消息给服务器,今天我们要实现基于WebSocket实现服务器主动向前端推送消息,并且以服务器接收到C++客户端的消息主动向前端推送消息的触发条件。 了解Websocket WebSocket 的诞生背景 在早期,网站为了实现推送技术,通常使用轮询(或称为短轮询)。轮询是指浏览器每隔一段时间向服务器发出 HTTP 请求,然后服务器返回最新的数据给客户端。这种方式存在明显的缺点:浏览器需要不断地向服务器发出请求,而每次请求都包含较长的头部信息,导致带宽资源浪费。 为了解决这个问题,HTML5 定义了 WebSocket 协议,它能更好地节省服务器资源和带宽,并且能够更实时地进行通讯。 WebSocket 的基本原理 WebSocket 是什么? WebSocket 是一种网络传输协议,基于 TCP 实现。它在单个 TCP 连接上进行全双工通信,位于 OSI 模型的应用层。与 HTTP 不同,WebSocket 需要先创建连接,然后可以进行双向数据传输。 WebSocket 握手过程 客户端通过 WebSocket 构造函数创建 WebSocket 对象,连接到服务器的 WebSocket URL。客户端发送类似于 HTTP 请求的报文,服务器返回接受 WebSocket 协议的响应。握手成功后,客户端和服务器之间的 WebSocket 连接建立,后续数据以帧序列的形式传输。 WebSocket 与 HTTP 的区别 WebSocket 使用类似于 HTTP 的握手连接,但数据传输更高效。较少的控制开销:头部信息较小。更强的实时性:实时通信,避免等待请求响应。保持连接状态:WebSocket 是全双工通信,不需要反复发出请求。无需重新发起连接。更好的二进制支持:处理二进制内容。可以支持扩展:自定义子协议。 WebSocket可以做什么 推文广告聊天室公告消息 ................... 服务器端 打开idea,创建一个Springboot项目,添加WebSocket依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency> 创建一个WebSocket控制类,代码如下 /** * WebSocket操作类 */ @Component @Slf4j @ServerEndpoint("/websocket/{userId}") // 接口路径 ws://localhost:8081/webSocket/userId; public class WebSocket { /** * 与某个客户端的连接会话,需要通过它来给客户端发送数据 */ private Session session; /** * 用户ID */ private String userId; /** * concurrent包的线程安全Set,用来存放每个客户端对应的MyWebSocket对象。 * 虽然@Component默认是单例模式的,但springboot还是会为每个websocket连接初始化一个bean, * 所以可以用一个静态set保存起来。 * 注:底下WebSocket是当前类名 */ private static CopyOnWriteArraySet<WebSocket> webSockets =new CopyOnWriteArraySet<>(); /** * 用来存所有在线连接用户信息,用来存每个session */ private static ConcurrentHashMap<String,Session> sessionPool = new ConcurrentHashMap<String,Session>(); /** * 链接成功调用的方法 */ @OnOpen public void onOpen(Session session, @PathParam(value="

数字之美:探索人工智能绘画的奇妙世界

目录 引言AI绘画的定义与发展历程定义与发展历程AI绘画产品有哪些? AI绘画的应用领域设计与创意产业影视与游戏制作数字艺术与展览 AI绘画的基本原理与技术深度学习与神经网络生成对抗网络(GAN)风格迁移算法 AI绘画效果展示一只带着墨镜的小猫在高楼林立的城市里散步的时候摔了一跤闭月羞花.明眸皓齿.美若天仙.百媚千娇.清目齿白.清艳清新脱俗美少女,神秘,银发,佩剑,桌上有可爱猫猫摆件白色的长头发,透亮的皮肤,单人,美女,面部阴影骑在马上的骑士。插图、平面、设计、极简、抽象、有质感、专业、艺术山水插图,高山流水,许多植物,白色背景,绿色和白色风格一个彩色龙的图像,上面有不同的卡通贴纸,明亮的颜色 引言 AI绘画的定义与发展历程 随着人工智能技术的飞速发展,AI绘画作为一种新兴艺术形式正逐渐受到人们关注。AI绘画不仅改变了传统的艺术创作方式,同时也为艺术家们带来了更多的灵感和想象空间。本文将探讨AI绘画的定义、原理、应用领域以及面临的挑战和未来展望。 定义与发展历程 AI绘画是指利用人工智能技术进行绘画创作的过程。从最早的基于规则的图形生成系统,到如今基于深度学习和神经网络的艺术创作方式,AI绘画经历了多个阶段的演进和改进。 在上世纪,早期的计算机程序可以生成简单的几何图形和图案,但缺乏对艺术风格和创造性的模仿能力。随着深度学习和神经网络技术的发展,特别是生成对抗网络(GAN)的出现,计算机可以通过学习大量真实艺术作品的风格和特征,生成出更具艺术性和创造性的作品。同时,风格迁移算法的引入使得计算机可以将一幅图像的艺术风格迁移到另一幅图像上,从而实现艺术风格的转换和融合。 随着技术的不断进步和完善,AI绘画也逐渐展现出更加复杂和多样化的创作能力,为艺术领域带来了全新的可能性。未来,随着人工智能技术的不断发展,相信AI绘画将会成为艺术创作领域中不可或缺的一部分,并为艺术家们带来更多的灵感和创作空间。 AI绘画产品有哪些? DeepArt:DeepArt 是一款基于神经网络和风格迁移算法的AI绘画应用,用户可以上传自己的照片并选择喜欢的艺术风格,让AI将照片转换为相应风格的艺术作品。RunwayML:RunwayML 是一个集成了各种机器学习模型和算法的创作平台,其中包括可以用于图像生成和处理的模型,用户可以通过简单的界面与这些模型进行交互。Artbreeder:Artbreeder 是一个结合了生成对抗网络(GAN)技术的艺术生成平台,用户可以通过调节参数生成全新的艺术作品,也可以进行风格迁移和合成创作。Prisma:Prisma 是一款流行的手机应用,利用深度学习技术将用户拍摄的照片转换为不同艺术风格的作品,用户可以实时预览效果并保存分享。Adobe Fresco:Adobe Fresco 是 Adobe 公司推出的绘画和插图软件,内置了人工智能功能,例如智能画笔和智能填充,帮助用户提高绘画效率和质量。DALL·E:由 OpenAI 推出的 DALL·E 是一款基于大规模深度学习模型的图像生成系统,可以根据用户输入的文本描述生成对应的图片,实现了文本到图像的转换。AIVA:AIVA 是一款具有音乐创作功能的AI平台,它利用深度学习技术生成新的音乐作品,同时也提供了配乐和音乐制作的功能,让用户可以与AI合作进行音乐创作。 AI绘画的应用领域 设计与创意产业 在设计与创意产业中,AI绘画技术已经开始发挥重要的作用。 图像生成和创作:AI绘画可以帮助设计师和艺术家快速生成各种图像和艺术作品。通过训练深度学习模型,AI系统可以生成具有不同风格、纹理和特征的图像,为设计师提供了更多的创作灵感和可能性。 概念设计和草图辅助:AI绘画技术可以帮助设计师在概念设计阶段快速生成草图和初步设计方案。通过与AI合作,设计师可以输入简单的概念描述或草图,AI系统可以自动生成相应的图像,并为设计师提供更多的参考和创意支持。 自动化设计和排版:AI绘画还可以应用于自动化设计和排版领域。通过训练AI模型,可以实现自动化生成设计元素、图形、图标和排版布局等任务,提高设计工作的效率和质量。 虚拟角色和角色设计:AI绘画技术可以用于虚拟角色的设计和生成。通过使用深度学习模型和生成对抗网络,可以创建逼真的虚拟角色,并根据需要进行个性化定制,满足游戏、动画和虚拟现实等领域的需求。 品牌标识和视觉识别:AI绘画可以辅助设计师进行品牌标识和视觉识别的设计。通过分析大量的品牌标识数据和用户喜好,AI系统可以生成符合品牌形象和目标受众的标识设计方案,帮助企业建立独特的品牌形象。 AI绘画在设计与创意产业中的应用领域十分广泛,涵盖了图像生成、概念设计、自动化设计、角色设计和品牌标识等方面。这些技术的发展为设计师和创意人士提供了更多的工具和创作可能性,加速了设计创作的过程,并且也为创新和创意注入了新的动力。 影视与游戏制作 在影视与游戏制作领域,AI绘画技术的应用也日益广泛,为创作者提供了更多创作工具和可能性。 特效和视觉效果:AI绘画技术可以帮助影视和游戏制作团队快速生成高质量的特效和视觉效果。通过训练深度学习模型,可以实现更加逼真和精细的特效渲染,包括火焰、爆炸、水流等复杂的视觉效果。 场景设计和建模:AI绘画可以辅助影视和游戏制作团队进行场景设计和建模工作。通过生成对抗网络等技术,可以快速生成丰富多样的场景元素和建筑模型,为影视片和游戏提供更加生动和引人入胜的画面效果。 角色设计和动画:AI绘画技术可以用于角色设计和动画制作。通过训练深度学习模型,可以生成各种类型的虚拟角色和动画表现,为影视和游戏制作增添新颖的元素和风格。 剧本辅助和场景预览:AI绘画还可以应用于剧本辅助和场景预览。通过生成图像和动画,可以帮助导演和制作团队更好地理解剧本内容和场景布置,提前进行视觉化的呈现和沟通。 艺术风格转换和后期处理:AI绘画技术还可以用于艺术风格转换和后期处理。通过应用深度学习模型,可以实现影视和游戏画面风格的转换,或者增强后期处理效果,为作品赋予不同的艺术风格和呈现方式。 AI绘画在影视与游戏制作中的应用涵盖了特效、场景设计、角色动画、剧本辅助和艺术风格转换等多个方面,为影视和游戏行业注入了新的创作灵感和技术支持。随着技术的不断发展,相信AI绘画在影视与游戏制作领域的应用会越来越广泛,并且为行业带来更多创新和突破。 数字艺术与展览 数字艺术在当今展览领域中扮演着越来越重要的角色,而AI绘画技术作为数字艺术的一种重要工具,也在展览中发挥着关键作用。 交互式艺术作品:数字艺术展览常常包括各种形式的交互式艺术作品,而AI绘画技术可以为这些作品的创作和实现提供支持。通过AI生成的图像、动画和声音,观众可以与艺术作品进行互动,创造出更加丰富和引人入胜的展览体验。 虚拟现实展览:随着虚拟现实技术的发展,数字艺术展览中的虚拟展示越来越普遍。AI绘画技术可以用于创建虚拟现实环境中的艺术作品,并实现与观众的沉浸式互动体验,拓展了展览的表现形式和空间感。 艺术品数字化展示:AI绘画技术还可以应用于艺术品的数字化展示和再现。通过高分辨率的图像和虚拟现实技术,观众可以在展览中欣赏到艺术品的细节和质感,同时也为文物保护和展示提供了新的可能性。 艺术创作与实验:许多艺术家和设计师利用AI绘画技术进行数字艺术创作和实验。他们通过训练深度学习模型,探索艺术创作的新方式和表现形式,为展览呈现带来更多的创意和惊喜。 数字艺术市场与商业应用:数字艺术展览也为数字艺术市场和商业应用提供了平台。通过展览,艺术家和创作者可以展示其作品,吸引收藏家和机构的关注,推动数字艺术市场的发展和繁荣。 AI绘画技术作为数字艺术的重要工具之一,为展览提供了更多的创作手段和展示形式,丰富了观众的艺术体验,推动了数字艺术在当代艺术领域的发展和普及。 AI绘画的基本原理与技术 深度学习与神经网络 深度学习和神经网络是人工智能领域的重要分支,也是AI绘画技术的核心。 什么是深度学习 :深度学习是一种机器学习的方法,在大规模数据集上通过训练神经网络来实现任务自动化。深度学习的特点是使用多层神经网络进行特征提取和分类,可以处理大量、高维度的数据,适用于图像识别、自然语言处理等领域。 神经网络的结构和原理 :神经网络是深度学习的基础,其结构和原理仿照人类神经系统,由多个神经元组成的层次结构构成。神经网络的训练过程是通过优化损失函数来调整神经元之间连接的权重和偏置,使得网络可以对输入数据进行准确的预测和分类。 深度学习在AI绘画中的应用 :深度学习在AI绘画中的应用非常广泛。例如,通过训练神经网络模型,可以实现图像的风格转换、图像生成、图像修复等功能,为艺术家带来新的创作工具和可能性。同时,深度学习也是AI绘画中图像识别、语义分割等任务的基础技术。 深度学习在其他领域中的应用 :深度学习不仅在AI绘画领域有着重要应用,在自然语言处理、语音识别、医疗诊断等领域也有广泛应用。深度学习的优势在于可以自动从数据中提取特征和模式,实现对复杂问题的高效解决。 生成对抗网络(GAN) 生成对抗网络(GAN)是一种深度学习模型,由生成器和判别器两部分组成,通过对抗训练的方式实现生成数据的模型。 GAN的基本原理: 生成对抗网络由生成器和判别器两部分组成。生成器负责生成数据样本,而判别器则负责判断输入的数据是真实样本还是生成样本。两者通过对抗训练的方式相互竞争学习,最终使得生成器可以生成逼真的数据样本。 GAN的训练过程: 在训练过程中,生成器试图生成逼真的数据样本以欺骗判别器,而判别器则试图区分真实样本和生成样本。二者在对抗中不断调整自身参数,最终达到平衡状态。这种对抗训练的方式使得生成器可以学习到数据分布的特征,从而生成具有高逼真度的数据样本。

将python两个版本添加环境变量(Mac版)

在运行程序的时候,可能不知道选择哪个版本的程序来执行,先添加环境变量,然后进行选择。 1、查看python安装路径 which python which python3 来查看各个版本的安装位置 2、编辑环境变量配置文件 Macos使用默认终端的shell是bash,需要配置bash的配置文件来设置环境变量 在终端中执行一下命令打开配置文件: open ~/.bash_profile 如果你使用的是zsh的shell,可以执行以下命令打开配置文件 open ~/.zshrc 3、添加python路径到环境变量 #python2 路径 export PATH="/usr/local/bin/python:$PATH" #python3 路径 export PATH="/usr/bin/python3:$PATH" 4、保存后关闭配置文件 保存关闭配置文件后,需要在终端执行以下命令使配置生效: source ~/.bash_profie source ~/.zshrc 5、验证配置是否生效 在终端执行命令来验证 python --version python3 --version