今天来跟大伙聊下图片 OCR 识别,提到这个,一般可能都会想到著名的 tesseract-ocr。
在 Node.js 程序中处理如验证码识别一类的文本或物体识别时,需要以 Node.js API 的方式调用。一般来说有三种可实现该需求的方式:包装本地安装的 OCR 应用程序(如 tesseract-ocr)以提供 Node.js 调用接口、通过 http 请求方式调用第三方在线服务以及使用支持 node.js 第三方依赖库存(比如说 tesseract.js)。
包装本地 OCR 应用程序 API
这种方案要求首先在本地机器安装并配置要包装的 OCR 应用。然后使用 node.js child_process 模块的 exec、spawn 等方法调用 OCR 应用,并将执行后的结果处理后返回。
npm 能找到的大多为基于 tesseract-ocr 实现的包装,主要区别在于包装后的 API 易用性。相关实现参考:
- https://github.com/tesseract-ocr/tesseract
- https://github.com/nicolaspearson/node.ts.ocr
使用第三方在线服务 API
BAT 提供相关的在线服务 API,这些在线 API 的用法一般也都比较简单,少量的调用基本都是免费的。另外一些在线打码平台也会提供相关收费 API 服务。下面以百度智能云为例作简单的介绍。
使用百度账号登陆百度 AI 智能云平台,并新建一个应用,然后进入应用管理中心就可以得到 APPId、key、和 secret。
百度智能云控制台:https://console.bce.baidu.com/ai/#/ai/ocr/overview/index
百度智能云平台提供了相当多的人工智能相关的 API 开放服务。以下为 node.js 调用百度智能云 OCR API 实现图片文本识别的一个示例:
// 需先安装其 SDK 包: npm -i badidu-aip-sdk
// const AipOcrClient = require('baidu-aip-sdk').ocr;
const AipOcrClient = require('baidu-aip-sdk/AipOcr');
const fs = require('fs');
const APP_ID = '14406xxx';
const API_KEY = 'Fz7XXXXXXXXXXX';
const SECRET_KEY = 'XEXXXXXXXXXXXXXX';
const client = new AipOcrClient(APP_ID, API_KEY, SECRET_KEY);
const ocrTextTest = async () => {
const options = { detect_direction: true };
// 识别本地图片
const image = fs.readFileSync('./donate_wx.png').toString('base64');
let result = client.generalBasic(image, options);
console.log(result.words_result);
// 识别在线图片
const result = await client.generalBasicUrl('https://lzw.me/wp-content/uploads/2017/02/donate_wx.png');
console.log(result.words_result);
}
ocrTextTest();