首页 > 其他分享 >文字识别技术升级:Airtest与PaddleOCR模型的协作小技巧

文字识别技术升级:Airtest与PaddleOCR模型的协作小技巧

时间:2024-07-05 10:55:40浏览次数:21  
标签:文字 识别 target PaddleOCR Airtest ocr 技术升级

此文章来源于项目官方公众号:“AirtestProject”
版权声明:允许转载,但转载必须保留原链接;请勿用作商业或者非法用途

一、前言

在进行自动化测试的过程中,ocr文字识别一直是大家最想要实现以及最需要的能力,今天就来介绍一个由百度飞浆提供的一个免费的ocr识别库——PaddleOCR,以及探讨一下,PaddleOCRAirtest协作能擦出怎么样的火花~

二、PaddleOCR介绍

PaddleOCR是百度飞浆AI研发的一个ocr工具库,目前支持多种目标识别,更多的介绍可以戳官方项目去看看:https://github.com/PaddlePaddle/PaddleOCR,我们今天来讲讲,在与Airtest协作中,我们可能会用到PaddleOCR的什么功能。

在使用PaddleOCR之前,需要在自己的本地环境中安装对应的PaddleOCR库,方便我们后续调用。我们建议是安装到本地的python环境内,后续将AirtestIDE的python环境更换为本地python环境即可。

#安装PaddlePaddle
pip install paddlepaddle

#安装PaddleOCR whl包
pip install paddleocr

在开始使用之前,我们来了解一下PaddleOCR识别的效果以及返回的情况,PaddleOCR主要是通过我们传入需要识别的图片,通过调用PaddleOCR模型库,去进行识别并返回识别结果或识别后的图片,例如下图这样:

通过PaddleOCR识别打印文字信息如下,分别以列表的形式返回了所识别到的文字的左上角坐标、右上角坐标、右下角坐标、左下角坐标、识别到的文字以及识别置信度:

[[[154.0, 9.0], [492.0, 9.0], [492.0, 33.0], [154.0, 33.0]], ('小学数学第八册第三单元测试题', 0.9987085461616516)]
[[[238.0, 47.0], [319.0, 47.0], [319.0, 66.0], [238.0, 66.0]], ('(小数乘法)', 0.9819607138633728)]
[[[109.0, 80.0], [160.0, 80.0], [160.0, 103.0], [109.0, 103.0]], ('姓名:', 0.9986250996589661)]
[[[305.0, 81.0], [358.0, 81.0], [358.0, 104.0], [305.0, 104.0]], ('班别:', 0.9987398982048035)]
.............

接下来,我们来看一下如何使用PaddleOCR库来识别图像中的文字,并与Airtest进行联动,实现基于ocr的文字识别点击功能。

首先,我们需要导入PaddleOCR库,并准备好要识别的图片文件。通过调用PaddleOCR的接口,我们可以将图片路径作为参数传入。在识别过程中,PaddleOCR会在result变量中返回识别结果,其中包括文本框的坐标和对应的文字内容。

from paddleocr import PaddleOCR, draw_ocr

# Paddleocr目前支持的多语言语种可以通过修改lang参数进行切换
# 例如`ch`, `en`, `fr`, `german`, `korean`, `japan`
ocr = PaddleOCR(use_angle_cls=True, lang="ch")  # need to run only once to download and load model into memory
img_path = './imgs/11.jpg'
#开始ocr识别图片文字信息
result = ocr.ocr(img_path, cls=True)

通过PaddleOCR获取的图像中的文字信息,我们可以利用Airtest提供的接口和语句,创建一个名为ocr_touch()的函数。这个函数将执行以下步骤:

  1. 使用Airtest进行屏幕截图。
  2. 将截图传递给PaddleOCR进行文字识别。
  3. PaddleOCR获取识别到的文字及其在图像中的位置坐标。
  4. 利用Airtest根据坐标信息点击文字的中心点。

通过这种方式,ocr_touch()函数将实现从识别到点击的自动化操作,简化了整个流程。具体参考代码如下

def ocr_touch(target_text) :
     # 截屏
    pic_path=r"./now.png"
    snapshot(pic_path)
    
        # 使用PaddleOCR识别文字
    ocr_result = ocr.ocr(pic_path, cls=True)
    
    # 遍历识别结果,找到目标文字的坐标
    target_coords = None
    for line in ocr_result:
        for word_info in line:
            #获取识别结果的文字信息
            textinfo = word_info[1][0]
            print(textinfo)
            
            if target_text in textinfo:
                # 获取文字的坐标(中心点)
                x1, y1 = word_info[0][0]
                x2, y2 = word_info[0][2]
                target_coords = ((x1 + x2) / 2, (y1 + y2) / 2)
                break
        if target_coords:
            break

    # 点击坐标
    if target_coords:
        touch(target_coords)
    else:
        print(f"未找到目标文字:{target_text}")

三、PaddleOCR与Airtest协作案例

那么我们一起来通过一个小案例来看一下,在日常测试中的表现情况吧~

参考代码:

# -*- encoding=utf8 -*-
__author__ = "Airtest"

from airtest.core.api import *

auto_setup(__file__)

from paddleocr import PaddleOCR

def ocr_touch(target_text) :
     # 截屏当前画面
    pic_path=r"./now.png"
    snapshot(pic_path)
    
     # 使用PaddleOCR识别图片文字
    ocr_result = ocr.ocr(pic_path, cls=True)
    
    # 遍历识别结果,找到目标文字的坐标
    target_coords = None
    for line in ocr_result:
        for word_info in line:
            #获取识别结果的文字信息
            textinfo = word_info[1][0]
            print(textinfo)
            
            if target_text in textinfo:
                # 获取文字的坐标(中心点)
                x1, y1 = word_info[0][0]
                x2, y2 = word_info[0][2]
                target_coords = ((x1 + x2) / 2, (y1 + y2) / 2)
                break
        if target_coords:
            break

    # 使用Airtest点击坐标
    if target_coords:
        touch(target_coords)
    else:
        print(f"未找到目标文字:{target_text}")


if __name__ == "__main__":
    
    # 初始化PaddleOCR
    ocr = PaddleOCR(use_angle_cls=True, lang='ch')  # 可以根据需要选择语言
    
    #打开微博
    start_app("com.sina.weibo")
    wait(Template(r"tpl1719891218354.png", record_pos=(0.021, 0.998), resolution=(1080, 2520)))

    # 传入并点击“发现”
    ocr_touch("发现")
    wait(Template(r"tpl1719891346582.png", record_pos=(0.008, -0.957), resolution=(1080, 2520)))
    
    
    # 传入并点击“更多热搜”
    ocr_touch("更多热搜")
    wait(Template(r"tpl1719891584526.png", record_pos=(-0.291, -0.606), resolution=(1080, 2520)))

    # 传入并点击“热搜”
    ocr_touch("热搜")

四、Airtest_ocr的表现情况

Airtest私有云内,我们也有对应的一款商业化的Airtest-ocr的文字识别库,这个库已经封装好对应的ocr的识别以及对应的操作执行能力,具体介绍可以看往期推文,我们是封装好了日常使用较多的操作,在购买我们的商业化版本后,可以直接调用的~

# 点击某文字
ocr_touch("开始")
# 与 ocr_click("开始") 等价

# 双击某文字
ocr_double_click("开始")

# 某些情况下,文字处于按钮附近(比如按钮下方),使用offset设置点击偏移量
ocr_touch("开始", offset=(0, -20))
# 以“开始”文字的中心为起点, x轴不偏移,y轴向上偏移20个像素点
ocr_double_click("开始", offset=(0, -20))

# 指定高优先级区域 (version>=1.0.10)
ocr_touch("开始", location=(100, 100), threshold=0.98)
# 对于置信度高于0.98的多个 “开始”, 优先点击靠近 (100,100) 的

# ocr_swipe 与 swipe函数类似
ocr_swipe("生活", "学习")
# 从“生活”滑向“学习”
ocr_swipe("生活", vector=(0, 100))
# 从“生活”向下滑动100个像素
ocr_swipe((780, 1842), (780, 1000))
# 从坐标1滑向坐标2
......

我们Airtest-ocr的图片文字识别情况如下图:

PaddleOCR相比,我们Airtest-ocr除了可以直接识别传入图片内容外,还可以动态识别所连接的设备画面。具体的动态识别情况如下(在本地python环境中已加入Airtest-ocr库)

五、小结

我们本期推文介绍了PaddleOCR的文字识别能力,以及如何与Airtest协作,实现在脚本中可以ocr文字识别并点击的操作。当然,我们这里只是简单的封装实现了一个识别文字并点击的操作,还有更多的日常操作可以通过自己的需求去进行封装实现。或者有需要的同学,也可以联系我们,购买我们Airtest私有云,就可以直接调用Airtest-ocr的操作接口~

如果在测试的过程中,遇到了问题,或者有任何想要深入了解的知识点,欢迎在官方交流群(526033840)里告诉我们或者提交issue,也欢迎大家投稿其他不同的使用小技巧。


AirtestIDE下载:airtest.netease.com/
Airtest 教程官网:airtest.doc.io.netease.com/
搭建企业私有云服务:airlab.163.com/b2b

官方答疑 Q 群:526033840

标签:文字,识别,target,PaddleOCR,Airtest,ocr,技术升级
From: https://www.cnblogs.com/AirtestProject/p/18285337

相关文章

  • 关于airtest生成的报告中缺少poco语句问题
    1、airtest生成的报告只显示airtest的相关操作,如果是poco和airtest-selenium的操作则不记录。因此需要在报告中引用插件。支持poco语句插件,poco.utils.airtest.report支持airtest-selenium语句插件,airtest_selenium.report2、在IDE运行.py脚本报告生成的依据是脚本运行时保......
  • paddleocr识别表格文字内容,对表格内容进行从左上到右下排序
    背景:使用paddleocr识别表格图片文字内容,但是由于图片拍摄或扫描角度问题,不一定是水平平衡的,可能存在一定的倾斜角度。所以如果是仅按坐标从左上到右下进行排序的话,可能本来同一行的文字,被切分成了上下行。因此需要使用阈值来进行近似判断。下面就是一个可用例子。defsort_to......
  • 有关paddleocr在pyinstall中打包问题的解决方案
    借鉴网址python解决paddleocr打包问题_pyinstaller怎么解决paddleocr中的动态导入-CSDN博客在打包时我使用的spec文件如下:(需要将pathe和binaries换为自己的paddleocr路径)block_cipher=Nonea=Analysis(['main.py'],   pathex=['E:\\PyEnviroment\\Lib\\site-packages\\p......
  • Airtest-Selenium实操小课④:微信读书上阅读书籍
    此文章来源于项目官方公众号:“AirtestProject”版权声明:允许转载,但转载必须保留原链接;请勿用作商业或者非法用途1.前言上一课我们讲到用Airtest-Selenium爬取下载可爱的猫猫图片,还没看的同学可以戳这里看看~那么今天的推文,我们就来说说看,怎么实现模拟真人去打开微信读书网......
  • 爬虫技术升级:如何结合DrissionPage和Auth代理插件实现数据采集
    背景/引言在大数据时代,网络爬虫技术已经成为数据收集的重要手段之一。爬虫技术可以自动化地从互联网上收集数据,节省大量人力和时间成本。然而,当使用需要身份验证的代理服务器时,许多现有的爬虫框架并不直接支持代理认证。这就需要我们寻找替代方案,以便在爬虫过程中能够顺利通过代......
  • C# PaddleOCR 单字识别效果
    C#PaddleOCR 单字识别效果效果说明        根据《百度办公文档识别C++离线SDKV1.2用户接入文档.pdf》,使用C++封装DLL,C#调用。背景        为使客户、第三方开发者等能够更快速、方便的接入使用百度办公文档识别SDK、促进百度OCR产品赋能更多客户,......
  • 提速15%,PaddleOCRSharp新版v4.3发布
    PaddleOCRSharpv4.3版本,已经于5月23日发布。该版本的发布,在不影响识别精度的同时,带来了10%~15%速度的提升。项目地址:https://gitee.com/raoyutian/PaddleOCRSharp项目简介PaddleOCRSharp 作者是广州英田信息科技有限公司的创始人明月心(raoyutian) ,是一个基于百度飞桨Padd......
  • 【ERNIE + PaddleOCR】 创建自己的论文字典,更好的写论文吧!
    一、项目背景        在撰写论文的过程中,许多作者习惯先以中文完成初稿,随后再将其翻译为英文。然而,这种翻译过程往往伴随着一系列挑战。尤其是在词汇选择和语法结构上,很容易使用到一些在学术论文中不常用或不符合规范的表达。为了克服这一难题,我结合PaddleOCR和ERNIE......
  • 网易Airtest集群方案大揭秘:小型便携式集群方案来啦
    此文章来源于项目官方公众号:“AirtestProject”版权声明:允许转载,但转载必须保留原链接;请勿用作商业或者非法用途一、前言中小型企业/工作室搭建便携设备集群的制胜法宝是什么?当然非网易Airtest便携式机柜莫属啦。得益于广大企业客户对我们便携式集群的支持,我们团队也一直在坚......
  • Airtest部署IOS测试
    **!17一、Airtest部署IOS测试:!**https://github.com/AirtestProject/iOS-Tagent/blob/master/Introduction/README_zh.mdps:”若访问http://127.0.0.1:8100/inspector报错unknown...........,不用管直接跳过这一步操作,不影响airtest的连接,只要http://127.0.0.1:8100/status......