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

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

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

大家好,我是公众号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识别,当然除了学习研究以外,不建议自己做字库,直接用云识别就挺好的。

相关推荐

十年之重修Redis原理(redis重试机制)

弱小和无知并不是生存的障碍,傲慢才是。--------面试者...

Redis 中ZSET数据类型命令使用及对应场景总结

1.zadd添加元素zaddkeyscoremember...

redis总结(redis常用)

RedisTemplate封装的工具类packagehk.com.easyview.common.helper;importcom.alibaba.fastjson.JSONObject;...

配置热更新系统(如何实现热更新)

整体设计概览┌────────────┐┌────────────────┐┌────────────┐│配置后台服务│--写入-->│Red...

java高级用法之:调用本地方法的利器JNA

简介JAVA是可以调用本地方法的,官方提供的调用方式叫做JNI,全称叫做javanativeinterface。要想使用JNI,我们需要在JAVA代码中定义native方法,然后通过javah命令...

SpringBoot:如何优雅地进行响应数据封装、异常处理

背景越来越多的项目开始基于前后端分离的模式进行开发,这对后端接口的报文格式便有了一定的要求。通常,我们会采用JSON格式作为前后端交换数据格式,从而减少沟通成本等。...

Java中有了基本类型为什么还要有包装类型(封装类型)

Java中基本数据类型与包装类型有:...

java面向对象三大特性:封装、继承、多态——举例说明(转载)

概念封装:封装就是将客观的事物抽象成类,类中存在属于这个类的属性和方法。...

java 面向对象编程:封装、继承、多态

Java中的封装(Encapsulation)、继承(Inheritance)和多态(Polymorphism)是面向对象编程的三大基本概念。它们有助于提高代码的可重用性、可扩展性和可维护性。...

怎样解析java中的封装(怎样解析java中的封装文件)

1.解析java中的封装1.1以生活中的例子为例,打开电视机的时候你只需要按下开关键,电视机就会打开,我们通过这个操作我们可以去间接的对电视机里面的元器件进行亮屏和显示界面操作,具体怎么实现我们并不...

python 示例代码(python代码详解)

以下是35个python代码示例,涵盖了从基础到高级的各种应用场景。这些示例旨在帮助你学习和理解python编程的各个方面。1.Hello,World!#python...

python 进阶突破——内置模块(Standard Library)

Python提供了丰富的内置模块(StandardLibrary),无需安装即可直接使用。以下是一些常用的内置模块及其主要功能:1.文件与系统操作...

Python程序员如何调试和分析Python脚本程序?附代码实现

调试和分析Python脚本程序调试技术和分析技术在Python开发中发挥着重要作用。调试器可以设置条件断点,帮助程序员分析所有代码。而分析器可以运行程序,并提供运行时的详细信息,同时也能找出程序中的性...

python中,函数和方法异同点(python方法和函数的区别)

在Python中,函数(Function)...

Python入门基础命令详解(python基础入门教程)

以下是Python基本命令的详解指南,专为初学者设计,涵盖基础语法、常用操作和实用示例:Python基本命令详解:入门必备指南1.Python简介特点:简洁易读、跨平台、丰富的库支持...