AI自動化テストツールを実現するのはこんなに簡単だとは思わなかったに違いない.(基礎編)


1.はじめに


閑魚品質チームはずっと高品質のappをユーザーに提供することに力を入れており、現在AI技術が絶えず発展するにつれて、TensorFlowが大ヒットし、テスト手段にもより多くの可能性をもたらしている.

2.モデル選択


ビジネスを理解する必要がなく発見できるバグには、主にページ全体の空白、一部のコントロールの表示異常、テキスト異常などがあります.全体の空白画像について,それらの共通の特徴は比較的明らかであることが分かった:大面積の空白または中心領域の報告が間違っているため,TensorFlowが構築した簡単なCNNモデルを用いて正常な画像と異常な画像を識別することを選択した.テキスト異常のような文字化けしを含むピクチャについては,OCR+LSTMを用いて単純な漢字認識モデルを構築してピクチャ中のテキスト内容を認識し,文字化けしが存在するか否かを判断する.以上のモデルを訓練したサンプルはbug履歴スクリーンショットとmockの順方向データサンプルに由来する.

3.モデル再訓練——モデル認識精度の向上


初期モデルは訓練時にサンプルが限られているが、appが反復を更新し続けるにつれて、画像検出サンプルの数が徐々に増加し、いくつかの新しいページが誤って分類されることがあり、このような誤報問題を解決するには、モデルの再訓練に参加する必要がある.明らかに人肉でモデルの再訓練を開始し、古いモデルを置き換えるコストが高すぎるため、フロントエンドでチェック画像の再訓練の入り口を実現し、Jenkinsタイミングタスクを通じて、すべての再訓練画像を読み取り、再訓練スクリプトを実行し、古いモデルを新しく生成したものに置き換えることができる.数回の自動反復を経てモデル認識精度が大幅に向上した.

4.画像処理——結果の人工選別効率を高める


4.1特殊断面図
一部のスクリーンショットには大きな空白があるかもしれませんが、ビジネスの観点から言えば、このような画像は正しいです.例えば、中間ページを検索します.このような処理をしないと、毎回異常画像として報告され、checkの時間を浪費し、モデルを入れて再訓練を行うとモデルが収束しないリスクがあります.このような画像を解決するために、モデルが異常と認識された画像は、ライブラリ内の画像と比較され、ライブラリ内のいずれかの類似度が設定した閾値を超えると、その画像は無視されて報告されないと考えられるライブラリが維持される.
4.2画像の削除
現在、スクリーンショットタスクは、ページ上のすべての要素が取得されることを保証するために、単一のスクリーンショットタスクは少なくとも2回同じページにアクセスします.同時に遍歴し、ページコンテキスト分析を容易にするために、クリック要素に赤枠でマークします.これにより、識別されるピクチャセットでは、同じページに複数の重複スクリーンショットがあり、同じページに異なる場所に赤枠マークがある可能性があるという問題が発生します.人工検査で大量の画像認識結果を繰り返すと視覚疲労が避けられないため、再検査後の結果を示すことで、人工選別効率を大幅に向上させ、コストを削減することができる.
4.2.1解決方法
画像の数が多く、今回どのくらい異なるページをスクリーンショットしたか分からない場合は、階層クラスタリングアルゴリズムを使用してこの問題を解決できます.本明細書では、下から上へのクラスタリング方法を採用します.すなわち、各スクリーンショットを1つのクラスタと見なしてから、距離が最も小さい2つのクラスタを見つけて結合し、予想されるクラスタに繰り返したり、他の終了条件を満たしたりします.
4.2.2実現[2]
1)画像間の距離を計算する
まず画像をwh 3次元ベクトルに変換し,ベクトル間のヨーロッパ式距離を画像間の距離とし,画像が似ているほど距離が小さくなる.
def get_pic_array(url,w,h):
    file = cStringIO.StringIO(urllib2.urlopen(url).read())
    img = Image.open(file)  # PIL 
    img=img.resize((w, h))
    try:
        r, g, b, k = img.split()  # rgb , 4 
    except ValueError:
        r, g, b = img.split()
    #  (w*h) 
    r_arr = np.array(r).reshape(w * h)
    g_arr = np.array(g).reshape(w * h)
    b_arr = np.array(b).reshape(w * h)
    # RGB (w*h) (w*h*3)
    image_arr = np.concatenate((r_arr, g_arr, b_arr))
    return image_arr

一度のapp遍歴で得られたn枚のピクチャはクラスタリングを完了し,まず1枚のピクチャを上記の処理に従った後,全体をn(wh*3)のマトリクスにつなぎ,サンプルセットとする.
2)クラスタ間距離の計算方法
single:2つのクラスタの中で最も距離の近い2つのサンプルの距離をこのクラスタ間の距離completeとする:2つのクラスタの中で最も距離の遠い2つのサンプルの距離をこのクラスタ間の距離averageとする:2つのクラスタ間のサンプルの2つの距離の平均値は決定して、個別の異常サンプルが結果に与える影響を解決して、しかし計算量は比較的に大きいward:差の平方和、計算式は比較的に複雑で、具体的な計算式と他の計算方法については、クラスタ間の距離を計算する方法を参照してください.試してみるとwardの方が効果的であることが分かったので,最終的にwardをクラスタ間の距離を計算する方法として選んだ.
Z = linkage(X, 'ward')

上記の文を実行すると、クラスタリングが完了します.
3)臨界距離選択
この値はクラスタリングの効果に直接影響し、臨界距離が小さすぎると、似たような画像がクラスタリングできなくなり、臨界距離が大きすぎると、同じページではない画像が集まってしまうので、適切な距離をどのように選ぶかが重要です.実験により,画像がページ異常モデルによって異常画像と認識されると,これらの画像間の類似性が高くなり,異なる異常ページを誤ってクラスタリングしないように,異常と認識された画像をそれぞれクラスタリングし,異常クラスの臨界距離をより小さく設定することが分かった.

5.総括と展望


現在、このツールは全体のページ異常に対する認識効果が高く、テキスト異常の認識精度もサンプルを豊富にする過程で絶えず向上している.
次にLabelImgツールを統合し、TensorFlowでSSDモデルを構築してコントロール異常の画像を識別するほか、要素/文字レイアウトの乱れなどの問題のページ識別、ページ操作の予想結果識別も試行中である.画像処理と誤り認識技術を用いて,品質保証の1つの方法として探索を続けていく.

参照ドキュメント:


[1]ピクチャクラスタリング計算:https://haojunsui.github.io/2016/07/16/scipy-hac/
クラウドサーバー99元団体購入!新しいのを引っ張って現金のお年玉に勝つことができます!300万はあなたを待っています!すぐにグループを開いてお年玉に勝つ:http://click.aliyun.com/m/100...
著者:閑魚技術-金ほら
原文を読む
本文は雲栖コミュニティのオリジナル内容で、許可を得ずに転載してはならない.