目录

  • 1. 申请百度OCR服务
  • 1.1. 百度OCR登录
  • 1.2 创建新应用
  • 1.3 免费领取次数
  • 1.3 查看是否创建成功
  • 2. 按键精灵运用百度OCR接口
  • 2.1 通用文字识别(高精度版)文档
  • 2.1.1 接口描述
  • 2.1.2 请求说明
  • 2.1.3 获取access_token
  • 2.2按键精灵代码实现获取access_token
  • 2.3. header 和 body参数
  • 2.3.1 header 参数
  • 2.3.2 body 参数
  • 2.3.3 image 参数
  • 2.4 返回参数
  • 2.5 按键精灵代码实现图片base64转换
  • 2.6 按键精灵代码实现获取word_result
  • 2.7 一个小游戏截图效果图
  • 2.8 关键代码整合:
  • 3 OCRSpace文字识别
  • 3.1 OCRSpace关键代码


1. 申请百度OCR服务

1.1. 百度OCR登录

进入 百度智能云-登录 ,登入百度账号后,在产品应用里面选择文字识别服务。

文字识别 java 文字识别自动点击器_xml


点击进入后:

文字识别 java 文字识别自动点击器_xml_02

1.2 创建新应用

应用的名称自己填

文字识别 java 文字识别自动点击器_图像处理_03


应用归属:这里我选择是的个人。应用描述自己填,

文字识别 java 文字识别自动点击器_百度_04

1.3 免费领取次数

点击免费领取次数,进入后全选

文字识别 java 文字识别自动点击器_百度_05


在没有认证的情况下,免费次数就通用文字识别(高精度版)每个月200次。若是进行实名认证,每个月1000次。

实名认证(根据需要自行决定)

文字识别 java 文字识别自动点击器_百度_06

1.3 查看是否创建成功

点击应用列表自己查看

文字识别 java 文字识别自动点击器_图像处理_07


在应用列表中API KEY和Secret Key 之后会用到可以先记录下来。

2. 按键精灵运用百度OCR接口

2.1 通用文字识别(高精度版)文档

2.1.1 接口描述

在通用文字识别的基础上,提供更高精度的识别服务,支持更多语种识别(丹麦语、荷兰语、马来语、瑞典语、印尼语、波兰语、罗马尼亚语、土耳其语、希腊语、匈牙利语、泰语、越语、阿拉伯语、印地语及部分中国少数民族语言),并将字库从1w+扩展到2w+,能识别所有常用字和大部分生僻字。

2.1.2 请求说明

文字识别 java 文字识别自动点击器_百度_08


这里看到在使用前需要先获得access_token 值。

2.1.3 获取access_token

文字识别 java 文字识别自动点击器_文字识别 java_09


简单来说就是:就是向https://aip.baidubce.com/oauth/2.0/token发请求其中带上grant_type、client_id、client_secret三个参数值就行。

2.2按键精灵代码实现获取access_token

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的参数问题了

2.3. header 和 body参数

2.3.1 header 参数

文档的部分内容如下:

文字识别 java 文字识别自动点击器_百度_10


大概就Header要发一个Content-Type,其值按照要求写就行了。

2.3.2 body 参数

文字识别 java 文字识别自动点击器_xml_11


这有三选一的参数,一个是image和url、PDF的参数形式。这里因为图片是保存在本地,将选用的是image的参数。后边详细在详细分析下image参数的格式。其他参数都是非必选的,就是自行看文档了。

在文档中还有一些代码的样例。不幸的是就按键精灵语言

文字识别 java 文字识别自动点击器_xml_12

2.3.3 image 参数

文字识别 java 文字识别自动点击器_xml_13


首先可以看到,图片需要进行base64编码,然后进行urlencode。两者区别具体可以看 这里解释下:在按键精灵中用 Base64 转变后,你只要把其中的 “+” 号替换为 %2d 就行了。

2.4 返回参数

文字识别 java 文字识别自动点击器_图像处理_14


这里就根据需求看那些返回值比较重要,其中word_result 无疑是十分重要,返回的是识别的结果,并保存在数组中。现在大致了解了参数设置和返回参数的问题。接下就实现代码了

2.5 按键精灵代码实现图片base64转换

代码主要参考网上图片转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 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

这里需要注意的是

Base64 = Replace(Base64, vbLf, "") // 去除换行(vbLf相当于chr(10))(可以不去除)
Base64 = Replace(Base64,"+","%2B") // 替换加号(文档未说明,但需要此操作,而且不要进行urlencode)

网上部分图片转base64结果有出现换行情况。base64转变后只要把其中的 “+” 号替换为 %2d 就行了,而且不要进行urlencode。

2.6 按键精灵代码实现获取word_result

其中导入了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

2.7 一个小游戏截图效果图

一个游戏的截图:

文字识别 java 文字识别自动点击器_百度_15


接下来我们就调用下按键精灵程序

文字识别 java 文字识别自动点击器_文字识别 java_16


可以看到识别的结果还是很准确的

2.8 关键代码整合:

代码整合与vbsJson.vbs

3 OCRSpace文字识别

Free OCR API这是一个免费的OCR的API

文字识别 java 文字识别自动点击器_xml_17


可以看到是免费25000次,但是亲测返回速度、识别正常率、成功访问率都不太行。里边的文档也有详细的API的配置,与百度OCR不同的就是不需要获取access_token,只需要在header中发送key就行,同时image的内容也有所不同base64Image=data:image/bmp;base64

3.1 OCRSpace关键代码

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

本文作者:九重!