① Airtest自動化測試——Airtest進階和圖像識別演算法(下)
Airtest圖像識別演算法深入解析
2.1 Airtest圖像識別演算法的實現原理
以"touch"操作為例,分析其日誌信息,Airtest嘗試使用SURFMatching、TemplateMatching和BRISKMatching演算法進行圖像識別。識別結果中,'confidence':0.4586929976940155表示演算法的可信度。若該值超過預設閾值(默認0.7),則認為識別成功;反之,則認為失敗。
默認設置的演算法為CVSTRATEGY = ["surf", "tpl", "brisk"],Airtest按此順序執行演算法,直到找到符合閾值的識別結果或超時。
2.2 Airtest圖像識別演算法分類
Airtest支持opencv3中的8種圖像識別演算法。
這8種演算法分為兩類:
1. 模板匹配(TemplateMatching)
2. 基於特徵點的圖像識別
2.2.1 模板匹配(TemplateMatching)
模板匹配是一種基本的模式識別方法,通過查找與給定子圖像匹配的小塊區域來識別對象。其局限性在於僅支持平行移動,對旋轉、大小變化不敏感。
2.2.2 基於特徵點的圖像識別
SIFT、SURF、BRISK、ORB、AKAZE和BRIEF等演算法屬於此類。以下以SIFT為例,具體說明如下:
2.2.2.1 SIFT
SIFT演算法具有尺度不變性,能夠有效表達目標特徵信息。其優點包括:
1) 具有旋轉、尺度、平移、視角及亮度不變性,有利於特徵信息的有效表達。
2) 參數調整魯棒性好,可根據場景需求調整特徵點數量,便於特徵分析。
測試代碼以lena.png為示例。
2.2.2.2 SURF
SURF演算法簡化了SIFT中的高斯二階微分模板,使得卷積平滑操作轉換為加減運算,提高了魯棒性和降低時間復雜度。最終生成的特徵向量維度為64維。
測試代碼以lena.png為示例。
2.2.2.3 BRISK
BRISK演算法基於二進制、魯棒、不變、可縮放和關鍵點(Binary Robust Invariant Scalable Keypoints),提供高效的特徵檢測和描述。
測試代碼以lena.png為示例。
2.2.2.4 KAZE
KAZE演算法基於非線性插值,適用於圖像處理,因為圖像通常非連續。與SIFT/SURF相比,KAZE更穩定,採用非線性尺度空間構造關鍵點。
測試代碼以lena.png為示例。
2.2.2.5 AKAZE
AKAZE演算法提供更快的速度,是較新的演算法,僅在較新版本的opencv中可用。
測試代碼以lena.png為示例。
2.2.2.6 ORB
ORB演算法結合了FAST角點檢測與描述技術,提供尺度和旋轉不變性,且對雜訊和透視仿射具有不變性。適用於實時應用。
測試代碼以lena.png為示例。
2.2.2.7 BRIEF
BRIEF演算法提供高效的特徵描述,對大范圍平面旋轉具有較好的識別率。
測試代碼以lena.png為示例。
2.3 自定義默認識別演算法
通過修改ST.CVSTRATEGY = ["tpl", "sift","brisk"],可以調整默認的圖像識別演算法。
2.4 圖像識別演算法總結
性能解析包括單張、多張和內存、CPU使用情況,內存最大:kaze > sift > akaze > surf > brief > brisk > orb;CPU最大:kaze > surf > akaze > brisk > sift > brief > orb;識別效果:sift > surf > kaze > akaze > brisk > brief > orb。
總結:
1. 當解析度不變時,模板匹配演算法速度更快,優先考慮。
2. 解析度變化時,推薦使用特徵點匹配,提高跨平台適應性。
3. SIFT和SURF提供較高的准確率,結果穩定;SIFT稍優於SURF。
4. ORB速度快,但穩定性較差;AKAZE也容易出現問題。
5. 其他演算法速度差異不大。
匯智妹,軟體工程師,關注公眾號【匯智動力學院】獲取IT技術干貨和行業動態,歡迎有意轉行IT的小夥伴關注,了解就業數據和成功案例。