热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用TensorFlow搭建智能开发系统,自动生成AppUI代码

本文转自微信号EAWorld。扫描下方二维码,关注成功后,回复“普元方法+”,将会获得热门课堂免费学习机会!本文目录:一、我们的现状与期望二、我们的初级探索及建议三、智能开发系统的

本文转自微信号EAWorld。扫描下方二维码,关注成功后,回复“普元方法+”,将会获得热门课堂免费学习机会!
本文目录:
一、我们的现状与期望
二、我们的初级探索及建议
三、智能开发系统的自建之路
四、未完待续

一、我们的现状与期望
使用TensorFlow搭建智能开发系统,自动生成App UI代码

首先,我们作为一个移动平台产品,必须解决的是让工程师更加容易的开展工作,“知识工作者智能化”是我们探索的方向,让移动开发工程师先用起AI,也是我们的期望。

针对我们的移动开发工程师,我们的主要的工作概括说有三件事:

了解需求
拿到UI设计
研发

我们期望的是,基于机器学习(ML)的移动平台,最终能够:

让初级开发人员具备专家80%的能力
让AI辅助移动App的研发工作。

对于AI,BAT有着不同的看法,马云的数据论,李彦宏的技术论,以及马化腾的场景论,我个人马化腾的论调跟我们不谋而合,我们认为切入点很重要。

使用TensorFlow搭建智能开发系统,自动生成App UI代码

我们的切入点是:从设计稿(或者App 截图)到App 前端代码,这也是我今天分享的方向。

二、我们的初级探索与建议

为了,我们在实践的前期,进行了一些探索并总结了一些建议,希望能够给大家一些启发。

正如大家所知道的基于机器学习工程话的过程,需要数据、算法、算力以及工程话的配合,是一个不小的工程,我们的初步想法,是否借力SaaS的服务能力,于是我们进行了公有云服务的尝试。

使用TensorFlow搭建智能开发系统,自动生成App UI代码

我们找了一张狗狗的图,实际的效果非常的赞。

准确识别狗,并且能够识别到品种;(潜台词:能够识别不同设计就好了)
有“鼻子”有眼的,看上去很美,(潜台词:能够识别设计里的UI控件就够了)

于是,我们抱有很大期望的用设计稿作为尝试,效果大致如下:

使用TensorFlow搭建智能开发系统,自动生成App UI代码

实际上效果如上图,无法准确的认知这是一个设计图,更不用说是什么类型的UI以及UI内有哪些控件,于是我们尝试了另外一家。

使用TensorFlow搭建智能开发系统,自动生成App UI代码

实际上效果,依旧无法使用。
经过公有云不成功的尝试我们总结了一下的结论:

使用TensorFlow搭建智能开发系统,自动生成App UI代码

于是,我们进行了私有云的建设,使用了已有的模型。

使用TensorFlow搭建智能开发系统,自动生成App UI代码

普遍的目标检测都是无嵌套结构的认知
而App 的UI是一个结构化数据,存在嵌套关系、层级关系
上图中的目标检测对于生成代码没有任何帮助

三、智能开发系统的自建之路

于是我们走向了智能开发系统的自建之路

在前期的初级探索中,我们已经非常明确的知道:训练的方向,决定了结果。而我们的方式是:

专注:训练一个只懂移动UI的程序员
学习移动App UI 的设计稿或者截图
不学习Web UI 或者GUI的设计稿
坚决不学习常规事物 

上面的原则主要的目标是为了训练的专注性,我们调戏一把。

使用TensorFlow搭建智能开发系统,自动生成App UI代码

同样的这只狗,在公有云的服务中都能够准确的认知,而我们的系统把它当成了欢迎页(0.72)而不是狗。

来看一小段视频:
使用TensorFlow搭建智能开发系统,自动生成App UI代码
https://v.qq.com/x/page/q0514sxktll.html

视频说明:

右二窗口:是设计稿或者截图(支持:jpg、PNG等常见格式)
左上窗口:以命令行式的方式触发智能开发系统
左下窗口:普元移动平台的IDE,生成的代码会自动同步到IDE中。
右一窗口:手机实时投屏,生成的代码运行的效果将会在这里呈现

大致效果已经看到了,我们如何针对这个系统进行自建的呢?
既然为工程师服务,我们先回头看一下,工程师一般是如何工作的吧。

使用TensorFlow搭建智能开发系统,自动生成App UI代码

拿到设计,先判断一下是个什么类型界面
大概由几部分组成,什么都有哪些控件
编写代码
微调代码,调试,根据与设计图的差距进行调整

针对第一步,我们可以采用分类的方式,确定界面类型。

使用TensorFlow搭建智能开发系统,自动生成App UI代码

这里主要采用的算法是CNN+softmax
大致的效果如下:

使用TensorFlow搭建智能开发系统,自动生成App UI代码

使用TensorFlow搭建智能开发系统,自动生成App UI代码

在分类上我们的一些工作主要有以下的内容:

迁移学习 CNN(Inception V3 or VGG 16):模型微调,应用到我们的数据集上
分类器的选择:Softmax更适合,放弃Logistic
数据集:数据集的积累,并考虑结构的依赖,大量引入灰度图片
应用:采用原色及灰度两种,二者取其高
低概率:引入人工干预,每个使用者都是监督者
闭环:数据集及分类的积累

其中迁移学习重要采用的是基于已有的CNN网络,微调数据模型,应用到我们的数据集上,我们尝试过Inception V3 和 VGG 16,效果都还不错。具体的工作如下:

使用TensorFlow搭建智能开发系统,自动生成App UI代码

选用CNN模型,前面各层的参数都不变,而只训练最后一层。
将自己的训练集中的每张图像输入到CNN网络中,得到2048个维度的向量特征。
利用这些特征来训练softmax的多分类器

关于数据集的准备,必须为是基于移动的UI或者设计,这样才能保证训练后的方向和效果。

这里通过移动平台在各个项目组的实施,收集到各类移动界面图片,我们利用这些图片作为移动的数据集。

使用TensorFlow搭建智能开发系统,自动生成App UI代码

在数据集的训练中,我们发现,针对在很多分类下,色彩可能是一种干扰,而有些分类下,色彩却对特征值影响很大,所以我们采用了同源灰图训练,以提高正确率。

使用TensorFlow搭建智能开发系统,自动生成App UI代码

通过上图,可以看出,结合同源灰图,这个UI的识别率从0.748上升到0.911。究其原因,对于有些UI的分类,结构比色彩更重要。

为此,在应用过程中,在使用者上传了一张设计图的时候,我们将会处理成一张原图、一张灰图,进行分类,并选取较高概率的使用。

当然并不是所有的,我们都会有高命中,在无法准确判断分类的时候,我们会让“每一个使用者都成为机器学习的监督者”,让使用者自行选择适合的分类,如下图所示:

使用TensorFlow搭建智能开发系统,自动生成App UI代码

比如有的个人设置的UI,系统会在List 和Setting 两个分类上纠结不止,那就让使用者协助我们做个选择,这样我们就将数据加入到数据集上,让系统能够更加准确的进行。我们称之为闭环。

闭环更为重要的是,当我们能够发现分类的不足,让用户自行创建分类。
使用TensorFlow搭建智能开发系统,自动生成App UI代码

对于设计稿中的UI控件,其自身特点是嵌套的,为此我们采用多级目标检测的方式,确定其UI类型以及层次关系。

主要的算法采用的是Faster-RCNN,除了效果外,采用Faster-RCNN的原因是算力问题,这个算法在RCNN里,算是比较高效的了。 以下为监测效果:

使用TensorFlow搭建智能开发系统,自动生成App UI代码

可以看出通过训练后的目标检测,已经能够相对较为准确的识别。

左图是微信里的AED分布(推广一下,这个对于急救非常重要,建议大家都可以了解一下)的截图 。

右图是采用了一个设计图 。在上图中不仅仅包括目标检测后的常规结果,我们还将坐标输出,这为后续代码生成时候的布局非常重要。

在目标检测上我们做了以下的一些工作。

多级Faster-RCNN,避免单一的Faster-RCNN导致目标检测结果
叠加阀门(0.8)控制退出,组件优先。
加大数据集的积累,避免天窗效果(传统的目标检测没有这个问题)。
参数的调整:eg. ANCHOR_SCALES(无须太小) 、BATCH_SIZE(与数据集数量匹配,不易过大过小)、RPN_NMS_THRSH(模型训练越好,越可以提高,但不易过高)等等

这里需要说明一下什么叫做天窗效果,就是说,在整个设计图中我们有一部分的UI区域,没有识别出来。我们采用的方式是通过其他识别出来的区域,计算出相关区域的位置及大小,留好相关的空间,具体可以参照视频中第三个例子。

使用TensorFlow搭建智能开发系统,自动生成App UI代码

在代码生成部分,我们采用了基于DSL语言,生成的方式,主要考虑的因素有一下三点,第四点是一个小tips。

我们先看一下,原生语言的代码复杂度吧。

使用TensorFlow搭建智能开发系统,自动生成App UI代码

为了实现这个设计图,如果采用未经封装的原生代码,大概需要几百行代码,你可以自己看一下右图最右侧的滚动状态就知道。

所以,我们采用了我们普元移动平台的DSL层进行生成,实际上大概一两屏的代码就可以了。具体可以参见视频中的第二个例子。

这里要补充一点,在之前关于移动前端技术的分享中有人为我为什么一定要用DSL层,我说了一些原因,但因为这个分享还没有做,所以没有提及这一点。

那在看一下,天窗的处理吧,我们采用了占位的方式。

使用TensorFlow搭建智能开发系统,自动生成App UI代码

左图是生成的代码,右图是生成代码运行后的效果,对于未识别的区域,我们采用了占位,并加以提示:”对不起,我暂时不认识“,让使用系统的工程师能够直观的了解到,哪些部分AI没有帮助到他,他需要自行完善。

针对生成的代码并结合运行的效果,我们采用强化学习(RL)的方式对于代码进行微调。

主要的工作为:
Actons 只针对component属性调整,不对代码结构调整
评分系统依赖原有输入(设计稿或者截图)
Environment采用生成代码后的运行截屏
结合区域性评分(结合Faster-RCNN过程的切图)
暂时只针对位置、字体大小等

这一部分,由于时间原因,就不再展开了。
说了这么多,让我们一起看一下,这个系统的总体结构吧。

使用TensorFlow搭建智能开发系统,自动生成App UI代码

当一张设计图被传入系统的时候,首先基于CNN+Softmax的分类系统会将其分类处理(框架层代码在这一层次生成)。

对于设计稿中没有多级层次的设计,会直接进入Faster-RCNN进行一次目标检测,识别对应的Basic Component,结合之前的代码,生成新的代码片段。
对于复杂的设计,会进入多次Faster-RCNN进行下一层次的目标检测,直至可以进行代码生成。

当生成代码后,系统会自动编译代码,并将代码Run起来,这时候就可以进行截图,进行强化学习,对代码进行微调。

上述就是这个系统的主要的技术分享,这个系统也不断在完善中,我们后续也会继续完善。

四、未完待续

首先,对于文字的处理,可以看到,我们并没有直接生成,而是采用了“文字”来代替,主要的原因是文字的处理,属于另外一个范畴的人工智能,我们主要的思路是直接对接成熟的OCR或者云服务,不会自己去做的。

关于图片和icon的处理,可以看到,我们采用的是默认的图片,而非设计稿中的图片,这一点,我们会继续进行。

方案大致是:
一种是设计师提供设计图,并有小的切图,这个处理比较简单。
另外一种是无原图或者需要对接图库的(图库规模不大的情况下),拟采用CNN+Softmax做一次分类,每一张图片一张分类 。

同时,我认为AI将会继续赋能移动,在AI结合移动,我们也在其他的方向进行了实践:

使用TensorFlow搭建智能开发系统,自动生成App UI代码
智能化的CUI(Conversational UI)

智能推荐及辅助决策

使用TensorFlow搭建智能开发系统,自动生成App UI代码

由于时间和篇幅的原因,可能会没有讲明白,欢迎从事相关研究的同仁,添加作者微信一起探讨。
使用TensorFlow搭建智能开发系统,自动生成App UI代码

关于作者:
郝振明
普元移动产品线总负责人,十多年 IT 从业经验,一直专注于企业信息化的工作,近五年间一直从事企业移动信息化、移动互联网化的咨询、产品工作,曾主持参与了 Primeton Mobile 产品研发、联通集团、广东农信、诺亚财富、中信重工、索菲亚等公司的移动信息化工作。近两年来,致力于基于 React Native 工程化能力的提升、降低实施难度,以及智能化移动平台的产品研发,在移动开发智能化的路上不断进行探索。

使用TensorFlow搭建智能开发系统,自动生成App UI代码

关于EAWorld
微服务,DevOps,元数据,企业架构原创技术分享,EAii(Enterprise Architecture Innovation Institute)企业架构创新研究院旗下官方微信公众号。

扫描下方二维码,关注成功后,回复“普元方法+”,将会获得热门课堂免费学习机会!
微信号:EAWorld,长按二维码关注。
使用TensorFlow搭建智能开发系统,自动生成App UI代码


推荐阅读
  • 电销机器人作为一种人工智能技术载体,可以帮助企业提升电销效率并节省人工成本。然而,电销机器人市场缺乏统一的市场准入标准,产品品质良莠不齐。创业者在代理或购买电销机器人时应注意谨防用录音冒充真人语音通话以及宣传技术与实际效果不符的情况。选择电销机器人时需要考察公司资质和产品品质,尤其要关注语音识别率。 ... [详细]
  • 生成对抗式网络GAN及其衍生CGAN、DCGAN、WGAN、LSGAN、BEGAN介绍
    一、GAN原理介绍学习GAN的第一篇论文当然由是IanGoodfellow于2014年发表的GenerativeAdversarialNetworks(论文下载链接arxiv:[h ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 小程序自动授权和手动接入的方式及操作步骤
    本文介绍了小程序支持的两种接入方式:自动授权和手动接入,并详细说明了它们的操作步骤。同时还介绍了如何在两种方式之间切换,以及手动接入后如何下载代码包和提交审核。 ... [详细]
  • mapreduce数据去重的实现方法
    本文介绍了利用mapreduce实现数据去重的方法,同时还介绍了人工智能AI领域中常用的框架和工具,包括Keras、PyTorch、MXNet、TensorFlow和PaddlePaddle,并提供了深度学习实战的代码下载链接。 ... [详细]
  • 像跟踪分布式服务调用那样跟踪Go函数调用链 | Gopher Daily (2020.12.07) ʕ◔ϖ◔ʔ
    每日一谚:“Acacheisjustamemoryleakyouhaven’tmetyet.”—Mr.RogersGo技术专栏“改善Go语⾔编程质量的50个有效实践” ... [详细]
  • 微信商户扫码支付 java开发 [从零开发]
    这个教程可以用作了解扫码支付的整体运行过程,已经实现了前端扫码,记录订单,回调等一套完整的微信扫码支付。相关链接:微信支 ... [详细]
  • Lodop中特殊符号打印设计和预览样式不同的问题解析
    本文主要解析了在Lodop中使用特殊符号打印设计和预览样式不同的问题。由于调用的本机ie引擎版本可能不同,导致在不同浏览器下样式解析不同。同时,未指定文字字体和样式设置也会导致打印设计和预览的差异。文章提出了通过指定具体字体和样式来解决问题的方法,并强调了以打印预览和虚拟打印机测试为准。 ... [详细]
  • 胡蜂能进行逻辑推理的研究成果
    最新研究表明,胡蜂具备一定的逻辑推理能力,能够进行传递性推理。研究人员通过实验发现,胡蜂在避免电击的测试中,能够正确选择符合逻辑的选项。这项研究成果对于了解无脊椎动物的认知能力具有重要意义,也为解析胡蜂社会结构的进化提供了线索。 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • 老牌医药收割AI红利:先投个15亿美元抢中国人才
    萧箫发自凹非寺量子位报道|公众号QbitAI没想到,一场大会把我的“刻板印象”攻破了。2021世界人工智能大会现场,能看见不少熟悉的身影, ... [详细]
  • 求职屡屡碰壁,埋头苦学5个月斩获16000元offer,终于懂了没有人能随随便便成功
    求职屡屡碰壁,埋头苦学5个月斩获16000元offer,终于懂了没有人能随随便便成功-我以前一直认为,只要有耐心,有决心,有信心,就可以在社会上立足,干出一番事业。但是经历了社会的 ... [详细]
  • PHP小习题:PHP小练习题前几天在百度知道里面看到有位网友询问如何制作一下的小程序:用php语言设计一个小程序,计算今天到达下月的天数、全部输出这些天数,并使得每天的日期以三种颜 ... [详细]
  • 用ESP32与Python实现物联网(IoT)火焰检测报警系统
    下图是本案例除硬件连线外的3步导学开发过程,每个步骤中实现的功能请参考图中的说明。在硬件连线完成之后我们建议您先使用“一分钟上云体验”功能预先体验本案例的实际运行效果 ... [详细]
  • 说出来你可能不信,我用三天做了一个完整的项目
    Java在人工智能中能起到什么作用?作为编程语言中的扛把子,Java20多年稳定不倒,就在于它的稳定性,维护成本极低。这使得 ... [详细]
author-avatar
_Yoha
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有