按键精灵免字库本地识别OCR
按键精灵免字库识别—基于百度飞桨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相关推荐
- android 按键 免root,按键精灵免root版
按键精灵免root版是手机上的键盘模拟软件,可以使用这个软件,自动操作,制作功能强大的脚本.非常多的免费脚本软件可以直接搜索,直接使用.电脑前需要双手操作的动作,使用按键精灵免root版,在手机上也能 ...
- 按键精灵使用百度文字识别(百度ocr)教程
按键精灵通过实践,也可以接入百度的OCR,百度OCR免费额度为,每日50000次普通调用,对于日常应用已经足够,返回识别内容时间在1s以内(免费版有一秒内请求次数限制,不充钱也无法达到更短的时间).百 ...
- 按键精灵 百度文字识别(百度ocr)OCRSpace文字识别
目录 1. 申请百度OCR服务 1.1. 百度OCR登录 1.2 创建新应用 1.3 免费领取次数 1.3 查看是否创建成功 2. 按键精灵运用百度OCR接口 2.1 通用文字识别(高精度版)文档 2 ...
- 按键精灵电脑版对接百度ai,告别字库(文字识别篇)
很简单,根据百度ai接口api文档,用post或者get请求,封装参数请求响应即可.哈哈,当然不可能就这样结束了本篇博客了.本篇先讲文字识别,喜欢的朋友可以关注下,后续会继续写图片识别等所有ai对接方 ...
- 有道智云OCR图片识别文字+返回数据处理技巧(实现语言-按键精灵脚本请求识别+java服务端处理数据)
一.[开始] 1.按键精灵android手机脚本 1.1.截取手机上指定范围内的图片,通过api上传到有道智云处理后返回识别后的JSON格式数据. 1.2.代码 Import "ShanHa ...
- 按键精灵移动端系列一滑块本地识别源码参考例子
/* 马赛克滑块本地识别原理: 对比前后2次的背景色 没必要整个验证码图的颜色都取下来 只需要间隔一定范围,比如滑块是100, 那么Y坐标间隔90就涵盖了那个滑块 */ Function 获取背景(s ...
- 按键精灵调用python插件_【Python 教程】使用 Python 和大漠插件进行文字识别
家里有一台win7系统的电脑,平时可以用来玩玩游戏消磨时间.但是有时候有一些重复的操作实在是无趣,所以打算写个脚本,让其自动化执行. 最终的目标就是把游戏里一些常用的操作都集合到脚本中去,且无序随机执 ...
- 按键精灵文字识别插件_【买三赠一】iOS按键精灵VIP夏季特惠进行中
活动时间:2020年8月4日-8月18日 一.按键精灵iOS版VIP买三赠一 福利再度开启!买3个月卡,多送一个月卡,买3个年卡,多送一个年卡!买三赠一,赠送的都是实实在在的足量VIP! 注: 1.充 ...
- 按键精灵+大漠插件简单数字验证码识别实践笔记
因为资源短缺,公司用了一个很老的系统分配资源,每个项目每天都要经历上演一次像抢火车票一样的经历,而往往又空手而归,搞得大家疲惫不堪.而其中的关键在于几个简单的数字验证码的识别,于是在业余时间看了一些验 ...
最新文章
- ARM7+PROTEUS调试(转)
- 借花献佛!成都java工程师培训
- CPU的基本结构和功能
- 内核版常见问题和精华贴总结(VER 0.1) [
- ubuntu 安装 OpenCV-CUDA
- 关于工厂模式---转发
- vscode编辑器,自己喜欢的颜色
- ArcGIS 10.2加载在线影像底图
- redisson 大量ping操作,导致 tps过高
- 下班理财超过上班赚钱
- ACache【轻量级的开源缓存框架】
- sqli注入前置知识
- SWFUpload控件使用
- linux修改yum本地源的方法
- linux i217 v网卡驱动,英特尔网卡驱动下载_Intel英特尔I217I218I219系列网卡驱动官方下载 - 系统之家...
- 【bzoj1143: [CTSC2008]祭祀river】有向无环图的最长反链
- C++中的拷贝构造函数
- 2020-04-27
- iOS_Pass iOS10适配:权限访问、MiPush小米推送(更新中)
- 智能汽车能否真正实现无人驾驶,为什么?