欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

AI賦能一鍵自動(dòng)檢測(cè):頁(yè)面異常、控件異常、文本異常

概要:FireEye是通過(guò)AI提高測(cè)試效率,并降低AI自動(dòng)化測(cè)試使用門檻的工具集,一經(jīng)部署,就可以不用再修改腳本實(shí)現(xiàn)模型的使用和更新。本篇文章將具體介紹AI自動(dòng)化測(cè)試過(guò)程中用到工程結(jié)構(gòu)、模型選型和重訓(xùn)練的技術(shù)細(xì)節(jié)等。

網(wǎng)站的建設(shè)成都創(chuàng)新互聯(lián)公司專注網(wǎng)站定制,經(jīng)驗(yàn)豐富,不做模板,主營(yíng)網(wǎng)站定制開(kāi)發(fā).小程序定制開(kāi)發(fā),H5頁(yè)面制作!給你煥然一新的設(shè)計(jì)體驗(yàn)!已為水泥攪拌車等企業(yè)提供專業(yè)服務(wù)。

1 使用效果

目前從功能上分為:頁(yè)面異常、控件異常、文本異常,測(cè)試結(jié)果頁(yè)面如下圖所示:

AI賦能一鍵自動(dòng)檢測(cè):頁(yè)面異常、控件異常、文本異常

當(dāng)測(cè)試同學(xué)發(fā)現(xiàn)部分測(cè)試出的數(shù)據(jù)并不符合預(yù)期,可以通過(guò)頁(yè)面標(biāo)注并使用重訓(xùn)練功能實(shí)時(shí)更新模型,不斷提高模型準(zhǔn)確率,減少開(kāi)發(fā)人員重新去介入模型的調(diào)整和部署。

AI賦能一鍵自動(dòng)檢測(cè):頁(yè)面異常、控件異常、文本異常

2.1 工程結(jié)構(gòu)

工程結(jié)構(gòu)如圖所示:

AI賦能一鍵自動(dòng)檢測(cè):頁(yè)面異常、控件異常、文本異常

這個(gè)工程中,訓(xùn)練數(shù)據(jù)的來(lái)源有3方面,樣本生成工具生成的模擬樣本、閑魚(yú)技術(shù)質(zhì)量門戶持續(xù)搜集的真實(shí)用戶截屏圖片,還有一個(gè)是FireEye的前端頁(yè)面用戶手動(dòng)打標(biāo)的重訓(xùn)練數(shù)據(jù),數(shù)據(jù)采集之后,由集成的工具將其轉(zhuǎn)換為所需要的數(shù)據(jù)類型:JPG、PNG、TXT等,并將其中的資源文件上傳至OSS資源管理,當(dāng)用戶觸發(fā)了重訓(xùn)練命令,會(huì)由Jenkins通知服務(wù)端的重訓(xùn)練腳本開(kāi)始重新訓(xùn)練,重訓(xùn)練后的模型保存在云端,可以通過(guò)API提供給FireEye以及其他業(yè)務(wù)場(chǎng)景使用。

2.2 使用模型

我們?cè)卺槍?duì)不同的識(shí)別場(chǎng)景對(duì)模型的選型也有不同,其中

1, 頁(yè)面異常是檢測(cè)頁(yè)面是否整體空白或圖片中間有很大的錯(cuò)誤提示圖片,因?yàn)檫@類異常結(jié)構(gòu)簡(jiǎn)單特征明顯,所以用CNN做聚類就可以準(zhǔn)確區(qū)分出這一類的case。

2, 控件異常是找到頁(yè)面中有異常特征的控件,如識(shí)別截屏里面包含了圖片的打底圖,說(shuō)明有圖片加載異常,識(shí)別出有l(wèi)oading控件,可能用戶在這個(gè)場(chǎng)景長(zhǎng)時(shí)間卡住,識(shí)別出有error的HUD表示異常提示。我們?cè)诠こ讨羞x用SSD做物體檢測(cè),原因是異常控件在一個(gè)頁(yè)面中可能存在多個(gè),使用SSD模型可以識(shí)別出異常控件的類型以及在頁(yè)面的位置和異常的數(shù)量。

3, (具體介紹)文本異常檢測(cè)是通過(guò)OCR逐行識(shí)別出頁(yè)面中的文本,然后判斷文本的語(yǔ)義是否正常,模型部分選用的是LSTM,RNN的本質(zhì)是一個(gè)數(shù)據(jù)推斷(inference)機(jī)器,它可以尋找兩個(gè)時(shí)間序列之間的關(guān)聯(lián),只要數(shù)據(jù)足夠多,就可以得到從x(t)到y(tǒng)(t)的概率分布函數(shù), 從而達(dá)到推斷和預(yù)測(cè)的目的,而LSTM(Long Short Term Memory Networks)長(zhǎng)短時(shí)間記憶網(wǎng)絡(luò),是RNN的一個(gè)變種,避免長(zhǎng)期依賴和梯度消失,爆炸等問(wèn)題,使得LSTM已經(jīng)成為處理?yè)碛虚L(zhǎng)期依賴問(wèn)題的序列數(shù)據(jù)問(wèn)題的首要方法之一(語(yǔ)言模型、機(jī)器翻譯等領(lǐng)域)。

文本異常的處理是通過(guò)一句話判斷是否為異常文本,輸入是有時(shí)序的一串字符,輸出是否異常,符合RNN的5種架構(gòu)中的many-to-one類型,這是我們選用LSTM的原因。

AI賦能一鍵自動(dòng)檢測(cè):頁(yè)面異常、控件異常、文本異常

實(shí)際的檢測(cè)效果如下:

AI賦能一鍵自動(dòng)檢測(cè):頁(yè)面異常、控件異常、文本異常

識(shí)別結(jié)果(其中第三行被識(shí)別出包含亂碼):

AI賦能一鍵自動(dòng)檢測(cè):頁(yè)面異常、控件異常、文本異常

方案的實(shí)現(xiàn)上我們使用的是,Keras提供的LSTM層來(lái)構(gòu)造網(wǎng)絡(luò),然后構(gòu)建以閑魚(yú)APP里的標(biāo)題、詳情、評(píng)論等作為正樣本,口字碼、拼音碼、符號(hào)碼、錕拷碼、代碼等作為負(fù)樣本的訓(xùn)練數(shù)據(jù),使用nltk的分詞器分詞輸入訓(xùn)練得到模型,通過(guò)OCR提取頁(yè)面文字輸入頁(yè)面識(shí)別輸入模型判斷。

部分代碼:

1,首先統(tǒng)計(jì)數(shù)據(jù)中有多少個(gè)不同的詞,每句話由多少個(gè)詞組成

maxlen = 0  #句子最大長(zhǎng)度 
word_freqs = collections.Counter()  #詞頻 
num_recs = 0 # 樣本數(shù) 
with open('./train.txt','r+') as f: 
    for line in f: 
        label, sentence = line.strip().split("t") 
        words = nltk.word_tokenize(sentence.lower() 
        if len(words) > maxlen: 
            maxlen = len(words) 
        for word in words: 
            word_freqs[word] += 1 
        num_recs += 1

目前項(xiàng)目里的亂碼識(shí)別主要是針對(duì)英文和字符類型,所以使用的是nltk庫(kù)做分詞,如果是主要對(duì)中文處理,使用結(jié)巴分詞效果更好,或者用NLTK庫(kù)中Sinica(中央研究院)提供的繁體中文語(yǔ)料庫(kù),from nltk.corpus import sinica_treebank 這樣導(dǎo)入

2,建立兩個(gè)表,word2index和 index2word,用于單詞和數(shù)字轉(zhuǎn)換,把句子轉(zhuǎn)換成數(shù)字序列,長(zhǎng)度統(tǒng)一到 MAXSENTENCELENGTH,不夠的填0,多出的截掉

MAX_FEATURES = 2000 
MAX_SENTENCE_LENGTH = 40 
vocab_size = min(MAX_FEATURES, len(word_freqs) + 2 
word2index = {x[0]: i+2 for i, x in rate(word_freqs.most_common(MAX_FEATURES)} 
word2index["PAD"] = 0 
word2index["UNK"] = 1 
index2word = {v:k for k, v in word2index.items()} 
X = np.empty(num_recs,dtype=list) 
y = np.zeros(num_recs) 
i=0 
with open('./train.txt','r+') as f: 
    for line in f: 
        label, sentence = line.strip().split("t") 
        words = nltk.word_tokenize(sentence.lower() 
        seqs = [] 
        for word in words: 
            if word in word2index: 
                seqs.append(word2index[word]) 
            else: 
                seqs.append(word2index["UNK"]) 
        X[i] = seqs 
        y[i] = int(label) 
        i += 1 
X = sequence.pad_sequences(X, maxlen=MAX_SENTENCE_LENGTH) ,
Xtrain, Xtest, ytrain, ytest = train_test_split(X, y, test_size=0.2, random_state=42) 
EMBEDDING_SIZE = 128 
HIDDEN_LAYER_SIZE = 64

3,模型訓(xùn)練,損失函數(shù)用 binary_crossentropy,優(yōu)化方法用 adam,最后導(dǎo)出h6模型。

model = Sequential() 
model.add(Embedding(vocab_size, EMBEDDING_SIZE,input_length=MAX_SENTENCE_LENGTH) 
model.add(LSTM(HIDDEN_LAYER_SIZE, dropout=0.2, recurrent_dropout=0.2) 
model.add(Dense(1) 
model.add(Activation("sigmoid") 
model.compile(loss="binary_crossentropy", optimizer="adam",metrics=["accuracy"]) 
BATCH_SIZE = 32 
NUM_EPOCHS = 10 
model.fit(Xtrain, ytrain, batch_size=BATCH_SIZE, epochs=NUM_EPOCHS,validation_data=(Xtest, ytest) 
model.save("garbled.h6");"

4,OCR識(shí)別頁(yè)面文字內(nèi)容,導(dǎo)入模型中進(jìn)行預(yù)測(cè)。(目前使用是谷歌OCR,中文識(shí)別的精度還不夠)

3 FireEye輔助工具集

3.1 樣本生成工具

在工程開(kāi)始初期從真實(shí)用戶收集的數(shù)據(jù)很少,需要大量的樣本提供訓(xùn)練,為了能大量生成訓(xùn)練和測(cè)試樣本并且不影響APP的線上統(tǒng)計(jì)數(shù)據(jù),開(kāi)發(fā)了一個(gè)通用的native的mock庫(kù)可以截取控件加載數(shù)據(jù)隨機(jī)生成mock的數(shù)據(jù),用來(lái)配合Facebook-WDA截取圖片獲得樣本: 1,mock所有UIImage,隨機(jī)加載1萬(wàn)個(gè)樣本數(shù)據(jù)里的圖片url;

2,mock所有UILabel和UITextField,隨機(jī)從樣本庫(kù)中生成語(yǔ)句和數(shù)字,內(nèi)容數(shù)與原有數(shù)據(jù)相仿;

3,通過(guò)Facebook-WDA工具腳本控制APP,隨機(jī)點(diǎn)擊進(jìn)入不同頁(yè)面,滑動(dòng),截圖,判斷是否到底部,再隨機(jī)跳轉(zhuǎn)到別的頁(yè)面…這樣來(lái)獲得大量樣本;

3.2 重訓(xùn)練打標(biāo)工具

打標(biāo)一直以來(lái)是使用AI困擾大家的一件耗時(shí)耗力的步驟,F(xiàn)ireEye提供重訓(xùn)練功能的同時(shí)提供了相關(guān)工具:

其中頁(yè)面異常的識(shí)別的CNN模型和識(shí)別文本異常的LSTM模型重訓(xùn)練,可以通過(guò)用戶在網(wǎng)頁(yè)上的對(duì)結(jié)果進(jìn)行勾選,輸入正確的結(jié)果來(lái)完成標(biāo)注工作,操作比較簡(jiǎn)單,最復(fù)雜繁瑣的是SSD模型的打標(biāo),普遍的做法是使用labelImg工具,先準(zhǔn)確的框選目標(biāo)物體輸入標(biāo)簽名,然后導(dǎo)出包含物體位置和標(biāo)簽信息的CSV文件,F(xiàn)ireEye將這個(gè)功能集成到了重訓(xùn)練的系統(tǒng)中,用戶可以通過(guò)在頁(yè)面上劃線或者畫(huà)框標(biāo)出物體大致的位置,位置會(huì)傳到后端腳本自動(dòng)裁剪提取前景,得到更精準(zhǔn)的物體實(shí)際定位并生成CSV文件,其中畫(huà)框標(biāo)記的具體實(shí)現(xiàn)如下:

1,前端頁(yè)面打標(biāo)

下圖是使用框選物體來(lái)標(biāo)記右下角的按鈕,我們不需要框出準(zhǔn)確的位置:

AI賦能一鍵自動(dòng)檢測(cè):頁(yè)面異常、控件異常、文本異常

2,調(diào)用Python腳本,使用OpenCV的grabcut來(lái)實(shí)現(xiàn)前景提取

img=cv2.imread('tmp2.png')
mask=np.zeros((img.shape[:2]),np.uint8)
bgdModel=np.zeros((1,65),np.float64)
fgdModel=np.zeros((1,65),np.float64)
cv2.grabCut(img,mask,rect,bgdModel,fgdModel,5,cv2.GC_INIT_WITH_RECT)
mask2=np.where((mask==2)|(mask==0),0,1).astype('uint8')

下圖是grabcut提取前景后識(shí)別出的mask圖,右下角有部分裁剪后留下的雜點(diǎn)

AI賦能一鍵自動(dòng)檢測(cè):頁(yè)面異常、控件異常、文本異常

3,得到前景二值化,查找連通區(qū)域,找到最大面積,通過(guò)把小面積區(qū)域用fillConvexPoly方法填充覆蓋,得到

img=img*mask2[:,:,np.newaxis]
gray_temp = mask2.copy() #copy the gray image because function
binary, contours, hierarchy = cv2.findContours(gray_temp, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)
cv2.drawContours(img, contours, -1, (0, 255, 255), 2)
area = []
for i in xrange(len(contours)):
    area.append(cv2.contourArea(contours[i]))
max_idx = np.argmax(area)
for i in xrange(len(contours)):
     if i != max_idx:
        cv2.fillConvexPoly(mask2, contours[i], 0)

AI賦能一鍵自動(dòng)檢測(cè):頁(yè)面異常、控件異常、文本異常

4,再獲得外接矩形,得到準(zhǔn)確的標(biāo)記位置并輸出CSV文件。

總結(jié)

FireEye目標(biāo)是打造一個(gè)精簡(jiǎn)易用的自動(dòng)化測(cè)試工具集,可以很方便快捷的部署和調(diào)整,后面工程的重心會(huì)是AutoML的模型自動(dòng)調(diào)參,識(shí)別布局異常,以及通過(guò)頁(yè)面元素(控件、文本等)的綜合分析,區(qū)分業(yè)務(wù)場(chǎng)景,理解用戶操作路徑是否正確等方面,歡迎有興趣的小伙伴一起探討學(xué)習(xí)。

網(wǎng)站欄目:AI賦能一鍵自動(dòng)檢測(cè):頁(yè)面異常、控件異常、文本異常
文章URL:http://chinadenli.net/article22/pgjjjc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)做網(wǎng)站搜索引擎優(yōu)化ChatGPT營(yíng)銷型網(wǎng)站建設(shè)云服務(wù)器

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

微信小程序開(kāi)發(fā)