用 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)
手动分割字符(如验证码干扰较大)
七、适用场景
浙公网安备 33010602011771号