用 Node.js 和 Tesseract.js 进行英文数字验证码识别
在现代自动化应用中,验证码识别是一项常见的任务。本文将演示如何使用 JavaScript 语言,在 Node.js 环境中,结合 tesseract.js 识别英文数字验证码图像。该方法跨平台、部署轻便,适用于 Web 服务端脚本或桌面自动化工具。
一、项目初始化与依赖安装
- 初始化 Node 项目
打开终端并执行:
mkdir captcha-ocr-js
cd captcha-ocr-js
npm init -y
2. 安装所需依赖
我们需要以下两个库:
更多内容访问ttocr.com或联系1436423940
tesseract.js:Tesseract OCR 的 JavaScript 实现
canvas:用于图像处理的库(Node.js 环境模拟 HTML5 Canvas)
安装命令如下:
npm install tesseract.js canvas
Windows 用户如果在安装 canvas 时遇到问题,可根据其 官方安装指南 解决依赖。
二、编写验证码识别脚本
创建 index.js 文件,并添加以下代码:
const fs = require('fs');
const { createCanvas, loadImage } = require('canvas');
const Tesseract = require('tesseract.js');
async function recognizeCaptcha(imagePath) {
// 加载图像
const image = await loadImage(imagePath);
// 创建 Canvas 并绘制图像
const canvas = createCanvas(image.width, image.height);
const ctx = canvas.getContext('2d');
ctx.drawImage(image, 0, 0);
// 图像灰度化处理(简化背景)
const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
for (let i = 0; i < imageData.data.length; i += 4) {
const avg = (
imageData.data[i] +
imageData.data[i + 1] +
imageData.data[i + 2]
) / 3;
imageData.data[i] = avg;
imageData.data[i + 1] = avg;
imageData.data[i + 2] = avg;
}
ctx.putImageData(imageData, 0, 0);
// 保存处理后的图像(可选)
const buffer = canvas.toBuffer('image/png');
fs.writeFileSync('processed.png', buffer);
// 使用 Tesseract.js 识别
const result = await Tesseract.recognize(buffer, 'eng', {
tessedit_char_whitelist: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789',
logger: (m) => console.log(m.status),
});
console.log('识别结果:', result.data.text.trim());
}
// 调用识别函数
recognizeCaptcha('captcha.png');
三、准备验证码图像
确保当前目录下有一个名为 captcha.png 的验证码图像,内容为清晰的英文数字(如 AB45T),否则可替换为任意有效图像。
四、运行程序
在终端中执行以下命令:
node index.js
你将看到类似如下输出:
识别结果: 7GK43
五、识别优化建议
字符白名单:通过 tessedit_char_whitelist 限定字符集,可减少误识别。
预处理增强:可进一步做边缘检测、背景去噪等处理提升准确率。
多张验证码训练:如验证码结构复杂,建议用 TensorFlow.js 训练模型。
浙公网安备 33010602011771号