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

一、前言

在进行自动化测试的过程中,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 = Nonefor 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)breakif 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 PaddleOCRdef ocr_touch(target_text) :# 截屏当前画面pic_path=r"./now.png"snapshot(pic_path)# 使用PaddleOCR识别图片文字ocr_result = ocr.ocr(pic_path, cls=True)# 遍历识别结果,找到目标文字的坐标target_coords = Nonefor 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)breakif target_coords:break# 使用Airtest点击坐标if target_coords:touch(target_coords)else:print(f"未找到目标文字:{target_text}")if __name__ == "__main__":# 初始化PaddleOCRocr = 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,也欢迎大家投稿其他不同的使用小技巧。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1472357.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

智慧交通运行监测与应急指挥中心方案

建设目标 建立感知层数据的实时采集以及数据处理,实现监测预警自动化和智能化;推动交通运输数据资源开放共享,打破数据资源壁垒,与城市各部门数据建立共享交换机制,实现应急指挥的协同化;充分运用大数据、互…

《简历宝典》01 - 一文带你学会如何写一份糟糕透顶的简历

我们每个人几乎都会面对找工作这件事,而找工作或者说求职首先就是要写一份简历。今天狗哥将以一个不同的视角带你写一份无与伦比,糟糕透顶的求职简历,说实话,其实几年前,我就是这么写的。 目录 1. 文件名 2. 基本信…

大模型备案关注点最详细说明【附流程+附件】

国家网信办已经公布的通过大模型备案的有117家,部分已面向全社会开放服务。加上业内一些渠道透漏的消息,目前已有超过140个大模型获得备案。相对于算法备案,大模型备案名额显然更难拿到,很多企业在申请大模型备案的时候是一头雾水…

24西安电子科技大学数学与统计学院—考研录取情况

24西安电子科技大学—数学与统计学院—考研录取统计 01、数学与统计学院各个方向 02、24数学与统计学院近三年复试分数线对比 数统院24年院线相对于23年院线增加高达30分,确实增长浮动比较高,接近30分的水平,因此大家更需要好好去努力&#x…

快手矩阵管理系统:开启短视频营销的智能时代

在短视频内容营销的浪潮中,快手矩阵管理系统以其独特的优势和功能,成为品牌和个人创作者不可或缺的工具。本文将详细解析快手矩阵管理系统的核心功能,探讨它如何帮助用户高效管理多平台、多账号的内容发布和互动。 快手矩阵管理系统概述 快…

手动访问mongo和ES插入和查询

1、手动访问mongo 1.1、mongo连接数据库 1.2、mongo插入和查询 db.hmf_test.insert( { "aoeId": "1", "aoeAes": "吴秀梅", "aoeSm4": "北京xx网络技术有限公司.", "aoeSm4_a": "…

3D鸡哥又上开源项目!单图即可生成,在线可玩

大家好,今天和大家分享几篇最新的工作 1、Unique3D Unique3D从单视图图像高效生成高质量3D网格,具有SOTA水平的保真度和强大的通用性。 如下图所示 Unique3D 在 30 秒内从单视图野生图像生成高保真且多样化的纹理网格。 例如属于一张鸡哥的打球写真照 等…

【C++ 】解决 C++ 语言报错:Null Pointer Dereferenc

文章目录 引言 在 C 编程中,空指针解引用(Null Pointer Dereference)是一种常见且危险的错误。当程序试图通过空指针访问内存时,会导致程序崩溃或产生不可预期的行为。本文将详细探讨空指针解引用的成因、检测方法及其预防和解决…

Java后端每日面试题(day1)

目录 JavaWeb三大组件依赖注入的方式Autowire和Resurce有什么区别?Spring Boot的优点Spring IoC是什么?说说Spring Aop的优点Component和Bean的区别自定义注解时使用的RetentionPolicy枚举类有哪些值?如何理解Spring的SPI机制?Spr…

蚁群优化算法(ACO)的原理Matlab旅行商TSP问题算例

一、优化问题 在满足一定条件下,在众多方案或参数中寻找最优方案或参数值,以使得某个或多个功能指标达到最优,或使系统的某些性能指标达到最大值或最小值。 但是当系统复杂或非线性时,要遍历所有参数组合寻找最优会变得很困难—…

OFDM技术概述8——FBMC

Filter bank multicarrier(FBMC,滤波器组多载波),是一种类似于OFDM的调制方式,用滤波器抑制子载波的旁瓣大小,使用FFT/IFFT或多相滤波器实现,其应用于5G的主要优势: 子载波信号带限,带外泄漏小…

马拉松报名小程序的设计

管理员账户功能包括:系统首页,个人中心,用户管理,赛事信息管理,赛事报名管理,活动商城管理,留言板管理,系统管理 微信端账号功能包括:系统首页,赛事信息&…

springboot整合Camunda实现业务

1.bean实现 业务 1.画流程图 系统任务,实现方式 2.定义bean package com.jmj.camunda7test.process.config;import lombok.extern.slf4j.Slf4j; import org.camunda.bpm.engine.TaskService; import org.camunda.bpm.engine.delegate.JavaDelegate; import org.…

Linux 摄像头编号固化

一、前言 在工业领域,一台设备会有很多个摄像头,可以使用命令:ll /dev/video* 进行查看; 在代码中,如果需要使用摄像头,那么都是需要具体到哪个摄像头编号的,例如 open("/dev/video4"…

无线麦克风什么牌子的音质效果好,揭秘哪款领夹麦克风性价比高!

随着网络直播、短视频制作和在线教育的兴起,无线领夹麦克风因其便携性和出色的录音质量成为了众多内容创作者的首选工具。这类麦克风的流行并不是空穴来风,领夹麦克风不仅能够轻松夹在衣物上,减少了对活动自由度的限制,而且能够提…

无线网卡怎么连接台式电脑?让上网更便捷!

随着无线网络的普及,越来越多的台式电脑用户希望通过无线网卡连接到互联网。无线网卡为台式电脑提供了无线连接的便利性,避免了有线网络的束缚。本文将详细介绍无线网卡怎么连接台式电脑的四种方法,包括使用USB无线网卡、内置无线网卡以及使用…

2024年7月3日 (周三) 叶子游戏新闻

老板键工具来唤去: 它可以为常用程序自定义快捷键,实现一键唤起、一键隐藏的 Windows 工具,并且支持窗口动态绑定快捷键(无需设置自动实现)。 卸载工具 HiBitUninstaller: Windows上的软件卸载工具 《魅魔》新DLC《Elysian Fields…

智能井盖采集装置 开启井下安全新篇章

在现代城市的脉络之下,错综复杂的管网系统如同城市的血管,默默支撑着日常生活的有序进行。而管网的监测设备大多都安装在井下,如何给设备供电一直是一个难题,选用市电供电需经过多方审批,选用电池供电需要更换电池包&a…

JavaScript中闭包的理解

闭包(Closure)概念:一个函数对周围状态的引用捆绑在一起,内层函数中访问到其外层函数的作用域。简单来说;闭包内层函数引用外层函数的变量,如下图: 外层在使用一个函数包裹住闭包是对变量的保护&#xff0c…

Altium Designer专业PCB设计软件下载安装 Altium Designer安装包下载获取

在电子设计的广袤领域中,PCB设计无疑占据着重要的地位。而Altium Designer作为一款业界领先的电子设计自动化软件,其提供的先进布局工具,无疑为设计师们打开了一扇通往高效、精确设计的大门。 在PCB设计的核心环节——布局中,Alti…