「按键精灵思路讲解」关于安卓按键精灵的文字识别
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...
- 今年最常见的前端面试题,你会做几道?
-
在面试或招聘前端开发人员时,期望、现实和需求之间总是存在着巨大差距。面试其实是一个交流想法的地方,挑战人们的思考方式,并客观地分析给定的问题。可以通过面试了解人们如何做出决策,了解一个人对技术和解决问...
- 一周热门
- 最近发表
- 标签列表
-
- git pull (33)
- git fetch (35)
- mysql insert (35)
- mysql distinct (37)
- concat_ws (36)
- java continue (36)
- jenkins官网 (37)
- mysql 子查询 (37)
- python元组 (33)
- mybatis 分页 (35)
- vba split (37)
- redis watch (34)
- python list sort (37)
- nvarchar2 (34)
- mysql not null (36)
- hmset (35)
- python telnet (35)
- python readlines() 方法 (36)
- munmap (35)
- docker network create (35)
- redis 集合 (37)
- python sftp (37)
- setpriority (34)
- c语言 switch (34)
- git commit (34)
