游乐游手机版
首页/AI教程/文章详情

闲鱼UI2CODE:GIAC2019黑科技,图片生成跨端代码

时间:2026-08-04 14:14
闲鱼团队提出UI2CODE技术,直接从图片生成跨端UI代码。通过深度学习检测基础组件与自定义组件,采用流式架构实现模块化组合,并参考flex与grid布局标准推导布局属性。该技术已落地应用,未来将提升容器识别与语义理解,进一步解放生产力。

从视觉稿到可运行的UI代码,这个过程到底有多费劲?端侧开发的同学对此应该深有体会。工作量大、技术深度有限,还伴随着视觉设计师一遍遍的走查和沟通,消耗实在不小。

闲鱼团队去年搞了一个很有意思的黑科技,直接从图片翻译成UI代码。具体效果,有一段演示视频可以看看。

为什么选择图片作为输入源?这可能是大多数人最好奇的问题。基于Sketch或Photoshop的插件,相对容易拿到确定性的信息,但图片的挑战更大,因为信息本身容易丢失。不过,选图片有几个关键原因:首先,图片是最终产出物,直观且确定;其次,这个链路对上游没有任何约束;最后,也是最重要的一点,基于图片的应用场景更普适。比如支持自动化测试,或者直接截取竞品的截图来套用数据源找体感,这些事其他方案很难做到。

上面说的是项目意义和选型判断,下面简单介绍下整体流程。

先是通过深度学习,检测出钱I单元,包括基础组件(比如imgview、textview),然后是自定义的BI组件(比如price),最后会寻找已经实现过的业务组件。下面这个图,展示了一个常见业务场景里的识别过程。

a vatar

接下来,基于检测出的元素做元素提取,这个过程会分析系统渲染的原理,并结合OpenCV的方法来实现。

项目整体流程,用下面这张图来表示。

a vatar

整个项目落地过程中,遇到不少技术难点,这里说两个有意思的。

第一个是架构问题。AutoUI的整个流程,是典型的上下游流水形式,每个关键单元都依赖上游的输出,并为下游提供标准输入。项目刚开始时,因为没有明确定义切分关系,经常出现一个人调整代码就影响整个链路的情况。后来做了一次架构升级,定义了“流式架构”——用一张图来帮助理解。

a vatar

在这个单元里,定义了unit、task、server三个部分。unit是最小粒度的功能切分,task是unit的组合,server提供具体服务。每个部分都为上下游提供标准输入输出。这样切分的好处是,所有模块都有标准接口,可以通过模块的MOCK来实现标准化调试;基础功能完成后,还能像搭积木一样组合出想要的task和server。架构调整后,依赖关系大大减少,对项目快速迭代帮助很大。

后续在架构侧,还做了一个有意思的点:服务有些要跑在服务端,有些要跑在客户端上。所以设计了一个客户端和服务端同构的场景,希望开发人员只需要关心界面和服务的通信,而不需要关注具体部署关系。

a vatar

上面说的是架构设计,接下来讲一个具体的布局问题解法:如何把静态的DSL转成合适的布局属性树。这部分分析了影响布局的因素,如下图所示。

a vatar

这个非常常见的布局,拆解出了影响布局的部分:元素位置、间距、容器位置。参考了flex布局标准,也参考了新的grid布局标准,通过枚举元素在位置中的占比,来推导出对应关系。

不过后来还是遇到了一些Bad Case。要写出更贴近人写的UI代码,还得参考语义和相似度。比如上面这个例子,如果只靠枚举布局,很容易推断出四横列布局;但通过语义和相似度分析,就能合理推断出gridview布局。

去年,整个工程已经在业务侧跑起来了,大家从繁琐的切图工作中解放出来,去做更有价值的事。项目也展示给了Google团队,得到了不少关注。

展望未来,方向很清晰——通过更好的分析能力,包括容器识别、复杂背景识别、精确语义理解,产出更接近人写的代码,最终完全取代“切图”工作。此外,在弱交互、强展示的场景,比如导购或营销,通过数据模型抽象、固定PRD识别,有可能真正解放整段人力投入,让大家从偏确定性的需求实现中解放出来。同时,也在和D2C这样的项目一起共建,希望闲鱼已经实现的部分,能够解决更多问题,解放更多生产力。

a vatar

来源:https://developer.aliyun.com/article/706640
上一篇三天开发在线教育系统同步办理ICP许可证 下一篇长期AI任务从聊天记录中独立管理的方法
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
CAD零基础入门教程:坐标输入、图层管理与基础绘图命令
AI教程 · 2026-09-01

CAD零基础入门教程:坐标输入、图层管理与基础绘图命令

本文面向CAD零基础学习者,系统讲解坐标输入、图层管理与基础绘图命令的核心用法。通过分步实操与常见问题排查,帮助新手建立精确绘图习惯,掌握规范出图的基础能力。

CAD从入门到项目交付:绘图、标注、图块与实战工作流
AI教程 · 2026-09-01

CAD从入门到项目交付:绘图、标注、图块与实战工作流

掌握CAD的核心在于建立“画得准、标得清、复用快、交付稳”的工作流。本文提供从环境设置、高频命令组合、标注规范、图块标准化到项目分阶段交付的完整路径,帮助初学者避免常见返工陷阱,独立完成可检查、可复用、可打印的工程图纸。

Claude Code 登录指南:个人、Teams 与企业账号区分与授权步骤
AI教程 · 2026-09-01

Claude Code 登录指南:个人、Teams 与企业账号区分与授权步骤

本文详细解析 Claude Code 登录前的账号类型区分方法,涵盖个人订阅、Teams 席位与企业 Enterprise 席位的授权路径差异。提供终端登录命令、环境变量排查及常见异常处理步骤,帮助用户快速完成正确授权并避免登录路径混淆。

Claude Code 文件修改前的权限模式配置与命令审批指南
AI教程 · 2026-09-01

Claude Code 文件修改前的权限模式配置与命令审批指南

本文详细介绍Claude Code在修改文件前的权限模式配置方法,包括defaultMode可选值、permissions allow与deny规则设置、多层级配置文件管理以及 status验证技巧,帮助开发者安全高效地使用AI编程助手。

Claude Code接入VS Code后先测扩展和终端命令
AI教程 · 2026-09-01

Claude Code接入VS Code后先测扩展和终端命令

在VS Code中接入Claude Code后,建议优先验证扩展面板与集成终端两条入口。本文提供标准检查顺序、关键命令与常见故障排查路径,帮助你快速确认环境就绪,避免后续开发受阻。