2行代碼幫你搞定自動化測試的文字識別


 

前言

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM