前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于图像文字识别技术处理文本按钮

基于图像文字识别技术处理文本按钮

作者头像
雷子
发布2021-12-09 14:19:29
1.6K0
发布2021-12-09 14:19:29
举报
文章被收录于专栏:雷子说测试开发

前言

在之前的基于vision-ml模型训练框架改造以及实际场景应用识别弹窗,我们基于模型训练去处理我们的弹窗,但是呢,在一些界面弹窗是一样的,但是,文字是不一样的,那么我们呢怎么根据文字的不同去处理不同的弹窗呢?本文带你揭秘。

正文

我们的需求是处理文案不同但是弹窗类型相似,很多人都想到来ocr,那么对于ocr来说,有商业化的。但是也有开源的,那么我们基于免费的开源的去改造即可。这里我们选取来美团开源的

https://github.com/Meituan-Dianping/vision-ui,其实它还是基于vision-ml训练出来的模型。我们改造的地方呢,不是模型,我们是把它改造成本地的文本识别。其他的地方不用动。我们就不用了接口。把接口改成本地调用。

代码语言:javascript
复制
from service.image_text import get_image_text
def get_text_pson(img_path:str,text:str):
    resluttext = get_image_text(img_path)
    for item in resluttext['roi_text']:
        if item['text'] == text:
            return item['pos']
    return ''

我们把源代码的

抽离了出来,然后我们现在就可以给文字和图片然后返回来图片的坐标。

我们传入这样一张图片,然后文字是同意并继续。我们看下最后的结果

我们去执行了

代码语言:javascript
复制
adb shell input tap 609 372

可以看到设备上可以正常点击。那么我们可以把这个功能封装成我们处理一些安装的时候出现的文本弹窗,把文字统一存储起来。

准备了一些文本。

代码语言:javascript
复制
同意并使用
确认
确定
同意
允许
去允许
始终允许
总是允许
始终
始终同意
同意并继续
同意并使用
立即安装
安装
完成
安装允许
继续安装
我已知问题严重性。无视风险安装
知道了
验证
继续安装

那么去解析下文本

代码语言:javascript
复制
def readtext():
    allText=[]
    with open("text") as f:
        reslut=f.readlines()
        for i in reslut:
            allText.append(i.split("\n")[0])
    return  allText

我们来一个最暴力的,我们认为第一个识别的图片就是我们要点击的。

代码语言:javascript
复制
def  get_posion(img_path:str):
    allText =readtext()
    resluttext=get_image_text(img_path)
    for item in resluttext['roi_text']:
        if item['text'] in allText:
            return  item['pos']
    return ''

这样就返回了一个坐标。我们在本地可以同样测试

代码语言:javascript
复制
result=get_posion("01.png")
print(result)

还是同一个图片,结果正常返回上面的坐标,我们的效果可以实现了。

其实很简单,就是把开源的训练好的模型拓展到实际项目中。这里我们可以做成在我们安装app过程中处理安装权限弹窗和安装过程中的各种文本弹窗去解决我们的实际的问题。但是目前还欠缺的是,有些设备需要输入密码,目前还没有解决输入密码的,但是有一个方案,就是在上面的进行改造。我说下我的思路,

代码语言:javascript
复制
1.安装过程截图
2.获取截图文字
3.请输入账号存在识别文字中
4.用input输入账号即可。

这里不做实际代码演示。写一个伪代码

代码语言:javascript
复制
def  get_posion(img_path:str):
    allText =readtext()
    resluttext=get_image_text(img_path)
    for item in resluttext['roi_text']:
        if str(item['text']).__contains__("请输入"):
            #执行输入密码,可以用adb,我们默认请输入的坐标就是密码输入框
            pass
        if item['text'] in allText :
            return  item['pand os']
    return ''

大概就分享这么多。上面的是伪代码,未进行详细测试。请实际项目中大家自行验证。

基于模型避免了一些手机上按钮的样式会发生改变,使用坐标的方式来处理。后续会把这个的代码放在appium相关的分享中去做展示。我改造的部分的代码已经全部贴上去了。需要原框架的部分代码也已经做了截屏。大家可以快速的在实际项目中尝试使用。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-12-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 雷子说测试开发 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
文字识别
文字识别(Optical Character Recognition,OCR)基于腾讯优图实验室的深度学习技术,将图片上的文字内容,智能识别成为可编辑的文本。OCR 支持身份证、名片等卡证类和票据类的印刷体识别,也支持运单等手写体识别,支持提供定制化服务,可以有效地代替人工录入信息。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档