(十三)AI作画、AI绘画、AIGC本地大模型

(十三)AI作画、AI绘画、AIGC本地大模型

AI作画近期很火,涌现出了很多AIGC(AI内容生成)的网站、平台,但这些平台都是使用的云上的算力,基本都有使用的各种限制等。

一、本代码自动将大模型下载本地,可以无-限-使-用。但是对硬件的要求较高需要8G显存以上的显卡才能快速出图,用CPU会很慢的。

【同时,针对没有好显卡的网友,也编写了一个调用云上API的版本:
https://pan.baidu.com/s/1s7B1SAWWoNSdbxXYGTlgDQ 提取码:8888

远程API版本软件界面:
在这里插入图片描述
二、本地模型的版本
下面Python的代码是本地版本,模型大概6G大小,首次运行需要在网络较快的电脑运行,下载时间需要半小时。

主代码如下:

#AI绘画工具_
import os, sys, time
import threading
import webbrowser
import configparser as configparserfrom PIL import Image, ImageQtfrom PyQt5 import QtWidgets
from PyQt5.QtWidgets import QWidget,QMessageBox, QFileDialog,QApplication
from PyQt5.QtCore import Qt, QTimer, QSize
from PyQt5.QtGui import QImage, QPixmap, QIcon
from PyQt5.QtCore import QByteArray
# import hashlib
from AI_Drawing_UI_Local import Ui_Ai_Drawing
import torch
from diffusers import StableDiffusionPipelinemy_title = "AI绘画工具"out_dir = os.path.join(os.path.expanduser("~"), 'Pictures')
out_dir_pic = out_dir
run_flag = 0; Box1_flag = True; Box2_flag = True; Box3_flag = False
filesnums = 1
t0 = time.time()
t1 = time.time()
t2 = time.time()
iii = 0
stop_flag = False
break_flag = Falseicanx_path = os.path.join(os.path.expanduser("~"), '.icanx')
if not os.path.exists(icanx_path): os.mkdir(icanx_path)
ini_file = os.path.join(icanx_path,'icanx.ini')
cfg = configparser.ConfigParser()
if not os.path.exists(ini_file):file = open(ini_file, 'w')file.write("[APPID]\napiKey=\nsecretKey=\nout_path=\n")file.close()cfg.read(ini_file)out_dir = os.path.join(os.path.expanduser("~"), 'Pictures')cfg.set('APPID', 'out_path', out_dir)    # 注意键值是用set()方法cfg.write(open(ini_file, 'w'))    # 一定要写入才生效sample = ['日照香炉生紫烟,遥看瀑布挂前川,水墨画','亭台楼榭 中国画','杨柳依依 莫奈','牧童遥指杏花村 水墨画','姹紫嫣红 中国画','青山绿水 梵高','雄鹰展翅 中国画','倒影 写意 油画 莫奈','孤舟蓑笠翁 水墨画','万山红遍 中国画','山花烂漫 水彩画','晚来天欲雪,能饮一杯无',"星空,未来,科技",'山水,松,石,水墨画','日出,海面,4k壁纸,复杂'
]# def get_md5(src):	#调用云上模型的API使用
#     m = hashlib.md5()
#     m.update(src.encode('UTF-8'))
#     return m.hexdigest()
# def get_stamp():
#     timestamp = int(round(time.time() * 1000))
#     return str(timestamp)class MainWin(QWidget, Ui_Ai_Drawing):def __init__(self):super(MainWin, self).__init__()self.setupUi(self)global run_flag, out_dirself.createLayout()data = QByteArray().fromBase64(ico_data.encode())image = QImage()#image.loadFromData(data, "my.ico")pix = QPixmap.fromImage(image)cfg.read(ini_file)out_dir = cfg.get('APPID', 'out_path')self.txt2.setText(out_dir)self.flash_item_str = ""self.setWindowIcon(QIcon(pix))self.setWindowFlags(Qt.WindowMinimizeButtonHint)self.show(); run_flag = 1self.total_nums_over = 5# def show_error(self,str):#     r_button = QMessageBox.question(self, my_title,'\n\n'+str+'\n\n', QMessageBox.Ok)def show_error(self, str):infoBox = QMessageBox()infoBox.setIcon(QMessageBox.Information)infoBox.setText(str)infoBox.setStandardButtons(QMessageBox.Ok)infoBox.button(QMessageBox.Ok).animateClick(10000)  # 10秒自动关闭infoBox.exec_()def set_False_Btn(self):self.outButton.setEnabled(False)self.startButton.setEnabled(False);       self.stopButton.setEnabled(True)self.quitButton.setEnabled(False)def set_True_Btn(self):self.outButton.setEnabled(True)self.startButton.setEnabled(True);       self.stopButton.setEnabled(False)self.quitButton.setEnabled(True)def startrun(self):global iii, stop_flag, break_flag, t0, t2iii = 0stop_flag = Falsebreak_flag = Falset0 = time.time()if not os.path.exists(out_dir): self.show_error('输出目录不存在,请重新选择!'); returnself.set_False_Btn()out_sums = self.spinBox.value()prompt = self.lineEdit.text()self.set_text_info('【运行信息】 正在初始化AI模型......')def run_thread():global iii, stop_flag, break_flag, t0 ,t1, t2for i in range(out_sums):iii += 1t1 = time.time()if break_flag:self.txt12.setText('【运行信息】 用户终止了正在运行的绘画...')# self.set_True_Btn()breaktorch.backends.cudnn.benchmark = Truepipe = StableDiffusionPipeline.from_pretrained("IDEA-CCNL/Taiyi-Stable-Diffusion-1B-Chinese-v0.1",torch_dtype=torch.float16,cache_dir='./model').to('cuda')image = pipe(prompt, guidance_scale=7.5).images[0]time_str = str(time.strftime('%Y%m%d@%H-%M-%S', time.localtime(time.time())))file_name = out_dir + '/' + time_str + '.jpg'image.save(file_name)# image = Image.open("11.jpg")# time.sleep(2)t2 = time.time()runinfo = '【运行信息】 当前绘画耗时:%.3f秒 | 总绘画耗时:%.1f秒 | 绘画个数:%d' % ((t2 - t1), (t2 - t0), i+1)self.set_text_info(runinfo)image = ImageQt.toqimage(image)piximg = QPixmap.fromImage(image.scaled(QSize(256, 256), Qt.IgnoreAspectRatio))if i % 3 == 0: self.my_label1.setPixmap(piximg)if i % 3 == 1: self.my_label2.setPixmap(piximg)if i % 3 == 2: self.my_label3.setPixmap(piximg)stop_flag = Truet = threading.Thread(target=run_thread)t.start()self.my_timer = QTimer(self)self.my_timer.start(500)self.my_timer.timeout.connect(self.set_run_over)def set_text_info(self, str):self.txt12.setText(str)self.flash_item_str = strdef set_run_over(self):global t0, t1, t2, iiiif stop_flag:t2 = time.time()self.txt12.setText('【运行信息】 绘画完毕!总消耗时间:%d秒' % (t2 - t0))self.set_True_Btn()self.my_timer.stop()else:if self.txt12.text() == '【运行信息】':self.txt12.setText(self.flash_item_str)else:self.txt12.setText('【运行信息】')# self.txt12.repaint()def stoprun(self):global break_flagr_button = QMessageBox.question(self, my_title,"\n\n    确定要停止绘画过程吗?\n\n", QMessageBox.Yes | QMessageBox.No)if r_button == QMessageBox.Yes: break_flag = Truedef getapikeyBT(self):webbrowser.open("https://fengshenbang-lm.com/document")def helpWin(self):str="\n\n\n【软件设置】首次使用需要点击右上角按钮,此步骤只需操作一次即可;\n" \"【绘画提示】输入您想得到的绘画内容、风格等信息,可参考体验示例;\n" + \"【测试示例】可以直接下拉选择绘画提示语,用于初学者参考;\n"+\"【输出目录】选择绘画文件保存的目录,默认是本机图片目录;\n【查看输出】点击打开输出目录,便于查看绘画结果;\n\n\n"QMessageBox.question(self, my_title+"  【帮助信息】", str, QMessageBox.Ok)def quitWin(self):r_button = QMessageBox.question(self, my_title,"\n\n退出将终止绘画进程...... \n\n确认退出吗?\n\n", QMessageBox.Yes | QMessageBox.No)if r_button == QMessageBox.Yes:cfg.read(ini_file)cfg.set('APPID', 'out_path', out_dir)  # 注意键值是用set()方法cfg.write(open(ini_file, 'w'))  # 一定要写入才生效sys.exit()def checkresult(self):try: os.startfile(out_dir)except: passdef outButton_fuc(self):global out_dirout_dir = QFileDialog.getExistingDirectory(self,'选择绘画的输出文件夹', out_dir)if out_dir == '':self.txt2.setText(out_dir_pic)out_dir = out_dir_picelse: self.txt2.setText(out_dir)def click_comboBox(self, text):self.lineEdit.setText(text)def createLayout(self):self.my_label1.setAlignment(Qt.AlignCenter)self.my_label2.setAlignment(Qt.AlignCenter)self.my_label3.setAlignment(Qt.AlignCenter)# self.sample_lbl.setPixmap(QPixmap("sample.jpg"))# self.my_label1.setFixedSize(427, 240); self.my_label2.setFixedSize(427, 240)self.my_label1.setToolTip("本区域,显示的是绘画图片缩略图...")self.my_label2.setToolTip("本区域,显示的是绘画图片缩略图...")self.my_label3.setToolTip("本区域,显示的是绘画图片缩略图...")self.txt12.setText('【运行信息】 可以点击帮助按钮,查看使用说明..')self.lineEdit.setText(sample[0])self.comboBox.addItems(sample)self.comboBox.activated[str].connect(self.click_comboBox)self.outButton.setToolTip("选择输出文件目录,绘画后的文件将存在此目录...")self.outButton.clicked.connect(self.outButton_fuc)self.stopButton.setEnabled(False)self.startButton.clicked.connect(self.startrun)self.stopButton.clicked.connect(self.stoprun)self.helpButton.clicked.connect(self.helpWin)self.quitButton.clicked.connect(self.quitWin)self.check_result.clicked.connect(self.checkresult)if __name__ == '__main__':QApplication.setAttribute(Qt.AA_EnableHighDpiScaling)app = QtWidgets.QApplication(sys.argv)MainWin = MainWin()sys.exit(app.exec_())

软件的界面代码如下:

# -*- coding: utf-8 -*-# Form implementation generated from reading ui file 'AI_Drawing_UI_Local.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.from PyQt5 import QtCore, QtGui, QtWidgetsclass Ui_Ai_Drawing(object):def setupUi(self, Ai_Drawing):Ai_Drawing.setObjectName("Ai_Drawing")Ai_Drawing.setEnabled(True)Ai_Drawing.resize(864, 651)font = QtGui.QFont()font.setFamily("宋体")font.setPointSize(12)Ai_Drawing.setFont(font)Ai_Drawing.setMouseTracking(False)self.layoutWidget = QtWidgets.QWidget(Ai_Drawing)self.layoutWidget.setGeometry(QtCore.QRect(320, 595, 531, 41))self.layoutWidget.setObjectName("layoutWidget")self.horizontalLayout_5 = QtWidgets.QHBoxLayout(self.layoutWidget)self.horizontalLayout_5.setContentsMargins(0, 0, 0, 0)self.horizontalLayout_5.setObjectName("horizontalLayout_5")self.startButton = QtWidgets.QPushButton(self.layoutWidget)font = QtGui.QFont()font.setFamily("宋体")font.setPointSize(12)self.startButton.setFont(font)self.startButton.setObjectName("startButton")self.horizontalLayout_5.addWidget(self.startButton)self.stopButton = QtWidgets.QPushButton(self.layoutWidget)font = QtGui.QFont()font.setFamily("宋体")font.setPointSize(12)self.stopButton.setFont(font)self.stopButton.setObjectName("stopButton")self.horizontalLayout_5.addWidget(self.stopButton)spacerItem = QtWidgets.QSpacerItem(60, 20, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Minimum)self.horizontalLayout_5.addItem(spacerItem)self.helpButton = QtWidgets.QPushButton(self.layoutWidget)font = QtGui.QFont()font.setFamily("宋体")font.setPointSize(12)self.helpButton.setFont(font)self.helpButton.setObjectName("helpButton")self.horizontalLayout_5.addWidget(self.helpButton)self.quitButton = QtWidgets.QPushButton(self.layoutWidget)font = QtGui.QFont()font.setFamily("宋体")font.setPointSize(12)self.quitButton.setFont(font)self.quitButton.setObjectName("quitButton")self.horizontalLayout_5.addWidget(self.quitButton)self.groupBox_2 = QtWidgets.QGroupBox(Ai_Drawing)self.groupBox_2.setGeometry(QtCore.QRect(10, 20, 841, 281))self.groupBox_2.setContextMenuPolicy(QtCore.Qt.DefaultContextMenu)self.groupBox_2.setAlignment(QtCore.Qt.AlignCenter)self.groupBox_2.setObjectName("groupBox_2")self.my_label1 = QtWidgets.QLabel(self.groupBox_2)self.my_label1.setGeometry(QtCore.QRect(10, 20, 256, 256))self.my_label1.setObjectName("my_label1")self.my_label3 = QtWidgets.QLabel(self.groupBox_2)self.my_label3.setGeometry(QtCore.QRect(570, 20, 256, 256))self.my_label3.setObjectName("my_label3")self.my_label2 = QtWidgets.QLabel(self.groupBox_2)self.my_label2.setGeometry(QtCore.QRect(290, 20, 256, 256))self.my_label2.setObjectName("my_label2")self.groupBox_4 = QtWidgets.QGroupBox(Ai_Drawing)self.groupBox_4.setGeometry(QtCore.QRect(10, 330, 841, 141))self.groupBox_4.setAlignment(QtCore.Qt.AlignCenter)self.groupBox_4.setObjectName("groupBox_4")self.outButton = QtWidgets.QPushButton(self.groupBox_4)self.outButton.setGeometry(QtCore.QRect(20, 100, 78, 24))font = QtGui.QFont()font.setFamily("宋体")font.setPointSize(12)self.outButton.setFont(font)self.outButton.setObjectName("outButton")self.txt2 = QtWidgets.QLabel(self.groupBox_4)self.txt2.setGeometry(QtCore.QRect(110, 102, 771, 20))self.txt2.setObjectName("txt2")self.check_result = QtWidgets.QPushButton(self.groupBox_4)self.check_result.setGeometry(QtCore.QRect(690, 100, 131, 24))font = QtGui.QFont()font.setFamily("宋体")font.setPointSize(12)self.check_result.setFont(font)self.check_result.setObjectName("check_result")self.txt2_2 = QtWidgets.QLabel(self.groupBox_4)self.txt2_2.setGeometry(QtCore.QRect(20, 60, 81, 20))self.txt2_2.setObjectName("txt2_2")self.txt2_3 = QtWidgets.QLabel(self.groupBox_4)self.txt2_3.setGeometry(QtCore.QRect(20, 30, 81, 20))self.txt2_3.setObjectName("txt2_3")self.lineEdit = QtWidgets.QLineEdit(self.groupBox_4)self.lineEdit.setGeometry(QtCore.QRect(100, 30, 551, 20))self.lineEdit.setObjectName("lineEdit")self.comboBox = QtWidgets.QComboBox(self.groupBox_4)self.comboBox.setGeometry(QtCore.QRect(100, 60, 551, 22))self.comboBox.setObjectName("comboBox")self.spinBox = QtWidgets.QSpinBox(self.groupBox_4)self.spinBox.setGeometry(QtCore.QRect(770, 30, 51, 22))self.spinBox.setMinimum(1)self.spinBox.setStepType(QtWidgets.QAbstractSpinBox.DefaultStepType)self.spinBox.setProperty("value", 3)self.spinBox.setDisplayIntegerBase(10)self.spinBox.setObjectName("spinBox")self.txt2_4 = QtWidgets.QLabel(self.groupBox_4)self.txt2_4.setGeometry(QtCore.QRect(690, 30, 81, 20))self.txt2_4.setObjectName("txt2_4")self.groupBox_5 = QtWidgets.QGroupBox(Ai_Drawing)self.groupBox_5.setGeometry(QtCore.QRect(10, 500, 841, 61))self.groupBox_5.setAlignment(QtCore.Qt.AlignCenter)self.groupBox_5.setObjectName("groupBox_5")self.txt12 = QtWidgets.QLabel(self.groupBox_5)self.txt12.setGeometry(QtCore.QRect(20, 25, 861, 21))self.txt12.setObjectName("txt12")self.retranslateUi(Ai_Drawing)QtCore.QMetaObject.connectSlotsByName(Ai_Drawing)def retranslateUi(self, Ai_Drawing):_translate = QtCore.QCoreApplication.translateAi_Drawing.setWindowTitle(_translate("Ai_Drawing", "iCANX AI绘画工具"))self.startButton.setText(_translate("Ai_Drawing", "开始处理"))self.stopButton.setText(_translate("Ai_Drawing", "停止处理"))self.helpButton.setText(_translate("Ai_Drawing", "帮助"))self.quitButton.setText(_translate("Ai_Drawing", "退出"))self.groupBox_2.setTitle(_translate("Ai_Drawing", "预览窗口"))self.my_label1.setText(_translate("Ai_Drawing", "    【AI绘画缩略图显示区域】"))self.my_label3.setText(_translate("Ai_Drawing", "    【AI绘画缩略图显示区域】"))self.my_label2.setText(_translate("Ai_Drawing", "    【AI绘画缩略图显示区域】"))self.groupBox_4.setTitle(_translate("Ai_Drawing", "文件设置"))self.outButton.setText(_translate("Ai_Drawing", "输出目录"))self.txt2.setText(_translate("Ai_Drawing", "输出目录"))self.check_result.setText(_translate("Ai_Drawing", "查看绘画图片"))self.txt2_2.setText(_translate("Ai_Drawing", "体验示例:"))self.txt2_3.setText(_translate("Ai_Drawing", "绘画提示:"))self.txt2_4.setText(_translate("Ai_Drawing", "输出数量:"))self.groupBox_5.setTitle(_translate("Ai_Drawing", "信息统计"))self.txt12.setText(_translate("Ai_Drawing", "【运行信息】"))

三、最后
上诉代码没有任何删节,可以直接运行。基本的依赖库还是要自己安装的,看import就知道要安装哪些库了。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

健身房会员管理系统

开发工具(eclipse/idea/vscode等):idea 数据库(sqlite/mysql/sqlserver等):mysql 功能模块(请用文字描述,至少200字):涉及到的技术 SpringBoot Mybatis Thymeleaf mysql题目描述:健身房管理系统是对健身房会员,员工的管…

健身房管理系统分析

主要功能: 1、经理权限&#xff1a; <1>会员的添加和移除&#xff1b; <2>会员基本情况的查询功能&#xff1b; <3>会员的消费记录查询功能&#xff1b; <4>会员续卡功能&#xff1b; <5>教练的在职和当班情况&#xff1b; <6>教练的排班…

让 ChatGPT 来担任这个召之即来挥之即去的私人健身教练

健身教练 和ChatGPT聊天可以运用在各种正式、非正式&#xff0c;工作、休闲场合&#xff0c;让我们再来看一个场景&#xff0c;也是年轻人群体中非常热门的话题&#xff1a;健身。健身已经是年轻人最流行的活动&#xff0c;既可以是私密的个人健身&#xff0c;也可以是呼朋唤友…

chatgpt赋能python:如何使用Python快速打包iOS应用程序

如何使用Python快速打包iOS应用程序 如果你是iOS应用程序开发者&#xff0c;那么你一定知道打包iOS应用程序的繁琐和耗时。在iOS应用商店上发布应用程序需要遵守特定的规则&#xff0c;并且必须打包成IPA文件。如果你想在你的开发流程中更快地打包应用程序&#xff0c;那么你可…

腾讯云控制台详细介绍及使用教程

腾讯云控制台是用户通过网页端管理和使用云产品的入口&#xff0c;用户通过控制台对腾讯云产品和服务进行选购、查看、使用等各种操作。掌握了控制台的使用就是操作腾讯云产品的第一步。 一、控制台总览页 在控制台总览页&#xff0c;查看所有腾讯云产品入口、使用文档入口、在…

使用腾讯云轻量应用服务器搭建网站教程(也太简单了)

码笔记一直想搭建个人网站博客&#xff0c;腾讯云轻量应用服务器还不错&#xff0c;公网带宽也够用&#xff0c;想着用搞台轻量服务器搭建个网站&#xff0c;没想到通过应用镜像&#xff0c;也太简单了&#xff0c;把全部教程分享给大家&#xff1a; 本文是以轻量应用服务器上…

登陆注册实现腾讯云短信验证功能

目前比较流行的短信登陆注册&#xff0c;因为腾讯提供的sdk每月有100条免费短信&#xff0c;下面博主将和大家分享实现的过程&#xff01; 第一步 腾讯云短信功能注册&#xff1a; 然后配置短信签名和短信正文来确认发送短信的默认格式 需要注意的是&#xff0c;两个花括号为…

腾讯云SSL证书配置(nginx)

申请SSL证书 下载证书 下载完证书之后解压&#xff0c;因为腾讯云选择的是nginx服务器&#xff0c;所以我们只需要下载nginx并解压。 配置Nginx服务器 我们需要把刚才解压的nginx证书文件拷贝到nginx的conf路径下面—也就是服务器中/etc/nginx/conf路径下面的。 ssl_cert…

腾讯云弹性MapReduce

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、弹性MapReduce产品架构二、弹性MapReduce 应用功能三、弹性MapReduce优势四、弹性MapReduce试用场景总结 前言 腾讯云弹性MapReduce是结合云技术和 Hadoop、…

Xshell远程连接腾讯云服务器(Xshell无法使用密码登录)

1.新建 填写云服务器IP地址后选择连接 输入root 如果上方密码处为灰色无法点击&#xff0c;则通过云服务器网页登录终端 输入命令cd /etc/ssh命令进入文件夹修改sshd_config&#xff08;注意&#xff01;不要与ssh_config混淆&#xff09; 输入命令vim sshd_config对该配置…

腾讯云域名购买和域名解析教程

一. 域名购买操作步骤 1. 登录 腾讯云 域名注册 2. 选择合适的域名&#xff0c;添加到购物车&#xff0c;然后支付。 二. 添加解析操作步骤 步骤1&#xff1a;添加记录 1. 登录 腾讯云 DNS 解析控制台。 2. 在 “域名解析列表” 中&#xff0c;可查看全部已添加的域名。如下…

Java后端利用腾讯云短信服务发短信

利用手机验证码进行注册或进行下一步操作已经是非常普遍的&#xff0c;这篇文章就教你如何是用腾讯云短信服务发送手机验证码。 文章目录 一、前提条件 二、代码实现 1.引入依赖 2.Java代码实现 3.代码改进 4.实现效果 三&#xff0c;关于项目中验证码验证逻辑分享 1.…

腾讯云完整建站过程

整个网站的建立其实是很简单的,总共包含如下几个步骤: 第一步&#xff1a;购买自己的云域名,首推腾讯云域名,学生党优惠力度很大 第二步&#xff1a;购买自己的云空间,我也是在腾讯云上购买的轻量级云服务器 第三步&#xff1a;将域名和云空间绑定起来,也就是域名的解析 第四步…

腾讯云服务器入门使用流程 新手必看教程

一、根据个人需要选择云服务器配置, 打开首页》云服务器,选好cpu、内存、带宽,地域,这几个是主要的。其他都可以默认选择。 二、登陆控制台 1、登陆账号之后,在首页右上角,点击控制台 进去看到服务界面,控制台比较容易看懂。搜索你需要的云产品 2、以云服务器为例,…

腾讯云GPU云服务器配置初体验

一、故事背景 GPU 云服务器&#xff08;GPU Cloud Computing&#xff09;是基于 GPU 的快速、稳定、弹性的计算服务&#xff0c;因此&#xff0c;可以广泛应用到深度学习训练/推理、图形图像处理以及科学计算等场景中。 GPU 云服务器提供和标准 CVM 云服务器一致的方便快捷的管…

使用腾讯云发送短信API接口实现(完整流程)

步骤 一、开通腾讯云短信服务二、申请签名前的准备&#xff08;申请公众号&#xff09;三、创建签名和模板四、腾讯云API实现发送短信五、使用springboot进行调用六、可能会报的错误 一、开通腾讯云短信服务 在腾讯云官网找到短信服务&#xff0c;开通 二、申请签名前的准备…

使用腾讯云发送短信 ---- 手把手教你搞定所有步骤

最近在跟着一位大佬搞他的Austin项目&#xff0c;austin项目核心功能&#xff1a;发送消息。 这里作者使用了腾讯云发送短信&#xff0c;因为注册就送 100条免费短信的额度。发短信的功能就不用花钱了。 这里就记录了使用腾讯云的整个过程 第一步&#xff1a;注册腾讯云 注…

注册免费使用腾讯云企业邮箱

新手小白适用 在狗爹上买的域名 然鹅现在并不赠送邮箱了 买空间倒是有赠送的 但是我还专门打客服问过 说是不稳定…. 还是入鹅厂的坑吧 小绿锁也是在鹅厂申请的 别问我为啥…. &#xff08;还不是因为穷。。&#xff09; 如果你是阿里云的空间或是那几个某空间都是赠送企业…

腾讯云账户注销操作教程

本篇文章为腾讯云账号注销操作教程&#xff0c;操作前请认真查阅腾讯云官方文档。 腾讯云官方文档地址&#xff1a;https://cloud.tencent.com/document/product/378/30252 文章说明&#xff1a;解决小白不知道如何注销腾讯云账号的问题。 操作必读的注意事项&#xff1a; 1.注…

使用腾讯云搭建青龙面板

一、申请一个轻应用服务器 我申请的Ubuntu20.04-Docker20-1Kmy服务器 点击面板进去&#xff0c;在防火墙中添加规则 5700端口 设置好防火墙后&#xff0c;使用本地工具或者直接在页面连接进服务器 二、下载青龙镜像 1、拉取镜像 docker pull whyour/qinglong:latest 注&…