發(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項(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元素版面分析只做一件事:切圖。
圖片切割效果直接決定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ì)分解。
進(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é)同工作。

這塊的技術(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ǎ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工具。
熱門資訊
1. 華為手機(jī)神奇“AI修圖”功能,一鍵消除衣服!原圖變身大V領(lǐng)深V!
最近華為手機(jī)Pura70推出的“AI修圖”功能引發(fā)熱議,通過簡(jiǎn)單操作可以讓照片中的人物換裝。想了解更多這款神奇功能的使用方法嗎?點(diǎn)擊查看!
近年來,人工智能逐漸走入公眾視野,其中的AI圖像生成技術(shù)尤為引人注目。只需在特定軟件中輸入關(guān)鍵詞描述語以及上傳參考圖就能智能高效生成符合要求的...
3. 照片變漫畫效果,這4個(gè)方法操作簡(jiǎn)單有效,快來試試吧!
想將照片變成漫畫效果?這篇文章分享了4個(gè)方法,包括Photoshop、聰明靈犀、VanceAI Toongineer、醒圖,簡(jiǎn)單操作就能實(shí)現(xiàn),快來嘗試一下吧!
4. 一款免費(fèi)無限制的AI視頻生成工具火了!國內(nèi)無障礙訪問!附教程
人人都可以動(dòng)手制作AI視頻! 打開網(wǎng)址https://pixverse.ai/,用郵箱注冊(cè)后,點(diǎn)擊右上角Create,就可以開始創(chuàng)作了。 PixVerse目前有文案生成視頻,和圖片生...
5. 趕緊收藏好!這4個(gè)完全免費(fèi)的AI視頻制作網(wǎng)站和工具
以下是一些免費(fèi)的AI視頻制作網(wǎng)站或工具,幫助您制作各種類型的視頻。 1. Lumen5:Lumen5是一個(gè)基于AI的視頻制作工具,可將文本轉(zhuǎn)換為視頻。 用戶可以使...
6. 零基礎(chǔ)10分鐘生成漫畫,教大家如何用AI生成自己的漫畫
接下來,我將親自引導(dǎo)你,使用AI工具,創(chuàng)作一本既有趣又能帶來盈利的漫畫。我們將一起探索如何利用這個(gè)工具,發(fā)揮你的創(chuàng)意,制作出令人驚嘆的漫畫作品。讓...
就能快速生成一幅極具藝術(shù)效果的作品,讓現(xiàn)實(shí)中不懂繪畫的人也能參與其中創(chuàng)作!真的超贊噠~趣趣分享幾款超厲害的AI繪畫軟件,提供詳細(xì)操作!有需要的快來...
8. AI視頻制作神器Viggle:讓靜態(tài)人物動(dòng)起來,創(chuàng)意無限!
Viggle AI是一款免費(fèi)制作視頻的AI工具,能讓靜態(tài)人物圖片動(dòng)起來,快來了解Viggle AI的功能和優(yōu)勢(shì)吧!
9. 10個(gè)建筑AI工具,從設(shè)計(jì)到施工全覆蓋!肯定有你從來沒聽過的
講述了建筑業(yè)比較著名的AI公司小庫科技做出的探索,在這兒就不多說了。今天,我們?cè)囍谝?guī)劃設(shè)計(jì)、建筑方案設(shè)計(jì)、住宅設(shè)計(jì)、管道設(shè)計(jì)、出渲染圖、3D掃...
10. Logo Diffusion——基于sd繪畫模型的AI LOGO 生成器
這下LOGO設(shè)計(jì)徹底不用求人了。接下來詳細(xì)演示一遍操作流程首先進(jìn)入Logo D... 想學(xué)習(xí)更多AI技能,比如說關(guān)于怎么樣利用AI來提高生產(chǎn)效率、還能做什么AI...
最新文章
同學(xué)您好!