【Python】逆向解析js代码
目录
1. 打开百度翻译网页,查找翻译结果的网络资源包
2. 获取翻译结果网络资源包的url、请求头、请求体,解析json文件数据
3. 观察请求体字段,发现 query 字段便是我们输入的需要翻译的值
4. ctrl F 快捷键搜索sign值的网络资源包,并逐一检查
5. 拿到与请求体的结构高度相似的资源包,通过资源包查看 js 代码
6. 打上断点,网页重新进行翻译操作
7. 进入生成sing值的 b 函数
8. 新建 GetSign.js 文件,将生成 sign 的相关函数复制进去
9. 下载能够调用 js 代码的包——PyExecJS,并测试能否得到 sign 值
10. python调用获取 sign值 的 js代码,并设计循环输入翻译
示例:通过爬虫,获取百度翻译结果的数据包,实现翻译程序
注:本代码仅供学习使用,无任何商业用途
1. 打开百度翻译网页,查找翻译结果的网络资源包
示例输入:你好世界

2. 获取翻译结果网络资源包的url、请求头、请求体,解析json文件数据
import requests
import jsonurl = 'https://fanyi.baidu.com/v2transapi?from=zh&to=en'head = {'Accept': '*/*','Accept-Encoding': 'gzip, deflate, br','Accept-Language': 'zh-CN,zh;q=0.9','Acs-Token': '1681821543479_1681821547074_cdT+RJYeqGduG6BGb1EQqooYQeVUGl4fWWVaRRFLLS9VMj1oUeo7+LGHskLILBwXG5ixw+3TmSgPA3eXigF/SZJvUY7ZBCSG2bHqPTeCE5vksblcieD5l2xmK/SK5Mg2mx63+EqIsrlVUBsgRRzhmcvKeRiHzQ6mw8CN03KrdjAGQASyEwH418TOl+mU7a9cI+wDmoPRhTJ+nATiAn2OoJlCHDpvmWN+7D92f7EQmVuBI0N8j+fs+vJ8rvT6S+o9ToY0IJQzl0U/leQ/qAv0jFStvp+I6dZixZdh6aCzin9sCVKdEGgt2/LBmFE1USpx3IJBnOzRq+LE7DWZu6mm5gAtWbyI2bLvWKeFA2G9+2Oz0iYR5fqrT8+jPjyB8FbJsviypmeSFBP8AhymqOQUJS9eXYCpMBVyFiv9H2zaONxZ7pYhG4yzhWEja/wLZSgKWbb32C2wTbHPwUd7AUfsAbOilLvs7hrwW6i9V7Pp6rc=','Connection': 'keep-alive','Content-Length': '165','Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8','Cookie': 'BAIDUID=0647EC4156FC828CCBB17B759524E3CB:FG=1; APPGUIDE_10_0_2=1; REALTIME_TRANS_SWITCH=1; FANYI_WORD_SWITCH=1; HISTORY_SWITCH=1; SOUND_SPD_SWITCH=1; SOUND_PREFER_SWITCH=1; BIDUPSID=0647EC4156FC828CCBB17B759524E3CB; PSTM=1677378660; BAIDUID_BFESS=0647EC4156FC828CCBB17B759524E3CB:FG=1; BA_HECTOR=aha124a58g81a481a184249r1i3sgie1n; ZFY=jo6gNdVtZQsuvZ3s6FJsXdFdp7ChS0d1062AcKWdkuE:C; H_PS_PSSID=38516_36547_38469_38368_38468_38486_37931_26350_22157; delPer=0; PSINO=5; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; BCLID=7777928453825166006; BCLID_BFESS=7777928453825166006; BDSFRCVID=4A0OJexroG07VWbfhAjSrpnZrLweG7bTDYrEOwXPsp3LGJLVFe3JEG0Pts1-dEu-S2OOogKKKgOTHICF_2uxOjjg8UtVJeC6EG0Ptf8g0M5; BDSFRCVID_BFESS=4A0OJexroG07VWbfhAjSrpnZrLweG7bTDYrEOwXPsp3LGJLVFe3JEG0Pts1-dEu-S2OOogKKKgOTHICF_2uxOjjg8UtVJeC6EG0Ptf8g0M5; H_BDCLCKID_SF=tRAOoC_-tDvDqTrP-trf5DCShUFstU_jB2Q-XPoO3KtbSx3Pb47NMltXKMTzbf7f5mkf3fbgy4op8P3y0bb2DUA1y4vp0tLeWeTxoUJ2-KDVeh5Gqq-KXU4ebPRiB-b9QgbA5hQ7tt5W8ncFbT7l5hKpbt-q0x-jLTnhVn0MBCK0HPonHjD5j6vL3D; H_BDCLCKID_SF_BFESS=tRAOoC_-tDvDqTrP-trf5DCShUFstU_jB2Q-XPoO3KtbSx3Pb47NMltXKMTzbf7f5mkf3fbgy4op8P3y0bb2DUA1y4vp0tLeWeTxoUJ2-KDVeh5Gqq-KXU4ebPRiB-b9QgbA5hQ7tt5W8ncFbT7l5hKpbt-q0x-jLTnhVn0MBCK0HPonHjD5j6vL3D; Hm_lvt_64ecd82404c51e03dc91cb9e8c025574=1679997333,1681233344,1681821530; Hm_lpvt_64ecd82404c51e03dc91cb9e8c025574=1681821542; ab_sr=1.0.1_MWRjYzE0MDliYTg3MWQ4ZWYxNGQwNDgwNDkwNzk5YTkxNmZhYzE4MWUyM2I2NWVlY2Y2NmI4MjM4NTk4Mjk2ZGE1NmFhM2IxYzUxZDczZTAyZWQ1NTc3YzQ2M2Q5YzZiZmY5YmIyMjI5YjU5MTViNjE4MmVjZjBhYjYyZmIxNDc0NTM5YzI0OWNiMjVjZDQzOWU1ZDNmOTU5MTk0ZGZkYw==','Host': 'fanyi.baidu.com','Origin': 'https://fanyi.baidu.com','Referer': 'https://fanyi.baidu.com/translate?aldtype=16047&query=&keyfrom=baidu&smartresult=dict&lang=auto2zh','sec-ch-ua': '"Chromium";v="112", "Google Chrome";v="112", "Not:A-Brand";v="99"','sec-ch-ua-mobile': '?0','sec-ch-ua-platform': '"Windows"','Sec-Fetch-Dest': 'empty','Sec-Fetch-Mode': 'cors','Sec-Fetch-Site': 'same-origin','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36','X-Requested-With': 'XMLHttpRequest'
}data = {'from': 'zh','to': 'en','query': '你好世界','transtype': 'realtime','simple_means_flag': 3,'sign': '1265.321472','token': '29bebf2fa756361e24b224d2c2b0151f','domain': 'common'
}response = requests.post(url, headers=head, data=data)
print(response.text)
print(response.status_code)res = json.loads(response.text)
val = res['trans_result']['data'][0]['dst']
print(val)

3. 观察请求体字段,发现 query 字段便是我们输入的需要翻译的值

修改 query 字段里面的值,进行翻译验证

出现报错信息,我们重新在网页进行翻译验证,观察并比较请求体信息

观察可得,随着 query 的改变,sign 也一起改变了,sign 的值看起来并无规律,所以我们接下来逆向解析js代码,获取sign
4. ctrl F 快捷键搜索sign值的网络资源包,并逐一检查

5. 拿到与请求体的结构高度相似的资源包,通过资源包查看 js 代码

在资源包响应体response内部点击右键,选择进入源代码,搜索sign并找到第17个sign处,发现sign的值和函数 b 以及参数 i 有关,并且参数 i 的值就是 query 的值
6. 打上断点,网页重新进行翻译操作


停到断点处之后,点击右上角箭头,调试下一步,进入函数
7. 进入生成sing值的 b 函数

b 函数的代码实现原理是什么我们不关心,我们需要一步步调试,找到和 b 函数相关的函数有哪些,然后一起复制进一个新建的 js 文件
8. 新建 GetSign.js 文件,将生成 sign 的相关函数复制进去
通过调试可得,相关的函数还有一个 n 函数,将 n 函数与 b 函数一起复制进入GetSign.js里面
观察其他 n 函数代码格式,修改函数的命名格式

9. 下载能够调用 js 代码的包——PyExecJS,并测试能否得到 sign 值
# pip install PyExecJS
import execjswith open("GetSign.js", 'r', encoding='utf-8') as f:ctx = execjs.compile(f.read())sign = ctx.call('GetSign', '我的世界') # 函数名 + 参数print(sign)

运行报错 window 未定义
在前端 js 代码查找window,发现 b 函数内的 window 与 r 值相关,而且是对 r 赋值

将 b 函数调试结束,我们可以得到 r 的值, 我们直接对 r 赋值
成功得到 sign 值
10. python调用获取 sign值 的 js代码,并设计循环输入翻译
import requests
import json
import execjsurl = 'https://fanyi.baidu.com/v2transapi?from=zh&to=en'head = {'Accept': '*/*','Accept-Encoding': 'gzip, deflate, br','Accept-Language': 'zh-CN,zh;q=0.9','Acs-Token': '1681821543479_1681821547074_cdT+RJYeqGduG6BGb1EQqooYQeVUGl4fWWVaRRFLLS9VMj1oUeo7+LGHskLILBwXG5ixw+3TmSgPA3eXigF/SZJvUY7ZBCSG2bHqPTeCE5vksblcieD5l2xmK/SK5Mg2mx63+EqIsrlVUBsgRRzhmcvKeRiHzQ6mw8CN03KrdjAGQASyEwH418TOl+mU7a9cI+wDmoPRhTJ+nATiAn2OoJlCHDpvmWN+7D92f7EQmVuBI0N8j+fs+vJ8rvT6S+o9ToY0IJQzl0U/leQ/qAv0jFStvp+I6dZixZdh6aCzin9sCVKdEGgt2/LBmFE1USpx3IJBnOzRq+LE7DWZu6mm5gAtWbyI2bLvWKeFA2G9+2Oz0iYR5fqrT8+jPjyB8FbJsviypmeSFBP8AhymqOQUJS9eXYCpMBVyFiv9H2zaONxZ7pYhG4yzhWEja/wLZSgKWbb32C2wTbHPwUd7AUfsAbOilLvs7hrwW6i9V7Pp6rc=','Connection': 'keep-alive','Content-Length': '165','Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8','Cookie': 'BAIDUID=0647EC4156FC828CCBB17B759524E3CB:FG=1; APPGUIDE_10_0_2=1; REALTIME_TRANS_SWITCH=1; FANYI_WORD_SWITCH=1; HISTORY_SWITCH=1; SOUND_SPD_SWITCH=1; SOUND_PREFER_SWITCH=1; BIDUPSID=0647EC4156FC828CCBB17B759524E3CB; PSTM=1677378660; BAIDUID_BFESS=0647EC4156FC828CCBB17B759524E3CB:FG=1; BA_HECTOR=aha124a58g81a481a184249r1i3sgie1n; ZFY=jo6gNdVtZQsuvZ3s6FJsXdFdp7ChS0d1062AcKWdkuE:C; H_PS_PSSID=38516_36547_38469_38368_38468_38486_37931_26350_22157; delPer=0; PSINO=5; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; BCLID=7777928453825166006; BCLID_BFESS=7777928453825166006; BDSFRCVID=4A0OJexroG07VWbfhAjSrpnZrLweG7bTDYrEOwXPsp3LGJLVFe3JEG0Pts1-dEu-S2OOogKKKgOTHICF_2uxOjjg8UtVJeC6EG0Ptf8g0M5; BDSFRCVID_BFESS=4A0OJexroG07VWbfhAjSrpnZrLweG7bTDYrEOwXPsp3LGJLVFe3JEG0Pts1-dEu-S2OOogKKKgOTHICF_2uxOjjg8UtVJeC6EG0Ptf8g0M5; H_BDCLCKID_SF=tRAOoC_-tDvDqTrP-trf5DCShUFstU_jB2Q-XPoO3KtbSx3Pb47NMltXKMTzbf7f5mkf3fbgy4op8P3y0bb2DUA1y4vp0tLeWeTxoUJ2-KDVeh5Gqq-KXU4ebPRiB-b9QgbA5hQ7tt5W8ncFbT7l5hKpbt-q0x-jLTnhVn0MBCK0HPonHjD5j6vL3D; H_BDCLCKID_SF_BFESS=tRAOoC_-tDvDqTrP-trf5DCShUFstU_jB2Q-XPoO3KtbSx3Pb47NMltXKMTzbf7f5mkf3fbgy4op8P3y0bb2DUA1y4vp0tLeWeTxoUJ2-KDVeh5Gqq-KXU4ebPRiB-b9QgbA5hQ7tt5W8ncFbT7l5hKpbt-q0x-jLTnhVn0MBCK0HPonHjD5j6vL3D; Hm_lvt_64ecd82404c51e03dc91cb9e8c025574=1679997333,1681233344,1681821530; Hm_lpvt_64ecd82404c51e03dc91cb9e8c025574=1681821542; ab_sr=1.0.1_MWRjYzE0MDliYTg3MWQ4ZWYxNGQwNDgwNDkwNzk5YTkxNmZhYzE4MWUyM2I2NWVlY2Y2NmI4MjM4NTk4Mjk2ZGE1NmFhM2IxYzUxZDczZTAyZWQ1NTc3YzQ2M2Q5YzZiZmY5YmIyMjI5YjU5MTViNjE4MmVjZjBhYjYyZmIxNDc0NTM5YzI0OWNiMjVjZDQzOWU1ZDNmOTU5MTk0ZGZkYw==','Host': 'fanyi.baidu.com','Origin': 'https://fanyi.baidu.com','Referer': 'https://fanyi.baidu.com/translate?aldtype=16047&query=&keyfrom=baidu&smartresult=dict&lang=auto2zh','sec-ch-ua': '"Chromium";v="112", "Google Chrome";v="112", "Not:A-Brand";v="99"','sec-ch-ua-mobile': '?0','sec-ch-ua-platform': '"Windows"','Sec-Fetch-Dest': 'empty','Sec-Fetch-Mode': 'cors','Sec-Fetch-Site': 'same-origin','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36','X-Requested-With': 'XMLHttpRequest'
}while True:with open("GetSign.js", "r", encoding="utf-8") as f:Source = input('请输入被翻译文本:')ctx = execjs.compile(f.read())sign = ctx.call("GetSign", Source)data = {'from': 'zh','to': 'en','query': Source,'transtype': 'realtime','simple_means_flag': 3,'sign': sign,'token': '29bebf2fa756361e24b224d2c2b0151f','domain': 'common'}response = requests.post(url, headers=head, data=data)# print(response.text)# print(response.status_code)res = json.loads(response.text)val = res['trans_result']['data'][0]['dst']print(val)

相关文章:
【Python】逆向解析js代码
目录 1. 打开百度翻译网页,查找翻译结果的网络资源包 2. 获取翻译结果网络资源包的url、请求头、请求体,解析json文件数据 3. 观察请求体字段,发现 query 字段便是我们输入的需要翻译的值 4. ctrl F 快捷键搜索sign值的网络资源包&#x…...
websorm启动vue项目修改内容后自动运行内存溢出
手动启动vue项目正常运行,修改部分内容保存后会自动重新run一下, 这个时候就报错内存溢出,然后很悲伤的需要再手动重启一下。 (在网上查了好多方法就不单独加链接了) 前3个方法都试过对于我的项目无效,第4…...
第05章_数组
第05章_数组 讲师:尚硅谷-宋红康(江湖人称:康师傅) 官网:http://www.atguigu.com 本章专题与脉络 1. 数组的概述 1.1 为什么需要数组 需求分析1: 需要统计某公司50个员工的工资情况,例如计…...
Spring Security --- 快速入门
概念 Spring Security是一个功能强大且高度可定制的,主要负责为Java程序提供声明式的 身份验证和访问控制 的安全框架Spring Security的底层主要是 基于 Spring AOP 和 Servlet 过滤器 来实现安全控制它提供了全面的安全解决方案同时授权粒度可以在 Web请求级和方法…...
程序员挣够了钱,到中年失业真的很可怕吗?
借用最近很火的一张图,看看没有工作,你手里的存款够用几年(按每年年化3.5%,利息继续放入理财计算): 如果每年花销在10万左右(折合每个月8333元,应该是比较富足的)&#x…...
【Log and Dump Summary】
开各模块log前,建议先关闭selinux权限,并确定camera logD是已经有打印的,如果没有打印可以用如下命令开启: adb shell setenforce 0adb shell setprop persist.vendor.mtk.camera.log_level 3 adb shell pkill camera*再按以下方法开对应模块的 log: 1. 开MTK Camera2 …...
软考证书找工作有用吗?软考找工作用处大吗
软考证书是衡量IT技术人才能力的一种重要评价标准。 一、软考高级证书对找工作的帮助 1. 竞争力增强 软考高级证书具有一定难度和较高的专业技能要求,拥有该证书的人的技术水平和专业能力会得到认可和尊重,从而增强求职者的竞争力。 2. 拓宽职业发展…...
JavaWeb之谈论项目编码规范_Java版
1. 关于DDD项目结构约定 1.1 项目结构使用DDD整洁架构进行分包 maven项目结构遵从DDD整洁架构分为如下四个顶级包: application - 应用层代码,一般为接口层定义API的实现类和一些结构转化,application不应该承载业务逻辑 domain - 领域层&a…...
Map排序
(一)treeHap 特点:treeMap中的元素根据键的大小自然排序(默认是升序) 1、treeHap遍历测试 import java.io.IOException; import java.util.*; public class Main {public static void main(String[] args)throws IOException {…...
mycat读写分离
1.准备工作 tar包 http://dl.mycat.org.cn/2.0/install-template/mycat2-install-template-1.20.zip jar包 http://dl.mycat.org.cn/2.0/1.21-release/ (下载最新的jar包) 将下载好的jar放到tar中的lib目录下并放入linux系统中 2.创建逻辑库 连接mycat端口8066 账号root 密码12…...
[Linux]环境变量
目录 基本概念 常见的环境变量 PATH测试 HOME测试 SHELL测试 和环境变量相关的命令 main函数的三个参数 环境变量的组织方式 通过代码如何获取环境变量 通过系统调用获取或设置环境变量 基本概念 环境变量(environment variables)一般是指在操作系统中用来指定操作系…...
次优二叉查找树(次优查找树)_递归和非递归实现_20230414
次优二叉查找树(次优查找树)-递归和非递归实现 前言 当有序表中的各记录的查找概率相等的时候,采用折半查找效率可以提升查找性能;如果有序表中的各记录的查找概率不相等,那么折半查找就不再适用。 如果只考虑查找成功的情况&a…...
贯穿设计模式第八话--设计原则总结篇
🥳🥳🥳 茫茫人海千千万万,感谢这一刻你看到了我的文章,感谢观赏,大家好呀,我是最爱吃鱼罐头,大家可以叫鱼罐头呦~🥳🥳🥳 从今天开始,将…...
地理信息系统(ArcGIS)在水文水资源、水环境中的实践技术应用及案例分析
目录 专题一 ArcGIS:数据管理 专题二 ArcGIS:数据转换 专题三 ArcGIS:地图制作 专题四 水文水环境数据编辑与管理 专题五 水文水环境数据处理与分析 专题六 ArcGIS水文分析及流域特征提取 专题七 湖泊水库水环境监测及评价 专题八 河…...
部分国产水文水动力模型介绍
一、HydroMPM模型 1、模型介绍 2016年度自立项目HydroMPM系统开发与集成完成的洪水分析模拟软件等成果经权威专家鉴定整体达到国际领先水平,HydroMPM_FloodRisk入选国家防总《全国重点地区洪水风险图编制项目可选软件名录》。成果应用项目100余项,累计…...
HTTP请求
1、get请求工具类 public static String requestGet(String url) throws Exception { String strResult null; try { HttpClient httpsClient HttpsClient.getInstance(); HttpGet request new HttpGet(url); HttpResponse response http…...
网络威胁情报项目:为什么仍然很疯狂
大约五年前,向首席信息安全官( CISO)询问他们的网络威胁情报 (CTI) 计划时,得到了两种截然不同的回答。 资源丰富的大型企业正在投资他们的威胁情报计划,目的是为了战术、运营和战略目的更好地实施它。 规模较小、资…...
Linux系统下使用shell“多线程执行命令”
前言 在工作中常遇到如下场景: 系统未接入日志中心,系统本身使用集群部署,那么再查找日志的时候只能一台一台的去搜索关键字,后来运维同学发现这样一台一台效率太低了,于是有了升级版,升级之后的方式还是一…...
HighTec编译器错误记录
目录 1、HighTec安装后缺少Universal Debug Engine 2、HighTec工程改名后不能跳转函数定义,提示找不到定义。 3、HighTec工程重复编译 1、HighTec安装后缺少Universal Debug Engine 在HighTec安装后,没有调试UDE,重装系统后还是没有&#x…...
智慧校园大数据云平台(3)
技术详解 OTN技术OTN是以波分复用技术为基础、 在光层组织网络的传送网, 是下一代的骨干传送网。OTN是通过G.872、G.709、G.798等一系列ITU-T的建议所规范的新一代“数字传送体系”和“光传送体系”,将解决传统WDM网络无波长/子波长业务调度能力差、组网…...
2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...
从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...
ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...
vue3 定时器-定义全局方法 vue+ts
1.创建ts文件 路径:src/utils/timer.ts 完整代码: import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...
html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...
C#中的CLR属性、依赖属性与附加属性
CLR属性的主要特征 封装性: 隐藏字段的实现细节 提供对字段的受控访问 访问控制: 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性: 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑: 可以…...
省略号和可变参数模板
本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...
HubSpot推出与ChatGPT的深度集成引发兴奋与担忧
上周三,HubSpot宣布已构建与ChatGPT的深度集成,这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋,但同时也存在一些关于数据安全的担忧。 许多网络声音声称,这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...
深入浅出Diffusion模型:从原理到实践的全方位教程
I. 引言:生成式AI的黎明 – Diffusion模型是什么? 近年来,生成式人工智能(Generative AI)领域取得了爆炸性的进展,模型能够根据简单的文本提示创作出逼真的图像、连贯的文本,乃至更多令人惊叹的…...
