使用 Node.js 和 Tesseract.js 实现英文数字验证码识别工具
一、项目介绍
我们将构建一个 Node.js 脚本,实现以下功能:
加载本地验证码图像(PNG/JPG)
使用 Tesseract.js 调用 OCR 引擎
提取并清洗出验证码(仅限英文字母和数字)
该工具适合:
批处理图像验证码
自动登录脚本识别验证码
Node.js 应用内嵌 OCR 功能
二、环境准备
- 安装 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 应用中嵌入识别模块,自动读取验证码并填入表单。
浙公网安备 33010602011771号