用 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)。
三、环境准备
- 初始化 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 返回结果。
浙公网安备 33010602011771号