



摘 要:圖形用戶界面成為用戶與軟件進行交互的必要方式之一。然而,隨著軟件規模和復雜性的增長,測試代價愈加高昂。基于OCR算法的文本控件識別方法引起了越來越多的關注,例如Sikuli通過OCR技術匹配窗口控件的文本,從屏幕上基于圖像匹配來定位窗口控件。目前OCR引擎應用廣泛,但是OCR算法通常運行緩慢,它們可能需要幾秒鐘的時間來識別GUI屏幕上的文本。文章介紹了一種快速的輕量級文本識別算法以加速OCR的文本識別過程。實驗表明,在RICO數據集上,該算法降低了基于OCR的文本識別84%的平均時間。
關鍵詞:GUI測試;OCR;計算機視覺
中圖分類號:TP311.5 文獻標識碼:A 文章編號:2096-4706(2024)14-0094-04
A Lightweight Text Recognition Algorithm for GUI Interface
MA Yingwei
(Nanjing University of Aeronautics and Astronautics, Nanjing 210016, China)
Abstract: Graphical User Interface (GUI) has become an essential way for users to interact with software. As the scale and complexity of software increase, the cost of testing also rises. Text control recognition methods based on OCR algorithms have attracted increasing attention. For example, Sikuli uses OCR technology to match the text of window widget, enabling the localization of window widget based on image matching on the screen. Currently, OCR engines are widely used. However, OCR algorithms often run slowly, and they may cost several seconds to recognize text on the GUI screen. The paper introduces a lightweight text recognition algorithm to accelerate the text recognition process of OCR. Experiments show that on the Rico data set, this algorithm reduces the average time for OCR-based text recognition by 84%.
Keywords: GUI testing; OCR; computer vision
DOI:10.19850/j.cnki.2096-4706.2024.14.019
0 引 言
近年來,基于光學字符識別[1](Optical Character Recognition, OCR)的文本識別方法[2]引起了越來越多的關注。常用工具如Sikuli [3]通過OCR匹配窗口控件的文本,從屏幕上視覺匹配它們的圖像來實現GUI測試。有關基于OCR領域的GUI測試技術國內外學者已經做了大量研究。阿里巴巴開發了GUI逆向工程工具UI2CODE [4],該工具利用泛洪填充算法改進了非文本元素的檢測。通過識別連接區域和過濾噪聲,以及遞歸水平/垂直切片技術,可以獲得GUI元素。此外,該工具還使用了OCR來檢測GUI文本。Nguyen [5]等人提出的REMAUI方法利用OpenCV [6]庫中的現成圖像處理算法。該算法利用Canny邊緣檢測[7]來獲取圖像內容的原始形狀和區域。隨后,REMAUI算法執行邊緣合并,通過合并重疊區域來獲得GUI的邊界框。對于文本元素,它應用了OCR工具來識別GUI文本。
現有的基于OCR的GUI測試將OCR引擎視為黑盒。這種方法首先調用OCR引擎來識別文本及其在屏幕上的位置,然后匹配其中的給定文本以定位文本位置。雖然有很多優點,但這種方法的一個缺點是OCR引擎通常運行緩慢。本文研究了GUI屏幕上文本的特征,并引入了一種快速的輕量級GUI文本識別算法,在保證原有OCR精度的情況下加速文本定位的過程,提高了GUI測試自動化的效率。
1 基于OCR領域的識別
OCR是將手寫、打字或打印文本的掃描圖像轉換為機器編碼文本的過程。
1.1 典型OCR
目前在GitHub上流行的主流OCR開源模型框架包括PaddleOCR [8]和EasyOCR [9]。PaddleOCR是一種基于百度飛槳的OCR工具庫,包括了一種僅有8.6 MB大小的超輕量級中文OCR模板,且運行速度快。但是部分符號識別效果一般,如字母‘l’識別為數字‘1’,偶爾會出現部分內容丟失的情況。EasyOCR由Jaided AI開發,其識別效果尚可,優于一般開源模型。但是識別高分辨率圖片速度很慢,嚴重依賴GPU。
1.2 OCR識別流程
大多數OCR引擎以兩種方式識別文本:集成和逐步兩種方式。
如圖1(a)所示,逐步方法具有分離的檢測和識別模塊,并且使用前饋流水線來檢測、分割和識別文本區域。逐步方法涉及四個主要步驟:定位、驗證、分割和識別。在定位步驟中,組件被初步分類并分組為候選文本區域。在驗證階段,這些區域進一步被分類為文本或非文本區域。分割步驟的目的是將字符進行分離,以確保圖像塊具有獨特且準確的輪廓,以便在識別步驟中進行字符轉換。相比之下,集成方法旨在識別單詞,其中檢測和識別過程與字符分類共享信息或使用聯合優化策略,如圖1(b)所示。通過集成方法,字符分類響應被視為文本識別的主要線索,并與文本檢測和識別模塊共享。這些方法相當于從字符模型中過濾響應以捕獲感興趣的單詞。
(a)逐步OCR流程
(b)集成OCR流程
2 輕量級文本識別技術
深入研究基于OCR的文本識別,本文發現在這個任務中,通常不需要識別屏幕上的所有文本。通常GUI界面中只有幾個簡短的文本短語需要分析。然而黑盒OCR方法識別屏幕上的所有文本,那可能會浪費許多不必要的時間。這就是基于OCR的GUI測試較慢的原因。
因此,針對OCR的GUI測試,本文的文本定位場景是定位按鈕、菜單項、窗口標題、鏈接等中的英文短文本。根據經驗,定位GUI屏幕上顯示的圖像中嵌入的長文本段落或復雜場景文本并不常見。因此,這項工作只側重于在GUI屏幕上定位短文本的問題來優化OCR文本識別流程,以提高效率和準確性。本文基于Canny和OpenCV設計了輕量級文本檢測技術,代替了傳統OCR全圖文本檢測,具體來說使用Canny邊緣檢測算法分析圖像的邊緣來檢測字符,并采用自底向上的策略來檢測篩選文本短語。主要分為四個步驟:字符輪廓檢測、行合并字符框輪廓、行劃分單詞和分組文本短語。
2.1 字符輪廓檢測
為了檢測字符框,采取以下優化步驟:首先從屏幕截圖中提取Canny邊緣,然后找到這些邊緣的輪廓層次結構,將字符框識別為具有適當大小和縱橫比的輪廓邊界矩形,將每個輪廓視為一個字符框,只有當其大小適中且縱橫比合理時才被接受。字符輪廓結果如圖2(a)所示。
2.2 行合并
在檢測字符框后,接下來將字符框分組成行。首先,根據字符框的底部位置逐個處理它們。對于每個字符框,嘗試將其放入與其最近的現有行中。如果找到匹配的行,將字符框添加到該行中。如果找不到匹配的行,將創建一個新的行來包含字符框。行合并結果如圖2(b)所示。是否適合將字符框characterbox放置在行row上,取決于以下條件:
1)characterbox和 row垂直重疊。
2)characterbox完全位于row的上下高度閾值范圍內,其高度為vcenter(row)上下2×cbox_height(row)的范圍,其中vcenter(row)和cbox_height(row)是行row的平均字符框中心和高度。
3)characterbox和row中的內容來自同一個父輪廓。
2.3 行劃分單詞
為了將行進一步劃分為單詞,本文對字符框進行分組。兩個相鄰的字符框是否應該被分組為同一個詞取決于它們的水平間距以及頂部和底部位置。分組開始于從左到右將字符框合并到單詞中。假設對于字符框cb,其左側已經合并的單詞是W,并且left()、right()、top()、bottom()、width()和height()能獲取屏幕對象的位置屬性。如果left(cb)≤right(W),即字符框和單詞已經連接,就立即將它們合并在一起。否則,假設word(W)中字符框的平均高度為cbox_height(W),然后猜測單詞word中的最大字符水平間隙為:
除了從左到右合并字符框外,本方法還從右到左對第一步中找到的單詞進行分組,以避免只向左看的限制。行劃分結果如圖2(c)所示。
2.4 分組短語
檢測到的單詞最終被分組為文本短語。分組條件如式(5)所示,其中單詞被視為字符框。在文本短語分組中,本文使用雙字符寬度作為最大水平間距來確定是否將單詞W分組為文本短語P,即:
這里char_width(T)是一個完整單詞或文本短語T的公共字符寬度。從字符框的平均寬度cbox_width(T)和字符框的平均高度cbox_height(T)來猜測它的值:
分組短語結果如圖2(d)所示,可以看出,分組文本短語效果較好。
(a)character contour (b)rows
(c)word (d)phrase
3 實驗及結果分析
3.1 實驗數據
本文使用RICO [10]數據集進行評估。RICO是一種流行的移動的應用程序GUI屏幕數據集合。該數據集公開了約66k個不重復的UI屏幕截圖,分辨率為1 080×960,并給出了與這些截圖內容密切相關的視覺、文字、結構,以及交互設計屬性。考慮到OCR速度較慢,在所有RICO屏幕截圖上測試成本太高,因此挑選了10k個RICO截圖上和51k個具有非空文本屬性的可見文本控件。選取的文本完全是英文字母、空格或數字,在屏幕截圖中文本不重復,并且在單行中(文本長度限制為小于10個單詞,以便它們不太可能是多行)。
3.2 實驗環境
本文配置如表1實驗環境,設置單線程運行實驗。對于所研究的OCR引擎,本文使用其默認模型進行文本分析,未在使用前對其進行預訓練。
3.3 實驗結果
3.3.1 評價指標
本文使用平均文本識別時間和文本識別精確度作為評價指標,雖然主要關心的是文本定位速度,但也評估了文本定位精度,以全面檢查輕量級文本識別技術的影響。
3.3.2 性能對比
本文比較了提出的算法(-i+表示)、基于集成整圖識別的OCR的方法(-g表示)和基于逐步OCR方法(-i表示)在不同OCR引擎上的平均文本定位速度以及準確度。
由表2可以看出,本文提出的算法識別時間最長時間不超過0.4 s,平均識別時間為0.25 s,比基于集成整圖識別的OCR的方法(平均識別時間1.53 s)降低了84%,比基于逐步OCR方法(平均識別時間1.53 s)降低了84%。這顯著降低了基于OCR文本識別的時間,提高了測試效率。在精度方面本文提出的算法識別精度略微低于傳統的OCR引擎,這是因為:1)圖片小工具對文本的誤報;2)噪音,例如單個字符的微小字符框破裂等原因影響,但是結果是能在接受范圍內。
4 結 論
本文針對當前OCR引擎識別速度慢的問題提出了快速的輕量級GUI文本識別算法,以加快OCR過程中的GUI測試。其使用Canny邊緣檢測算法分析圖像的邊緣來檢測字符,并采用自底向上的策略來檢測文本短語。與現有技術相比,本文的工作在針對GUI屏幕文本方面投入了精力,旨在盡可能減少不必要的分析過程,以實現快速檢測文本短語。通過上述實驗結果,證明了本文算法的有效性和可行性,證明了其在實際應用中的潛力和優勢。但是還不能很好地處理復雜圖像背景上的文本,因為只使用了一個非常簡單的文本檢測器。對于這種情況,最好在編寫測試腳本時調用原始OCR引擎。后續會進一步開展相關研究。
參考文獻:
[1] NEUDECKER C,BAIERER K,GERBER M,et al. A Survey of OCR Evaluation Tools and Metrics [C]//The 6th International Workshop on Historical Document Imaging and Processing.New York:Association for Computing Machinery,2021:13-18.
[2] HEGGHAMMER T. OCR with Tesseract, Amazon Textract, and Google Document AI: a Benchmarking Experiment [J].Journal of Computational Social Science,2022,5(1):861-882.
[3] LI C M,ZHANG Y. Ameliorating the Image Matching Algorithm of Sikuli Using Artificial Neural Networks [J].International Journal of Dynamics of Fluids,2018,14(1):63-72.
[4] CHEN Y X,ZHANG T H,CHEN J.UI2code: How to Fine-tune Background and Foreground Analysis [EB/OL].(2020-02-23).https://laptrinhx.com/ ui2code-how-to-fine-tune-background-and-foreground-analysis2293652041/.
[5] TUAN A N,CHRISTOPH C. Reverse Engineering Mobile Application User Interfaces with REMAUI (T) [C]//2015 30th IEEE/ACM International Conference on Automated Software Engineering (ASE).Lincoln:IEEE,2015:248-259.
[6] OpenCV team. OpenCV [EB/OL].[2023-10-15].https://opencv.org/.
[7] CHEN X,JIN L,ZHU Y,et al. Text Recognition in the Wild: A Survey [J]. ACM Computing Surveys (CSUR),2021,54(2):1-35.
[8] PaddlePaddle. PaddleOCR [EB/OL].[2023-10-15].https://github.com/PaddlePaddle/PaddleOCR.
[9] JaidedAI. EasyOCR [EB/OL].[2023-10-15].https://github.com/JaidedAI/EasyOCR.
[10] DEKA B,HUANG Z F,FRANZEN C,et al. Rico: A Mobile APP Datasetfor Building Data-Driven Design Applications [C]//UIST '17: Proceedings of the 30th Annual ACM Symposium on User Interface Software and Technology.New York:Association for Computing Machinery,2017:845-854.
作者簡介:馬熒煒(1998—),男,漢族,浙江溫嶺人,碩士研究生在讀,研究方向:軟件測試。
收稿日期:2023-12-20