使用 Node.js 和 Tesseract.js 实现验证码识别
在自动化任务中,验证码识别是一个常见的需求。本文将介绍如何使用 Node.js 和 Tesseract.js 实现验证码的自动识别。Tesseract.js 是 Tesseract OCR 的 JavaScript 实现,可以在浏览器和 Node.js 环境中运行。通过 Tesseract.js,我们可以在 Node.js 中处理图像并提取其中的文本。
- 环境准备
安装 Node.js
首先,确保你的系统已安装 Node.js。可以从 Node.js 官网 下载并安装。安装完成后,通过命令行检查版本:
bash
更多内容访问ttocr.com或联系1436423940
node -v
安装 Tesseract.js
在你的 Node.js 项目中安装 tesseract.js。使用 npm 安装:
bash
npm init -y # 初始化项目(如果还没有 package.json 文件)
npm install tesseract.js
Tesseract.js 会自动下载和配置所需的模型文件,因此不需要手动配置 Tesseract 数据。
- 编写验证码识别代码
接下来,我们编写一个简单的 Node.js 脚本,通过 Tesseract.js 识别验证码图像。以下是完整代码示例:
javascript
const Tesseract = require('tesseract.js');
const path = require('path');
// 验证码图片路径
const imagePath = path.join(__dirname, 'captcha.png');
// 使用 Tesseract.js 进行 OCR 识别
Tesseract.recognize(
imagePath,
'eng', // 设置语言为英文
{
logger: (m) => console.log(m), // 输出日志
}
).then(({ data: { text } }) => {
console.log('识别的验证码是: ' + text.trim());
}).catch(err => {
console.error('识别失败: ' + err);
});
3. 图像预处理(提高识别准确率)
尽管 Tesseract.js 可以直接识别验证码图像,但在某些情况下,我们可能需要对图像进行预处理,以提高识别准确率。例如,图像的去噪、灰度化和二值化可以减少干扰。
我们可以使用 sharp 图像处理库来对图像进行预处理。在安装 Tesseract.js 后,安装 sharp:
bash
npm install sharp
然后,我们对图像进行处理:
javascript
const sharp = require('sharp');
async function preprocessImage(imagePath, outputPath) {
await sharp(imagePath)
.grayscale() // 转换为灰度图像
.threshold(128) // 二值化处理
.toFile(outputPath); // 保存处理后的图像
console.log('图像已处理并保存为: ' + outputPath);
}
const processedImagePath = path.join(__dirname, 'processed_captcha.png');
preprocessImage(imagePath, processedImagePath).then(() => {
// 处理完成后,再进行识别
Tesseract.recognize(
processedImagePath,
'eng',
{
logger: (m) => console.log(m),
}
).then(({ data: { text } }) => {
console.log('识别的验证码是: ' + text.trim());
}).catch(err => {
console.error('识别失败: ' + err);
});
});
在这段代码中,我们使用 sharp 将图像转换为灰度并进行二值化处理,生成一个新的图像 processed_captcha.png,然后再用 Tesseract.js 对处理后的图像进行识别。
- 提高识别准确率
使用白名单过滤字符
如果验证码只包含特定字符(如数字或字母),可以设置字符白名单来提升识别准确率:
javascript
Tesseract.recognize(
processedImagePath,
'eng',
{
tessedit_char_whitelist: '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ',
logger: (m) => console.log(m),
}
)
调整 OCR 参数
Tesseract.js 提供了一些参数来优化识别过程。psm(页面分割模式)是一个重要的参数。可以尝试不同的 psm 模式来提高准确度:
javascript
Tesseract.recognize(
processedImagePath,
'eng',
{
psm: 6, // 自动分割单个文本行
logger: (m) => console.log(m),
}
)
图像分割
对于复杂的验证码,可以先将图像分割成多个小图,再分别识别每个字符,最后拼接结果。
去噪
你可以通过应用更复杂的去噪算法或调整阈值来去除图像中的噪声。
5. 运行程序
确保你的项目中包含验证码图片(如 captcha.png)并保存代码为 captchaRecognition.js。然后,在命令行中运行:
node captchaRecognition.js
输出将显示识别的验证码,例如:
makefile
识别的验证码是: X9D2A
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异