使用 Node.js 实现英文数字验证码识别:结合 tesseract.js 与 Jimp 图像处理

Node.js 不仅适合构建服务端应用,还可以胜任图像识别任务。借助 tesseract.js,我们可以直接在 Node.js 中运行 Tesseract OCR 引擎,配合 jimp 进行图像预处理。

一、准备工作

  1. 初始化项目

mkdir captcha-ocr-node
cd captcha-ocr-node
npm init -y
2. 安装依赖
更多内容访问ttocr.com或联系1436423940
npm install tesseract.js jimp
二、编写识别脚本
创建 index.js,写入以下代码:

const Tesseract = require("tesseract.js");
const Jimp = require("jimp");

(async () => {
const imagePath = "captcha.png";

// 加载并预处理图像(灰度 + 阈值)
const image = await Jimp.read(imagePath);
image
.greyscale() // 灰度化
.contrast(1) // 增强对比
.normalize() // 标准化
.write("processed.png"); // 可选:保存处理图像

// OCR 识别
const { data: { text } } = await Tesseract.recognize(
await image.getBufferAsync(Jimp.MIME_PNG),
"eng",
{
tessedit_char_whitelist: "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789",
logger: (m) => console.log(m.status),
}
);

console.log("识别的验证码是:", text.trim());
})();
三、准备图像
将你的验证码图像命名为 captcha.png,放在项目根目录。

图片越清晰,识别效果越好。你也可以尝试调整对比度、缩放图像等操作进一步优化。

四、运行脚本
在终端中执行:

node index.js
输出示例:

识别的验证码是: 5GK9A
五、常见优化方法
尽量使用清晰、无干扰的图像;

使用 Jimp 进行二值化处理(可通过 threshold 实现);

使用白名单限制识别字符范围(如字母+数字);

若识别结果仍不理想,可以尝试将图像放大 2 倍再识别。

posted @ 2025-04-11 11:03  ttocr、com  阅读(68)  评论(0)    收藏  举报