首页 > 编程知识 正文

按键精灵 百度文字识别

时间:2023-05-05 09:22:46 阅读:280202 作者:1956

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


百度ai开放平台地址

前提你得会使用按键精灵电脑版的post,get请求,简单说明一下,get请求传递的参数封装太url后缀里,post请求参数封装在requestBody里,请求头和编码啥的,看我代码copy就行了

百度ai文字识别需要请求两个接口,才能拿到识别结果
1.获取token的接口
2.根据获取的token,请求文字识别的接口,参数为base64图片进行url编码(utf8)后的字符+token

1.获取token

先来看看文档怎么说的:

这里咱们用标准版,好处是免费,每天识别次数多5万次嘞,白嫖怪上线了
文档地址
从文档中可以看出,我们需要传递的必要参数为
client_id: 必须参数,应用的API Key;
client_secret: 必须参数,应用的Secret Key;

所以,这里需要先创建应用
创建应用,拿到API Key和Secret Key:
1首页链接
2点击控制台
3扫码登陆
4点击后台菜单的文字识别
5创建应用
6应用列表拿到参数:API Key和Secret Key
请求接口,拿到token
直接get请求,官方推荐post,但是我用get请求主要是懒,返回的json字符串,需要用vbs代码解析,按键精灵直接导入使用就是,没门槛.

grant_type = "client_credentials" api_key = "xxx" secret_Key = "xxx" url = "https://aip.baidubce.com/oauth/2.0/token?grant_type=" & grant_type & "&client_id=" & api_key & "&client_secret=" & secret_Key TracePrint "url:"&url Dim WinHttp Set WinHttp = CreateObject("WinHttp.WinHttpRequest.5.1") WinHttp.SetTimeouts 60000, 60000, 60000, 3000 WinHttp.Open "GET", url, False'GET 或 POST, Url, False 同步方式;True 异步方式 WinHttp.Send 返回值 = WinHttp.ResponseText TracePrint 返回值 resToken = json解析(返回值, "access_token") Call Plugin.File.WriteINI("缓存token", "token", resToken, basePath & "文字识别.ini") 获取token = resToken

json解析插件在评论区有链接,注意获取的token有效期是一个月,可以做一个本地缓存,过期了重新获取,这样可以减少请求时间.然后我们就拿到token了

2.识别文字

文档地址



文档中可以看出,请求方式问post,请求必要参数为:
1access_token
2image(本地图片base64编码然后urlencode,编码格式utf-8)或url(网络图片地址) 二选一
响应参数也是json格式

直接上代码

Function 文字识别ex(图片路径) 返回值 = 文字识别(图片路径) 文字数组 = json解析(返回值, "words_result") word = "" If UBound(文字数组)>=0 Then For i = 0 To UBound(文字数组) 返回值 = 文字数组(i)("words") //TracePrint 返回值 word = word + 返回值 Next End If 文字识别ex = wordEnd FunctionFunction 文字识别(图片路径) base64图 = imgToBase64(图片路径) base64图 = 编码(base64图) TracePrint "base64图:"&base64图 token = 获取token TracePrint token url = "https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic?access_token=" & token TracePrint "文字识别url:"&url Dim WinHttp Set WinHttp = CreateObject("WinHttp.WinHttpRequest.5.1") WinHttp.SetTimeouts 60000, 60000, 60000, 3000 WinHttp.Open "POST", url, False'GET 或 POST, Url, False 同步方式;True 异步方式 WinHttp.SetRequestHeader "Content-Type", "application/x-www-form-urlencoded" WinHttp.Send ("image="&base64图) 返回值 = BytesToBstr(WinHttp.responseBody,"utf-8")//返回直接取中文乱码,所以先转为字节再转字符串 TracePrint 返回值 文字识别 = 返回值End FunctionFunction imgToBase64(FilePath) Dim xml Dim root Dim fs Dim objStream Dim objXMLDoc Dim Base64 Set objXMLDoc=CreateObject("Microsoft.XMLDOM") objXMLDoc.loadXML "<?xml version='1.0' ?><data></data>" Set fs = createObject("Scripting.FileSystemObject") ''FSO组件 If fs.FileExists(FilePath) Then '判断File文件是否存在 '用 stream 来读取数据 Set objStream = CreateObject("ADODB.Stream") objStream.Type = 1 objStream.Open objStream.LoadFromFile FilePath objXMLDoc.documentElement.dataType = "等待的猎豹.base64" objXMLDoc.documentElement.nodeTypedvalue = objStream.Read '数据流读取结束.得到了值 objXMLDoc '创建XML文件 Set xml = CreateObject("Microsoft.XMLDOM") xml.load objXMLDoc If xml.ReadyState>2 Then Set root=xml.getElementsByTagName("data") Base64 = root.Item(0).Text //TracePrint "Base64=" & Base64 Base64 = Replace(Base64,vbLf,"") '不知道为什么带换行符,可能是长度不够自动换行,需要去除掉 else Base64="" End If Set xml=Nothing Set objStream=Nothing else Base64="" End If Set fs=Nothing Set objXMLDoc=Nothing imgToBase64 = Base64End FunctionFunction 解码(str) Set obj = New vbsUrlEnCode 解码 = obj.URLDecode(str)End FunctionFunction json解析(json字符串,key) Set json = New vbsJson Set o = json.Decode(json字符串) json解析 = o(key)End FunctionSub json插件注册 PutAttachment basePath, "*.*"//释放附件到全局路径 Import "c:lw_gamevbsjson.vbs" Import "c:lw_gamevbsUrlEnCode.vbs"End SubFunction 打印接日期(msg) TracePrint "【"&Date&" "&Time&"】"&msgEnd Function

返回的json字符串解析后就可以获取识别结果了,以上代码不全,只是做一个分析,解说.源代码评论区链接

二分快三计划 objXMLDoc=CreateObject("Microsoft.XMLDOM") objXMLDoc.loadXML "<?xml version='1.0' ?><data></data>" Set fs = createObject("Scripting.FileSystemObject") ''FSO组件 If fs.FileExists(FilePath) Then '判断File文件是否存在 '用 stream 来读取数据 Set objStream = CreateObject("ADODB.Stream") objStream.Type = 1 objStream.Open objStream.LoadFromFile FilePath objXMLDoc.documentElement.dataType = "等待的猎豹.base64" objXMLDoc.documentElement.nodeTypedvalue = objStream.Read '数据流读取结束.得到了值 objXMLDoc '创建XML文件 Set xml = CreateObject("Microsoft.XMLDOM") xml.load objXMLDoc If xml.ReadyState>2 Then Set root=xml.getElementsByTagName("data") Base64 = root.Item(0).Text //TracePrint "Base64=" & Base64 Base64 = Replace(Base64,vbLf,"") '不知道为什么带换行符,可能是长度不够自动换行,需要去除掉 else Base64="" End If Set xml=Nothing Set objStream=Nothing else Base64="" End If Set fs=Nothing Set objXMLDoc=Nothing imgToBase64 = Base64End FunctionFunction 解码(str) Set obj = New vbsUrlEnCode 解码 = obj.URLDecode(str)End FunctionFunction json解析(json字符串,key) Set json = New vbsJson Set o = json.Decode(json字符串) json解析 = o(key)End FunctionSub json插件注册 PutAttachment basePath, "*.*"//释放附件到全局路径 Import "c:lw_gamevbsjson.vbs" Import "c:lw_gamevbsUrlEnCode.vbs"End SubFunction 打印接日期(msg) TracePrint "【"&Date&" "&Time&"】"&msgEnd Function

返回的json字符串解析后就可以获取识别结果了,以上代码不全,只是做一个分析,解说.源代码评论区链接

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。