亚洲AV免费看深爱成人|日韩av另类一级特黄片在线|中国免费一级黄片|国产av一二三区|亚洲有码AV在线|久久亚洲国产日韩欧美|成人免费AV网站|婷婷一区综合一区|亚洲AV无码导航|高级欧美成人网站

高校合作1:010-59833514 ?咨詢電話:400-810-1418 服務(wù)與監(jiān)督電話:400-810-1418轉(zhuǎn)接2

UI2Code智能生成Flutter代碼--設(shè)計(jì)思路詳解

發(fā)布時(shí)間:2024-05-08 11:08:45 瀏覽量:328次

閑魚技術(shù)-上葉

背景:

隨著移動(dòng)互聯(lián)網(wǎng)時(shí)代的到來,科學(xué)技術(shù)突飛猛進(jìn)。然而軟件工程師們依舊需要花費(fèi)大量精力在重復(fù)的還原UI視覺稿的工作。

UI視覺研發(fā)擁有明顯的特征:組件,位置和布局,符合機(jī)器學(xué)習(xí)處理范疇。能否通過機(jī)器視覺和深度學(xué)習(xí)等手段自動(dòng)生成UI界面代碼,來解放重復(fù)勞動(dòng)力,成為我們關(guān)注的方向。

UI2CODE簡(jiǎn)單介紹:

UI2CODE項(xiàng)目是公司技術(shù)團(tuán)隊(duì)研發(fā)的一款通過機(jī)器視覺理解+AI人工智能將UI視覺圖片轉(zhuǎn)化為端側(cè)代碼的工具。

我們開始啟動(dòng)技術(shù)可行性預(yù)研工作,經(jīng)歷了多次整體方案的重構(gòu)。我們關(guān)注視覺稿還原精度、準(zhǔn)確率和易維護(hù)性等問題。


架構(gòu)設(shè)計(jì):

簡(jiǎn)化分析下UI2CODE的流程:

大體分為4個(gè)步驟:

1.通過機(jī)器視覺技術(shù),從視覺稿提取GUI元素
2.通過深度學(xué)習(xí)技術(shù),識(shí)別GUI元素類型
3.通過遞歸神經(jīng)網(wǎng)絡(luò)技術(shù),生成DSL
4.通過語法樹模板匹配,生成flutter代碼

版面分析

版面分析只做一件事:切圖。

圖片切割效果直接決定UI2CODE輸出結(jié)果的準(zhǔn)確率。我們拿白色背景的簡(jiǎn)單UI來舉例:

上圖是一個(gè)白色背景的UI,我們將圖片讀入內(nèi)存,進(jìn)行二值化處理:

得到一個(gè)二維矩陣:將白色背景的值轉(zhuǎn)化為0.

像切西瓜一樣,我們只需要5刀,就可以將GUI元素分離,切隔方法多種多樣。

客戶端的UI基本都是縱向流式布局,我們可以先橫切在縱切。

將切割點(diǎn)的x,y軸坐標(biāo)記錄下來,它將是處理組件位置關(guān)系的核心。切割完成后,我們獲取到2組數(shù)據(jù):6個(gè)GUI元素圖片和對(duì)應(yīng)的坐標(biāo)系記錄。后續(xù)步驟通過分類神經(jīng)網(wǎng)絡(luò)進(jìn)行組件識(shí)別。

在實(shí)際生產(chǎn)過程中,版面分析會(huì)復(fù)雜些,主要是在處理復(fù)雜背景方面。

關(guān)注我們的技術(shù)公眾號(hào),我們后續(xù)會(huì)詳細(xì)分解。

組件識(shí)別:

進(jìn)行組件識(shí)別前我們需要收集一些組件樣本進(jìn)行訓(xùn)練,使用Tensorflow提供的CNN模型和SSD模型等進(jìn)行增量訓(xùn)練。

UI2CODE對(duì)GUI進(jìn)行了幾十種類型分類:IMAGE, TEXT,SHAP/BUTTON,ICON,PRICE等等,分別歸類為UI組件,CI組件和BI組件。

組件的識(shí)別需要反復(fù)的通過全局特征反饋來糾正,通常會(huì)采用SSD+CNN協(xié)同工作。

屬性提?。?/h1>

這塊的技術(shù)點(diǎn)比較雜,歸納起來需要處理3部分內(nèi)容:shape輪廓, 字體屬性和組件的寬高。

完成屬性提取,基本上我們完成所有GUI信息的提取。生成的GUI DSL如下圖:

通過這些數(shù)據(jù)我們就可以進(jìn)行布局分析了。

其中文字屬性的提取最為復(fù)雜,后續(xù)我們會(huì)專門介紹。

布局分析:

前期我們采用4層LSTM網(wǎng)絡(luò)進(jìn)行訓(xùn)練學(xué)習(xí),由于樣本量比較小,我們改為規(guī)則實(shí)現(xiàn)。規(guī)則實(shí)現(xiàn)也比較簡(jiǎn)單,我們?cè)诘谝徊角袌D時(shí)5刀切割的順序就是row和col。缺點(diǎn)是布局比較死板,需要結(jié)合RNN進(jìn)行前置反饋。

視頻中展示的是通過4層LSTM預(yù)測(cè)布局結(jié)構(gòu)的效果,UI的布局結(jié)構(gòu)就像房屋的框架,建造完成后通過GUI的屬性進(jìn)行精裝修就完成了一個(gè)UI圖層的代碼還原工作。

代碼生成及插件化:

機(jī)器學(xué)習(xí)本質(zhì)上來說還屬于概率學(xué)范疇,自動(dòng)生成的代碼需要高的還原度和100%的準(zhǔn)確率,概率注定UI2CODE難以達(dá)到100%的準(zhǔn)確率,所以我們需要提供一個(gè)可編輯工具,由開發(fā)者通過工具能夠快速理解UI的布局結(jié)構(gòu)和修改布局結(jié)構(gòu)。

我們將UI2CODE生成的DSL TREE進(jìn)行代碼模板化匹配,代碼模板的內(nèi)容由資深的flutter技術(shù)專家來定義,它代表目前最優(yōu)代碼實(shí)現(xiàn)方案。

代碼模板中會(huì)引入一些標(biāo)簽,由Intellij plugin來檢索flutter工程中是否存在對(duì)應(yīng)的自定義UIKIT,并進(jìn)行替換,提高代碼的復(fù)用度.

整個(gè)插件化工程需要提供自定義UIKIT的檢索,替換和校驗(yàn)工作,以及DSL Tree的創(chuàng)建,修改,圖示等工作,總體來說,更像ERP系統(tǒng),花費(fèi)一些時(shí)間能夠做的更加完美。

小結(jié):

本篇簡(jiǎn)單介紹了UI2CODE的設(shè)計(jì)思路,將整個(gè)工程結(jié)構(gòu)分為5個(gè)部分,其中4塊內(nèi)容核心處理機(jī)器視覺的問題,通過機(jī)器學(xué)習(xí)將它們鏈接起來。代碼的線上發(fā)布是非常嚴(yán)格的事情,而單純的機(jī)器學(xué)習(xí)方式,很難達(dá)到我們要求,所以我們選擇以機(jī)器視覺理解為主,機(jī)器學(xué)習(xí)為輔的方式,構(gòu)建整個(gè)UI2CODE工程體系。我們將持續(xù)關(guān)注AI技術(shù),來打造一個(gè)完美的UI2CODE工具。

熱門課程推薦

熱門資訊

請(qǐng)綁定手機(jī)號(hào)

x

同學(xué)您好!

您已成功報(bào)名0元試學(xué)活動(dòng),老師會(huì)在第一時(shí)間與您取得聯(lián)系,請(qǐng)保持電話暢通!
確定