百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT技术 > 正文

「按键精灵思路讲解」关于安卓按键精灵的文字识别

wptr33 2025-01-20 17:01 36 浏览

大家好,我是公众号3分钟学堂的郭立员,今天给大家带来一期关于文字识别理论知识的文章。


目前安卓按键常用的文字识别有两大类,一是从xml提取界面文字,二是ocr图像识别文字


两种方式各有优缺点:


从xml中提取文字:

优点:速度快、“识别”准确

缺点:不是所有的app都支持,游戏类的也不支持


ocr图像识别:

优点:所有都支持

缺点:速度慢一些,做不到百分百准确


下面根据这两大类来梳理一下按键中涉及到的命令方法;


这里只做简单介绍,具体操作可以在历史文章中搜索相关资料,先来说说xml提取界面文字的方法


山海插件getuixml命令提取xml文字


山海插件getuixml命令的原理是通过uiautomator dump获取app上的页面元素,然后会保存到window_dump.xml文件,再通过读取window_dump.xml文件里面xml信息。


xml信息里面包括界面上元素的文字、元素的位置等信息,提取这些信息就得到我们想要的内容了。


当然由于xml是由大量代码组成,初学时会觉得有些费劲。


getuixml命令有个明显的缺点,识别速度不够快,通常需要几秒钟时间才能把读取到xml文件。


jsd插件获取xml文字


jsd插件的核心就是对xml文件的提取和处理,这里我加上了处理两个字,因为山海插件主要就是提取xml文件,后期对xml中有效内容的提取涉及到的命令很少。


jsd插件获取xml的方式不再是uiautomator dump了,而是安装一个jsd.apk文件,通过其获取xml,这么做有一个明显的优势就是提取xml速度大大提升,做到毫秒级提取。


同时jsd插件针对xml的提取做了很多命令,使得提取xml的后期处理变得容易很多。


element命令


element命令是按键自带界面元素命令,它的优点是提取速度比较快,缺点是只有简单的提取处理命令。


目前也有基于这个命令开发的elementEx插件。


关于xml提取文字就说这些,下面来说说ocr文字识别的几种方式。


所有ocr文字识别都是对于图像的查找。


制作字库


制作字库的原理是把图片先变成黑白二值化图,然后把图像拆分,每一个拆分后的图像对应一个或者多个文字内容,如下图:




制作字库的方法我在基础课21课专门讲了,想学习的朋友可以去看看。


这里面有需要注意的细节:


①图片上的文字不要求是完整的。



比如这个图像我们也可以把它当做“按”字处理。


②同一个文字,可以对应多个图片


两个图片都可以对应“按”字。


③基于第②点字库在做的时候要多写几个,也就同一个文字有多个对应的图片,保证在发生细微变化后识别的准确性。


这一点对于初学者很容易忽略。


本地光学文字识别


本地光学文字识别是按键助手新版本增加的命令Image.OcrText,相对于自己做字库,按键提供了一个现成的ocrlib字库,对于简单的文字识别来说,还是很好用的。


api云识别


比较常用的是百度云识别,对接百度api,每天免费5万次,对于普通识别还是够用。


当然还有其他的api云识别,比如有道识别、优图识别等等,原理上都差不多。


前段时间我发了一个验证码文字识别api的文章,也是一样的原理。


虹鱼图灵识别


这个插件也是关于图像处理的插件,借用它介绍中的一句话:这个虹鱼图灵识别工具适用于AI人工智能机器人、图形图像、颜色和文字识别领域的相关行业作为学习参考。


对于这方面感兴趣的朋友推荐去学一下。


个人习惯建议


我们遇到需要识别文字的时候,优先考虑用提取xml,如果不支持,再考虑用ocr识别,当然除了学习研究以外,不建议自己做字库,直接用云识别就挺好的。

相关推荐

oracle数据导入导出_oracle数据导入导出工具

关于oracle的数据导入导出,这个功能的使用场景,一般是换服务环境,把原先的oracle数据导入到另外一台oracle数据库,或者导出备份使用。只不过oracle的导入导出命令不好记忆,稍稍有点复杂...

继续学习Python中的while true/break语句

上次讲到if语句的用法,大家在微信公众号问了小编很多问题,那么小编在这几种解决一下,1.else和elif是子模块,不能单独使用2.一个if语句中可以包括很多个elif语句,但结尾只能有一个else解...

python continue和break的区别_python中break语句和continue语句的区别

python中循环语句经常会使用continue和break,那么这2者的区别是?continue是跳出本次循环,进行下一次循环;break是跳出整个循环;例如:...

简单学Python——关键字6——break和continue

Python退出循环,有break语句和continue语句两种实现方式。break语句和continue语句的区别:break语句作用是终止循环。continue语句作用是跳出本轮循环,继续下一次循...

2-1,0基础学Python之 break退出循环、 continue继续循环 多重循

用for循环或者while循环时,如果要在循环体内直接退出循环,可以使用break语句。比如计算1至100的整数和,我们用while来实现:sum=0x=1whileTrue...

Python 中 break 和 continue 傻傻分不清

大家好啊,我是大田。今天分享一下break和continue在代码中的执行效果是什么,进一步区分出二者的区别。一、continue例1:当小明3岁时不打印年龄,其余年龄正常循环打印。可以看...

python中的流程控制语句:continue、break 和 return使用方法

Python中,continue、break和return是控制流程的关键语句,用于在循环或函数中提前退出或跳过某些操作。它们的用途和区别如下:1.continue(跳过当前循环的剩余部分,进...

L017:continue和break - 教程文案

continue和break在Python中,continue和break是用于控制循环(如for和while)执行流程的关键字,它们的作用如下:1.continue:跳过当前迭代,...

作为前端开发者,你都经历过怎样的面试?

已经裸辞1个月了,最近开始投简历找工作,遇到各种各样的面试,今天分享一下。其实在职的时候也做过面试官,面试官时,感觉自己问的问题很难区分候选人的能力,最好的办法就是看看候选人的github上的代码仓库...

面试被问 const 是否不可变?这样回答才显功底

作为前端开发者,我在学习ES6特性时,总被const的"善变"搞得一头雾水——为什么用const声明的数组还能push元素?为什么基本类型赋值就会报错?直到翻遍MDN文档、对着内存图反...

2023金九银十必看前端面试题!2w字精品!

导文2023金九银十必看前端面试题!金九银十黄金期来了想要跳槽的小伙伴快来看啊CSS1.请解释CSS的盒模型是什么,并描述其组成部分。答案:CSS的盒模型是用于布局和定位元素的概念。它由内容区域...

前端面试总结_前端面试题整理

记得当时大二的时候,看到实验室的学长学姐忙于各种春招,有些收获了大厂offer,有些还在苦苦面试,其实那时候的心里还蛮忐忑的,不知道自己大三的时候会是什么样的一个水平,所以从19年的寒假放完,大二下学...

由浅入深,66条JavaScript面试知识点(七)

作者:JakeZhang转发链接:https://juejin.im/post/5ef8377f6fb9a07e693a6061目录由浅入深,66条JavaScript面试知识点(一)由浅入深,66...

2024前端面试真题之—VUE篇_前端面试题vue2020及答案

添加图片注释,不超过140字(可选)1.vue的生命周期有哪些及每个生命周期做了什么?beforeCreate是newVue()之后触发的第一个钩子,在当前阶段data、methods、com...

今年最常见的前端面试题,你会做几道?

在面试或招聘前端开发人员时,期望、现实和需求之间总是存在着巨大差距。面试其实是一个交流想法的地方,挑战人们的思考方式,并客观地分析给定的问题。可以通过面试了解人们如何做出决策,了解一个人对技术和解决问...