Tesseract.js 是一个基于 JavaScript 的光学字符识别(OCR)库,它使开发者能够在浏览器中直接从图像中提取文本,而无需将图像上传到服务器进行处理。Tesseract.js 是对 Google 的 Tesseract OCR 引擎的 JavaScript 实现,并且可以在浏览器和 Node.js 环境中运行。
tesseract.js项目地址:https://github.com/naptha/tesseract.js
安装
首先安装tesseract.js库:
npm install tesseract.js
yarn add tesseract.js
tesseract.js默认会从CDN加载部分资源,而我们要进行离线状态下的识别,因此我们需要将语言(.gz格式)和核心保存至本地并指定路径。
const worker = await createWorker('eng', 1, {
langPath: './lang/',
corePath: './core/'
});
captcha_example
├─ core
│ ├─ tesseract-core-lstm.wasm.js
│ ├─ tesseract-core-simd-lstm.wasm.js
│ ├─ tesseract-core-simd.wasm.js
│ └─ tesseract-core.wasm.js
└─ lang
└─ eng.traineddata.gz
基本用法
这里使用某大学统一身份认证平台的纯数字验证码进行测试,因此导入英文语言包eng.traineddata即可。
验证码图片中间还有用于混淆的曲线,tesseract会将它识别为一些特殊符号,用正则表达式将他们过滤只保留数字即可。由于这里的验证码长度均为四位,所以过滤之后还可对最终保留下来的文本长度进行检查,位数不对直接返回false进行刷新验证码的操作,避免因为验证失败次数过多导致账号被风控。
示例代码:
const { createWorker } = require('tesseract.js');
async function getCaptcha(img) {
console.log('开始识别验证码');
try {
const worker = await createWorker('eng', 1, {
langPath: './lang/',
corePath: './core/'
});
const ret = await worker.recognize(img);
console.log('原始数据:' + ret.data.text);
let result = ret.data.text.replace(/[^\d]/g, ''); //保留纯数字
console.log('保留纯数字:' + result);
if (result.length !== 4)
return { success: false, msg: '验证码识别错误' }; //识别错误后进行刷新验证码的操作,避免验证失败次数过多
await worker.terminate();
return { success: true, msg: result };
} catch (err) {
return { success: false, msg: err.message };
}
}
getCaptcha('./example.png'); //测试图片 可传base64图片
module.exports = getCaptcha;
编写代码使用puppeteer进行自动化登录测试:
经过多次测试后得出,对于简单的纯数字验证码识别tesseract.js的识别准确率可达90%
Comments 1 条评论
博主 l4326769
网站有人机校验的话,估计就用不了了