简介:本文详细阐述如何在按键精灵脚本中调用百度文字识别OCR服务,涵盖API申请、脚本集成、错误处理及优化策略,助力开发者实现高效自动化文本识别。
在自动化脚本开发中,文本识别是核心需求之一。传统OCR方案依赖本地库(如Tesseract),存在识别率低、适配性差等问题。百度文字识别OCR服务基于深度学习算法,支持通用场景、高精度、多语言识别,且提供API接口,可无缝集成至按键精灵脚本中。
典型应用场景:
API Key和Secret Key关键参数说明:
access_token:通过API Key和Secret Key换取的临时凭证image:待识别图片(支持URL或Base64编码)recognize_granularity:识别粒度(small/big)language_type:语言类型(CHN_ENG/ENG等)WinHttp或XMLHTTP组件
Function GetAccessToken(apiKey, secretKey)Dim url, http, responseurl = "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=" & apiKey & "&client_secret=" & secretKeySet http = CreateObject("MSXML2.XMLHTTP")http.Open "GET", url, Falsehttp.SendIf http.Status = 200 ThenDim jsonSet json = JSON.parse(http.responseText)GetAccessToken = json("access_token")ElseTracePrint "获取Token失败: " & http.StatusGetAccessToken = ""End IfEnd Function
Function RecognizeText(accessToken, imagePath)Dim url, http, imageData, boundaryurl = "https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic?access_token=" & accessToken' 读取图片为Base64imageData = ReadFileToBase64(imagePath)' 构造Multipart表单boundary = "---------------------------" & CreateObject("Scriptlet.FileSystem").CreateTextFile(0).LineDim postDatapostData = "--" & boundary & vbCrLf & _"Content-Disposition: form-data; name=""image""; filename=""image.jpg""" & vbCrLf & _"Content-Type: application/octet-stream" & vbCrLf & vbCrLf & _imageData & vbCrLf & _"--" & boundary & "--"Set http = CreateObject("MSXML2.XMLHTTP")http.Open "POST", url, Falsehttp.SetRequestHeader "Content-Type", "multipart/form-data; boundary=" & boundaryhttp.Send postDataIf http.Status = 200 ThenDim jsonSet json = JSON.parse(http.responseText)Dim result, iresult = ""For i = 0 To json("words_result_num") - 1result = result & json("words_result")(i)("words") & vbCrLfNextRecognizeText = resultElseTracePrint "OCR识别失败: " & http.Status & ", " & http.responseTextRecognizeText = ""End IfEnd Function' 辅助函数:文件转Base64Function ReadFileToBase64(filePath)Dim adoStreamSet adoStream = CreateObject("ADODB.Stream")adoStream.Type = 1 ' 二进制adoStream.OpenadoStream.LoadFromFile filePathadoStream.Position = 0Dim bytesbytes = adoStream.ReadadoStream.CloseDim xmlDocSet xmlDoc = CreateObject("MSXML2.DOMDocument")Dim xmlElemSet xmlElem = xmlDoc.createElement("b64")xmlElem.DataType = "bin.base64"xmlElem.nodeTypedValue = bytesReadFileToBase64 = xmlElem.TextEnd Function
Dim apiKey, secretKey, accessToken, resultapiKey = "您的API_KEY"secretKey = "您的SECRET_KEY"accessToken = GetAccessToken(apiKey, secretKey)If accessToken <> "" Thenresult = RecognizeText(accessToken, "C:\test.png")If result <> "" ThenTracePrint "识别结果: " & vbCrLf & resultElseTracePrint "未获取到有效结果"End IfElseTracePrint "无法获取Access Token"End If
Token缓存:AccessToken有效期24小时,可保存至文件避免重复获取
Function LoadCachedToken(filePath)On Error Resume NextDim fso, file, contentSet fso = CreateObject("Scripting.FileSystemObject")If fso.FileExists(filePath) ThenSet file = fso.OpenTextFile(filePath, 1)content = file.ReadAllfile.CloseLoadCachedToken = contentElseLoadCachedToken = ""End IfEnd Function
异步请求:使用XMLHTTP60组件实现非阻塞调用
Set http = CreateObject("MSXML2.XMLHTTP.6.0")http.OnReadyStateChange = GetRef("HandleResponse")
Sub HandleResponse()Dim httpSet http = GetObject("", "MSXML2.XMLHTTP.6.0")If http.ReadyState = 4 ThenIf http.Status = 200 Then' 处理成功响应ElseTracePrint "HTTP错误: " & http.StatusEnd IfEnd IfEnd Sub
在请求URL中添加参数:
?language_type=JAP&detect_direction=true
支持语言类型:
CHN_ENG:中英文混合ENG:纯英文JAP:日语KOR:韩语
Function SafeRequest(url, maxRetries)Dim i, http, responseFor i = 1 To maxRetriesSet http = CreateObject("MSXML2.XMLHTTP")http.Open "GET", url, Falsehttp.SetTimeouts 5000, 5000, 10000, 10000 ' 连接/发送/接收超时(ms)On Error Resume Nexthttp.SendIf Err.Number = 0 And http.Status = 200 ThenSafeRequest = http.responseTextExit FunctionEnd IfDelay 1000NextSafeRequest = ""End Function
rectangle参数裁剪图片密钥保护:
请求限制:
Delay Random(500, 1500) ' 随机延迟500-1500ms
数据隐私:
结合打码平台实现全自动处理:
Function AutoRecognizeCaptcha(imagePath)Dim result' 本地OCR初步识别result = RecognizeText(GetAccessToken(), imagePath)' 若置信度低,调用打码平台If Len(result) < 4 Thenresult = ThirdPartyCaptchaService(imagePath)End IfAutoRecognizeCaptcha = resultEnd Function
通过截屏+OCR实现动态内容监控:
Sub MonitorScreenRegion(x, y, width, height)DoDim bmpPathbmpPath = "C:\temp\screen_" & Now & ".bmp"' 截取指定区域Plugin.Window.Capture(x, y, x+width, y+height, bmpPath)' OCR识别Dim texttext = RecognizeText(GetAccessToken(), bmpPath)If text <> "" ThenTracePrint "检测到文本: " & text' 触发相应操作...End IfDelay 2000 ' 每2秒检测一次LoopEnd Sub
通过按键精灵调用百度OCR服务,开发者可快速实现高精度的自动化文本识别。关键实施要点包括:
未来可探索的方向:
本文提供的代码示例与优化策略,可直接应用于游戏辅助、数据采集、测试自动化等多个领域,显著提升开发效率与识别准确率。建议开发者根据实际需求调整参数,并持续关注百度OCR服务的版本更新以获取新功能。