1.【轮子篇】Joystick
2.腾讯T2I-adapter源码分析(1)-运行源码跑训练
3.特效炸裂:Vue3+TypeScript 实现王者荣耀图鉴,王者王已开源!源码源码!分析分析!荣耀
4.å¦ä½ç¨mt管ççè
è£è
5.Axios源码深度剖析 - AJAX新王者
【轮子篇】Joystick
轮子篇Joystick 实现指南
在开发过程中,王者王我曾针对摇杆交互遇到不舒适的源码源码净买率源码问题,决定自定义一个轻量级的分析分析解决方案。目标是荣耀创建一个类似《王者荣耀》风格的摇杆,包括背景、王者王摇杆头以及方向指示。源码源码以下是分析分析整个过程的概述:UI设计与搭建
首先,根据需求草图,荣耀我们使用UGUI构建了一个结构,王者王仅需四个Image组件:Touch区、源码源码背景、分析分析摇杆头和方向指示。Touch区保持透明以接收触控事件,Dir区在摇杆操作时显示方向。事件处理
借鉴NGUI的经验,利用IEventSystemHandler的OnPointerDown、OnDrag和OnPointerUp事件,定义JoystickEvent类,携带一个Vector2方向数据,以及对应的按下、移动和抬起回调函数。摇杆操作逻辑
关键在于计算摇杆的移动,即向量b(摇杆头中心)与向量a(背景中心)之间的差值,形成向量c,这模拟了摇杆操作的实际效果。注意事项
在Drag回调中,确保正确处理向量计算,确保摇杆移动的趣竞拍源码准确性。总结与源码分享
这个过程虽然简单,但通过编写代码和分享,我找到了调整心态的方式。最后,我想提醒大家:坚持不易,但放弃就意味着失败。源码已上传至Git,欢迎各位Fork或Star,地址如下: ...腾讯T2I-adapter源码分析(1)-运行源码跑训练
稳定扩散、midjourney等AI绘图技术,为人们带来了令人惊叹的效果,不禁让人感叹技术发展的日新月异。然而,AI绘图的可控性一直不是很好,通过prompt描述词来操控图像很难做到随心所欲。为了使AI绘制的图像更具可控性,Controlnet、T2I-adapter等技术应运而生。本系列文章将从T2I-adapter的源码出发,分析其实现方法。
本篇是第一篇,主要介绍源码的运行方法,后续两篇将以深度图为例,分别分析推理部分和训练部分的代码。分析T2I-Adapter,也是为了继续研究我一直在研究的课题:“AI生成同一人物不同动作”,例如:罗培羽:stable-diffusion生成同一人物不同动作的尝试(多姿势图),Controlnet、T2I-adapter给了我一些灵感,后续将进行尝试。
T2I-Adapter论文地址如下,mui发邮件源码它与controlnet类似,都是在原模型增加一个旁路,然后对推理结果求和。
T2I-Adapter和controlnet有两个主要的不同点,从图中可见,其一是在unet的编码阶段增加参数,而controlnet主要是解码阶段;其二是controlnet复制unit的上半部结构,而T2I-Adapter使用不同的模型结构。由于采用较小的模型,因此T2I-Adapter的模型较小,默认下占用M左右,而controlnet模型一般要5G空间。
首先确保机器上装有3.6版本以上python,然后把代码clone下来。随后安装依赖项,打开requirements.txt,可以看到依赖项的内容。然后下载示例,下载的会放到examples目录下。接着下载sd模型到model目录下,再下载T2I-Adapter的模型到目录下,模型可以按需到huggingface.co/TencentA...下载。这里我下载了depth和openpose。sd模型除了上述的v1-5,也还下载了sd-v1-4.ckpt。
根据文档,尝试运行一个由深度图生成的例子,下图的左侧是深度图,提示语是"desk, best quality, extremely detailed",右侧是生成出来的。运行过程比较艰辛,html图片拼接源码一开始在一台8G显存的服务器上跑,显存不够;重新搭环境在一台G显存的服务器上跑,还是不够;最后用一台G显存的服务器,终于运行起来了。
接下来尝试跑openpose的例子,下图左侧是骨架图,提示词为"Iron man, high-quality, high-res",右侧是生成的图像。
既然能跑推理,那么尝试跑训练。为了后续修改代码运行,目标是准备一点点数据把训练代码跑起来,至于训练的效果不是当前关注的。程序中也有训练的脚步,我们以训练深度图条件为例,来运行train_depth.py。
显然,习惯了,会有一些问题没法直接运行,需要先做两步工作。准备训练数据,分析代码,定位到ldm/data/dataset_depth.py,反推它的数据集结构,然后准备对应数据。先创建文件datasets/laion_depth_meta_v1.txt,用于存放数据文件的地址,由于只是测试,我就只添加两行。然后准备,图中的租房系统源码java.png和.png是结果图,.depth.png和.depth.png是深度图,.txt和.txt是对应的文本描述。
文本描述如下,都只是为了把代码跑起来而做的简单设置。设置环境变量,由于T2I-Adapter使用多卡训练,显然我也没这个环境,因此要让它在单机上跑。而代码中也会获取一些环境变量,因此做简单的设置。
做好准备工作,可以运行程序了,出于硬件条件限制,只能把batch size设置为1。在A显卡跑了约8小时,完成,按默认的配置,模型保存experiments/train_depth/models/model_ad_.pth。那么,使用训练出来的模型试试效果,能生成如下(此处只是为了跑起来代码,用训练集来测试),验证了可以跑起来。
运行起来,但这还不够,我们还得看看代码是怎么写法,下一篇见。
PS:《直观理解AI博弈原理》是笔者写的一篇长文,从五子棋、象棋、围棋的AI演进讲起,从深度遍历、MAX-MIN剪枝再到蒙特卡罗树搜索,一步步介绍AI博弈的原理,而后引出强化学习方法,通俗易懂地介绍AlphaGo围棋、星际争霸强化学习AI、王者荣耀AI的一些强化学习要点,值得推荐。
AUTOMATIC的webui是近期很流行的stable-diffusion应用,它集合stable-diffusion各项常用功能,还通过扩展的形式支持controlnet、lora等技术,我们也分析了它的源码实现,写了一系列文章。
特效炸裂:Vue3+TypeScript 实现王者荣耀图鉴,已开源!!!
当您访问网站三分钟后,系统会提示您安装PWA应用,安装后,网站将作为独立的应用运行,提供更流畅的体验。
网站提供游戏素材及数据的下载压缩包,放置于Github上。下载后解压存储于内存中,这样访问时,浏览速度会显著提升。若浏览器刷新,压缩包不会重新下载,但需重新解压。
网站提供分包下载功能,便于更新。资源按照顺序依次下载,设计目的是避免同时下载多个文件,提高下载效率。
在版本更新方面,分为网站部署版本和数据版本。新版本在下载资源前会弹出更新提示。通过请求版本JSON文件获取两个版本号并与本地版本号对比,确认更新后,需刷新浏览器并写入新版本号。
用户数据加密后存储在LocalStorage中。当在个人中心退卡时,会导出召唤师卡片文件,下次登录时,凭此卡可在任何设备上登录。
英雄和皮肤的加载策略为先加载小图,用于模糊预览,大图加载完成后,替换并去除模糊效果。每张皮肤海报包含四种尺寸,以适应不同场景和需求。
英雄列表、商城和皮肤列表采用分页加载和虚拟列表技术,以适应不同屏幕尺寸。图集列表采用瀑布流布局+分页加载,且有适配功能。
列表均使用懒加载技术,仅在进入可视区域后加载,同时设有防抖机制,确保只加载在停留ms内的区域,避免加载快速略过的。
夺宝和开箱机制设定每个普通道具数量为2,稀有道具数量为1,每次夺宝和开箱时,奖池会重新打乱并随机选择。
网站中引入了3D立方体元素,通过CSS拼接六面形成,实现生动的视觉效果。同时,使用JavaScript的Element.animate帧动画技术,为用户带来跳跃动画体验。
网站部署于Github,界面演示和源码可在相应链接中查看。尽管部分页面在手机上可能显示不全,建议使用桌面浏览器访问。
å¦ä½ç¨mt管ççè è£è
å¦ä½ç¨mt管ççè è£èå ³äºMTè¿è¡ç®¡ççè¯ï¼å®é ä¸ä½ è¦æä½ä¸ä¸ªæ¹é¢ï¼æ¯è¿ä¸ªMTçä¸ä¸ªæ´ä½çä¸ä¸ªç®¡çç»æï¼ç®¡çæ¶æï¼è¿æ¯ç¬¬ä¸ä¸ªç¹ã第äºä¸ªæ¹é¢è¿è¦è¿è¡ä»ä¹è¿è¡ä¸ä¸ªæ´ä½çè¿ä¹ä¸ä¸ªæ转å¼çå®æï¼ç»ç¹çè§åï¼ä»¥åæ¯æºä»£ç çæä½å使ç¨ï¼è¿ç¬¬äºç¹ï¼ç¬¬ä¸ç¹æ¥è®²çè¯ï¼è¿è¦è¿è¡ä»ä¹å¢ï¼è¿è¡è¿ä¸ªè¿è¡æ¶é´åç»ææ¶é´ï¼é£ä¹ä»£ç æ§å¶æä½ï¼ä»¥åï¼è¿ä¸ªè¾çåçå©ç对æ¯æ åµæ¥è®²çè¯ï¼è¿ä¸ªæ¥è®²ï¼æåå¦ææ¯ä»¥ä¸æ¥è®²é½è½å®æä¹åï¼å°±å¯ä»¥ç¨MTè¿è¡ç®¡çã
Axios源码深度剖析 - AJAX新王者
Axios 是一个基于 Promise 的 HTTP 请求库,支持浏览器和 Node.js 环境。其源码在 GitHub 上开源,欢迎 fork 使用并提出指正。以下为 Axios 的核心目录结构说明,主要关注在 /lib/ 目录下的文件。
在使用 Axios 时,你可能会遇到多种调用方式,本文将带你深入了解这些方式及其原理。
首先,我们来了解一下 Axios 的基本用法。你可以使用以下几种方式发起请求:
1. `axios(option)`:提供一个配置对象进行调用。
2. `axios(url[, option])`:传入 URL 和配置对象。
3. 对于 GET、DELETE 等方法:`axios[method](url[, option])`。
4. 对于 POST、PUT 等方法:`axios[method](url[, data[, option]])`。
5. 使用默认实例:`axios.request(option)`。
通过以上方式,你可以轻松发起 HTTP 请求。
深入源码分析,你将发现 Axios 的强大之处。通过 `axios.js` 文件的入口,核心在于 `createInstance` 方法,该方法能生成一个指向 `Axios.prototype.request` 的 Function,从而实现多种调用方式。
在 Axios 的核心 `Axios` 类中,`request` 方法是所有功能的中枢,无论是 GET、POST 还是其他方法,最终都通过 `request` 方法实现。
配置项是 Axios 与用户交互的关键,它涵盖了几乎所有功能的配置。配置项从低到高优先级顺序为:默认配置对象、`defaults` 属性、`request` 方法参数。
在使用 Axios 时,配置项是如何生效的?答案在于合并多个配置源,最终得到一个综合配置对象。
此外,Axios 提供了拦截器系统,让你可以控制请求前后的数据处理。每个 Axios 实例都有 `interceptors` 属性,用于管理拦截器,让你实现精细的控制。
核心的 `dispatchRequest` 方法则负责处理请求流程,包括请求适配器、发送请求、数据转换等步骤。最后,通过 Promise,你可以优雅地处理异步请求。
数据转换器让你能轻松地在请求和响应数据之间进行转换,如将对象转换为 JSON 格式。默认情况下,Axios 自动处理 JSON 数据转换。
在使用 Axios 时,你还能灵活地控制超时、取消请求、设置 header、携带 cookie 等功能。通过源码分析,你可以深入理解 Axios 的内部机制。
总结,Axios 以其强大、灵活的功能和简洁的 API 设计,成为现代应用中不可或缺的 HTTP 请求工具。通过本文的深入探讨,你将对 Axios 的运作机制有更深刻的理解,从而更好地利用其功能。