前言
Airtest是一款 基於圖像識別原理 的跨平台UI自動化測試框架,它能夠根據大量的 特征點 來識別一個截圖在當前畫面中的位置,但是它並不能識別出截圖中具體包含了什么文字。
而在自動化測試的過程中,我們會經常遇到需要進行文字識別的場景,比如 識別驗證碼、識別截圖中的文字、讀取截圖中的數值 等等,遇到這些情況時我們可以如何處理呢?
今天教大家用一款免費的開源圖像OCR文字識別軟件 -- Tesseract-OCR
來處理上述情況。
1.安裝Tesseract-OCR.exe
在網上搜索“Tesseract”,我們可以找到很多Tesseract-OCR的下載鏈接和安裝教程,大家可以選擇其中一個版本下載到本地即可。
下載完成后雙擊進入安裝,需要特別注意的是,在選擇安裝的組件時,我們需要把 Additional language data(download)
這一選項勾上,目的是 安裝各個版本的語言包,后續我們就不用手動下載語言包來安裝了。
還有一點要注意的是,記住我們選擇的軟件安裝路徑,因為我們需要把這個路徑添加到 系統環境變量 的 path
中:
另外一個要新增的環境變量是 TESSDATA_PREFIX
,如下圖所示,未設置在識別過程中會報 Please make sure the TESSDATA_PREFIX environment variable is set to the parent directory of your "tessdata" directory
的錯誤:
完成以上工作后,我們可以在命令行用 tesseract -v
驗證環境是否配置成功:
2.在本地python環境中安裝pytesseract
因為我們最終要在python環境中使用 airtest
和 tesseract
,所以需要在本地的python環境中安裝上 airtest
庫和 pytesseract
庫:
pip install airtest
pip install pytesseract
安裝完畢后可以在命令行輸入 pip list
檢查安裝結果:
3.用airtest截圖並識別截圖文字
打開我們的AirtestIDE,在 選項--設置--自定義python.exe路徑
中設置我們剛才安裝好對應庫的python環境:
以之前官網提供的 poco
demo的界面為例,我們用 airtest
把紅框部分的截圖截取下來,然后再利用 tesseract
把截圖中的文字識別並打印出來:
具體實現如下:
# -*- encoding=utf8 -*- __author__ = "AirtestProject" from airtest.core.api import * from airtest.aircv import * auto_setup(__file__) from PIL import Image import pytesseract # 局部截圖 screen = G.DEVICE.snapshot() local = aircv.crop_image(screen,(132,58,380,126)) # 保存局部截圖到指定文件夾中 pil_image = cv2_2_pil(local) pil_image.save("D:/test/score0.png", quality=99, optimize=True) # 讀取截圖並識別截圖中的文字 image = Image.open(r'D:/test/score0.png') text = pytesseract.image_to_string(image) print("-----------初始數據為--------------") print(text)
識別結果如下:
知識點:
① G.DEVICE.snapshot()
,對當前設備畫面進行截圖並保存在內存中。
② crop_image()
,局部截圖的方法,需要傳入倆個參數,一個是內存中的截圖,就像這里的 screen
,另一個是截取偏移 [x_min, y_min, x_max ,y_max]
。
③ Image.open()
,用來直接讀取給定路徑指向的圖片
④ image_to_string()
,用來解析圖片中的文字
4.識別驗證碼
以下述驗證碼截圖為例,該截圖的保存路徑為 D:/test/7364.jpg
:
識別方式和結果如下:
# 識別驗證碼 image2 = Image.open(r'D:/test/7364.jpg') text2 = pytesseract.image_to_string(image2) print("-----------驗證碼為--------------") print(text2) log("驗證碼為:"+text2)
5.識別中文文字
識別中文的方法和識別數字與英文基本一致,但比較特別的是,我們需要在 image_to_string()
方法中指定中文的語言參數(示例代碼中指定了簡體中文來識別截圖):
# 識別中文 image3 = Image.open(r'D:/test/3.png') text3 = pytesseract.image_to_string(image3,lang='chi_sim') print("-----------識別出來的文字為:--------------") print(text3) log("識別出來的文字為:"+text3)
Airtest官網:http://airtest.netease.com/
Airtest教程官網:https://airtest.doc.io.netease.com/
搭建企業私有雲服務:https://airlab.163.com/b2b