欢迎光临散文网 会员登陆 & 注册

【按键精灵】50. OCR文字识别

2022-06-04 13:36 作者:酷玩蚊仔  | 我要投稿

Import "D:\按键精灵\按键精灵2014\plugin\vbsjson.vbs"

Set json = New vbsJson



Call 获取access_token

//TracePrint ImagesToBase64("D:\微信收款二维码.png")

//Call 网络图片OCR

//Call 本地图片OCR

//Call 用户选择文件

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

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

xPost.setRequestHeader "CONTENT-TYPE", "application/x-www-form-urlencoded"

xPost.Send ("url=http://www.kuwwz.com/img/%E5%BE%AE%E4%BF%A1%E6%94%B6%E6%AC%BE%E4%BA%8C%E7%BB%B4%E7%A0%81.png")

If xPost.readyState=4 Then

   TracePrint xPost.responsetext

End If

xPost.abort

Set xPost = 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_basic?access_token=" & access_token, False

xPost.setRequestHeader "CONTENT-TYPE", "application/x-www-form-urlencoded"

base64Param = "image=" & ImagesToBase64("D:\OCR测试截图.bmp")

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")

   Next

End If

xPost.abort

Set xPost = Nothing

End Sub


Sub 用户选择文件

filepath = Plugin.File.SelectFile()

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

xPost.setRequestHeader "CONTENT-TYPE", "application/x-www-form-urlencoded"

base64Param = "image=" & ImagesToBase64(filepath)

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")

   Next

End If

xPost.abort

Set xPost = Nothing

End Sub


Sub 本地图片OCR

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

xPost.setRequestHeader "CONTENT-TYPE", "application/x-www-form-urlencoded"

base64Param = "image=" & ImagesToBase64("D:\微信收款二维码.png")

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")

   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


【按键精灵】50. OCR文字识别的评论 (共 条)

分享到微博请遵守国家法律