简介
ddddocr(Deep Double-Digital Digits OCR)是一个基于深度学习的数字识别库,专门用于识别双重数字(双位数字)的任务。它是一个开源项目,提供了训练和预测的功能,可用于识别图片中的双位数字并输出其具体的数值。
背景
在计算机视觉和图像处理领域,数字识别是一个常见的任务,用于从图像中提取数字并进行识别。通常,传统的数字识别算法在单个数字或多位数字的识别上表现良好,但对于双重数字(两位数字)的准确识别却面临一些挑战。这是因为双位数字在视觉上具有相对较高的相似性和重叠特征,使得传统方法的准确率有所下降。
为了解决双重数字识别的问题,ddddocr项目应运而生。该项目通过使用深度学习的方法,结合卷积神经网络(CNN)和循环神经网络(RNN),对双重数字进行高效准确的识别。通过训练模型并进行预测,ddddocr能够识别图像中的双位数字,并输出其具体数值。
ddddocr的目标是提供一个简单而有效的工具,帮助开发者和研究者在双重数字识别任务上取得更好的结果。通过使用该库,用户可以轻松地集成双重数字识别功能到自己的应用程序或项目中,实现更准确和可靠的数字识别功能。
特点和优势
- 深度学习:ddddocr利用深度学习技术,特别是卷积神经网络和循环神经网络,对双重数字进行准确的识别。
- 开源项目:ddddocr是一个开源项目,允许用户免费使用、修改和分发代码。这使得更多的开发者可以参与其中,贡献自己的想法和改进。
- 高准确率:通过深度学习的方法,ddddocr在双重数字识别任务上能够取得较高的准确率,有效克服了传统方法在此任务上的困难。
- 灵活性:ddddocr提供了训练和预测的功能,用户可以根据自己的需求自定义模型并进行训练,以适应不同的双重数字识别任务。
安装
代码语言:javascript复制pip install ddddocr
使用
基础ocr识别能力
主要用于识别单行文字,即文字部分占据图片的主体部分,例如常见的英数验证码等,本项目可以对中文、英文(随机大小写or通过设置结果范围圈定大小写)、数字以及部分特殊字符。
参考案例demo01.php
<?php
/**
* @desc 基础ocr识别能力
* @help https://github.com/sml2h3/ddddocr
* @author Tinywan(ShaoBo Wan)
*/
declare(strict_types=1);
$ddd = PyCore::import('ddddocr');
// 图片文件路径
$file = '../demo01.png';
$imgBytes = PyCore::bytes(file_get_contents($file));
$ocr = $ddd->DdddOcr(show_ad: false);
$res = $ocr->classification($imgBytes);
echo $res . PHP_EOL;
识别案例图片demo01.png
执行输出结果
代码语言:javascript复制# php demo01.php
2bghz
识别案例图片demo02.png
执行输出结果
代码语言:javascript复制# php demo01.php
8A62N1
本库内置有两套ocr模型,默认情况下不会自动切换,需要在初始化ddddocr的时候通过参数进行切换
代码语言:javascript复制// 切换为第二套ocr模型
$ocr = $ddd->DdddOcr(beta:true);
打印输出结果
代码语言:javascript复制# php demo02.php
欢迎使用ddddocr,本项目专注带动行业内卷,个人博客:wenanzhe.com
训练数据支持来源于:http://146.56.204.113:19199/preview
爬虫框架feapder可快速一键接入,快速开启爬虫之旅:https://github.com/Boris-code/feapder
谷歌reCaptcha验证码 / hCaptcha验证码 / funCaptcha验证码商业级识别接口:https://yescaptcha.com/i/NSwk7i
8A62N1
目标检测能力
主要用于快速检测出图像中可能的目标主体位置,由于被检测出的目标不一定为文字,所以本功能仅提供目标的bbox位置 (在⽬标检测⾥,我们通常使⽤bbox(bounding box,缩写是 bbox)来描述⽬标位置。bbox是⼀个矩形框,可以由矩形左上⻆的 x 和 y 轴坐标与右下⻆的 x 和 y 轴坐标确定)
参考案例demo03.php
<?php
/**
* @desc 目标检测能力
* @help https://github.com/sml2h3/ddddocr
* @author Tinywan(ShaoBo Wan)
*/
declare(strict_types=1);
$operator = PyCore::import("operator");
$builtins = PyCore::import("builtins");
$ddddocr = PyCore::import('ddddocr');
$cv2 = PyCore::import('cv2');
// 可以在初始化时通过传参ocr=False关闭ocr功能,开启目标检测需要传入参数`det=True`
$det = $ddddocr->DdddOcr(det: true, show_ad: false);
$f__object = PyCore::open('./demo04.png', "rb");
$f = $f__object->__enter__();
try {
$image = $f->read();
} finally {
$f__object->__exit__();
}
$bboxes = $det->detection($image);
PyCore::print($bboxes);
$im = $cv2->imread('./demo04.png');
$__iter = PyCore::iter($bboxes);
while ($current = PyCore::next($__iter)) {
$bbox = $current;
[$x1, $y1, $x2, $y2] = $bbox;
$im = $cv2->rectangle($im, [$x1, $y1], [$x2, $y2], color: [0, 0, 255], thickness: 2);
}
$cv2->imwrite("./result.jpg", $im);
被检测的图片demo04.png
执行输出结果
代码语言:javascript复制# php demo03.php
[[55, 344, 90, 378], [26, 345, 58, 379], [0, 345, 29, 377]]
被识别的图片result.jpg
如果使用过程中无需调用ocr功能,可以在初始化时通过传参ocr=False关闭ocr功能,开启目标检测需要传入参数det=True
滑块检测
本项目的滑块检测功能并非AI识别实现,均为opencv内置算法实现。可能对于截图党用户没那么友好~,如果使用过程中无需调用ocr功能或目标检测功能,可以在初始化时通过传参ocr=False关闭ocr功能或det=False来关闭目标检测功能
更多参考:https://github.com/sml2h3/ddddocr?tab=readme-ov-file