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

一、项目背景
验证码识别(OCR)是自动化系统中常见的一环,常用于自动登录、批量信息采集、自动测试等任务。相比于 Python、C++ 等语言,Node.js 提供了更适合 Web 场景的异步处理能力。而 tesseract.js 则是 Tesseract OCR 的 JavaScript 封装,支持 Node.js 与浏览器端运行。

二、技术选型
技术 作用
Node.js 编写脚本逻辑,异步处理图像
tesseract.js OCR 引擎,识别验证码中的字符
sharp(可选) 图像预处理,如灰度、二值化等
commander 命令行参数解析(可选)
更多内容访问ttocr.com或联系1436423940
三、环境准备
确保你已经安装了 Node.js。然后初始化项目并安装依赖:

npm init -y
npm install tesseract.js sharp commander
四、项目结构

captcha-ocr-node/
├── images/
│ └── test.png
├── index.js
├── package.json
五、主程序 index.js

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

// 命令行参数解析
program
.requiredOption('-i, --image ', 'Path to captcha image')
.parse(process.argv);

const inputPath = program.opts().image;

(async () => {
// 图像预处理(灰度 + 二值化)
const preprocessedPath = path.join(__dirname, 'preprocessed.png');

await sharp(inputPath)
.grayscale()
.threshold(120)
.toFile(preprocessedPath);

// OCR识别
const worker = await createWorker('eng', 1, {
logger: m => console.log(m.status, m.progress),
});

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

const {
data: { text },
} = await worker.recognize(preprocessedPath);

console.log('识别结果:', text.trim());

await worker.terminate();
})();
六、测试运行
将验证码图片放入 images/test.png,然后运行命令:

node index.js -i images/test.png
输出示例:

识别结果: 7fKx
七、功能扩展建议
支持中文识别:加载 chi_sim 语言包;

批量识别:读取整个文件夹,循环处理;

HTTP API 接口:使用 express 构建 Web OCR 服务;

浏览器端识别:tesseract.js 也支持浏览器环境;

验证码样式适配:根据验证码样式调整灰度、阈值等参数。

八、适用场景
Web 系统自动化识别登录验证码

前端验证码辅助识别工具

自动化脚本开发(如 puppeteer + tesseract)

浏览器插件 OCR

posted @ 2025-07-18 11:42  ttocr、com  阅读(67)  评论(0)    收藏  举报