大家都知道Excel可以使用VBA处理数据采集,如果我们调用一些成熟的OCR接口是否可以实现批量识别图片呢?我们来聊聊其中涉及到的知识及技术!
我们直接来看效果吧!
▼动画演示-OCR识别行程码

可以清楚地识别出,我们想要的核心信息,更新时间,到过什么地方等!
他的实现主要是调用百度的OCR,当然其他一些成熟的OCR产品都可以,比如腾讯也是不错的!、
我们说说其中涉及的技术和主要事项
S01 | 百度OCR注册
网址: https://ai.baidu.com/tech/ocr
在控制台,创建一个应用,名称什么的随意起一个就行,我们核心需要的是他的ID和Key

具体如下图,这个是你的身份信息和验证信息,服务器通过它来识别你的身份!后续我们需要用到!

下面就是通过官方的接口来实现识别功能了!
S02 | 获取Token
官方的文档如下:
https://cloud.baidu.com/apiexplorer/index.html?Product=GWSE-DJAQ8YwekkQ&Api=GWAI-Q5xGTKoot4h

我们需要使用VBA发起这个请求,参考如下代码:

大家只要把自己的ID和KEY传进去,即可获取对应的TOKEN,我已经封装成一个自定义函数了!
调用效果如下:

S03 | 如何识别
其实没有什么难点,官方都有对应的API说明,我们只需要调用接口即可!

如果说有点难的,就是如何使用VBA把图片转base64编码?
在VBA中,我们首先要把图片转二进制,这个通过下面这个自定义函数来处理
▍图片转二进制函数

然后我们就可以把二进制转成base64,利用的是XMLDOM!
▍二进制转base64

这些主要是给大家提供处理方案!
转成base64后,发送给服务器前需要做一下URI转码
▍URI编码

以上三步才能把图片转成可以上传到服务器的数据!
结合上面的代码,最后通过下面这个函数,发送请求即可!注意其中用到了我们上面所讲的几个自定义函数!写入
Function BaiduOCR(PicPath As String) As String url = "https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic?access_token=" & mytoken PostData = "image=" & encodeURIByHtml(strToBase64(FileToByte(PicPath))) '图像base64编码 Set xml = CreateObject("WinHttp.WinHttpRequest.5.1") With xml .Open "POST", url, False .SetRequestHeader "Content-Type", "application/x-www-form-urlencoded" .Send PostData result = ByteToStr(.ResponseBody, "utf-8") End With Debug.Print resultEnd Function
上面只是演示如何调用API,一般成熟的API都有成熟的文档,大家主要就是要学习一下 WinHttp.WinHttpRequest.5.1
将识别结果批量写入到Excel,比较简单,我就不再啰嗦了!感兴趣的同学可以去试试,最好是有VBA基础!