phpy基于深度学习ddddocr库进行OCR双重数字识别

2024-09-17 12:34:12 浏览数 (4)

简介

ddddocr(Deep Double-Digital Digits OCR)是一个基于深度学习的数字识别库,专门用于识别双重数字(双位数字)的任务。它是一个开源项目,提供了训练和预测的功能,可用于识别图片中的双位数字并输出其具体的数值。

背景

在计算机视觉和图像处理领域,数字识别是一个常见的任务,用于从图像中提取数字并进行识别。通常,传统的数字识别算法在单个数字或多位数字的识别上表现良好,但对于双重数字(两位数字)的准确识别却面临一些挑战。这是因为双位数字在视觉上具有相对较高的相似性和重叠特征,使得传统方法的准确率有所下降。

为了解决双重数字识别的问题,ddddocr项目应运而生。该项目通过使用深度学习的方法,结合卷积神经网络(CNN)和循环神经网络(RNN),对双重数字进行高效准确的识别。通过训练模型并进行预测,ddddocr能够识别图像中的双位数字,并输出其具体数值。

ddddocr的目标是提供一个简单而有效的工具,帮助开发者和研究者在双重数字识别任务上取得更好的结果。通过使用该库,用户可以轻松地集成双重数字识别功能到自己的应用程序或项目中,实现更准确和可靠的数字识别功能。

特点和优势

  • 深度学习:ddddocr利用深度学习技术,特别是卷积神经网络和循环神经网络,对双重数字进行准确的识别。
  • 开源项目:ddddocr是一个开源项目,允许用户免费使用、修改和分发代码。这使得更多的开发者可以参与其中,贡献自己的想法和改进。
  • 高准确率:通过深度学习的方法,ddddocr在双重数字识别任务上能够取得较高的准确率,有效克服了传统方法在此任务上的困难。
  • 灵活性:ddddocr提供了训练和预测的功能,用户可以根据自己的需求自定义模型并进行训练,以适应不同的双重数字识别任务。

安装

代码语言:javascript复制
pip install ddddocr

使用

基础ocr识别能力

主要用于识别单行文字,即文字部分占据图片的主体部分,例如常见的英数验证码等,本项目可以对中文、英文(随机大小写or通过设置结果范围圈定大小写)、数字以及部分特殊字符。

参考案例demo01.php

代码语言:javascript复制
<?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

代码语言:javascript复制
<?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

1 人点赞