用 Node.js 与 Tesseract.js 实现验证码识别系统

一、项目背景
验证码是区分人类用户与自动化脚本的重要手段。但在某些合法自动化任务(如自动登录、自助测试)中,识别验证码成为关键。本文基于 Node.js 与 Tesseract.js 实现一个轻量、跨平台的验证码识别工具,适合 Web 全栈或前端开发者快速集成。更多内容访问ttocr.com或联系1436423940

二、技术路线
技术 作用
Node.js 后端运行时环境
tesseract.js JavaScript OCR 引擎
Jimp 图像处理库
Commander 命令行参数处理

三、项目搭建
初始化项目:

mkdir captcha-ocr-js && cd captcha-ocr-js
npm init -y
npm install tesseract.js jimp commander
创建目录结构:

captcha-ocr-js/
├── images/
│ └── sample.png
├── index.js
├── package.json
四、核心代码(index.js)

const { createWorker } = require('tesseract.js');
const Jimp = require('jimp');
const { program } = require('commander');
const path = require('path');

program
.option('-i, --image ', '输入图像路径')
.parse();

const options = program.opts();

async function preprocessImage(imagePath) {
const image = await Jimp.read(imagePath);
image
.greyscale()
.contrast(0.7)
.normalize()
.write('processed.png');
return 'processed.png';
}

async function recognize(imagePath) {
const worker = await createWorker('eng', 1, {
logger: m => console.log(m.status, m.progress),
});

await worker.load();
await worker.loadLanguage('eng');
await worker.initialize('eng');
await worker.setParameters({
tessedit_char_whitelist: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789',
});

const { data: { text } } = await worker.recognize(imagePath);
await worker.terminate();

return text.trim();
}

(async () => {
const rawPath = options.image;
if (!rawPath) {
console.error('请提供图片路径:node index.js --image path/to/image.png');
process.exit(1);
}

const processed = await preprocessImage(rawPath);
const result = await recognize(processed);
console.log('识别结果:', result);
})();
五、运行示例
准备一张图片 images/sample.png,然后运行:

node index.js --image images/sample.png
输出结果:

识别结果: a7gK
六、图像增强建议
为了提升识别准确率,可尝试以下图像增强策略:

放大图像(resize())

图像二值化(Jimp 可模拟)

去噪(可配合第三方库如 sharp)

手动分割字符(如验证码干扰较大)

七、适用场景

posted @ 2025-07-19 10:33  ttocr、com  阅读(24)  评论(0)    收藏  举报