设计稿生成代码与 Serverless 的前世今生与未来!

简介: 云栖大会云上 Hello World 活动火热进行中!每位参与者都可收获一份阿里云出品的全球唯一序列号纪念证书!

1.png

一场脑洞实验

云栖大会云上 Hello World 活动火热进行中!每位参与者都可收获一份阿里云出品的全球唯一序列号纪念证书!

作为阿里经济体前端委员会的四大技术方向之一,前端智能化方向一被提及,就不免有人好奇:前端结合机器学习能做些什么,怎么做,未来会不会对前端产生很大的冲击等等。本文以「设计稿自动生成代码」场景为例,细述我们的思考及过程实践。

前端智能化与云 IDE 的结合,通过后者打通的各种服务与接口,再加上设计稿生成代码的能力,可以进一步地提升前端开发者的开发体验,由原来的设计稿生成代码,转变为生成可随时可部署的应用/页面,因此本文最后会介绍如何在阿里云云开发平台使用 imgcook 插件,一键完成设计稿稿生成应用,开启您的智能开发之旅。

前端智能化背景

业界机器学习之势如火如荼,「AI 是未来的共识」频频出现在各大媒体上。李开复老师也在《AI · 未来》指出,将近 50% 的人类工作将在 15 年内被人工智能所取代,尤其是简单的、重复性的工作。并且,白领比蓝领的工作更容易被取代;因为蓝领的工作可能还需要机器人和软硬件相关技术都突破才能被取代,而白领工作一般只需要软件技术突破就可以被取代,那我们前端这个“白领”工作会不会被取代,什么时候能被取代多少?

回看 2010 年,软件几乎吞噬了所有行业,带来近几年软件行业的繁荣;而到了 2019 年,软件开发行业本身却又在被 AI 所吞噬。你看:DBA 领域出现了 Question-to-SQL,针对某个领域只要问问题就可以生成 SQL 语句;基于机器学习的源码分析工具 TabNine 可以辅助代码生成;设计师行业也出了 P5 Banner 智能设计师“鹿班”,测试领域的智能化结合也精彩纷呈。那前端领域呢?

那就不得不提一个我们再熟悉不过的场景了,它就是设计稿自动生成代码(Design2Code,以下简称 D2C),阿里经济体前端委员会 - 前端智能化方向当前阶段,就是聚焦在如何让 AI 助力前端这个职能角色提效升级,杜绝简单重复性工作,让前端工程师专注更有挑战性的工作内容!

imgcook 是什么?

imgcook 使用 Sketch、PSD、静态图片等形式作为输入,通过智能化技术一键生成可维护的前端代码,包含视图代码、数据字段绑定、组件代码、部分业务逻辑代码等。

2.png

它期望能够利用智能化手段,让自己成为一位前端工程师,在对设计稿轻约束的前提下实现高度还原,释放前端生产力,助力前端与设计师高效协作,让工程师们专注于更具挑战性的工作!

设计稿生成代码的目标是让 AI 助力前端这个职能角色提效升级,杜绝简单重复性工作内容。那我们先来分析下,“常规”前端尤其是面向 C 端业务的同学,一般的工作流程日常工作内容大致如下:

3.png

“常规”前端一般的开发工作量,主要集中在视图代码逻辑代码数据联调这几大块,接下来,我们逐块拆解分析。

1. 问题定义

视图代码研发,一般是根据视觉稿编写 HTML 和 CSS 代码。如何提效?当面对 UI 视图开发重复性的工作时,自然想到组件化、模块化等封装复用物料的解决方案,基于此解决方案会有各种 UI 库的沉淀,甚至是可视化拼装搭建的更高阶的产品化封装,但复用的物料不能解决所有场景问题。个性化业务、个性化视图遍地开花,直面问题本身,直接生成可用的 HTML 和 CSS 代码是否可行?

4.png

这是业界一直在不断尝试的命题,通过设计工具的开发插件可以导出图层的基本信息,但这里的主要难点还是对设计稿的要求高、生成代码可维护性差,这是核心问题,我们来继续拆解。

1)设计稿要求高

对设计稿的要求高,会导致设计师的成本加大,相当于前端的工作量转嫁给了设计师,导致推广难度会非常大。

一种可行的办法是采用 CV(ComputerVision, 计算机视觉) 结合导出图层信息的方式,以去除设计稿的约束,当然对设计稿的要求最好是直接导出一张图片,那样对设计师没有任何要求,也是我们梦寐以求的方案,我们也一直在尝试从静态图片中分离出各个适合的图层,但目前在生产环境可用度不够(小目标识别精准度问题、复杂背景提取问题仍待解决),毕竟设计稿自带的元信息,比一张图片提取处理的元信息要更多更精准。

2)代码可维护性

生成的代码结构一般都会面临可维护性方面的挑战:

  • 合理布局嵌套:包括绝对定位转相对定位、冗余节点删除、合理分组、循环判断等方面;
  • 元素自适应:元素本身扩展性、元素间对齐关系、元素最大宽高容错性;
  • 语义化:类名的多级语义化;
  • 样式 CSS 表达:背景色、圆角、线条等能用 CV 等方式分析提取样式,尽可能用 CSS 表达样式代替使用图片。

将这些问题拆解后,分门别类专项解决,解决起来看似没完没了,但好在目前发现的大类问题基本解决。

很多人质疑道:这部分能力的实现看起来和智能化一点关系都没有,顶多算个布局算法相关的专家规则系统。没错,现阶段这部分比较适合规则系统,对用户而言布局算法需要接近 100% 的可用度,另外这里涉及的大部分是无数属性值组合问题,当前用规则更可控。如果非要使用模型,那这个可被定义为多分类问题。同时,任何深度学习模型的应用都是需要先有清晰的问题定义过程,把问题规则定义清楚本就是必备过程。

但在规则解决起来麻烦的情况下,可以使用模型来辅助解决。比如 合理分组(如下图) 和 循环项 的判断,实践中我们发现,在各种情况下还是误判不断,算法规则难以枚举,这里需要跨元素间的上下文语义识别,这也是接下来正在用模型解决的重点问题。

5.png

2. 技术方案

基于上述的概述和问题分解后,我们对现有的 D2C 智能化技术体系做了能力概述分层,主要分为以下三部分:

  • 识别能力:即对设计稿的识别能力,智能从设计稿分析出包含的图层、基础组件、业务组件、布局、语义化、数据字段、业务逻辑等多维度的信息;如果智能识别不准,就可视化人工干预补充纠正,一方面是为了可视化低成本干预生成高可用代码,另一方面这些干预后的数据就是标注样本,反哺提升智能识别的准确率;
  • 表达能力:主要做数据输出以及对工程部分接入:a)通过 DSL 适配将标准的结构化描述做 Schema2Code;b)通过 IDE 插件能力做工程接入;
  • 算法工程:为了更好的支撑 D2C 需要的智能化能力,将高频能力服务化,主要包含数据生成处理、模型服务部分:

    • 样本生成:主要处理各渠道来源样本数据并生成样本;
    • 模型服务:主要提供模型 API 封装服务以及数据回流。

6.png
(前端智能化 D2C 能力概要分层)

在整个方案里,我们用同一套数据协议规范(D2C Schema)来连接各层的能力,确保其中的识别能够映射到具体对应的字段上,在表达阶段也能正确地通过出码引擎等方案生成代码。

1)智能识别技术分层

在整个 D2C 项目中,最核心的是上述识别能力部分的机器智能识别部分,这层的具体再分解如下:

  • 物料识别层:主要通过图像识别能力识别图像中的物料(模块识别、原子模块识别、基础组件识别、业务组件识别);
  • 图层处理层:主要将设计稿或者图像中图层进行分离处理,并结合上一层的识别结果,整理好图层元信息;
  • 图层再加工层:对图层处理层的图层数据做进一步的规范化处理;
  • 布局算法层:转换二维中的绝对定位图层布局为相对定位和 Flex 布局;
  • 语义化层:通过图层的多维特征对图层在生成代码端做语义化表达;
  • 字段绑定层:对图层里的静态数据结合数据接口做接口动态数据字段绑定映射;
  • 业务逻辑层:对已配置的业务逻辑通过业务逻辑识别和表达器来生成业务逻辑代码协议;
  • 出码引擎层:最后输出经过各层智能化处理好的代码协议,经过表达能力(协议转代码的引擎)输出各种 DSL 代码。

7.png
(D2C 识别能力技术分层)

2)技术痛点

当然,这其中的识别不全面、识别准确度不高一直是 D2C 老生常谈的话题,也是 imgcook 的核心技术痛点。我们尝试从这几个角度来分析引起这个问题的因素:

  • 识别问题定义不准确:问题定义不准确是影响模型识别不准的首要因素,很多人认为样本和模型是主要因素,但在这之前,可能一开始对问题的定义就出现了问题,我们需要判断我们的识别诉求模型是否合适做,如果合适那该怎么定义清楚这里面的规则等;
  • 高质量的数据集样本缺乏:我们在识别层的各个机器智能识别能力需要依赖不同的样本,那我们的样本能覆盖多少前端开发场景,各个场景的样本数据质量怎么样,数据标准是否统一,特征工程处理是否统一,样本是否存在二义性,互通性如何,这是我们当下所面临的问题;
  • 模型召回低、存在误判:我们往往会在样本里堆积许多不同场景下不同种类的样本作为训练,期望通过一个模型来解决所有的识别问题,但这却往往会让模型的部分分类召回率低,对于一些有二义性的分类也会存在误判。

【问题定义】

深度学习里的计算机视觉类模型目前比较适合解决的是分类问题和目标检测问题,我们判断一个识别问题是否该使用深度模型的前提是——我们自己是否能够判断和理解,这类问题是否有二义性等,如果人也无法准确地判断,那么这个识别问题可能就不太合适。

假如判断适合用深度学习的分类来做,那就需要继续定义清楚所有的分类,这些分类之间需要严谨、有排他性、可完整枚举。比如在做图片的语义化这个命题的时候,一般图片的 ClassName 通用常规命名有哪些,举个例子,其分析过程如下:

8.png

  • 第一步:尽可能多地找出相关的设计稿,一个个枚举里面的图片类型;
  • 第二步:对图片类型进行合理归纳归类,这是最容易有争论的地方,定义不好有二义性会导致最有模型准确度问题;
  • 第三步:分析每类图片的特征,这些特征是否典型,是否是最核心的特征点,因为关系到后续模型的推理泛化能力;
  • 第四步:每类图片的数据样本来源是否有,没有的话能否自动造;如果数据样本无法有,那就不适合用模型,可以改用算法规则等方式替代先看效果。

D2C 项目中很多这样的问题,问题本身的定义需要非常精准,并且需要有科学的参考依据,这一点本身就比较难,因为没有可借鉴的先例,只能先用已知的经验先试用,用户测试有问题后再修正,这是一个需要持续迭代持续完善的痛点。

【样本质量】

针对样本问题,我们需要对这部分数据集建立标准规范,分场景构建多维度的数据集,将收集的数据做统一的处理和提供,并以此期望能建立一套规范的数据体系。

在这套体系中,我们使用统一的样本数据存储格式,提供统一的针对不同问题(分类、目标检测)的样本评估工具来评估各项数据集的质量,针对部分特定模型可采取效果较好的特征工程(归一化、边缘放大等)来处理,同类问题的样本也期望能在后续不同的模型里能够流通作比较,来评估不同模型的准确度和效率。

9.png
(数据样本工程体系)

【模型】

针对模型的召回和误判问题,我们尝试收敛场景来提高准确度。往往不同场景下的样本会存在一些特征上的相似点或者影响部分分类局部关键特征点,导致产生误判、召回低,我们期望能够通过收敛场景来做模式化的识别,提高模型准确度。

我们把场景收敛到如下三个场景:无线 C 端营销频道场景、小程序场景以及 PC 中后台场景。这里面几个场景的设计模式都有自己的特色,针对各个场景来设计垂直的识别模型可以高效地提高单一场景的识别准确度。

10.png
(D2C 场景)

3)思考与解法

总的来说,既然使用了深度模型,有一个比较现实的问题是,模型的泛化能力不够,识别的准确率必然不能 100% 让用户满意,除了能够在后续不断地补充这批识别不到的样本数据外,在这之前我们能做什么?

在 D2C 的整个还原链路里,对于识别模型,我们还遵守一个方法论,即设计一套协议或者规则能通过其他方式来兜底深度模型的识别效果,保障在模型识别不准确的情况下用户仍可完成诉求:手动约定 > 规则策略 > 机器学习 > 深度模型。举个例子比如需要识别设计稿里的一个循环体:

  • 初期,我们可以在设计稿里手动约定循环体的协议来达成;
  • 根据图层的上下文信息可做一些规则的判断,来判断是否是循环体;
  • 利用机器学习的图层特征,可尝试做规则策略的更上游的策略优化;
  • 生成循环体的一些正负样本来通过深度模型进行学习。

其中手动约定的设计稿协议解析优先级最高,这样也能确保后续的流程不受阻塞和错误识别的干扰。

imgcook x 云开发平台

了解前端智能化和 imgcook 大致思路之后,那么为什么会选择在云开发平台上集成 imgcook 呢?那就是 imgcook 和云开发平台通过彼此的打通,将能够为双方解决彼此的痛点,无论是为云上开发者,还是 imgcook 开发者都提供了全新的用户体验。

对于 imgcook 开发者来说,其中一个痛点就来自于对于设计稿的管理,以及前后端交互的逻辑,然而通过云开发平台,开发者不再需要在本地安装 Sketch,通过云开发平台直接上传设计稿即可开始生成代码,真正做到了0成本一键生成。

另外云开发平台上直接提供了Midway Serverless 框架,我们通过云开发平台的插件定制化,可以让开发者直接选择某个页面所使用的函数(Function),这样就节省掉编写一些前后端交互的基础逻辑或请求代码。

对于云开发平台的开发者来说,最想得到的便是极速的上线体验和更加便捷的开发体验,imgcook 可以降低云开发平台的使用门槛,比如一位 FaaS 应用工程师不再需要学习如何切图,如何写 CSS,而只需要编写 FaaS 函数的逻辑即可,剩下的前端逻辑代码都可以通过 imgcook 插件在开发平台内即可完成,这是多么棒的体验啊!

那么,接下来就看看如何快速地从0到1生成代码吧。

首先需要先打开云开发平台创建应用,选择 imgcook 创建应用:

11.png

然后在应用的 WebIDE 中通过右键打开 imgcook 云插件,就可以正式开始使用了。

12.png

第一步,在插件中选择“导入”,打开上传设计稿界面:

13.png

第二步,imgcook 可视化编辑器:

14.png

第三步,生成代码:

15.png

第四步,导出代码到应用:

16.png

第五步,上线应用:

$ npm install
$ npm run dev
正在启动,请稍后...
---------------------------------------
开发服务器已成功启动
请打开 >>> http://*****-3000.xide.aliyun.com/
---------------------------------------
感谢使用 Midway Serverless,欢迎 Star!
https://github.com/midwayjs/midway
---------------------------------------

启动成功后通过命令行的地址打开页面效果如下,是不是很简单呢?

17.png

总结

本文通过介绍前端智能化的背景,imgcook 的问题定义以及技术方案,以及如何在云开发平台上使用 imgcook 开始智能开发,总的来说,还是希望让业内的前端工程师们从使用 imgcook 开始,将日常工作中的一些繁琐、耗时的工作交给 AI 来完成,这样能关注工程师本身更感兴趣,也更有价值的事情,也相信不久的将来,前端工程师将借助于 AI 能更加快乐与从容地工作!

 

 

原文链接
本文为阿里云原创内容,未经允许不得转载。

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

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

相关文章

ARMS在APM工具选型中的实践

简介: 当前的系统在数字化转型需求以及互联网架构实施的影响下,越来越普遍地使用了微服务架构,我们在享受微服务带来的好处(开发效率高, 独立部署, 水平扩展, 故障与资源隔离等等)外…

无人机、IoT 设备都有漏洞?专访以色列老牌安全公司 Check Point|拟合

从无序中寻找踪迹,从眼前事探索未来。 2021 年正值黄金十年新开端,CSDN 以中立技术社区专业、客观的角度,深度探讨中国前沿 IT 技术演进,推出年度重磅企划栏目——「拟合」,通过对话企业技术高管大咖,跟踪报…

从零入门 Serverless | 函数计算的可观测性

简介: 本文主要分为三个部分:概述中介绍可观测性的基本概念,主要包括 Logging、Metrics、Tracing 三个方面;然后详细介绍函数计算上的 Logging、Metrics、Tracing;最后以几个常见场景为例,介绍在函数计算中…

宜家:打造新零售时代的智能客户身份管理系统

简介: 宜家选择了阿里云应用身份服务(IDaaS)来为其提供一个包括统一认证、统一账户管理的CIAM解决方案,为所有前端提供统一的安全、可扩展和可靠的身份认证服务,包括灵活的认证配置、单点登录、多因素认证、社交平台登…

生意参谋牵手Quick BI 让数据再次驱动店铺经营

刚刚过去的一周,超两百家店铺体验了阿里巴巴官方全渠道、全链路、一站式数据平台生意参谋推出的全新功能,自助分析。 作为生意参谋联合Quick BI的初次尝试, “自助分析”面向店铺提供自助分析解决方案,支持店铺个性化数据报表制作…

到底是谁发明了物联网?

来源 | 鲜枣课堂作者 | 小枣君头图 | 下载于视觉中国1965年的越南战场,美军正深陷战争泥潭。突然有一天,北越士兵在胡志明小道发现了一些奇怪的东西。这些东西看上去像树枝,但实际上由金属构成,里面包含一些神秘的电子元件。这些士…

八种经典排序算法总结

前言 算法和数据结构是一个程序员的内功,所以经常在一些笔试中都会要求手写一些简单的排序算法,以此考验面试者的编程水平。下面我就简单介绍八种常见的排序算法,一起学习一下。 一、冒泡排序 思路: 比较相邻的元素。如果第一…

docker onlyoffice7.1.1 word excel ppt在线编辑、在线预览_部署01

文章目录1. 创建onlyoffice容器2. 启动在线案例3. 开放防火墙4. 浏览器验证5. 上传文件测试6. 在线编辑7. 测试主页面1. 创建onlyoffice容器 下面命令作用:拉取镜像、映射宿主机端口和docker内部端口、创建宿主机和docker容器挂载目录、拉取指定版本的onlyoffice/d…

漫画 | 程 序 员 脱 单 指 南

本文纯属娱乐,切勿模仿,模仿后果难以评估,务必小心再小心,谢谢!

基于JindoFS+OSS构建高效数据湖

为什么要构建数据湖 大数据时代早期,Apache HDFS 是构建具有海量存储能力数据仓库的首选方案。随着云计算、大数据、AI 等技术的发展,所有云厂商都在不断完善自家的对象存储,来更好地适配 Apache Hadoop/Spark 大数据以及各种 AI 生态。由于…

docker onlyoffice7.1.1 word excel ppt在线编辑、在线预览_添加中文字体和中文字号_02

文章目录一、 onlyoffice添加中文字体1. 下载字体2. 上传字体3. 删除原版自带字体4. 字体复制5. 安装字体6. 重启容器7. 清除缓存8. 效果验证二、 onlyoffice添加中文中文字号2.1. 拷贝配置文件2.2. 编辑配置2.3. 上传配置2.4. 配置覆盖2.5. 重启容器2.6. 效果验证一、 onlyoff…

重磅报告 | 《中国企业2020:人工智能应用实践与趋势》

文章导读 AI设计师“鹿班”每秒可设计海报8000张,赋能30万商家备战“双十一”;光伏电池生产商天合光能运用人工智能算法将A品率提升7%,创造利润数千万;AI帮助优酷分析舆情选出爆款影视剧IP,打造了10天播放量超过60亿的…

OnlyOffice 修改文件大小限制

文章目录1. 拷贝配置到宿主机2. 配置调整3. 配置覆盖4. 容器重启5. 启动案例测试6. 查看日志1. 拷贝配置到宿主机 docker cp 58f75f6ca6f7:/etc/onlyoffice/documentserver/default.json ./2. 配置调整 vim default.json默认下载大小"maxDownloadBytes": 104857600,…

启明星辰集团:文化筑底,战略引领信息安全之路

4月30日,“启明星辰集团年度业绩说明与战略发布会”在上海成功举办,启明星辰集团总裁严立、集团CFO张媛、集团董秘姜朋出席会议,为投资者、用户、媒体解读企业未来战略布局,就行业状况、生产经营、财务状况进行说明,探…

【数据湖加速篇】 —— 如何利用缓存加速服务来提升数据湖上机器学习训练速度

简介: JindoFS提供了一个计算侧的分布式缓存系统,可以有效利用计算集群上的本地存储资源(磁盘或者内存)缓存OSS上的热数据,从而减少对OSS上数据的反复拉取,消耗网络带宽。 背景介绍 近些年,机…

OnlyOffice 二次开发定制化部署

文章目录一、与前准备1. 功能点总览2. 上传中文字体3. 上传镜像包4. 创建目录5. 字体挂载6. 加载镜像二、与前准备2.1. 创建容器2.2. 浏览器验证2.3. 在线编辑一、与前准备 1. 功能点总览 功能兼容性说明并发20限制去除√并发数999中文字体√41种常用字体中文字号√文件下载大…

何为“边缘计算”?

来源 | 无敌码农责编 | 寇雪芹头图 | 下载于视觉中国在云原生除了K8S、微服务,还有...?中和大家聊了下关于云原生的话题,在云原生的概念中比较明确的一个特点就是云原生是基于云计算的。在这种模式下用户的计算请求会被发送到云端服务进行处理&#xff…

用尽每一寸GPU,阿里云cGPU容器技术白皮书重磅发布!

简介: 云原生已经成为业内云服务的一个趋势。在云原生上支持异构计算有助于提升CPU的利用率。一文分析业内主流GPU共享方案,并告诉你阿里云cGPU牛在哪里!阿里云异构计算推出的cGPU(container GPU)容器技术,…

钉钉轻松顶住信息洪流的原因,竟然是它

简介: 在9月18日云栖大会上,阿里云智能高级技术专家木洛就为我们详细介绍了,表格存储Tablestore是如何助力钉钉消息存储架构的升级,帮助钉钉顶住持续增长的流量。 今年的疫情来势汹汹,新冠病毒作为2020最具代表性的黑…

说到 SASE,新的安全范式有哪些

来源 | 好奇瞅瞅责编 | 寇雪芹头图 | 下载于视觉中国前言本系列目录:深入理解SASE(一):什么是云化深入理解SASE(二):网络云化及演进方向深入理解SASE(三):什么…