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

一、引言
验证码(CAPTCHA)是一种常见的防机器人交互手段,在实际应用中需要通过图像识别技术提取其内容。Tesseract.js 是基于 Tesseract OCR 的 JavaScript 封装,可在 Node.js 中运行,支持浏览器和服务器端环境,适合构建轻量级图像识别服务。

本文将介绍如何使用 Node.js 和 Tesseract.js 实现一个验证码识别系统,并展示其完整实现流程。

二、技术选型
Node.js:基于 V8 的 JavaScript 运行时,用于服务端开发;

Tesseract.js:OCR 引擎,Tesseract 的 JavaScript 封装版本;
更多内容访问ttocr.com或联系1436423940
Jimp:Node.js 图像处理库,用于图像预处理;

Express:轻量级 Web 框架(可选,用于部署识别 API)。

三、环境准备

  1. 初始化 Node.js 项目

mkdir node-captcha-ocr
cd node-captcha-ocr
npm init -y
2. 安装依赖

npm install tesseract.js jimp express
四、验证码识别核心代码
ocr.js

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

async function recognizeCaptcha(imagePath) {
// 加载图片并灰度处理
const image = await Jimp.read(imagePath);
image
.greyscale() // 灰度
.contrast(1) // 对比增强
.normalize() // 亮度标准化
.write("processed.png");

const result = await Tesseract.recognize("processed.png", "eng", {
tessedit_char_whitelist: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
});

const text = result.data.text.replace(/[^a-zA-Z0-9]/g, "").trim();
console.log("识别结果:", text);
return text;
}

// 测试
const imagePath = path.join(__dirname, "captcha.png");
recognizeCaptcha(imagePath);
五、可选:构建 Web 接口
若要提供 Web API 接口进行远程识别:

server.js

const express = require("express");
const multer = require("multer");
const path = require("path");
const fs = require("fs");
const { recognizeCaptcha } = require("./ocr");

const app = express();
const upload = multer({ dest: "uploads/" });

app.post("/upload", upload.single("captcha"), async (req, res) => {
const filePath = req.file.path;

try {
const result = await recognizeCaptcha(filePath);
fs.unlinkSync(filePath); // 清除临时文件
res.json({ result });
} catch (err) {
res.status(500).json({ error: err.message });
}
});

app.listen(3000, () => {
console.log("OCR 接口启动于 http://localhost:3000");
});
上传验证码图片即可返回识别结果。

六、测试示例
将一张验证码图片(如 captcha.png)放入项目根目录,执行:

node ocr.js
输出示例:

识别结果:R7K8v
或者使用 Postman 上传图片至 http://localhost:3000/upload,获取 JSON 返回结果。

posted @ 2025-07-17 21:59  ttocr、com  阅读(64)  评论(0)    收藏  举报