当前位置:网站首页 > 技术博客 > 正文

图形验证码是啥意思



这篇文章介绍了使用深度学习技术解决图形验证码识别问题的方法。文章首先解释了验证码的作用和常见形式,然后讨论了传统 OCR 技术的局限性。接着,文章重点介绍了基于深度学习的 OCR 解决方案,特别是 PaddleOCR 项目。作者通过一个实际操作示例,展示了如何在 JavaScript 环境下使用 PaddleOCR 模型进行验证码识别。示例包括环境设置、库安装、代码编写和运行过程。文章还强调了图像预处理的重要性,展示了如何通过灰度化和二值化处理来提高识别准确度。

在程序自动化,或者说爬虫这一工作任务中,

验证码一直是攻防方重要的战场之一。

验证码 / CAPTCHA,是一种区分用户是计算机还是人的公共全自动程序。

可以有效防止攻击者对某一场景使用暴力方式进行不断的攻击尝试,

例如登录,注册,评论发帖及业务安全防刷等场景。

验证码的形式包括图形验证码、图像识别验证、短信验证码、

交互行为式验证、语音验证码和视频验证等。

其中,图形验证码作为最早出现的验证方式,

在图片上随机产生数字、英文字母、汉字或者问题,

并通过添加干扰线,噪点以及增加字符的粘连程度和旋转角度来增加机器识别的难度。

在早期,通过 TesseractOCR、PyTesser 等 Python 第三方库;

或是 Tesseract.js、Sharp 等 Node.js 第三方库,

经过二值化、文字分割等图像预处理操作识别验证码。

不过,这种预处理操作也有其上限,

加上 Tesseract 是基于传统机器学习方法实现的,

并不能开箱即用地解决大部分情况,

需要自行训练对应的 LSTM 模型。

u_1_67195be50139f_2120x1840.jpeg

这一情况直到,

基于深度学习技术的 OCR 开源项目出现,

例如例如 EasyOCR 和 PaddleOCR 等。

特别是 PaddleOCR,

提供了完整的端到端解决方案,包括文本检测、方向分类、识别等模块。

对复杂背景和多样化字体有良好表现。

接下来,我将通过 Javascript,在 Bun 运行时下使用 PaddleOCR 模型,

10 分钟上手解决图形验证码识别。

在安装完 Bun 后,新建文件夹 ospider,

进入文件夹,执行 bun init 进行初始化。

安装需要的库:bun add @gutenye/ocr-node,

并准备一张验证码图片到文件夹中,

完成后项目结构应如下图。

u_1_67195bfe1d3c5_1118x1002.jpeg

这是一个基于 PaddleOCR 和 ONNX Runtime 的 Javascript 库。

该库同时带有 Sharp,因此无需额外添加。

但该库 Recognition 类下的 calculateBox 方法有些问题,

需做修改:在 Recognition 的 run 方法中直接返回 allLines

具体路径:node_modules/@gutenye/ocr-common/src/models/Recognition.ts

u_1_67195c10d8c3c_1632x1540.jpeg

新建一个 ocr-test.ts 文件(代码如下图),

u_1_67195c4a3ffdd_2456x2246.jpeg

在该代码中,我们先尝试不做图片预处理,而是直接使用 OCR 识别。

通过 bun run 运行,结果直接成功识别。

那么我们多换几张验证码图。

遂发现当噪点增多时,识别准确度将大幅下降。

u_1_67195c7f5d64b_2456x2246.jpeg

于是,我们加入图片预处理,将图片转为灰度图后进行二值化。

尝试重新运行,成功识别。

u_1_67195c88914c7_2504x2284.jpeg

至此,我们已经成功使用 PaddleOCR 模型在 JavaScript 环境下实现了图形验证码的识别。

希望对你有帮助。

这篇文章介绍了使用深度学习技术解决图形验证码识别问题的方法。文章首先解释了验证码的作用和常见形式,然后讨论了传统 OCR 技术的局限性。接着,文章重点介绍了基于深度学习的 OCR 解决方案,特别是 PaddleOCR 项目。作者通过一个实际操作示例,展示了如何在 JavaScript 环境下使用 PaddleOCR 模型进行验证码识别。示例包括环境设置、库安装、代码编写和运行过程。文章还强调了图像预处理的重要性,展示了如何通过灰度化和二值化处理来提高识别准确度。

在程序自动化,或者说爬虫这一工作任务中,

验证码一直是攻防方重要的战场之一。

验证码 / CAPTCHA,是一种区分用户是计算机还是人的公共全自动程序。

可以有效防止攻击者对某一场景使用暴力方式进行不断的攻击尝试,

例如登录,注册,评论发帖及业务安全防刷等场景。

验证码的形式包括图形验证码、图像识别验证、短信验证码、

交互行为式验证、语音验证码和视频验证等。

其中,图形验证码作为最早出现的验证方式,

在图片上随机产生数字、英文字母、汉字或者问题,

并通过添加干扰线,噪点以及增加字符的粘连程度和旋转角度来增加机器识别的难度。

在早期,通过 TesseractOCR、PyTesser 等 Python 第三方库;

或是 Tesseract.js、Sharp 等 Node.js 第三方库,

经过二值化、文字分割等图像预处理操作识别验证码。

不过,这种预处理操作也有其上限,

加上 Tesseract 是基于传统机器学习方法实现的,

并不能开箱即用地解决大部分情况,

需要自行训练对应的 LSTM 模型。

u_1_67195be50139f_2120x1840.jpeg

这一情况直到,

基于深度学习技术的 OCR 开源项目出现,

例如例如 EasyOCR 和 PaddleOCR 等。

特别是 PaddleOCR,

提供了完整的端到端解决方案,包括文本检测、方向分类、识别等模块。

对复杂背景和多样化字体有良好表现。

接下来,我将通过 Javascript,在 Bun 运行时下使用 PaddleOCR 模型,

10 分钟上手解决图形验证码识别。

在安装完 Bun 后,新建文件夹 ospider,

进入文件夹,执行 bun init 进行初始化。

安装需要的库:bun add @gutenye/ocr-node,

并准备一张验证码图片到文件夹中,

完成后项目结构应如下图。

u_1_67195bfe1d3c5_1118x1002.jpeg

这是一个基于 PaddleOCR 和 ONNX Runtime 的 Javascript 库。

该库同时带有 Sharp,因此无需额外添加。

但该库 Recognition 类下的 calculateBox 方法有些问题,

需做修改:在 Recognition 的 run 方法中直接返回 allLines

具体路径:node_modules/@gutenye/ocr-common/src/models/Recognition.ts

u_1_67195c10d8c3c_1632x1540.jpeg

新建一个 ocr-test.ts 文件(代码如下图),

u_1_67195c4a3ffdd_2456x2246.jpeg

在该代码中,我们先尝试不做图片预处理,而是直接使用 OCR 识别。

通过 bun run 运行,结果直接成功识别。

那么我们多换几张验证码图。

遂发现当噪点增多时,识别准确度将大幅下降。

u_1_67195c7f5d64b_2456x2246.jpeg

于是,我们加入图片预处理,将图片转为灰度图后进行二值化。

尝试重新运行,成功识别。

u_1_67195c88914c7_2504x2284.jpeg

至此,我们已经成功使用 PaddleOCR 模型在 JavaScript 环境下实现了图形验证码的识别。

希望对你有帮助。

版权声明


相关文章:

  • 增删改查mysql语句2025-01-10 20:29:59
  • 代码对比工具compare2025-01-10 20:29:59
  • c语言fwrite的用法2025-01-10 20:29:59
  • js页面弹窗2025-01-10 20:29:59
  • dds协议编程2025-01-10 20:29:59
  • 王码五笔输入法98版字根表2025-01-10 20:29:59
  • ssr全局代理设置在哪里2025-01-10 20:29:59
  • java并发编程实践和并发编程实战2025-01-10 20:29:59
  • 哈夫曼树的原理2025-01-10 20:29:59
  • java不同版本的区别2025-01-10 20:29:59