使用 Node.js 和 Tesseract.js 实现英文数字验证码识别工具

一、项目介绍
我们将构建一个 Node.js 脚本,实现以下功能:

加载本地验证码图像(PNG/JPG)

使用 Tesseract.js 调用 OCR 引擎

提取并清洗出验证码(仅限英文字母和数字)

该工具适合:

批处理图像验证码

自动登录脚本识别验证码

Node.js 应用内嵌 OCR 功能

二、环境准备

  1. 安装 Node.js
    访问 https://nodejs.org 下载并安装。

验证安装:

node -v
npm -v
2. 初始化项目并安装依赖

mkdir captcha-ocr-node
cd captcha-ocr-node
npm init -y
npm install tesseract.js jimp
tesseract.js:OCR 引擎

jimp:图像处理库,用于灰度化图像等预处理

三、编写识别代码
创建文件 ocr.js:

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

const INPUT_IMAGE = 'captcha.png';

async function preprocessImage(inputPath, outputPath) {
const image = await Jimp.read(inputPath);
await image
.greyscale() // 灰度处理
.contrast(1) // 增强对比度
.writeAsync(outputPath); // 保存预处理后的图像
}

async function recognizeCaptcha(imagePath) {
console.log('正在识别图像:', imagePath);
const result = await Tesseract.recognize(imagePath, 'eng', {
tessedit_char_whitelist: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789',
psm: 7,
});

const rawText = result.data.text || '';
const cleaned = rawText.replace(/[^A-Za-z0-9]/g, '');
console.log('识别结果:', cleaned);
}

async function main() {
const processed = path.join(__dirname, 'processed.png');
await preprocessImage(INPUT_IMAGE, processed);
await recognizeCaptcha(processed);
}

main();
四、运行程序
确保项目目录下有一张验证码图像 captcha.png(包含英文和数字)。

然后执行命令:

node ocr.js
输出示例:

正在识别图像: /.../processed.png
识别结果: K9ZT7
五、进阶功能拓展
你可以轻松扩展脚本功能:

批量识别图像文件夹:

const fs = require('fs');

const files = fs.readdirSync('./captchas');
for (const file of files) {
const fullPath = path.join(__dirname, 'captchas', file);
await preprocessImage(fullPath, 'temp.png');
console.log([${file}]);
await recognizeCaptcha('temp.png');
}
创建命令行工具:
使用 commander 或 yargs 支持参数:

node ocr.js --file my_captcha.jpg
集成自动表单填写:
在 Puppeteer 或 Electron 应用中嵌入识别模块,自动读取验证码并填入表单。

posted @ 2025-07-05 20:08  ttocr、com  阅读(30)  评论(0)    收藏  举报