前言
- 前几天接了个苹果的脚本,需要进行ocr文字识别,用量多,对接打码平台太烧钱了
- 于是上GitHub上找开源的ocr识别,发现了这个完全开源免费的
Umi-OCR
- 对比过其它开源项目,这个识别速度又快又准,部署也方便
- 唯一不足点就是目前不支持Linux,仅支持Windows
- 文章内提供了双端的对接源码:
按键精灵手机助手
、按键精灵2014
- 如果觉得下载麻烦的可以到QQ群文件下载(群号:
606759894
)
Umi-OCR
项目地址:Umi-OCR
- 免费:本项目所有代码开源,完全免费。
- 方便:解压即用,离线运行,无需网络。
- 高效:自带高效率离线OCR引擎。只要电脑性能足够,可以比在线OCR服务更快。
- 灵活:支持命令行、HTTP接口等多种调用方式。
- 功能:截图OCR / 批量OCR / 二维码 / 数学公式识别(测试中)
本地端部署
也不需要啥部署的,就安装后设置下就可以了
- 下载exe文件并安装,打开
- 全局设置->高级->服务
- 允许HTTP服务->打勾
- 主机->任何可用地址
- 端口->可默认也可自定义
- 退出重启即可(注:要后台完全退出,而不是简单的点击X)
- 打开cmd终端->ipconfig->查看ipv4地址
按键精灵对接源码
源码里的
192.168.1.8
替换成上面的ipv4地址
,如果端口有修改的话也要把1224
替换成自己的端口,最后修改下图片路径就可以运行测试了
按键精灵手机助手对接源码
下列代码中并没有对返回值做过多的处理,只提取了识别的第一个位置文本res(0)
,如果提供的图片识别的文本位置多,那么这部分需要作相应的处理~
Import "zm.luae"
zm.init
Dim 图片路径="/private/var/mobile/Media/Downloads/待识别1.jpg"
ocr文字识别(图片路径)
Function ocr文字识别(图片路径)
Dim link = "http://192.168.1.8:1224/api/ocr"
Dim headers = {"Content-Type":"application/json"}
Dim base64 = zm.FileReadBinaryBase64(图片路径)
Dim body={"base64":base64}
Dim res = Url.httpPost({"url":link,"data":Encode.TableToJson(body),"header":headers})
TracePrint res
If InStr(1, res, "\"text\":", true) > 0 Then
res = Encode.JsonToTable(res)
res = res["data"]
res = res(0)
Dim 坐标= res["box"]
Dim 左上坐标数组 = 坐标(0)
Dim 右下坐标数组=坐标(2)
dim 左上x=左上坐标数组(0)
dim 左上y=左上坐标数组(1)
dim 右下x=右下坐标数组(0)
dim 右下y=右下坐标数组(1)
res = res["text"]
TracePrint "坐标范围为:",左上x,左上y,右下x,右下y
Else
res=-1
End If
ocr文字识别 = res
TracePrint res
End Function
按键精灵2014Pc版对接源码
下列代码中并没有对返回值做过多的处理,只提取了识别的第一个位置文本data[0]
,如果提供的图片识别的文本位置多,那么这部分需要作相应的处理。
注:源码内使用了神梦插件,需要手动导入,如果你并没有插件,可以到QQ群(606759894
)的群文件下载!
Function 对接umiocr(图片路径)
Dim URL,JsonData,json,username,password,base64
URL = "http://192.168.1.8:1224/api/ocr"
Import "SmHTTP.dll"
Set SmHTTP = CreateObject("SMWH.SmHTTP")
base64=Plugin.SMWH.Base64_File(图片路径)
JsonData = SmHTTP.JsonData( _
"base64",base64 , _
"Content-Type", "application/json" _
)
json = SmHTTP.HTTP_POST(URL, JsonData)
TracePrint json
If SmHTTP.GetStatus() = 200 Then
If SmHTTP.GetJSON(json, "code")=100 Then
Dim 文本左上x, 文本左上y, 文本右上x, 文本右上y, 识别的文本
文本左上x=SmHTTP.GetJSON(json, "data[0]['box'][0][0]")
文本左上y=SmHTTP.GetJSON(json, "data[0]['box'][0][1]")
文本右上x=SmHTTP.GetJSON(json, "data[0]['box'][2][0]")
文本右上y=SmHTTP.GetJSON(json, "data[0]['box'][2][1]")
识别的文本 = SmHTTP.GetJSON(json, "data[0]['text']")
对接umiocr="识别的文本:" & 识别的文本 & ",文本范围:" & 文本左上x & "," & 文本左上y & "," & 文本右上x & "," & 文本右上y
Else
对接umiocr=-1
End If
Else
对接umiocr=-1
End If
End Function
Dim 识别结果
识别结果=对接umiocr("C:\11.jpg")
TracePrint 识别结果
http更多参数设置详见:README_HTTP.md
OCR识别效果
视频原速,没有任何加速,基本秒识别
注意点
- 由于是本地端部署,你的电脑就相当于扮演服务器的角色,因此只能在局域网内使用,也就是说连接同一个WiFi的才能使用这个接口
- 如果要解除这个限制,两种方式:
①买个Windows服务器,最简单的方式,但是费钱,下面是一期部署教程观看高清视频:【将完全免费开源的ocr文字识别部署到自己的服务器上】
②内网穿透,由于粉丝要求,特意出的一期内网穿透:将内网发布至公网,Windows|Linux之cpolar内网穿透
全套流程+对接源码讲解
按键精灵手机助手对接教程
观看高清视频:【按键精灵对接本地开源ocr文字识别,超精准识别,完全免费(附对接源码)】
你好, 我安卓按键助手调试输出的res分别是{“code”: 801, “data”: “u8bf7u6c42u4e3au7a7au3002”}和-1,这是识别失败了吗? 我试了下大一点的字也是这种情况 我查询了一下是{“code”: 801, “data”: “请求为空。”} 请求为空?图片路径不对?
我调试了一下,那个base64里面是有内容的,一长串字母数字,说明图片转换成功了?但是返回的是请求为空
我找到原因了,那几个dim中应该是有个别字母打错了,
我想用来做答题器,识别题目,但关于检索答案,有没有什么好的思路,办法呢 ?
检索答案对接gpt,一般答题类的推荐直接用控件提取文本
也不是一定要对接gpt 如果有本地题库的话可以直接使用instr函数 , 做好题库找关键字 分割题目和答案对比就好了
JsonData = SmHTTP.JsonData(
“base64”,base64 ,
“ocr.language”,”models/configjapan.txt”,
“Content-Type”, “application/json”_
)
为什么我这样写没效果
您好 我单独在umi-ocr识别时其他颜色或更低分辨率的文字都能识别
为什么我用PC端的代码如果不是分辨率极高的黑白图都无法识别呢?
如何解决这个问题? 谢谢!
有办法把字分开吗 单个识别
分开识别只能从切割图片入手
大佬,让手机版按键精灵自己截图然后识别怎么搞啊
大佬请问我用了您在留言里发的蓝奏云神梦插件, 在
base64=Plugin.SMWH.Base64File(图片路径)
JsonData = SmHTTP.JsonData(
“base64”,base64 ,
“Content-Type”, “application/json”
)
json = SmHTTP.HTTP_POST(URL, JsonData)
这三个步骤基本都要卡n秒,base64卡10秒都是正常的,但是输出结果又是有内容的,虽然看起来像锟斤拷乱码,请问为什么这么卡呀?TUT
而且我把这些乱码拿去 json = SmHTTP.HTTP_POST(URL, JsonData)使用也返回不了识别结果,用SmHTTP.GetStatus()检查了返回的是404,我查了接口说明这是404 资源不存在
,是否我的本地构建没成功呢?可是我用CMD还是网络共享中心查到的ipv4都是一样的,端口没有改过并且确认exe里的端口也是1224
检查下umiocr版本,貌似最新版的接口变化了,可以去我群文件下载代码配套的版本。卡的话应该是因为你的图片太大了,尝试缩小范围,乱码可以尝试将数据json解析后取出来,一般取出来后就正常了。
谢谢!确实是因为我使用了bmp图片的原因,约300kb…换jpg就好了。40也是接口网址填写有误,现在已经顺利使用啦~感谢大佬指点
请问按键精灵PC想查看全部的识别内容应该怎么写
遍历获取json里的text值
为什么我的返回是啥也没有啊,哪里有问题
没对接好什么的
能不能提供识别带文字坐标原码。
大佬,文字提取出来,文字的坐标也要怎么写?
例子里不都给了吗
手机按键精灵的例子里没有给出坐标
补上了
补上坐标的,我试了识别出错,不知哈原回
当前脚本第20行:发生运行时错误!错误代码:2,错误行号:20,错误信息: attempt to index local ‘id4f4352e69687e5ad97e8af86e588ab3ae59d90e6a087’ (a null value)
额 这种问题就别问了,去补补按键精灵基础吧
您好,不好意思,打擾了。
想請教您一個問題,
我是使用2014_PC版的按鍵靈來對接,已導入神夢插件SmHTTP.dll (V1.0.0.0版)、Umi-OCR_Paddle_v2.0.2,
但第8行有錯誤,如下:
不曉得哪邊出問題。
原碼:
======================================================================================
原碼錯誤提示:
您的腳本存在下列錯誤,將不能正常運行:
語義錯誤:腳本 圖片驗証碼測試 ,第8行:沒有找到插件。錯誤附加碼=2526:0
还差了个smwh插件,群文件有,可移步下载
^_^ 您好,
謝謝您的回覆及教學。
因QQ帳帳太久沒使用了,我無法登入,以及台灣的手機號無法申請新的QQ帳號。
想請問,是否有其它的地方下載得到 smwh.dll 插件。
謝謝您。
给你放蓝奏云了:点我下载神梦插件
可以正常使用了,謝謝您的幫忙。
非常感謝您。
^_^
用不了,服务器上安装完,一截图就提示 MFPlat.DLL,
服务器安装新一点的系统,旧的系统只能缺什么补什么,再不行试试rapid版
这个项目时间长了就要重启一次/好像是http服务挂掉了一样
没测试过长时间,一天内目前是没感觉出啥
我挂游戏半个月以上没发现问题
有易语言的例子吗?
下个视频安排!