文字识别技术升级:Airtest与PaddleOCR模型的协作小技巧
一、前言
ocr
文字识别一直是大家最想要实现以及最需要的能力,今天就来介绍一个由百度飞浆提供的一个免费的 ocr
识别库—— PaddleOCR
,以及探讨一下, PaddleOCR
与 Airtest
协作能擦出怎么样的火花~ 二、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()
的函数。这个函数将执行以下步骤: -
使用 Airtest
进行屏幕截图。 -
将截图传递给 PaddleOCR
进行文字识别。 -
从 PaddleOCR
获取识别到的文字及其在图像中的位置坐标。 -
利用 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
的操作接口~ 本文分享自微信公众号 - AirtestProject(AirtestProject)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
开源日报 | Java之父退休;NVIDIA差点被卖给AMD;智能座舱稳定性不如千元机;人物肖像动画开源模型
欢迎阅读 OSCHINA 编辑部出品的开源日报,每天更新一期。 # 2024.7.8 今日要闻 Java 之父 James Gosling 宣布退休 James Gosling,加拿大计算机科学家,现龄 69 岁,完成了 Java 的原始设计,并实现了 Java 最初版本的编译器和虚拟机,也是公认的 “Java 之父”。 7 年前,年过花甲的 Gosling 从 Liquid Robotics 离职,加入亚马逊 AWS。近日,James Gosling 在领英宣布了自己已退休的消息。他表示对过去 7 年在亚马逊的工作体验非常满意,未来会投入精力来完成一系列个人项目(具体项目信息没透露)。 代码生成大模型 CodeGeeX 第四代正式发布,同期开源 智谱清言官方消息,旗下代码生成大模型 CodeGeeX 正式发布 CodeGeeX4 系列模型的开源版本:CodeGeeX4-ALL-9B。CodeGeeX4-ALL-9B 作为最新一代 CodeGeeX4 系列模型的开源版本,在 GLM-4 强大语言能力的基础上继续迭代,大幅增强代码生成能力。 据释,使用 CodeGeeX4-ALL-9B ...
- 下一篇
开源数据库Greenplu突然闭源?GaussDB(DWS)提供数仓新可能
本文分享自华为云社区《开源数据库Greenplum人去楼空?GaussDB(DWS)提供数仓新可能》,作者: 起个名字11111。 近日Greenplum关闭 GitHub 源码事件在数仓行业广受关注,代码业界纷纷猜测Greenplum即将闭源。作为一款典型的OLAP数据库,Greenplum的闭源势必带来数仓市场格局的调整与变化。国内有哪些备受瞩目的数仓产品呢?华为云数仓GaussDB(DWS)无疑是其中的佼佼者。 GaussDB(DWS)是一款兼容PostgreSQL生态,同时GaussDB(DWS)具备丰富的GP迁移成功经验。在某一迁移GP的成功案例中,面临客户原平台扩展性不足、数据加工链路长、数据分散等痛点问题,GaussDB(DWS)成功将Greenplum上数万个数据模型、数万个代码脚本、数百万行代码全部迁移至安全可控的数据仓库平台,基于GaussDB(DWS)的数据分析平台成功降低系统管理成本、技术复杂度,提升了资源配置效率、数据一致性,承载30000多个数据模型。 DWS丝滑兼容GP GaussDB(DWS) 提供了配套的迁移工具,可支持TeraData、Oracle、...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS8编译安装MySQL8.0.19
- CentOS7,CentOS8安装Elasticsearch6.8.6