进入 百度智能云-登录 ,登入百度账号后,在产品应用里面选择文字识别服务。
点击进入后:
应用的名称自己填
应用归属:这里我选择是的个人。应用描述自己填,
点击免费领取次数,进入后全选
在没有认证的情况下,免费次数就通用文字识别(高精度版)每个月200次。若是进行实名认证,每个月1000次。
实名认证(根据需要自行决定)
点击应用列表自己查看
在应用列表中API KEY和Secret Key 之后会用到可以先记录下来。
在通用文字识别的基础上,提供更高精度的识别服务,支持更多语种识别(丹麦语、荷兰语、马来语、瑞典语、印尼语、波兰语、罗马尼亚语、土耳其语、希腊语、匈牙利语、泰语、越语、阿拉伯语、印地语及部分中国少数民族语言),并将字库从1w+扩展到2w+,能识别所有常用字和大部分生僻字。
简单来说就是:就是向https://aip.baidubce.com/oauth/2.0/token发请求其中带上grant_type、client_id、client_secret三个参数值就行。
Sub 获取access_token
// 填写自己的API_KEY 和 SECRET_KEY
API_KEY = ""
SECRET_KEY = ""
// 获取access_token
Set tokenPost = CreateObject("Msxml2.ServerXMLHTTP.3.0")
tokenPost.Open "Post", "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=" & API_KEY & "&client_secret=" & SECRET_KEY, False
tokenPost.Send
If tokenPost.readyState = 4 Then
TracePrint tokenPost.responsetext
Set obj = json.Decode(tokenPost.responsetext)
TracePrint obj("access_token")
access_token = obj("access_token")
End If
tokenPost.abort
Set tokenPost = Nothing
End Sub
这里我们就获取到了 access_token ,接下来我们就开始解决header和body的参数问题了
文档的部分内容如下:
大概就Header要发一个Content-Type,其值按照要求写就行了。
这有三选一的参数,一个是image和url、PDF的参数形式。这里因为图片是保存在本地,将选用的是image的参数。后边详细在详细分析下image参数的格式。其他参数都是非必选的,就是自行看文档了。
在文档中还有一些代码的样例。不幸的是就按键精灵语言
首先可以看到,图片需要进行base64编码,然后进行urlencode。两者区别具体可以看
这里解释下:在按键精灵中用 Base64 转变后,你只要把其中的 “+” 号替换为 %2d 就行了。
这里就根据需求看那些返回值比较重要,其中word_result 无疑是十分重要,返回的是识别的结果,并保存在数组中。现在大致了解了参数设置和返回参数的问题。接下就实现代码了
代码主要参考网上图片转base64代码
// 图片转Base64
Function ImagesToBase64(FilePath)
Dim xml
Dim root
Dim fs
Dim objStream
Dim objXMLDoc
Dim Base64
Set objXMLDoc = CreateObject("Microsoft.XMLDOM") // 可以访问和操作XML文档
objXMLDoc.loadXML "" // 导入指定字符串的XML文档
Set fs = createObject("Scripting.FileSystemObject") // 可以操作磁盘、文件夹或文本文件
If fs.FileExists(FilePath) Then // 判断文件是否存在
'用 stream 来读取数据
Set objStream = CreateObject("ADODB.Stream") // 可以存取二进制数据或者文本流
objStream.Type = 1 // 表示二进制数据
objStream.Open // 打开objStream
objStream.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).Text
Base64 = Replace(Base64, vbLf, "") // 去除换行(vbLf相当于chr(10))(可以不去除)
Base64 = Replace(Base64,"+","%2B") // 替换加号(文档未说明,但需要此操作,而且不要进行urlencode)
Else
Base64 = ""
End If
Set xml = Nothing
Set objStream = Nothing
Else // 文件不存在
Base64 = ""
End If
Set fs = Nothing
Set objXMLDoc = Nothing
ImagesToBase64 = Base64
// //TracePrint ImagesToBase64
End Function
这里需要注意的是
Base64 = Replace(Base64, vbLf, "") // 去除换行(vbLf相当于chr(10))(可以不去除)
Base64 = Replace(Base64,"+","%2B") // 替换加号(文档未说明,但需要此操作,而且不要进行urlencode)
网上部分图片转base64结果有出现换行情况。base64转变后只要把其中的 “+” 号替换为 %2d 就行了,而且不要进行urlencode。
其中导入了vbsjson.vbs 辅助用于JSON转换,其实也可以不用。自己根据返回的结果进行解析取出关键信息也是ok的
Import "F:\按键精灵\按键精灵商业版\按键精灵2014\plugin\vbsjson.vbs"
Set json = New vbsJson
Function full_contribution()
Call Plugin.Pic.PrintScreen(L_position_x,L_position_y,R_position_x,R_position_y, "F:\按键精灵\按键精灵商业版\数字识别截图.bmp")
//这里先截了一张图并保持。
Set xPost = CreateObject("Msxml2.ServerXMLHTTP.3.0")
xPost.Open "Post", "https://aip.baidubce.com/rest/2.0/ocr/v1/accurate_basic?access_token=" & access_token, False
// 这里将access_token进行拼接
xPost.setRequestHeader "CONTENT-TYPE", "application/x-www-form-urlencoded"
// 这里header中参数CONTENT-TYPE进行设置
base64Param = "image=" & ImagesToBase64("F:\按键精灵\按键精灵商业版\数字识别截图.bmp")
// 这里image参数进行设置,拼接上处理号的图片数据
xPost.Send (base64Param)
// 发送
If xPost.readyState=4 Then
// xPost.readyState成功获取返回值
TracePrint xPost.responsetext
// 打印下返回值进行查看
Set obj = json.Decode(xPost.responsetext)
wordsArray = obj("words_result")
//这里导入辅助了将str转变json类型的文件
full_contribution_true = 0
For i = 0 To UBound(wordsArray)
//读取数组中的目标值
TracePrint wordsArray(i)("words")
If wordsArray(i)("words") = "目标值" Then
full_contribution_true = 1
Exit for
End If
Next
End If
xPost.abort
Set xPost = Nothing
Delay 1000
End Function
一个游戏的截图:
接下来我们就调用下按键精灵程序
可以看到识别的结果还是很准确的
代码整合与vbsJson.vbs
Free OCR API这是一个免费的OCR的API
可以看到是免费25000次,但是亲测返回速度、识别正常率、成功访问率都不太行。里边的文档也有详细的API的配置,与百度OCR不同的就是不需要获取access_token,只需要在header中发送key就行,同时image的内容也有所不同base64Image=data:image/bmp;base64
Function full_contribution()
mykey = ""
Set xPost = CreateObject("Msxml2.ServerXMLHTTP.6.0")
xPost.Open "Post", "https://api.ocr.space/parse/image", False
xPost.setRequestHeader "apikey", mykey
xPost.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
lan = "language=chs"
iso = "&isOverlayRequired=false"
b644 = ImagesToBase64("F:\按键精灵\按键精灵商业版\数字识别截图.bmp")
b64 = "&base64Image=data:image/bmp;base64,"& b644
isc = "&iscreatesearchablepdf=false"
iss = "&issearchablepdfhidetextlayer=false"
date1 = lan &iso & b64 & isc & iss
xPost.Send (date1)
If xPost.readyState=4 Then
TracePrint xPost.responsetext
End If
xPost.abort
Set xPost = Nothing
Delay 1000
End Function
本文作者:九重!
本文链接:https://blog.csdn.net/weixin_43798572/article/details/124075686
关于博主:评论和私信会在第一时间回复。或者直接私信我。
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【点赞】【收藏】一下。您的鼓励是博主的最大动力!