GithubHelp home page GithubHelp logo

ddddocr's Introduction

DdddOcr 带带弟弟OCR通用验证码离线本地识别SDK免费开源版

DdddOcr,其由 本作者kerlomz 共同合作完成,通过大批量生成随机数据后进行深度网络训练,本身并非针对任何一家验证码厂商而制作,本库使用效果完全靠玄学,可能可以识别,可能不能识别。

DdddOcr、最简依赖的理念,尽量减少用户的配置和使用成本,希望给每一位测试者带来舒适的体验

项目地址: 点我传送

Contributors Forks Stargazers Issues MIT License


Logo

一个容易使用的通用验证码识别python库
探索本项目的文档 »

· 报告Bug · 提出新特性

目录

赞助合作商

赞助合作商 推荐理由
YesCaptcha YesCaptcha 谷歌reCaptcha验证码 / hCaptcha验证码 / funCaptcha验证码商业级识别接口 点我 直达VIP4
超级鹰 超级鹰 全球领先的智能图片分类及识别商家,安全、准确、高效、稳定、开放,强大的技术及校验团队,支持大并发。7*24h作业进度管理
Malenia Malenia Malenia企业级代理IP网关平台/代理IP分销软件
雨云VPS 注册首月5折 浙江节点低价大带宽,100M每月30元

上手指南

环境支持
系统 CPU GPU 最大支持py版本 备注
Windows 64位 3.12 部分版本windows需要安装vc运行库
Windows 32位 × × -
Linux 64 / ARM64 3.12
Linux 32 × × -
Macos X64 3.12 M1/M2/M3...芯片参考#67
安装步骤

i. 从pypi安装

pip install ddddocr

ii. 从源码安装

git clone https://github.com/sml2h3/ddddocr.git
cd ddddocr
python setup.py

请勿直接在ddddocr项目的根目录内直接import ddddocr,请确保你的开发项目目录名称不为ddddocr,此为基础常识。

文件目录说明

eg:

ddddocr 
├── MANIFEST.in
├── LICENSE
├── README.md
├── /ddddocr/
│  │── __init__.py            主代码库文件
│  │── common.onnx            新ocr模型
│  │── common_det.onnx        目标检测模型
│  │── common_old.onnx        老ocr模型
│  │── logo.png
│  │── README.md
│  │── requirements.txt
├── logo.png
└── setup.py

项目底层支持

本项目基于dddd_trainer 训练所得,训练底层框架位pytorch,ddddocr推理底层抵赖于onnxruntime,故本项目的最大兼容性与python版本支持主要取决于onnxruntime

使用文档

i. 基础ocr识别能力

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

# example.py
import ddddocr

ocr = ddddocr.DdddOcr()

image = open("example.jpg", "rb").read()
result = ocr.classification(image)
print(result)

本库内置有两套ocr模型,默认情况下不会自动切换,需要在初始化ddddocr的时候通过参数进行切换

# example.py
import ddddocr

ocr = ddddocr.DdddOcr(beta=True)  # 切换为第二套ocr模型

image = open("example.jpg", "rb").read()
result = ocr.classification(image)
print(result)

提示 对于部分透明黑色png格式图片得识别支持: classification 方法 使用 png_fix 参数,默认为False

 ocr.classification(image, png_fix=True)

注意

之前发现很多人喜欢在每次ocr识别的时候都重新初始化ddddocr,即每次都执行ocr = ddddocr.DdddOcr(),这是错误的,通常来说只需要初始化一次即可,因为每次初始化和初始化后的第一次识别速度都非常慢

参考例图

包括且不限于以下图片

captcha

captcha

captcha

captcha

captcha

captcha


captcha

captcha

captcha

captcha

captcha

captcha

ii. 目标检测能力

主要用于快速检测出图像中可能的目标主体位置,由于被检测出的目标不一定为文字,所以本功能仅提供目标的bbox位置 (在⽬标检测⾥,我们通常使⽤bbox(bounding box,缩写是 bbox)来描述⽬标位置。bbox是⼀个矩形框,可以由矩形左上⻆的 x 和 y 轴坐标与右下⻆的 x 和 y 轴坐标确定)

如果使用过程中无需调用ocr功能,可以在初始化时通过传参ocr=False关闭ocr功能,开启目标检测需要传入参数det=True

import ddddocr
import cv2

det = ddddocr.DdddOcr(det=True)

with open("test.jpg", 'rb') as f:
    image = f.read()

bboxes = det.detection(image)
print(bboxes)

im = cv2.imread("test.jpg")

for bbox in bboxes:
    x1, y1, x2, y2 = bbox
    im = cv2.rectangle(im, (x1, y1), (x2, y2), color=(0, 0, 255), thickness=2)

cv2.imwrite("result.jpg", im)

参考例图

包括且不限于以下图片

captcha

captcha

captcha

captcha


captcha

captcha

captcha

Ⅲ. 滑块检测

本项目的滑块检测功能并非AI识别实现,均为opencv内置算法实现。可能对于截图党用户没那么友好~,如果使用过程中无需调用ocr功能或目标检测功能,可以在初始化时通过传参ocr=False关闭ocr功能或det=False来关闭目标检测功能

本功能内置两套算法实现,适用于两种不同情况,具体请参考以下说明

a.算法1

算法1原理是通过滑块图像的边缘在背景图中计算找到相对应的坑位,可以分别获取到滑块图和背景图,滑块图为透明背景图

滑块图

captcha

背景图

captcha

    det = ddddocr.DdddOcr(det=False, ocr=False)
    
    with open('target.png', 'rb') as f:
        target_bytes = f.read()
    
    with open('background.png', 'rb') as f:
        background_bytes = f.read()
    
    res = det.slide_match(target_bytes, background_bytes)
    
    print(res)

由于滑块图可能存在透明边框的问题,导致计算结果不一定准确,需要自行估算滑块图透明边框的宽度用于修正得出的bbox

提示:如果滑块无过多背景部分,则可以添加simple_target参数, 通常为jpg或者bmp格式的图片

    slide = ddddocr.DdddOcr(det=False, ocr=False)
    
    with open('target.jpg', 'rb') as f:
        target_bytes = f.read()
    
    with open('background.jpg', 'rb') as f:
        background_bytes = f.read()
    
    res = slide.slide_match(target_bytes, background_bytes, simple_target=True)
    
    print(res)

a.算法2

算法2是通过比较两张图的不同之处进行判断滑块目标坑位的位置

参考图a,带有目标坑位阴影的全图

captcha

参考图b,全图

captcha

    slide = ddddocr.DdddOcr(det=False, ocr=False)

    with open('bg.jpg', 'rb') as f:
        target_bytes = f.read()
    
    with open('fullpage.jpg', 'rb') as f:
        background_bytes = f.read()
    
    img = cv2.imread("bg.jpg")
    
    res = slide.slide_comparison(target_bytes, background_bytes)

    print(res)
Ⅳ. OCR概率输出

为了提供更灵活的ocr结果控制与范围限定,项目支持对ocr结果进行范围限定。

可以通过在调用classification方法的时候传参probability=True,此时classification方法将返回全字符表的概率 当然也可以通过set_ranges方法设置输出字符范围来限定返回的结果。

Ⅰ. set_ranges 方法限定返回字符返回

本方法接受1个参数,如果输入为int类型为内置的字符集限制,string类型则为自定义的字符集

如果为int类型,请参考下表

参数值 意义
0 纯整数0-9
1 纯小写英文a-z
2 纯大写英文A-Z
3 小写英文a-z + 大写英文A-Z
4 小写英文a-z + 整数0-9
5 大写英文A-Z + 整数0-9
6 小写英文a-z + 大写英文A-Z + 整数0-9
7 默认字符库 - 小写英文a-z - 大写英文A-Z - 整数0-9

如果为string类型请传入一段不包含空格的文本,其中的每个字符均为一个待选词 如:"0123456789+-x/=""

import ddddocr

ocr = ddddocr.DdddOcr()

image = open("test.jpg", "rb").read()
ocr.set_ranges("0123456789+-x/=")
result = ocr.classification(image, probability=True)
s = ""
for i in result['probability']:
    s += result['charsets'][i.index(max(i))]

print(s)
Ⅴ. 自定义OCR训练模型导入

本项目支持导入来自于 dddd_trainer 进行自定义训练后的模型,参考导入代码为

import ddddocr

ocr = ddddocr.DdddOcr(det=False, ocr=False, import_onnx_path="myproject_0.984375_139_13000_2022-02-26-15-34-13.onnx", charsets_path="charsets.json")

with open('test.jpg', 'rb') as f:
    image_bytes = f.read()

res = ocr.classification(image_bytes)
print(res)

版本控制

该项目使用Git进行版本管理。您可以在repository参看当前可用版本。

相关推荐文章or项目

带带弟弟OCR,纯VBA本地获取网络验证码整体解决方案

ddddocr rust 版本

captcha-killer的修改版

通过ddddocr训练字母数字验证码模型并识别部署调用

...

欢迎更多优秀案例或教程等进行投稿,可直接新建issue标题以【投稿】开头,附上公开教程站点链接,我会选择根据文章内容选择相对不重复或者有重点内容等进行readme展示,感谢各位朋友~

作者

[email protected]

wechat

好友数过多不一定通过,有问题可以在issue进行交流

版权说明

该项目签署了MIT 授权许可,详情请参阅 LICENSE

捐赠 (如果项目有帮助到您,可以选择捐赠一些费用用于ddddocr的后续版本维护,本项目长期维护)

captcha

captcha

Star 历史

Star History Chart

ddddocr's People

Contributors

ashawkey avatar kvii avatar sml2h3 avatar weltolk avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ddddocr's Issues

Error

pip3 install ddddocr Collecting ddddocr Using cached ddddocr-1.0.6-py3-none-any.whl (6.9 MB) Collecting Pillow Using cached Pillow-9.0.1-cp310-cp310-macosx_10_10_universal2.whl (3.3 MB) ERROR: Could not find a version that satisfies the requirement onnxruntime (from ddddocr) (from versions: none) ERROR: No matching distribution found for onnxruntime

Python 3.10.2

不是M1
macOS BigSur 11.6.3 (20G415)
MacBook Pro (Retina, 13-inch, Late 2013) Intel
也不支持?

在容器中无法运行

Traceback (most recent call last):
File "hello.py", line 8, in
import cv2
File "/usr/local/lib/python3.8/site-packages/cv2/init.py", line 8, in
from .cv2 import *

ImportError: libGL.so.1: cannot open shared object file: No such file or directory
下载过后错误又变为
libGL.so.0

如何部署GPU版本

@sml2h3 您好,请问您部署过GPU版本吗?我将模型设置如下
self.ocr = ddddocr.DdddOcr(use_gpu=True, old=True)
在推理时会有如下报错
TypeError: load_model(): incompatible function arguments. The following argument types are supported:
1. (self: onnxruntime.capi.onnxruntime_pybind11_state.InferenceSession, arg0: List[str]) -> None
Invoked with: <onnxruntime.capi.onnxruntime_pybind11_state.InferenceSession object at 0x7f3754e7dce0>, [('CUDAExecutionProvider', {'device_id': 0, 'arena_extend_strategy': 'kNextPowerOfTwo', 'cuda_mem_limit': 1073741824, 'cudnn_conv_algo_search': 'EXHAUSTIVE', 'do_copy_in_default_stream': True})]
您有什么解决办法吗? 感谢!

Win10 20H2 + Python3.9.5无法安装

pip install ddddocr
Collecting ddddocr
Using cached ddddocr-1.0.6-py3-none-any.whl (6.9 MB)
Using cached ddddocr-1.0.5-py3-none-any.whl (3.3 MB)
Collecting torchvision
Using cached torchvision-0.2.2.post3-py2.py3-none-any.whl (64 kB)
Collecting ddddocr
Using cached ddddocr-1.0.4.tar.gz (3.3 MB)
Requirement already satisfied: numpy in e:\program files\python\python39-32\lib\site-packages (from ddddocr) (1.20.3)
ERROR: Cannot install ddddocr==1.0.4, ddddocr==1.0.5 and ddddocr==1.0.6 because these package versions have conflicting dependencies.

The conflict is caused by:
ddddocr 1.0.6 depends on onnxruntime
ddddocr 1.0.5 depends on onnxruntime
ddddocr 1.0.4 depends on torchvision==0.9.1

To fix this you could try to:

  1. loosen the range of package versions you've specified
  2. remove package versions to allow pip attempt to solve the dependency conflict

ERROR: ResolutionImpossible: for help visit https://pip.pypa.io/en/latest/user_guide/#fixing-conflicting-dependencies

使用时报错

PIL.UnidentifiedImageError: cannot identify image file <_io.BytesIO object at 0x00000219E6A236D0>

opencv-python的依赖可否换为opencv-python-headless

此处是opencv-python-headless的介绍

These packages are smaller than the two other packages above because they do not contain any GUI functionality (not compiled with Qt / other GUI components). This means that the packages avoid a heavy dependency chain to X11 libraries and you will have for example smaller Docker images as a result. You should always use these packages if you do not use cv2.imshow et al. or you are using some other package (such as PyQt) than OpenCV to create your GUI.
Option 3 - Headless main modules package: pip install opencv-python-headless
Option 4 - Headless full package (contains both main modules and contrib/extra modules): pip install opencv-contrib-python-headless (check contrib/extra modules listing from OpenCV documentation)

M1 Mac安装报错

如题。M1 Mac安装报错。请问是系统问题吗?

ERROR: Cannot install ddddocr==1.0.6 and ddddocr==1.1.0 because these package versions have conflicting dependencies.

The conflict is caused by:
    ddddocr 1.1.0 depends on onnxruntime
    ddddocr 1.0.6 depends on onnxruntime

To fix this you could try to:
1. loosen the range of package versions you've specified
2. remove package versions to allow pip attempt to solve the dependency conflict

ERROR: ResolutionImpossible: for help visit https://pip.pypa.io/en/latest/user_guide/#fixing-conflicting-dependencies
monkey@benboerba ~ % ~/Documents/python_env/wuyou/bin/pip3 install onnxruntime
ERROR: Could not find a version that satisfies the requirement onnxruntime (from versions: none)
ERROR: No matching distribution found for onnxruntime

大佬,为什么我运行不了,总是报错

Traceback (most recent call last):
File "D:/python/201.py", line 3, in
ocr = ddddocr.DdddOcr()
File "D:\python\lib\site-packages\ddddocr_init_.py", line 29, in init
self.__ort_session = onnxruntime.InferenceSession(self.__graph_path, providers=self.__providers)
File "D:\python\lib\site-packages\onnxruntime\capi\session.py", line 195, in init
self._create_inference_session(providers, provider_options)
File "D:\python\lib\site-packages\onnxruntime\capi\session.py", line 200, in _create_inference_session
sess = C.InferenceSession(session_options, self._model_path, True, self._read_config_from_model)
onnxruntime.capi.onnxruntime_pybind11_state.Fail: [ONNXRuntimeError] : 1 : FAIL : Load model from D:\python\lib\site-packages\ddddocr\common.onnx failed:Fatal error: DynamicQuantizeLSTM is not a registered function/op

识别效果不好的图收集

在这里可以把你觉得识别效果不好的图片发在这里。
希望贴3张以上原图,可以包含原图链接。

无法安装

(base) F:>pip install ddddocr==1.0.6
ERROR: Could not find a version that satisfies the requirement ddddocr==1.0.6 (from versions: none)
ERROR: No matching distribution found for ddddocr==1.0.6

onnxruntime 下载不了

显示 ERROR: Could not open requirements file: [Errno 2] No such file or directory: 'onnxruntime'

还是有onnxruntime exception

2021-11-17 01:56:58.2197926 [W:onnxruntime:, execution_frame.cc:770 onnxruntime::ExecutionFrame::VerifyOutputSizes] Expected shape from model of {1,19} does not match actual shape of {1,17} for output output

谢谢大佬的识别包, 发现一个问题..
下载的最新版,也试过update, 运行的时候还有这个错误提示.

python3.9报错无法使用

提示AttributeError: partially initialized module 'ddddocr' has no attribute 'DdddOcr' (most likely due to a circular import)

请教一下关于提高正确识别率的问题

在直接识别的情况下会出现挺高的错误(见下面图片),想请教下在已知验证码图片有以下规律的情况下想提高识别率,大佬能否提供一点意见。。

1、全都是单一色调
2、全部都是五个字母组成
3、干扰因素只有一条从左到右的线条

image

容器中报错(即使更换为opencv-python-headless也无法解决)

若使用opencv-python则“libGL.so.1: cannot open shared object file: No such file or directory”
opencv-python-headless则
”Traceback (most recent call last):
File "main.py", line 1, in
import ddddocr
File "/home/runner/ocr/venv/lib/python3.8/site-packages/ddddocr/init.py", line 12, in
import cv2
File "/home/runner/ocr/venv/lib/python3.8/site-packages/cv2/init.py", line 190, in
bootstrap()
File "/home/runner/ocr/venv/lib/python3.8/site-packages/cv2/init.py", line 120, in bootstrap
load_first_config(['config.py'], True)
File "/home/runner/ocr/venv/lib/python3.8/site-packages/cv2/init.py", line 118, in load_first_config
raise ImportError('OpenCV loader: missing configuration file: {}. Check OpenCV installation.'.format(fnames))
ImportError: OpenCV loader: missing configuration file: ['config.py']. Check OpenCV installation.“

解析每次都弹警告信息

2021-07-30 15:45:48.3226553 [W:onnxruntime:, execution_frame.cc:721 onnxruntime::ExecutionFrame::VerifyOutputSizes] Expected shape from model of {1,19} does not match actual shape of {1,20} for output output
screenImg03

模型训练😁

首先感谢带带弟弟的开源精神,我是在校大学生,对这方面比较感兴趣,请问如何训练模型,是否开源呢?

pyinstaller 打包成功后运行报错

2022-02-08 16:47:20,950 - 日志 - ERROR - [ONNXRuntimeError] : 3 : NO_SUCHFILE : Load model from C:\Users\ADMINI1\AppData\Local\Temp_MEI13522\ddddocr\common_old.onnx failed:Load model C:\Users\ADMINI1\AppData\Local\Temp_MEI13522\ddddocr\common_old.onnx failed. File doesn't exist
2022-02-08 16:47:21,474 - 日志 - ERROR - 方国民失败[ONNXRuntimeError] : 3 : NO_SUCHFILE : Load model from C:\Users\ADMINI1\AppData\Local\Temp_MEI13522\ddddocr\common_old.onnx failed:Load model C:\Users\ADMINI1\AppData\Local\Temp_MEI13522\ddddocr\common_old.onnx failed. File doesn't exist
2022-02-08 16:47:21,853 - 日志 - ERROR - 田东礼失败[ONNXRuntimeError] : 3 : NO_SUCHFILE : Load model from C:\Users\ADMINI1\AppData\Local\Temp_MEI13522\ddddocr\common_old.onnx failed:Load model C:\Users\ADMINI1\AppData\Local\Temp_MEI13522\ddddocr\common_old.onnx failed. File doesn't exist

安装报错?

使用命令 pip install ddddocr 安装时报错:

ERROR: Could not find a version that satisfies the requirement onnxruntime (from ddddocr) (from versions: none)
ERROR: No matching distribution found for onnxruntime

怎么回事?

Python版本:3.10.0

有ddddocr的训练集吗

想自己尝试一下训练ddddocr使用的模型,但是自己的数据集一直有问题。不够全面,而且准确性一直是0

【报错】ImportError: DLL load failed: 找不到指定的模块。

import ddddocr
环境:Python 3.7.3,win10

Traceback (most recent call last):
File "", line 1, in
File "D:\python3\lib\site-packages\ddddocr_init_.py", line 9, in
import onnxruntime
File "D:\python3\lib\site-packages\onnxruntime_init_.py", line 35, in
raise import_capi_exception
File "D:\python3\lib\site-packages\onnxruntime_init_.py", line 23, in
from onnxruntime.capi._pybind_state import get_all_providers, get_available_providers, get_device, set_seed,
File "D:\python3\lib\site-packages\onnxruntime\capi_pybind_state.py", line 32, in
from .onnxruntime_pybind11_state import * # noqa
ImportError: DLL load failed: 找不到指定的模块。

不能用呀

AttributeError: partially initialized module 'ddddocr' has no attribute 'DdddOcr' (most likely due to a circular import)

MacOS无法安装

系统版本:11.4 (20F71)
设备版本:MacBook Air (M1, 2020)
pip安装提示没有版本可用
ERROR: Cannot install ddddocr==1.0.4, ddddocr==1.0.5 and ddddocr==1.0.6 because these package versions have conflicting dependencies.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.