【按键精灵】51. 文字识别与文字定位

Import "D:\按键精灵\按键精灵2014\plugin\vbsjson.vbs"
Set json = New vbsJson
Call 获取access_token
Call 区域截图OCR
Sub 获取access_token
// 从ini配置文件读取 API_KEY 和 SECRET_KEY
API_KEY = Plugin.File.ReadINI("key", "API_KEY", "D:\百度OCR.ini")
SECRET_KEY = Plugin.File.ReadINI("key", "SECRET_KEY", "D:\百度OCR.ini")
// 获取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
Sub 区域截图OCR
Call Plugin.Pic.PrintScreen(0, 0, 1000, 100, "D:\OCR测试截图.bmp")
Set xPost = CreateObject("Msxml2.ServerXMLHTTP.3.0")
xPost.Open "Post", "https://aip.baidubce.com/rest/2.0/ocr/v1/accurate?access_token=" & access_token, False
xPost.setRequestHeader "CONTENT-TYPE", "application/x-www-form-urlencoded"
base64Param = "image=" & ImagesToBase64("D:\OCR测试截图.bmp") & "&recognize_granularity=small"
xPost.Send (base64Param)
If xPost.readyState=4 Then
TracePrint xPost.responsetext
Set obj = json.Decode(xPost.responsetext)
wordsArray = obj("words_result")
For i = 0 To UBound(wordsArray)
TracePrint wordsArray(i)("words")
TracePrint wordsArray(i)("location")("top")
If wordsArray(i)("words") = "新建打开保存保存退出调试录制抓抓发布资源库学习中心" Then
For j = 0 To UBound(wordsArray(i)("chars"))
If wordsArray(i)("chars")(j)("char") = "调" Then
MoveTo wordsArray(i)("chars")(j)("location")("left"), wordsArray(i)("chars")(j)("location")("top")
End If
Next
End If
Next
End If
xPost.abort
Set xPost = Nothing
End Sub
// 图片转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 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 // 打开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