利用代碼搞定自動化測試中文字的識別?你會了嗎?

? ? ? ?Airtest是一款?基于圖像識別原理?的跨平臺UI自動化測試框架,它能夠根據(jù)大量的?特征點?來識別一個截圖在當前畫面中的位置,但是它并不能識別出截圖中具體包含了什么文字。?

? ? ? ?而在自動化測試的過程中,我們會經(jīng)常遇到需要進行文字識別的場景,比如?識別驗證碼?、?識別截圖中的文字?、?讀取截圖中的數(shù)值?等等,遇到這些情況時我們可以如何處理呢?

今天教大家用一款免費的開源圖像OCR文字識別軟件 --?Tesseract-OCR?來處理上述情況。

1.安裝Tesseract-OCR.exe

? ? ? ?在網(wǎng)上搜索“Tesseract”,我們可以找到很多Tesseract-OCR的下載鏈接和安裝教程,大家可以選擇其中一個版本下載到本地即可。

? ? ? 下載完成后雙擊進入安裝,需要特別注意的是,在選擇安裝的組件時,我們需要把?Additional language data(download)?這一選項勾上,目的是?安裝各個版本的語言包?,后續(xù)我們就不用手動下載語言包來安裝了。

? ? ? 還有一點要注意的是,記住我們選擇的軟件安裝路徑,因為我們需要把這個路徑添加到?系統(tǒng)環(huán)境變量?的?path?中:


? ? 另外一個要新增的環(huán)境變量是?TESSDATA_PREFIX?,如下圖所示,未設(shè)置在識別過程中會報?Please make sure the TESSDATA_PREFIX environment variable is set to the parent directory of your "tessdata" directory?的錯誤:


? ? ? 完成以上工作后,我們可以在命令行用?tesseract -v?驗證環(huán)境是否配置成功:



2.在本地python環(huán)境中安裝pytesseract

? ? 因為我們最終要在python環(huán)境中使用?airtest?和?tesseract?,所以需要在本地的python環(huán)境中安裝上?airtest?庫和?pytesseract?庫:

pipinstallairtestpipinstallpytesseract復(fù)制代碼

安裝完畢后可以在命令行輸入?pip list?檢查安裝結(jié)果:


3.用airtest截圖并識別截圖文字

打開我們的AirtestIDE,在?選項--設(shè)置--自定義python.exe路徑?中設(shè)置我們剛才安裝好對應(yīng)庫的python環(huán)境:


以之前官網(wǎng)提供的?poco?demo的界面為例,我們用?airtest?把紅框部分的截圖截取下來,然后再利用?tesseract?把截圖中的文字識別并打印出來:


具體實現(xiàn)如下:

# -*- encoding=utf8 -*-__author__ ="AirtestProject"fromairtest.core.apiimport*fromairtest.aircvimport*auto_setup(__file__)fromPILimportImageimportpytesseract# 局部截圖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("-----------初始數(shù)據(jù)為--------------")print(text)

識別結(jié)果如下:


知識點:

①?G.DEVICE.snapshot()?,對當前設(shè)備畫面進行截圖并保存在內(nèi)存中。

②?crop_image()?,局部截圖的方法,需要傳入倆個參數(shù),一個是內(nèi)存中的截圖,就像這里的?screen?,另一個是截取偏移?[x_min, y_min, x_max ,y_max]?。

③?Image.open()?,用來直接讀取給定路徑指向的圖片

④?image_to_string()?,用來解析圖片中的文字

4.識別驗證碼

以下述驗證碼截圖為例,該截圖的保存路徑為?D:/test/7364.jpg?:


別方式和結(jié)果如下:

# 識別驗證碼image2 = Image.open(r'D:/test/7364.jpg')? ? text2 = pytesseract.image_to_string(image2)print("-----------驗證碼為--------------")print(text2)log("驗證碼為:"+text2)


5.識別中文文字

識別中文的方法和識別數(shù)字與英文基本一致,但比較特別的是,我們需要在?image_to_string()?方法中指定中文的語言參數(shù)(示例代碼中指定了簡體中文來識別截圖):



# 識別中文image3 = Image.open(r'D:/test/3.png') text3 = pytesseract.image_to_string(image3,lang='chi_sim')print("-----------識別出來的文字為:--------------")print(text3)log("識別出來的文字為:"+text3)


加入我們?。?42830685?,群,領(lǐng)取最新軟件測試資料大廠面試和Python自動化學(xué)習(xí)資料!一起學(xué)習(xí)交流進步!

聽說點贊的都是天使??!抬抬手指哦!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容