用 Node.js 和 Tesseract.js 进行英文数字验证码识别

在现代自动化应用中,验证码识别是一项常见的任务。本文将演示如何使用 JavaScript 语言,在 Node.js 环境中,结合 tesseract.js 识别英文数字验证码图像。该方法跨平台、部署轻便,适用于 Web 服务端脚本或桌面自动化工具。

一、项目初始化与依赖安装

  1. 初始化 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 训练模型。

posted @ 2025-06-07 18:46  ttocr、com  阅读(84)  评论(0)    收藏  举报