按键精灵免字库识别—基于百度飞桨PaddleOCR的RapidOCR

  • 前言
  • 为什么
    • 为什么有大漠了还要使用其它OCR
    • 为什么要使用RapidOCR
  • 开发
    • PaddleOCR介绍
    • PaddleOCR使用
      • 衍生项目版——小白方案
      • 按键精灵post调用
        • 图片转base64方法
        • 转json方法
        • post调用
      • JVM版
        • 改为maven
        • OcrEngine路径
        • idea Run配置
      • 网页版【推荐】
        • 第一次优化-简化结果
        • 第二次优化-免base64传输
  • 最后

前言

目前网上仅有类大漠的字库识别和远程调用互联网识别。百度飞桨很早就开源了PaddleOCR,做一个小脚本还使用收费远程项目早应该过时。由于对py不熟悉,推理麻烦,直接使用了捷智开源的基于PaddleOCR的RapidOCR,简单快捷。

为什么

为什么有大漠了还要使用其它OCR

大漠OCR确实是经典永流传,它的优点就是非常的快,个位数毫秒级别,完美适用是实时高频率调用的脚本。当然快速也就意味着简单,它的识字是要做字库的,只适用于已知文库,我认为其实就是相当于特殊识图,伪OCR。人工智能快速发展,才有了真正的OCR,也就是免字库OCR。百度也是承担起国内人工智能发展的社会责任,开源了PaddleOCR,遵守Apache协议,可以商用。

为什么要使用RapidOCR

大漠 =》需要字库,个位数毫秒级
远程OCR =》免费受限制、网络传输耗时,百位数毫秒级
PaddleOCR =》 推导,需要一定的python开发经验,未知
RapidOCR =》成品,本地搭建调用即可,当然定制化优化性能更好,十位数毫秒级。

开发

有了这么优秀的产品,就可以尝试整合了。

PaddleOCR介绍

https://github.com/PaddlePaddle/PaddleOCR/

PaddleOCR使用

PaddleOCR如上,有各种语言的应用推导。记录一下我使用过的几种。

衍生项目版——小白方案

衍生项目使用易语言编写的,无需依赖环境,双击即可启动,小白也能用。

点开接口测试,都已经写好调用案例了。

按键精灵post调用

关于按键精灵http请求调用接口的代码,B站酷玩蚊仔已经封装好,我直接借鉴了,需要做些调整。

酷玩蚊仔
https://www.bilibili.com/video/av556250543/?vd_source=8a1fa4f94facedbbcdd82d30f1ef1a10

给出我做的调整的代码

图片转base64方法

注释掉替换加号,这应该是百度在线api需要的格式。

Function ImagesToBase64(FilePath)Dim xmlDim rootDim fsDim objStreamDim objXMLDocDim Base64Set objXMLDoc = CreateObject("Microsoft.XMLDOM") // 可以访问和操作XML文档objXMLDoc.loadXML "<?xml version='1.0' ?><data></data>" // 导入指定字符串的XML文档Set fs = createObject("Scripting.FileSystemObject") // 可以操作磁盘、文件夹或文本文件If fs.FileExists(FilePath) Then // 判断文件是否存在'用 stream 来读取数据Set objStream = CreateObject("ADODB.Stream") // 可以存取二进制数据或者文本流objStream.Type = 1 // 表示二进制数据objStream.Open // 打开objStreamobjStream.LoadFromFile FilePath // 加载文件数据(下载图片用SaveToFile)objXMLDoc.documentElement.dataType = "bin.base64" // 设置节点数据类型objXMLDoc.documentElement.nodeTypedvalue = objStream.Read // 从objStream读取,再存储到根节点(objXMLDoc.documentElement代表XML文档的根节点)'数据流读取结束.得到了值 objXMLDoc'创建XML文件Set xml = CreateObject("Microsoft.XMLDOM")xml.load objXMLDoc // 导入指定位置的XML文档If xml.ReadyState > 2 Then // 0:未初始化;1:载入;2:载入完成;3:交互;4:完成Set root = xml.getElementsByTagName("data")// 返回指定名字的节点集合(可能会有多个重名节点)Base64 = root(0).TextBase64 = Replace(Base64, vbLf, "") // 去除换行(vbLf相当于chr(10))(可以不去除)
//          Base64 = Replace(Base64,"+","%2B") // 替换加号(文档未说明,但需要此操作,而且不要进行urlencode)ElseBase64 = ""End IfSet xml = NothingSet objStream = NothingElse // 文件不存在Base64 = ""End IfSet fs = NothingSet objXMLDoc = NothingImagesToBase64 = "data:image/png;base64,"&Base64
//  //TracePrint ImagesToBase64
End Function
转json方法
Function jsonFormatter(str)result = "{"attrList = split(str, "&")For i = 0 To UBound(attrList)If i > 0 Thenresult = result & ","End Ifattr = attrList(i)key = split(attr, "=")(0)value = split(attr, "=")(1)result = result & chr(34) & key & chr(34) & ":" & chr(34) & value & chr(34)Nextresult = result & "}"TracePrint resultjsonFormatter = result
End Function
post调用
 imgBase64 = ImagesToBase64("E:\python\ocr\2.png")Set xPost = CreateObject("Msxml2.ServerXMLHTTP.3.0")xPost.Open "Post", "http://127.0.0.1:9003/ocr", FalsexPost.setRequestHeader "CONTENT-TYPE", "application/json"xPost.Send (jsonFormatter("file=" & imgBase64))If xPost.readyState = 4 Then TracePrint xPost.responsetext
//      Set obj = json.Decode(xPost.responsetext)
//      TracePrint obj("Msg")
//      access_token = obj("access_token")End If

JVM版

作为Java开发,反而在搞Java Demo时耗时最长。

改为maven

给出的案例是grade版,改为java开发熟悉的maven版,移植代码
maven应该只需要加这个以支持kotlin

<dependency><groupId>org.jetbrains.kotlin</groupId><artifactId>kotlin-stdlib</artifactId>
</dependency>
OcrEngine路径

OcrEngine 全类名不能改动,否则会报错遇坑

Java调用jni的一个坑-java.lang.UnsatisfiedLinkError ()Ljava/lang/String
======= https://blog.csdn.net/qq_24054301/article/details/128653326

idea Run配置

需要配置参数,github有详细讲解

网页版【推荐】

Web版启动也非常简单,不过代码是用python写的,按文档走就行了,pip需要使用源外,没有其它坑,也是非常简单,而且速度比易语言版更快,更是可以修改代码,定制格式化。
注意:不要使用api版,好像有问题,直接用网页版,然后f12查看请求,更快。

第一次优化-简化结果

http请求返回值json简化
修改返回值,简化结果,免去两端格式化

return str(rec_res_data).split(',')[1]
第二次优化-免base64传输

原方案都是基于cs或bs架构,但是本地调用文件都在本地,没必要转码和文件传输。
所以直接在python里读取图片文件不要传输更快。

image = cv2.imread("E:\python\ocr\screen.bmp")

最后

抓图还是得使用大漠,效率比python的抓图性能好。如果能找到高效抓图的py库那自然是最好的,可以免去文件存储和读取的io耗时。

按键精灵免字库本地识别OCR相关推荐

  1. android 按键 免root,按键精灵免root版

    按键精灵免root版是手机上的键盘模拟软件,可以使用这个软件,自动操作,制作功能强大的脚本.非常多的免费脚本软件可以直接搜索,直接使用.电脑前需要双手操作的动作,使用按键精灵免root版,在手机上也能 ...

  2. 按键精灵使用百度文字识别(百度ocr)教程

    按键精灵通过实践,也可以接入百度的OCR,百度OCR免费额度为,每日50000次普通调用,对于日常应用已经足够,返回识别内容时间在1s以内(免费版有一秒内请求次数限制,不充钱也无法达到更短的时间).百 ...

  3. 按键精灵 百度文字识别(百度ocr)OCRSpace文字识别

    目录 1. 申请百度OCR服务 1.1. 百度OCR登录 1.2 创建新应用 1.3 免费领取次数 1.3 查看是否创建成功 2. 按键精灵运用百度OCR接口 2.1 通用文字识别(高精度版)文档 2 ...

  4. 按键精灵电脑版对接百度ai,告别字库(文字识别篇)

    很简单,根据百度ai接口api文档,用post或者get请求,封装参数请求响应即可.哈哈,当然不可能就这样结束了本篇博客了.本篇先讲文字识别,喜欢的朋友可以关注下,后续会继续写图片识别等所有ai对接方 ...

  5. 有道智云OCR图片识别文字+返回数据处理技巧(实现语言-按键精灵脚本请求识别+java服务端处理数据)

    一.[开始] 1.按键精灵android手机脚本 1.1.截取手机上指定范围内的图片,通过api上传到有道智云处理后返回识别后的JSON格式数据. 1.2.代码 Import "ShanHa ...

  6. 按键精灵移动端系列一滑块本地识别源码参考例子

    /* 马赛克滑块本地识别原理: 对比前后2次的背景色 没必要整个验证码图的颜色都取下来 只需要间隔一定范围,比如滑块是100, 那么Y坐标间隔90就涵盖了那个滑块 */ Function 获取背景(s ...

  7. 按键精灵调用python插件_【Python 教程】使用 Python 和大漠插件进行文字识别

    家里有一台win7系统的电脑,平时可以用来玩玩游戏消磨时间.但是有时候有一些重复的操作实在是无趣,所以打算写个脚本,让其自动化执行. 最终的目标就是把游戏里一些常用的操作都集合到脚本中去,且无序随机执 ...

  8. 按键精灵文字识别插件_【买三赠一】iOS按键精灵VIP夏季特惠进行中

    活动时间:2020年8月4日-8月18日 一.按键精灵iOS版VIP买三赠一 福利再度开启!买3个月卡,多送一个月卡,买3个年卡,多送一个年卡!买三赠一,赠送的都是实实在在的足量VIP! 注: 1.充 ...

  9. 按键精灵+大漠插件简单数字验证码识别实践笔记

    因为资源短缺,公司用了一个很老的系统分配资源,每个项目每天都要经历上演一次像抢火车票一样的经历,而往往又空手而归,搞得大家疲惫不堪.而其中的关键在于几个简单的数字验证码的识别,于是在业余时间看了一些验 ...

最新文章

  1. ARM7+PROTEUS调试(转)
  2. 借花献佛!成都java工程师培训
  3. CPU的基本结构和功能
  4. 内核版常见问题和精华贴总结(VER 0.1) [
  5. ubuntu 安装 OpenCV-CUDA
  6. 关于工厂模式---转发
  7. vscode编辑器,自己喜欢的颜色
  8. ArcGIS 10.2加载在线影像底图
  9. redisson 大量ping操作,导致 tps过高
  10. 下班理财超过上班赚钱
  11. ACache【轻量级的开源缓存框架】
  12. sqli注入前置知识
  13. SWFUpload控件使用
  14. linux修改yum本地源的方法
  15. linux i217 v网卡驱动,英特尔网卡驱动下载_Intel英特尔I217I218I219系列网卡驱动官方下载 - 系统之家...
  16. 【bzoj1143: [CTSC2008]祭祀river】有向无环图的最长反链
  17. C++中的拷贝构造函数
  18. 2020-04-27
  19. iOS_Pass iOS10适配:权限访问、MiPush小米推送(更新中)
  20. 智能汽车能否真正实现无人驾驶,为什么?

热门文章

  1. Reactor响应式流的核心机制——背压机制
  2. 经济学知识——LPR、MLF、SLF、SLO、PSL、OMO
  3. 西甲联赛|DaoCloud > # Hello World
  4. elememt input输入框总结
  5. 我对spring springcloud的简单理解
  6. docker技术学习流程
  7. mc是电子计算机的什么键,计算机上的mc是什么键
  8. LLVIP数据集下载
  9. android 我来告诉你图片应该放在那个文件夹下
  10. (16) 基于图卷积神经网络的轨道交通流量预测