当前位置: 首页 > article >正文

Blueprint —— 蓝图技术指南

目录一蓝图函数库二蓝图编译器术语编译过程三向蓝图公开游戏元素使类可蓝图化可读和可写属性可执行和可覆盖函数四将C暴露给蓝图速度复杂度范例创建蓝图 API提示和技巧蓝图是UE4中引入的一个强大新功能是创建新UClasses的一种方法无需书写或编译任何代码当创建一个蓝图时可以选择扩展C类或另一个蓝图类然后可添加、排列及自定义Components使用可视化的脚本语言实现自定义的逻辑对Event及交互做出反应定义变量处理输入及创建一种完全自定义的对象类型每个蓝图都具有一个Construction ScriptC中的构造函数类似创建对象时运行它该脚本可动态地基于多个因素构建Actor实例如一个可以自动调整大小来填充建筑物间空隙的篱笆从这个角度来说蓝图也可以看成是一个非常强大的预制系统一蓝图函数库在开发过程中通常会发现需要通过函数集来简化项目开发这些函数通常无所属可在多种游戏代码之间重复使用通过蓝图编译时通常也会需要这些函数如需要公开共享效用函数不想将它们和一种特定的游戏对象类型捆绑在一起对于这类情况使用蓝图函数库蓝图函数库是一个静态函数的合集提供不与特定游戏对象绑定的功能这些库可群组化为逻辑函数集如 AI 蓝图库或包含提供多种不同功能区域如系统蓝图库访问的函数创建蓝图函数库与使用 UFUNCTION() 宏对蓝图公开函数十分相似所有蓝图类均继承自 UBlueprintFunctionLibrary而非派生自 Actor 或 UObject只应包含静态方法UCLASS() class UAnalyticsBlueprintLibrary : public UBlueprintFunctionLibrary { GENERATED_UCLASS_BODY() /** Starts an analytics session without any custom attributes specified */ UFUNCTION(BlueprintCallable, Category Analytics) static bool StartSession();蓝图函数库为 UObject 非直接派生需要标准 UCLASS() 和 GENERATED_UCLASS_BODY() 宏还将在可从蓝图进行调用的函数上添加 UFUNCTION() 宏蓝图函数库中的函数可被设计为 BlueprintCallable 或 BlueprintPure取决于调用是否存在副作用//函数实现 bool UAnalyticsBlueprintLibrary::StartSession() { TSharedPtrIAnalyticsProvider Provider FAnalytics::Get().GetDefaultConfiguredProvider(); if (Provider.IsValid()) { return Provider-StartSession(); } else { UE_LOG(LogAnalyticsBPLib, Warning, TEXT(StartSession: Failed to get the default analytics provider. Double check your [Analytics] configuration in your INI)); } return false; }AAIController* UAIBlueprintHelperLibrary::GetAIController(AActor* ControlledActor) { APawn* AsPawn CastAPawn(ControlledActor); if (AsPawn ! nullptr) { return CastAAIController(AsPawn-GetController()); } return CastAAIController(ControlledActor); }二蓝图编译器与普通C类一样蓝图在使用前需要进行编译当单击编译Compile按钮时系统将把蓝图资源的属性和图表转换为类术语$ FKismetCompilerContext执行编译工作的类系统为每次编译生成一个新实例存储正在编译的类、蓝图等的引用$ FKismetFunctionContext保存用于编译单个函数的信息如对关联图表、属性和生成的UFunction的引用$ FNodeHandlingFunctor一个辅助工具类用于处理编译器中的一个节点类单件包含用于注册引脚连接和生成编译语句的函数$ FKismetCompiledStatement编译器中的工作单元编译器将节点转换为一组已编译语句后端将这些语句转换为字节码操作$ FKismetTerm图表中的终端文字、常量或变量引用每个数据引脚连接都与其中一个终端关联还可在NodeHandlingFunctor中为Scratch变量、中间结果等创建自己的术语编译过程清理类类是现场编译的意味着相同的UBlueprintGeneratedClass会被一次又一次地清理和重用 因此指向类的指针不必固定CleanAndSanitizeClass()将属性和函数从类中移到临时包中的垃圾类中 然后清除类中的任何数据创建类属性编译器在蓝图的NewVariables以及其他一些地方构造脚本等上进行迭代 以查找类所需的所有UProperty然后在函数CreateClassVariablesFromBlueprint()中创建UClass作用域上的UProperty创建函数列表编译器通过处理事件图表处理函数图表和预编译函数如为每个context调用PrecompileFunction() 来为类创建函数列表处理事件图表由CreateAndProcessUberGraph()函数执行此函数将所有事件图表复制到一个大图表中之后节点有机会扩展然后 此函数为图表中的每个事件节点创建一个函数存根并为每个事件图表创建一个FKismetFunctionContext处理函数图表函数图表的处理由ProcessOneFunctionGraph()函数完成 此函数将每个图表复制到一个临时图表中其中节点将获得机会而展开此函数还将为每个函数图表都创建一个FKismetFunctionContext预编译函数函数的预编译由每个context的PrecompileFunction()处理绑定和链接类现在编译器已经了解类的所有UProperty和UFunction因此可以绑定和链接该类这包括填充属性链、属性大小、函数图等此时从本质上看它具有一个类标头 -减去最终的标记和元数据 - 以及一个类默认对象(CDO)编译函数下一步是为剩余的节点生成FKismetCompiledStatment对象 此操作使用AppendStatementForNode()通过节点处理器的Compile()函数完成此函数可以在编译函数中创建FKismetTerm对象但前提是这些对象仅在本地使用完成编译类为了完成编译类编译器将确定类标记并从父类传播标记和元数据最后执行一些最终检查以确保编译过程中一切正常后端发出生成的代码后端将每个函数上下文中的语句集合转换为代码FKismetCompilerVMBackendFKismetCppBackend复制类默认对象属性编译器使用一个特殊的函数CopyPropertiesForUnrelatedObjects()将类的旧CDO中的值复制到新CDO中属性通过标记序列化复制 因此只要名称一致它们就应当会被正确地传输在此阶段CDO的组件将被重新实例化并进行适当的修复操作时以GeneratedClass CDO为准重新实例化由于类可能已经更改了大小且属性可能已经过添加或删除 因此编译器需要用刚编译的类重新实例化所有对象这个过程使用TObjectIterator查找类的所有实例生成一个新实例然后使用CopyPropertiesForUnrelatedObjects()函数将旧实例复制到新实例三向蓝图公开游戏元素使用蓝图可以使代码非常灵活从而提供许多好处如 游戏设计人员可能希望在游戏中实现一种新型武器作为程序员现在编写武器代码的方式与传统方式几乎完全相同而不同之处仅在于公开了一些重要的功能 比如射速和Fire()函数在游戏测试后设计师确定需要改变枪支的射速以呈曲线射击设计师可以简单地进入蓝图并直接更改射速而不是对射速重新编码并重新编译游戏从而节省设计师和程序员的时间使类可蓝图化为创建从某个类扩展而来的蓝图必须将该类定义为Blueprintable 这涉及到在类定义之前的UCLASS()宏中添加此关键字此关键字使蓝图系统能够感知该类 以便显示在New Blueprint对话框的类列表中且可选择它作为所创建蓝图的父类//最简单的声明形式 UCLASS(Blueprintable) class AMyBlueprintableClass : AActor { GENERATED_BODY() }关键字说明Blueprintable将该类公开为可接受的用于创建蓝图的基类默认值为NotBlueprintable但继承时除外由子类继承BlueprintType将该类公开为可用于蓝图中的变量的类型NotBlueprintable指定此类不是用于创建蓝图的可接受基类否定指定可蓝图化关键字的父类的效果可读和可写属性为了将C类中定义的变量公开给从该类扩展而来的蓝图必须使用UPROPERTY()宏中列出的下列关键字之一来定义该变量 这些关键字使蓝图系统能够感知该变量以便在My Blueprint面板中显示该变量 并且可以设置或访问该变量的值//Characters Health UPROPERTY(EditAnywhere, BlueprintReadWrite, CategoryCharacter) float health;关键字说明BlueprintReadOnly此属性可以由蓝图读取但不能修改BlueprintReadWrite此属性可以通过蓝图读取或写入Multicast Delegate Keywords说明BlueprintAssignable应公开属性以在蓝图中赋值BlueprintCallable公开属性以在蓝图图表中调用可执行和可覆盖函数为了从蓝图调用本地函数必须使用UFUNCTION()宏中列出的下列关键字之一来定义该函数这些关键字使蓝图系统能够感知该函数以便在上下文菜单或控制板中显示该函数并可将其添加到图表并执行 - 或在事件的情况下可覆盖和执行这些函数//最简单的声明形式 UFUNCTION(BlueprintCallable, CategoryWeapon) void Fire();在创建函数签名时注意通过引用传递某一参数将使该参数成为蓝图节点上的输出引脚若要使参数通过引用传递并仍然显示为输入请使用UPARAM()宏UFUNCTION(BlueprintCallable, Category Example Nodes) static void HandleTargets(UPARAM(ref) TArrayFVector InputLocations, TArrayFVector OutputLocations);还可使用UPARAM()来更改引脚的显示名称/** 根据采用度数的旋转值制作一个旋转体{绕Z轴的旋转、绕X轴的旋转、绕Y轴的旋转} */ UFUNCTION(BlueprintPure, CategoryMath|Rotator, meta(Keywordsconstruct build rotation rotate rotator makerotator, NativeMakeFunc)) static FRotator MakeRotator( UPARAM(DisplayNameX (Roll)) float Roll, UPARAM(DisplayNameY (Pitch)) float Pitch, UPARAM(DisplayNameZ (Yaw)) float Yaw);关键字Blueprint to Native Communication说明BlueprintCallable可从蓝图中调用的本地函数执行本地代码将更改所调用对象的某些内容或一些其他全局状态意味着必须调度此函数或者明确地告诉它相对于其他节点执行的顺序用白色的执行线来执行此操作所有蓝图可调用函数将按照它们在白色执行行上出现的顺序调用BlueprintPure可从蓝图中调用的本地函数执行本地代码不会更改它所调用对象的任何内容或任何其他全局状态意味着调用这个节点不会改变任何东西只需要输入然后告诉输出它们是诸如数学节点、-、*等、或变量获取器或任何永远都不会改变任何内容之类的东西不需要调度也没有白色的执行线的连接由编译器根据哪个BlueprintCallable节点需要这些节点生成的数据而自动计算出来关键字Native to Blueprint Communication说明BlueprintImplementableEvent这是允许本地函数调用蓝图的主要方式就像在蓝图中实现的虚拟函数如不存在实现则该函数调用将被忽略必须注意的是如BlueprintImplementableEvent没有返回值或输出参数那么它将显示为一个事件可通过右击并在蓝图事件图表中选择它来使用如有返回值或任何输出参数将在My Blueprints选项卡中列出然后可通过右单并选择实现的函数来覆盖注意BlueprintImplementableEvents没有函数的本地实现BlueprintNativeEvent除了如果蓝图没有覆盖此函数则调用此函数的本地默认实现之外此函数与上述函数别无二致如想要某种默认行为而蓝图没有实现它但又希望蓝图能够在需要时覆盖功能那么此函数将大有帮助这些函数的使用成本更高所以只将它们用在需要功能的地方当覆盖BlueprintNativeEvent时如需要仍然可以调用本地实现方法是在事件或函数条目节点上右击并选择Add call to parent四将C暴露给蓝图可从两个主要方面考虑使用 C 或蓝图速度表达式复杂度这两因素之外便主要取决于游戏的复杂度和团队的构成如团队中美术师的数量多于程序员则蓝图的优越性大于 C 代码相反如程序员数量较多则最好使用 C还需预计开发过程中人员的缺席在 Epic普遍的工作流程是 - 内容设计师创建十分复杂的蓝图后程序员编写新蓝图节点的代码明确如何将大量工作压缩到 C 中这样就能将功能块移入一个新的 C 函数中较好的方法是大量使用蓝图复杂度达到一定程度转入 C使功能的表达更加简洁否则对非程序人员而言过于复杂速度实际上蓝图执行的速度比 C 执行慢这并不意味着会影响性能但需大量计算或进行高频率操作时最好使用 C也可根据团队状况和项目性能对二者进行完美结合如蓝图功能较多可将部分功能移入 C 使速度加快蓝图中剩余的部分功能可保留灵活性如分析表明蓝图中的一项操作耗时极长考虑只将该部分移入 C其他部分仍然保留在蓝图中如控制上千个 Actor 的群组系统通过蓝图可视化脚本执行时间极长在这类情况下在 C 中处理决定、路径、和其他群组功能性能更佳之后可将部分调整参数和控制函数公开到蓝图复杂度就表达式复杂度而言部分操作在 C 中更容易执行蓝图可良好地执行大量操作但部分内容不易在节点中表达操作大型数据集、执行字符串操作在大量数据集上执行复杂算术等内容均十分复杂不易在视觉系统中进行操作这些内容更适合于 C可轻松进行查看了解具体细节群组系统更适合 C 代码的另一个原因在于表达式复杂度范例部分功能块适合在 C 中处理部分适合在蓝图中处理如程序员可在 C 中创建自定义事件的角色类之后蓝图可用于该角色类的延展实际指定模型并进行默认设置可在 C 中实现能力系统的基础类之后设计师再创建实际执行操作的蓝图收集或重生函数为可在蓝图中实现的事件这样的可拾取道具可被覆写以便设计师生成不同粒子发射器和声效创建蓝图 API提示和技巧创建对蓝图公开的 API 时需要考虑以下几点可选参数便于在蓝图中处理/** * 将字符串显示到日志中也可选择显示到屏幕上。 * 如 Print To Log 为 true它将显示在 Output Log 窗口中。否则它将被记录为Verbose通常不会显示。 * * param InString 登出字符串 * param bPrintToScreen 是否将输出显示到屏幕上 * param bPrintToLog 是否将输出保存到日志中 * param bPrintToConsole 是否将输出显示到控制台 * param TextColor 是否将输出显示到控制台 */ UFUNCTION(BlueprintCallable, meta(WorldContextWorldContextObject, CallableWithoutWorldContext, Keywords log print, AdvancedDisplay 2), CategoryUtilities|String) static void PrintString(UObject* WorldContextObject, const FString InString FString(TEXT(Hello)), bool bPrintToScreen true, bool bPrintToLog true, FLinearColor TextColor FLinearColor(0.0,0.66,1.0));带有大量返回参数的函数和返回结构体的函数之间优先前者UFUNCTION(BlueprintCallable, Category Example Nodes) static void MultipleOutputs(int32 OutputInteger, FVector OutputVector);可在现有函数上添加新参数但如要进行移除或变更则需要否决原始函数并添加一个新函数必须使用否决元数据使新函数的信息显示在蓝图中UFUNCTION(BlueprintCallable, CategoryCollision, meta(DeprecatedFunction, DeprecationMessage Use new CapsuleOverlapActors, WorldContextWorldContextObject, AutoCreateRefTermActorsToIgnore)) static ENGINE_API bool CapsuleOverlapActors_DEPRECATED(UObject* WorldContextObject, const FVector CapsulePos, float Radius, float HalfHeight, EOverlapFilterOption Filter, UClass* ActorClassFilter, const TArrayAActor* ActorsToIgnore, TArrayclass AActor* OutActors);如函数需要接受枚举考虑将expand enum as execs用作元数据可使节点更易于使用UFUNCTION(BlueprintCallable, Category DataTable, meta (ExpandEnumAsExecsOutResult, DataTablePinCurveTable)) static void EvaluateCurveTableRow(UCurveTable* CurveTable, FName RowName, float InXY, TEnumAsByteEEvaluateCurveTableResult::Type OutResult, float OutXY);许多完成耗时较长的操作均为隐藏函数/** * 执行带延迟的隐藏操作。 * * param WorldContext 世界背景。 * param Duration 延迟长度。 * param LatentInfo 隐藏操作。 */ UFUNCTION(BlueprintCallable, CategoryUtilities|FlowControl, meta(Latent, WorldContextWorldContextObject, LatentInfoLatentInfo, Duration0.2)) static void Delay(UObject* WorldContextObject, float Duration, struct FLatentActionInfo LatentInfo );如有可能考虑将函数放入共享库便于在多个类之间使用避开target引脚class DOCUMENTATIONCODE_API UTestBlueprintFunctionLibrary : public UBlueprintFunctionLibrary尽可能将节点标记为纯可避免在节点上使用连线的执行引脚/* 在 0 和 最大 - 1 之间返回一致分配的随机数 */ UFUNCTION(BlueprintPure, CategoryMath|Random) static int32 RandomInteger(int32 Max);将一个函数标记为const也可使蓝图节点不带执行引脚/** * 获得 actor 到世界的转换。 * return 从 actor 空间转换到世界空间的转换。 */ UFUNCTION(BlueprintCallable, meta(DisplayName GetActorTransform), CategoryUtilities|Transformation) FTransform GetTransform() const;

相关文章:

Blueprint —— 蓝图技术指南

目录 一,蓝图函数库 二,蓝图编译器 术语 编译过程 三,向蓝图公开游戏元素 使类可蓝图化 可读和可写属性 可执行和可覆盖函数 四,将C暴露给蓝图 速度 复杂度 范例 创建蓝图 API:提示和技巧 蓝图 是UE4中引…...

STM32开发文档智能检索:Lychee-Rerank助力嵌入式工程师

STM32开发文档智能检索:Lychee-Rerank助力嵌入式工程师 你是不是也遇到过这样的场景?正在调试一个STM32的USART通信,突然想不起来某个中断标志位的具体含义,或者某个库函数的参数该怎么配置。于是,你不得不放下手头的…...

【GESP C++八级考试考点详细解读】

GESP C 八级考试考点详细解读及洛谷练习题单 1. 计数原理(加法原理、乘法原理) 重要性:组合数学基础,用于分解复杂问题为独立事件。常见题型:统计路径数、事件组合可能性、分阶段计数问题。洛谷练习题: [P…...

【Git】TortiseGit设置过滤上传文件

一、Git忽略文件机制概述 Git通过.gitignore文件管理版本控制中的忽略规则,决定哪些文件不应被跟踪和提交。TortoiseGit作为Windows平台常用的Git图形化客户端,提供了便捷的界面操作来配置这些规则。合理设置文件过滤对于保持仓库整洁、避免提交敏感信息…...

Qwen3.5-9B助力VSCode Codex风格编程:个性化AI助手配置指南

Qwen3.5-9B助力VSCode Codex风格编程:个性化AI助手配置指南 1. 为什么选择Qwen3.5-9B作为你的编程助手 如果你是一名开发者,可能已经体验过GitHub Copilot这类AI编程助手的便利。但商业化的解决方案往往存在隐私顾虑、定制化程度低等问题。Qwen3.5-9B作…...

Gartner Magic Quadrant for Data Center Switching 2025 | Gartner 数据中心交换魔力象限 2025

Gartner Magic Quadrant for Data Center Switching 2025 Gartner 魔力象限:数据中心网络交换机 2025 请访问原文链接:https://sysin.org/blog/gartner-magic-quadrant-data-center-switching-2025/ 查看最新版。原创作品,转载请保留出处。…...

Lingbot-Depth-Pretrain-ViTL-14模型精调教程:基于自定义数据集的迁移学习

Lingbot-Depth-Pretrain-ViTL-14模型精调教程:基于自定义数据集的迁移学习 想把手头那个强大的Lingbot深度估计模型,调教得更懂你的专业领域吗?比如,让它从看普通的街景,变成能精准分析医疗影像的层厚,或者…...

小白也能搞定的人脸检测:MogFace本地部署+可视化界面详解

小白也能搞定的人脸检测:MogFace本地部署可视化界面详解 你是不是觉得人脸检测这种技术听起来很高深,需要写很多代码、配置复杂环境才能用?或者你试过一些在线工具,但担心隐私问题,或者觉得效果不够理想? …...

ccmusic-database实战教程:结合plot.py可视化训练曲线与混淆矩阵

ccmusic-database实战教程:结合plot.py可视化训练曲线与混淆矩阵 1. 引言:为什么需要可视化? 当你训练一个音乐流派分类模型时,最让人头疼的是什么?是漫长的等待,还是看着一堆冰冷的数字,却不…...

图形学面试题

仅用于个人学习记录 主要参考乐书和这篇:https://zhuanlan.zhihu.com/p/430541328 还有这个网站:https://learnopengl-cn.github.io/,这个写的真的非常好 数学方面 点乘/点积/内积 ab axbx ayby azbz |ab|cosθ 几何意义:1…...

QT开发桌面应用:集成Graphormer的分子属性预测软件

QT开发桌面应用:集成Graphormer的分子属性预测软件 1. 为什么化学研究者需要这个工具 化学研究领域每天都会产生大量新分子结构,快速预测这些分子的物理化学性质对药物研发、材料设计等工作至关重要。传统方法要么依赖昂贵的实验设备,要么需…...

百度网盘资源秒级解锁:告别手动搜索的智能提取码获取方案

百度网盘资源秒级解锁:告别手动搜索的智能提取码获取方案 【免费下载链接】baidupankey 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 当你在深夜找到一份急需的学习资料,点击百度网盘分享链接后,却被"请输入提取码…...

SanAndreasUnity编辑器工具使用教程:提升开发效率的10个技巧

SanAndreasUnity编辑器工具使用教程:提升开发效率的10个技巧 【免费下载链接】SanAndreasUnity Open source reimplementation of GTA San Andreas game engine in Unity 项目地址: https://gitcode.com/gh_mirrors/sa/SanAndreasUnity SanAndreasUnity是一款…...

2025届必备的六大AI写作网站推荐榜单

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 作为大语言模型的DeepSeek,在学术论文写作里能够发挥多重辅助功能,在…...

终极指南:gh_mirrors/ema/emacs.d的Vim模拟——Evil模式配置详解

终极指南:gh_mirrors/ema/emacs.d的Vim模拟——Evil模式配置详解 【免费下载链接】emacs.d Fast and robust Emacs setup. 项目地址: https://gitcode.com/gh_mirrors/ema/emacs.d 如果你是Vim爱好者但又想体验Emacs的强大功能,那么gh_mirrors/em…...

Java面试必备:LiuJuan20260223Zimage常见问题解析

Java面试必备:LiuJuan20260223Zimage常见问题解析 本文针对Java面试中常见的LiuJuan20260223Zimage相关问题进行深度解析,涵盖核心原理、代码实现、优化策略等实用内容,帮助面试者系统掌握这一技术点。 1. 什么是LiuJuan20260223Zimage LiuJ…...

2026最权威的六大AI科研方案实测分析

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 作为具有先进性的大语言模型的DeepSeek,在论文写作里能够发挥出有着多种不同情况…...

保姆级教程:清音听真语音识别系统环境配置与API调用完整指南

保姆级教程:清音听真语音识别系统环境配置与API调用完整指南 1. 系统介绍与核心优势 清音听真语音识别系统搭载了Qwen3-ASR-1.7B旗舰引擎,相比前代0.6B版本有了质的飞跃。这个系统专为处理各种复杂语音场景而设计,无论是嘈杂环境录音、专业…...

Wan2.2-I2V-A14B高性能推理:PyTorch 2.4+CUDA 12.4极致算力释放

Wan2.2-I2V-A14B高性能推理:PyTorch 2.4CUDA 12.4极致算力释放 1. 镜像概述与核心价值 Wan2.2-I2V-A14B私有部署镜像是一款专为文生视频任务打造的高性能推理解决方案。这个镜像经过深度优化,能够充分发挥RTX 4090D显卡的24GB显存潜力,配合…...

OFA视觉蕴含模型应用案例:社交媒体图文检测实战教程

OFA视觉蕴含模型应用案例:社交媒体图文检测实战教程 1. 引言:社交媒体中的图文匹配挑战 在当今社交媒体环境中,图文不符的内容已经成为影响用户体验和信息真实性的重要问题。想象一下这样的场景:一张普通的风景照片配文"全…...

DeEAR部署案例:高校实验室利用DeEAR开展语音情感计算课程实验教学

DeEAR部署案例:高校实验室利用DeEAR开展语音情感计算课程实验教学 1. 引言:当语音遇见情感,教学有了新工具 想象一下,你正在上一门关于人机交互的课程。老师讲了很多理论知识,比如什么是语音情感识别,它在…...

Relm与GTK+深度集成:如何利用原生GUI组件构建现代化界面

Relm与GTK深度集成:如何利用原生GUI组件构建现代化界面 【免费下载链接】relm Idiomatic, GTK-based, GUI library, inspired by Elm, written in Rust 项目地址: https://gitcode.com/gh_mirrors/re/relm Relm是一个基于Rust语言的GUI库,深受Elm…...

PP-DocLayoutV3多场景应用:发票识别前的印章区/金额区/文字区分割实践

PP-DocLayoutV3多场景应用:发票识别前的印章区/金额区/文字区分割实践 1. 引言:发票识别的痛点与版面分析的解法 发票识别是很多企业财务自动化、供应链管理中的常见需求。传统的做法是直接把整张发票图片扔给OCR(文字识别)模型…...

gh_mirrors/ema/emacs.d的拼写检查:wucuo与flyspell对比

gh_mirrors/ema/emacs.d的拼写检查:wucuo与flyspell对比 【免费下载链接】emacs.d Fast and robust Emacs setup. 项目地址: https://gitcode.com/gh_mirrors/ema/emacs.d 在gh_mirrors/ema/emacs.d项目中,拼写检查是提升代码质量和文档准确性的重…...

dialog-polyfill 实战教程:5个真实场景教你构建现代Web弹窗

dialog-polyfill 实战教程:5个真实场景教你构建现代Web弹窗 【免费下载链接】dialog-polyfill Polyfill for the HTML dialog element 项目地址: https://gitcode.com/gh_mirrors/di/dialog-polyfill dialog-polyfill是一款轻量级的HTML弹窗元素兼容工具&…...

解锁Qwen3-TTS新玩法:在复古游戏界面中创作你的AI语音作品

解锁Qwen3-TTS新玩法:在复古游戏界面中创作你的AI语音作品 1. 当AI语音遇上复古游戏:一场声音的像素冒险 还记得小时候玩红白机时,那些简单却充满魔力的8-bit音效吗?现在,你可以用同样的怀旧方式创作属于自己的AI语音…...

快速构建GraphQL服务器:Mercurius入门完整指南

快速构建GraphQL服务器:Mercurius入门完整指南 【免费下载链接】mercurius Implement GraphQL servers and gateways with Fastify 项目地址: https://gitcode.com/gh_mirrors/me/mercurius Mercurius是一个专为Fastify设计的GraphQL适配器,它让开…...

Phi-4-mini-reasoning环境配置:CUDA版本兼容性检查与nvidia-smi验证

Phi-4-mini-reasoning环境配置:CUDA版本兼容性检查与nvidia-smi验证 1. 环境准备与CUDA兼容性检查 在部署Phi-4-mini-reasoning模型前,确保您的GPU环境满足基本要求是至关重要的第一步。这个轻量级开源模型虽然对硬件要求相对友好,但仍需要…...

别再只用均值滤波了!用Python实战对比4种滤波方法(附代码避坑指南)

Python实战:4种滤波方法深度对比与避坑指南 当你面对一组来自Arduino或树莓派的传感器数据时,那些不规则的波动曲线是否让你头疼不已?均值滤波可能是大多数人的第一反应,但今天我要告诉你——数据处理的世界远不止这一种选择。本文…...

Pixel Couplet Gen 模型压缩与量化实践:在低显存GPU上的部署优化

Pixel Couplet Gen 模型压缩与量化实践:在低显存GPU上的部署优化 1. 轻量化部署的技术挑战与突破 在AI图像生成领域,Pixel Couplet Gen以其出色的生成质量广受好评。但当我们尝试在消费级显卡上部署这个模型时,很快就遇到了显存不足的问题—…...