这篇文章介绍了使用深度学习技术解决图形验证码识别问题的方法。文章首先解释了验证码的作用和常见形式,然后讨论了传统 OCR 技术的局限性。接着,文章重点介绍了基于深度学习的 OCR 解决方案,特别是 PaddleOCR 项目。作者通过一个实际操作示例,展示了如何在 JavaScript 环境下使用 PaddleOCR 模型进行验证码识别。示例包括环境设置、库安装、代码编写和运行过程。文章还强调了图像预处理的重要性,展示了如何通过灰度化和二值化处理来提高识别准确度。
在程序自动化,或者说爬虫这一工作任务中,
验证码一直是攻防方重要的战场之一。
验证码 / CAPTCHA,是一种区分用户是计算机还是人的公共全自动程序。
可以有效防止攻击者对某一场景使用暴力方式进行不断的攻击尝试,
例如登录,注册,评论发帖及业务安全防刷等场景。
验证码的形式包括图形验证码、图像识别验证、短信验证码、
交互行为式验证、语音验证码和视频验证等。
其中,图形验证码作为最早出现的验证方式,
在图片上随机产生数字、英文字母、汉字或者问题,
并通过添加干扰线,噪点以及增加字符的粘连程度和旋转角度来增加机器识别的难度。
在早期,通过 TesseractOCR、PyTesser 等 Python 第三方库;
或是 Tesseract.js、Sharp 等 Node.js 第三方库,
经过二值化、文字分割等图像预处理操作识别验证码。
不过,这种预处理操作也有其上限,
加上 Tesseract 是基于传统机器学习方法实现的,
并不能开箱即用地解决大部分情况,
需要自行训练对应的 LSTM 模型。
这一情况直到,
基于深度学习技术的 OCR 开源项目出现,
例如例如 EasyOCR 和 PaddleOCR 等。
特别是 PaddleOCR,
提供了完整的端到端解决方案,包括文本检测、方向分类、识别等模块。
对复杂背景和多样化字体有良好表现。
接下来,我将通过 Javascript,在 Bun 运行时下使用 PaddleOCR 模型,
10 分钟上手解决图形验证码识别。
在安装完 Bun 后,新建文件夹 ospider,
进入文件夹,执行 bun init 进行初始化。
安装需要的库:bun add @gutenye/ocr-node,
并准备一张验证码图片到文件夹中,
完成后项目结构应如下图。
这是一个基于 PaddleOCR 和 ONNX Runtime 的 Javascript 库。
该库同时带有 Sharp,因此无需额外添加。
但该库 Recognition 类下的 calculateBox 方法有些问题,
需做修改:在 Recognition 的 run 方法中直接返回 allLines
具体路径:node_modules/@gutenye/ocr-common/src/models/Recognition.ts
新建一个 ocr-test.ts 文件(代码如下图),
在该代码中,我们先尝试不做图片预处理,而是直接使用 OCR 识别。
通过 bun run 运行,结果直接成功识别。
那么我们多换几张验证码图。
遂发现当噪点增多时,识别准确度将大幅下降。
于是,我们加入图片预处理,将图片转为灰度图后进行二值化。
尝试重新运行,成功识别。
至此,我们已经成功使用 PaddleOCR 模型在 JavaScript 环境下实现了图形验证码的识别。
希望对你有帮助。
这篇文章介绍了使用深度学习技术解决图形验证码识别问题的方法。文章首先解释了验证码的作用和常见形式,然后讨论了传统 OCR 技术的局限性。接着,文章重点介绍了基于深度学习的 OCR 解决方案,特别是 PaddleOCR 项目。作者通过一个实际操作示例,展示了如何在 JavaScript 环境下使用 PaddleOCR 模型进行验证码识别。示例包括环境设置、库安装、代码编写和运行过程。文章还强调了图像预处理的重要性,展示了如何通过灰度化和二值化处理来提高识别准确度。
在程序自动化,或者说爬虫这一工作任务中,
验证码一直是攻防方重要的战场之一。
验证码 / CAPTCHA,是一种区分用户是计算机还是人的公共全自动程序。
可以有效防止攻击者对某一场景使用暴力方式进行不断的攻击尝试,
例如登录,注册,评论发帖及业务安全防刷等场景。
验证码的形式包括图形验证码、图像识别验证、短信验证码、
交互行为式验证、语音验证码和视频验证等。
其中,图形验证码作为最早出现的验证方式,
在图片上随机产生数字、英文字母、汉字或者问题,
并通过添加干扰线,噪点以及增加字符的粘连程度和旋转角度来增加机器识别的难度。
在早期,通过 TesseractOCR、PyTesser 等 Python 第三方库;
或是 Tesseract.js、Sharp 等 Node.js 第三方库,
经过二值化、文字分割等图像预处理操作识别验证码。
不过,这种预处理操作也有其上限,
加上 Tesseract 是基于传统机器学习方法实现的,
并不能开箱即用地解决大部分情况,
需要自行训练对应的 LSTM 模型。
这一情况直到,
基于深度学习技术的 OCR 开源项目出现,
例如例如 EasyOCR 和 PaddleOCR 等。
特别是 PaddleOCR,
提供了完整的端到端解决方案,包括文本检测、方向分类、识别等模块。
对复杂背景和多样化字体有良好表现。
接下来,我将通过 Javascript,在 Bun 运行时下使用 PaddleOCR 模型,
10 分钟上手解决图形验证码识别。
在安装完 Bun 后,新建文件夹 ospider,
进入文件夹,执行 bun init 进行初始化。
安装需要的库:bun add @gutenye/ocr-node,
并准备一张验证码图片到文件夹中,
完成后项目结构应如下图。
这是一个基于 PaddleOCR 和 ONNX Runtime 的 Javascript 库。
该库同时带有 Sharp,因此无需额外添加。
但该库 Recognition 类下的 calculateBox 方法有些问题,
需做修改:在 Recognition 的 run 方法中直接返回 allLines
具体路径:node_modules/@gutenye/ocr-common/src/models/Recognition.ts
新建一个 ocr-test.ts 文件(代码如下图),
在该代码中,我们先尝试不做图片预处理,而是直接使用 OCR 识别。
通过 bun run 运行,结果直接成功识别。
那么我们多换几张验证码图。
遂发现当噪点增多时,识别准确度将大幅下降。
于是,我们加入图片预处理,将图片转为灰度图后进行二值化。
尝试重新运行,成功识别。
至此,我们已经成功使用 PaddleOCR 模型在 JavaScript 环境下实现了图形验证码的识别。
希望对你有帮助。
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.mushiming.com/mjsbk/2409.html