toddleocr


Nametoddleocr JSON
Version 1.2.8 PyPI version JSON
download
home_pagehttps://github.com/arry-lee/ToddleOCR
SummaryAwesome OCR toolkits based on Torch (8.6M ultra-lightweight pre-trained model, support training and deployment among server, mobile, embedded and IoT devices
upload_time2023-11-17 09:07:36
maintainer
docs_urlNone
author
requires_python>=3.8
licenseApache License 2.0
keywords ocr textdetection textrecognition toddleocr crnn east star-net rosetta ocrlite db chineseocr chinesetextdetection chinesetextrecognition
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            <p align="center">
 <img src="docs/toddleocr.png" align="middle" width = "600"/>
<p align="center">
<p align="left">
    <a href="./LICENSE"><img src="https://img.shields.io/badge/license-Apache%202-dfd.svg"></a>
    <a href=""><img src="https://img.shields.io/badge/python-3.7+-aff.svg"></a>
    <a href=""><img src="https://img.shields.io/badge/os-linux%2C%20win%2C%20mac-pink.svg"></a>
    <a href="https://github.com/arry-lee/ToddleOCR/stargazers"><img src="https://img.shields.io/github/stars/arry-lee/ToddleOCR?color=ccf"></a>
</p>

# ToddleOCR 拓牍

ToddleOCR是一个基于Torch实现的OCR(光学字符识别)项目,它fork自PaddleOCR,并经过作者进行了改进和优化。该项目旨在通过使用Torch框架来学习和理解OCR技术的实现原理。

## 项目名称的含义

ToddleOCR这个名称有三层意思:

1. 结合了Torch和Paddle两个框架的特点,因此命名为Toddle。
2. "Toddle"在英文中意味着蹒跚学步,也代表这个项目是作者在学习过程中的探索和尝试。
3. "Toddle"在中文中音译为"拓牍",意指从竹片上拓印文字,引申为从图片中提取文字。

## 项目状态

目前,ToddleOCR处于探索阶段,仍在不断地进行改进和优化。欢迎开发者和研究者参与其中,一起探索OCR技术的前沿。~~项目文档目前还是PaddleOCR的文档~~。

## 功能特点

在ToddleOCR中,你可以期望以下功能特点:

- 文字检测:能够在图像中准确地检测出文字区域的位置和边界框。
- 文字识别:能够将检测到的文字区域进行识别,输出对应的文字内容。
- 表格识别:能够将检测到的单元格重建成表格
- 关键信息提取: 包括语言实体识别(SER),关系抽取(RE)
- 多语言支持:支持多种语言的文字检测和识别,包括中文、英文等常见语言。
~~- 高性能:经过优化的算法和模型结构,能够在保证准确性的同时提高处理速度。~~

## 快速开始

### 环境要求

在开始之前,请确保你已经安装了以下环境:

* Python 3.x
* Torch 2.x

其他依赖库(具体依赖请参考项目文档)

### 安装

1. 克隆项目代码到本地:

```shell
git clone https://github.com/arry-lee/ToddleOCR.git
```
或者

```shell
pip install toddleocr
```

2. 进入项目目录:

```shell
cd ToddleOCR
```

3. 安装依赖:

```shell
pip install -r requirements.txt
```

4. 下载模型
目前提供的模型可以在[这里](https://github.com/arry-lee/ToddleOCR/releases/weights)手动下载,代码运行时也会自动下载:

- [x] [zh_ocr_cls_v1.rar](https://github.com/arry-lee/ToddleOCR/releases/download/weights/zh_ocr_cls_v1.rar) 文本角度分类模型
- [x] [zh_ocr_det_v3.rar](https://github.com/arry-lee/ToddleOCR/releases/download/weights/zh_ocr_det_v3.rar) 中英文检测模型
- [x] [zh_ocr_rec_v3.rar](https://github.com/arry-lee/ToddleOCR/releases/download/weights/zh_ocr_rec_v3.rar) 中英文识别模型
- [x] [zh_str_tab_m2.rar](https://github.com/arry-lee/ToddleOCR/releases/download/weights/zh_str_tab_m2.rar) 表格识别重建模型

### 使用示例

1. 准备输入图像文件,例如input.jpg。

2. 运行OCR示例脚本:

```shell
python toddleocr input.jpg
```

这将输出检测到的文字区域和对应的识别结果。

## 如何配置新的算法

与PaddleOCR相比,本项目摒弃yaml的配置方法,采用纯python语言,类yaml的配置方法,但更灵活,而且可以使用复杂的引用计算,并且所见即所得,具体的请参考
ptocr/config.py 中的ConfigModel类,继承并重写你的参数。

关于配置的语法,只有两点需要特别注意的,为了方便配置和简化配置量 ,项目内部定义了一个辅助类,提供了一些语法糖,如下:

1. 使用 _ 类,这是一个多功能的辅助类,有以下几个语法功能:
    1. 类似偏函数的偏类:`_(DBHead,arg1=0,arg2=1) ==> partial(DBHead, **kwargs)`
    2. 字符串动态导入类:`_("DBHead",arg1=0,arg2=1) ==> partial(DBHead, **kwargs)`
    3. 没有位置参数等效于字典:`_(arg1=0,arg2=1) ==> dict(arg1=0,arg2=1)`
    4. 预热学习率规划器:
    5. 等效并列列表,用于 Transformers: `_[train:eval:infer,train:eval:...]`,
       切片语法的三个位置分别表示训练,测试,推理模式下的预处理器,
       特别的:...省略号表示同前一个,
       空的或None表示该位置不需要这个预处理器,例如[DecodeLabel:...:]表示训练和测试需要DecodeLabel,推理不需要,这种表示方法是为了
       **简化配置,共享处理器减少实例的创建**

    ```python
    class _:
    
        def __new__(cls, class_=None, /, **kwargs):
            if class_ is None:
                return kwargs
    
            if issubclass(class_, LRScheduler) and "warmup_epoch" in kwargs:
                warmup_epochs = kwargs.pop("warmup_epoch")
                class_ = warmup_scheduler(class_, warmup_epochs)
                return partial(class_, **kwargs)
    
            if isinstance(class_, type | types.FunctionType):
                return partial(class_, **kwargs)
    
            if isinstance(class_, str):
                from tools.modelhub import Hub
                hub = Hub(os.path.dirname(__file__))  # 这个操作很耗时,尽量不使用字符串形式的导入
    
                class_ = hub(class_)
                return partial(class_, **kwargs)
    
        def __class_getitem__(cls, item):
            out = [[], [], []]
            for i in item:
                if isinstance(i, slice):
                    ls = [i.start, i.stop, i.step]
                    last = None
                    for one in ls:
                        if one is not None:
                            last = one
                            break
                    for i, one in enumerate(ls):
                        if one is ...:
                            out[i].append(last)
                        elif one:
                            out[i].append(one)
                else:
                    for one in out:
                        one.append(i)
            return out
    ```

2. 使用注解语法区分训练参数和测试参数
   ConfigModel 有两个内部类 Data 和 Loader 子类可以采用注解语法区分训练时配置和测试时配置,例如:
    ```python
    class Loader:
        shuffle:False = True
        drop_last:True = False
        batch_size:1 = 8
        num_workers: 0 = 4
   ```
   **等号后面表示训练时参数,冒号后面表示测试时参数**,没有冒号则相同
   这种表示方法同样是为了简化配置

更多的可以参考已经实现的算法,例如`models/det/det_db_rvd.py`

## 贡献

如果你对ToddleOCR感兴趣,并且希望为项目做出贡献,欢迎提交问题、提出建议或者发送Pull Request。我们乐于接受来自社区的贡献,共同推动项目的发展。

## 帮助与支持

如果你在使用过程中遇到任何问题,或者需要进一步的帮助与支持,请参考项目文档或者联系我们的团队。

## 相关链接

- 项目主页:https://github.com/arry-lee/ToddleOCR
- PaddleOCR:https://github.com/paddlepaddle/PaddleOCR
- 文档:https://github.com/arry-lee/ToddleOCR/docs

## 许可证

本项目的发布受<a href="https://github.com/arry-lee/ToddleOCR/blob/torchocr/LICENSE">Apache 2.0 license</a>许可认证。

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/arry-lee/ToddleOCR",
    "name": "toddleocr",
    "maintainer": "",
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": "",
    "keywords": "ocr textdetection textrecognition toddleocr crnn east star-net rosetta ocrlite db chineseocr chinesetextdetection chinesetextrecognition",
    "author": "",
    "author_email": "",
    "download_url": "https://files.pythonhosted.org/packages/d4/26/f0aaa8f1e8bf6c9b6a43875dd630dedf73e2c54730bb5ed6b56f5711a176/toddleocr-1.2.8.tar.gz",
    "platform": null,
    "description": "<p align=\"center\">\n <img src=\"docs/toddleocr.png\" align=\"middle\" width = \"600\"/>\n<p align=\"center\">\n<p align=\"left\">\n    <a href=\"./LICENSE\"><img src=\"https://img.shields.io/badge/license-Apache%202-dfd.svg\"></a>\n    <a href=\"\"><img src=\"https://img.shields.io/badge/python-3.7+-aff.svg\"></a>\n    <a href=\"\"><img src=\"https://img.shields.io/badge/os-linux%2C%20win%2C%20mac-pink.svg\"></a>\n    <a href=\"https://github.com/arry-lee/ToddleOCR/stargazers\"><img src=\"https://img.shields.io/github/stars/arry-lee/ToddleOCR?color=ccf\"></a>\n</p>\n\n# ToddleOCR \u62d3\u724d\n\nToddleOCR\u662f\u4e00\u4e2a\u57fa\u4e8eTorch\u5b9e\u73b0\u7684OCR\uff08\u5149\u5b66\u5b57\u7b26\u8bc6\u522b\uff09\u9879\u76ee\uff0c\u5b83fork\u81eaPaddleOCR\uff0c\u5e76\u7ecf\u8fc7\u4f5c\u8005\u8fdb\u884c\u4e86\u6539\u8fdb\u548c\u4f18\u5316\u3002\u8be5\u9879\u76ee\u65e8\u5728\u901a\u8fc7\u4f7f\u7528Torch\u6846\u67b6\u6765\u5b66\u4e60\u548c\u7406\u89e3OCR\u6280\u672f\u7684\u5b9e\u73b0\u539f\u7406\u3002\n\n## \u9879\u76ee\u540d\u79f0\u7684\u542b\u4e49\n\nToddleOCR\u8fd9\u4e2a\u540d\u79f0\u6709\u4e09\u5c42\u610f\u601d\uff1a\n\n1. \u7ed3\u5408\u4e86Torch\u548cPaddle\u4e24\u4e2a\u6846\u67b6\u7684\u7279\u70b9\uff0c\u56e0\u6b64\u547d\u540d\u4e3aToddle\u3002\n2. \"Toddle\"\u5728\u82f1\u6587\u4e2d\u610f\u5473\u7740\u8e52\u8dda\u5b66\u6b65\uff0c\u4e5f\u4ee3\u8868\u8fd9\u4e2a\u9879\u76ee\u662f\u4f5c\u8005\u5728\u5b66\u4e60\u8fc7\u7a0b\u4e2d\u7684\u63a2\u7d22\u548c\u5c1d\u8bd5\u3002\n3. \"Toddle\"\u5728\u4e2d\u6587\u4e2d\u97f3\u8bd1\u4e3a\"\u62d3\u724d\"\uff0c\u610f\u6307\u4ece\u7af9\u7247\u4e0a\u62d3\u5370\u6587\u5b57\uff0c\u5f15\u7533\u4e3a\u4ece\u56fe\u7247\u4e2d\u63d0\u53d6\u6587\u5b57\u3002\n\n## \u9879\u76ee\u72b6\u6001\n\n\u76ee\u524d\uff0cToddleOCR\u5904\u4e8e\u63a2\u7d22\u9636\u6bb5\uff0c\u4ecd\u5728\u4e0d\u65ad\u5730\u8fdb\u884c\u6539\u8fdb\u548c\u4f18\u5316\u3002\u6b22\u8fce\u5f00\u53d1\u8005\u548c\u7814\u7a76\u8005\u53c2\u4e0e\u5176\u4e2d\uff0c\u4e00\u8d77\u63a2\u7d22OCR\u6280\u672f\u7684\u524d\u6cbf\u3002~~\u9879\u76ee\u6587\u6863\u76ee\u524d\u8fd8\u662fPaddleOCR\u7684\u6587\u6863~~\u3002\n\n## \u529f\u80fd\u7279\u70b9\n\n\u5728ToddleOCR\u4e2d\uff0c\u4f60\u53ef\u4ee5\u671f\u671b\u4ee5\u4e0b\u529f\u80fd\u7279\u70b9\uff1a\n\n- \u6587\u5b57\u68c0\u6d4b\uff1a\u80fd\u591f\u5728\u56fe\u50cf\u4e2d\u51c6\u786e\u5730\u68c0\u6d4b\u51fa\u6587\u5b57\u533a\u57df\u7684\u4f4d\u7f6e\u548c\u8fb9\u754c\u6846\u3002\n- \u6587\u5b57\u8bc6\u522b\uff1a\u80fd\u591f\u5c06\u68c0\u6d4b\u5230\u7684\u6587\u5b57\u533a\u57df\u8fdb\u884c\u8bc6\u522b\uff0c\u8f93\u51fa\u5bf9\u5e94\u7684\u6587\u5b57\u5185\u5bb9\u3002\n- \u8868\u683c\u8bc6\u522b\uff1a\u80fd\u591f\u5c06\u68c0\u6d4b\u5230\u7684\u5355\u5143\u683c\u91cd\u5efa\u6210\u8868\u683c\n- \u5173\u952e\u4fe1\u606f\u63d0\u53d6\uff1a \u5305\u62ec\u8bed\u8a00\u5b9e\u4f53\u8bc6\u522b(SER)\uff0c\u5173\u7cfb\u62bd\u53d6(RE)\n- \u591a\u8bed\u8a00\u652f\u6301\uff1a\u652f\u6301\u591a\u79cd\u8bed\u8a00\u7684\u6587\u5b57\u68c0\u6d4b\u548c\u8bc6\u522b\uff0c\u5305\u62ec\u4e2d\u6587\u3001\u82f1\u6587\u7b49\u5e38\u89c1\u8bed\u8a00\u3002\n~~- \u9ad8\u6027\u80fd\uff1a\u7ecf\u8fc7\u4f18\u5316\u7684\u7b97\u6cd5\u548c\u6a21\u578b\u7ed3\u6784\uff0c\u80fd\u591f\u5728\u4fdd\u8bc1\u51c6\u786e\u6027\u7684\u540c\u65f6\u63d0\u9ad8\u5904\u7406\u901f\u5ea6\u3002~~\n\n## \u5feb\u901f\u5f00\u59cb\n\n### \u73af\u5883\u8981\u6c42\n\n\u5728\u5f00\u59cb\u4e4b\u524d\uff0c\u8bf7\u786e\u4fdd\u4f60\u5df2\u7ecf\u5b89\u88c5\u4e86\u4ee5\u4e0b\u73af\u5883\uff1a\n\n* Python 3.x\n* Torch 2.x\n\n\u5176\u4ed6\u4f9d\u8d56\u5e93\uff08\u5177\u4f53\u4f9d\u8d56\u8bf7\u53c2\u8003\u9879\u76ee\u6587\u6863\uff09\n\n### \u5b89\u88c5\n\n1. \u514b\u9686\u9879\u76ee\u4ee3\u7801\u5230\u672c\u5730\uff1a\n\n```shell\ngit clone https://github.com/arry-lee/ToddleOCR.git\n```\n\u6216\u8005\n\n```shell\npip install toddleocr\n```\n\n2. \u8fdb\u5165\u9879\u76ee\u76ee\u5f55\uff1a\n\n```shell\ncd ToddleOCR\n```\n\n3. \u5b89\u88c5\u4f9d\u8d56\uff1a\n\n```shell\npip install -r requirements.txt\n```\n\n4. \u4e0b\u8f7d\u6a21\u578b\n\u76ee\u524d\u63d0\u4f9b\u7684\u6a21\u578b\u53ef\u4ee5\u5728[\u8fd9\u91cc](https://github.com/arry-lee/ToddleOCR/releases/weights)\u624b\u52a8\u4e0b\u8f7d\uff0c\u4ee3\u7801\u8fd0\u884c\u65f6\u4e5f\u4f1a\u81ea\u52a8\u4e0b\u8f7d\uff1a\n\n- [x] [zh_ocr_cls_v1.rar](https://github.com/arry-lee/ToddleOCR/releases/download/weights/zh_ocr_cls_v1.rar) \u6587\u672c\u89d2\u5ea6\u5206\u7c7b\u6a21\u578b\n- [x] [zh_ocr_det_v3.rar](https://github.com/arry-lee/ToddleOCR/releases/download/weights/zh_ocr_det_v3.rar) \u4e2d\u82f1\u6587\u68c0\u6d4b\u6a21\u578b\n- [x] [zh_ocr_rec_v3.rar](https://github.com/arry-lee/ToddleOCR/releases/download/weights/zh_ocr_rec_v3.rar) \u4e2d\u82f1\u6587\u8bc6\u522b\u6a21\u578b\n- [x] [zh_str_tab_m2.rar](https://github.com/arry-lee/ToddleOCR/releases/download/weights/zh_str_tab_m2.rar) \u8868\u683c\u8bc6\u522b\u91cd\u5efa\u6a21\u578b\n\n### \u4f7f\u7528\u793a\u4f8b\n\n1. \u51c6\u5907\u8f93\u5165\u56fe\u50cf\u6587\u4ef6\uff0c\u4f8b\u5982input.jpg\u3002\n\n2. \u8fd0\u884cOCR\u793a\u4f8b\u811a\u672c\uff1a\n\n```shell\npython toddleocr input.jpg\n```\n\n\u8fd9\u5c06\u8f93\u51fa\u68c0\u6d4b\u5230\u7684\u6587\u5b57\u533a\u57df\u548c\u5bf9\u5e94\u7684\u8bc6\u522b\u7ed3\u679c\u3002\n\n## \u5982\u4f55\u914d\u7f6e\u65b0\u7684\u7b97\u6cd5\n\n\u4e0ePaddleOCR\u76f8\u6bd4\uff0c\u672c\u9879\u76ee\u6452\u5f03yaml\u7684\u914d\u7f6e\u65b9\u6cd5\uff0c\u91c7\u7528\u7eafpython\u8bed\u8a00\uff0c\u7c7byaml\u7684\u914d\u7f6e\u65b9\u6cd5\uff0c\u4f46\u66f4\u7075\u6d3b\uff0c\u800c\u4e14\u53ef\u4ee5\u4f7f\u7528\u590d\u6742\u7684\u5f15\u7528\u8ba1\u7b97\uff0c\u5e76\u4e14\u6240\u89c1\u5373\u6240\u5f97\uff0c\u5177\u4f53\u7684\u8bf7\u53c2\u8003\nptocr/config.py \u4e2d\u7684ConfigModel\u7c7b\uff0c\u7ee7\u627f\u5e76\u91cd\u5199\u4f60\u7684\u53c2\u6570\u3002\n\n\u5173\u4e8e\u914d\u7f6e\u7684\u8bed\u6cd5\uff0c\u53ea\u6709\u4e24\u70b9\u9700\u8981\u7279\u522b\u6ce8\u610f\u7684\uff0c\u4e3a\u4e86\u65b9\u4fbf\u914d\u7f6e\u548c\u7b80\u5316\u914d\u7f6e\u91cf ,\u9879\u76ee\u5185\u90e8\u5b9a\u4e49\u4e86\u4e00\u4e2a\u8f85\u52a9\u7c7b\uff0c\u63d0\u4f9b\u4e86\u4e00\u4e9b\u8bed\u6cd5\u7cd6\uff0c\u5982\u4e0b\uff1a\n\n1. \u4f7f\u7528 _ \u7c7b\uff0c\u8fd9\u662f\u4e00\u4e2a\u591a\u529f\u80fd\u7684\u8f85\u52a9\u7c7b\uff0c\u6709\u4ee5\u4e0b\u51e0\u4e2a\u8bed\u6cd5\u529f\u80fd\uff1a\n    1. \u7c7b\u4f3c\u504f\u51fd\u6570\u7684\u504f\u7c7b\uff1a`_(DBHead,arg1=0,arg2=1) ==> partial(DBHead, **kwargs)`\n    2. \u5b57\u7b26\u4e32\u52a8\u6001\u5bfc\u5165\u7c7b\uff1a`_(\"DBHead\",arg1=0,arg2=1) ==> partial(DBHead, **kwargs)`\n    3. \u6ca1\u6709\u4f4d\u7f6e\u53c2\u6570\u7b49\u6548\u4e8e\u5b57\u5178\uff1a`_(arg1=0,arg2=1) ==> dict(arg1=0,arg2=1)`\n    4. \u9884\u70ed\u5b66\u4e60\u7387\u89c4\u5212\u5668\uff1a\n    5. \u7b49\u6548\u5e76\u5217\u5217\u8868,\u7528\u4e8e Transformers\uff1a `_[train:eval:infer,train:eval:...]`,\n       \u5207\u7247\u8bed\u6cd5\u7684\u4e09\u4e2a\u4f4d\u7f6e\u5206\u522b\u8868\u793a\u8bad\u7ec3\uff0c\u6d4b\u8bd5\uff0c\u63a8\u7406\u6a21\u5f0f\u4e0b\u7684\u9884\u5904\u7406\u5668\uff0c\n       \u7279\u522b\u7684\uff1a...\u7701\u7565\u53f7\u8868\u793a\u540c\u524d\u4e00\u4e2a\uff0c\n       \u7a7a\u7684\u6216None\u8868\u793a\u8be5\u4f4d\u7f6e\u4e0d\u9700\u8981\u8fd9\u4e2a\u9884\u5904\u7406\u5668\uff0c\u4f8b\u5982[DecodeLabel:...:]\u8868\u793a\u8bad\u7ec3\u548c\u6d4b\u8bd5\u9700\u8981DecodeLabel\uff0c\u63a8\u7406\u4e0d\u9700\u8981,\u8fd9\u79cd\u8868\u793a\u65b9\u6cd5\u662f\u4e3a\u4e86\n       **\u7b80\u5316\u914d\u7f6e\uff0c\u5171\u4eab\u5904\u7406\u5668\u51cf\u5c11\u5b9e\u4f8b\u7684\u521b\u5efa**\n\n    ```python\n    class _:\n    \n        def __new__(cls, class_=None, /, **kwargs):\n            if class_ is None:\n                return kwargs\n    \n            if issubclass(class_, LRScheduler) and \"warmup_epoch\" in kwargs:\n                warmup_epochs = kwargs.pop(\"warmup_epoch\")\n                class_ = warmup_scheduler(class_, warmup_epochs)\n                return partial(class_, **kwargs)\n    \n            if isinstance(class_, type | types.FunctionType):\n                return partial(class_, **kwargs)\n    \n            if isinstance(class_, str):\n                from tools.modelhub import Hub\n                hub = Hub(os.path.dirname(__file__))  # \u8fd9\u4e2a\u64cd\u4f5c\u5f88\u8017\u65f6\uff0c\u5c3d\u91cf\u4e0d\u4f7f\u7528\u5b57\u7b26\u4e32\u5f62\u5f0f\u7684\u5bfc\u5165\n    \n                class_ = hub(class_)\n                return partial(class_, **kwargs)\n    \n        def __class_getitem__(cls, item):\n            out = [[], [], []]\n            for i in item:\n                if isinstance(i, slice):\n                    ls = [i.start, i.stop, i.step]\n                    last = None\n                    for one in ls:\n                        if one is not None:\n                            last = one\n                            break\n                    for i, one in enumerate(ls):\n                        if one is ...:\n                            out[i].append(last)\n                        elif one:\n                            out[i].append(one)\n                else:\n                    for one in out:\n                        one.append(i)\n            return out\n    ```\n\n2. \u4f7f\u7528\u6ce8\u89e3\u8bed\u6cd5\u533a\u5206\u8bad\u7ec3\u53c2\u6570\u548c\u6d4b\u8bd5\u53c2\u6570\n   ConfigModel \u6709\u4e24\u4e2a\u5185\u90e8\u7c7b Data \u548c Loader \u5b50\u7c7b\u53ef\u4ee5\u91c7\u7528\u6ce8\u89e3\u8bed\u6cd5\u533a\u5206\u8bad\u7ec3\u65f6\u914d\u7f6e\u548c\u6d4b\u8bd5\u65f6\u914d\u7f6e\uff0c\u4f8b\u5982\uff1a\n    ```python\n    class Loader:\n        shuffle:False = True\n        drop_last:True = False\n        batch_size:1 = 8\n        num_workers: 0 = 4\n   ```\n   **\u7b49\u53f7\u540e\u9762\u8868\u793a\u8bad\u7ec3\u65f6\u53c2\u6570\uff0c\u5192\u53f7\u540e\u9762\u8868\u793a\u6d4b\u8bd5\u65f6\u53c2\u6570**\uff0c\u6ca1\u6709\u5192\u53f7\u5219\u76f8\u540c\n   \u8fd9\u79cd\u8868\u793a\u65b9\u6cd5\u540c\u6837\u662f\u4e3a\u4e86\u7b80\u5316\u914d\u7f6e\n\n\u66f4\u591a\u7684\u53ef\u4ee5\u53c2\u8003\u5df2\u7ecf\u5b9e\u73b0\u7684\u7b97\u6cd5\uff0c\u4f8b\u5982`models/det/det_db_rvd.py`\n\n## \u8d21\u732e\n\n\u5982\u679c\u4f60\u5bf9ToddleOCR\u611f\u5174\u8da3\uff0c\u5e76\u4e14\u5e0c\u671b\u4e3a\u9879\u76ee\u505a\u51fa\u8d21\u732e\uff0c\u6b22\u8fce\u63d0\u4ea4\u95ee\u9898\u3001\u63d0\u51fa\u5efa\u8bae\u6216\u8005\u53d1\u9001Pull Request\u3002\u6211\u4eec\u4e50\u4e8e\u63a5\u53d7\u6765\u81ea\u793e\u533a\u7684\u8d21\u732e\uff0c\u5171\u540c\u63a8\u52a8\u9879\u76ee\u7684\u53d1\u5c55\u3002\n\n## \u5e2e\u52a9\u4e0e\u652f\u6301\n\n\u5982\u679c\u4f60\u5728\u4f7f\u7528\u8fc7\u7a0b\u4e2d\u9047\u5230\u4efb\u4f55\u95ee\u9898\uff0c\u6216\u8005\u9700\u8981\u8fdb\u4e00\u6b65\u7684\u5e2e\u52a9\u4e0e\u652f\u6301\uff0c\u8bf7\u53c2\u8003\u9879\u76ee\u6587\u6863\u6216\u8005\u8054\u7cfb\u6211\u4eec\u7684\u56e2\u961f\u3002\n\n## \u76f8\u5173\u94fe\u63a5\n\n- \u9879\u76ee\u4e3b\u9875\uff1ahttps://github.com/arry-lee/ToddleOCR\n- PaddleOCR\uff1ahttps://github.com/paddlepaddle/PaddleOCR\n- \u6587\u6863\uff1ahttps://github.com/arry-lee/ToddleOCR/docs\n\n## \u8bb8\u53ef\u8bc1\n\n\u672c\u9879\u76ee\u7684\u53d1\u5e03\u53d7<a href=\"https://github.com/arry-lee/ToddleOCR/blob/torchocr/LICENSE\">Apache 2.0 license</a>\u8bb8\u53ef\u8ba4\u8bc1\u3002\n",
    "bugtrack_url": null,
    "license": "Apache License 2.0",
    "summary": "Awesome OCR toolkits based on Torch \uff088.6M ultra-lightweight pre-trained model, support training and deployment among server, mobile, embedded and IoT devices",
    "version": "1.2.8",
    "project_urls": {
        "Download": "https://github.com/arry-lee/ToddleOCR.git",
        "Homepage": "https://github.com/arry-lee/ToddleOCR"
    },
    "split_keywords": [
        "ocr",
        "textdetection",
        "textrecognition",
        "toddleocr",
        "crnn",
        "east",
        "star-net",
        "rosetta",
        "ocrlite",
        "db",
        "chineseocr",
        "chinesetextdetection",
        "chinesetextrecognition"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "1d4bec1a70c4ad1ba0b5e1681cb8e164751ffbcbd3b5ecb6c48bc3120989af69",
                "md5": "9582297ef8adba85bf26bc8f25583994",
                "sha256": "3458b2be5681a1eaf5330dfcd686562cdabf99511b169316c71a37bd83123df6"
            },
            "downloads": -1,
            "filename": "toddleocr-1.2.8-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "9582297ef8adba85bf26bc8f25583994",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 448820,
            "upload_time": "2023-11-17T09:07:34",
            "upload_time_iso_8601": "2023-11-17T09:07:34.445028Z",
            "url": "https://files.pythonhosted.org/packages/1d/4b/ec1a70c4ad1ba0b5e1681cb8e164751ffbcbd3b5ecb6c48bc3120989af69/toddleocr-1.2.8-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "d426f0aaa8f1e8bf6c9b6a43875dd630dedf73e2c54730bb5ed6b56f5711a176",
                "md5": "b15e795322483b7d1659db5561bf2931",
                "sha256": "11e91c149c879c402fa6ff9bcd55afd34f192d727f7e2777323541553e63f028"
            },
            "downloads": -1,
            "filename": "toddleocr-1.2.8.tar.gz",
            "has_sig": false,
            "md5_digest": "b15e795322483b7d1659db5561bf2931",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 348915,
            "upload_time": "2023-11-17T09:07:36",
            "upload_time_iso_8601": "2023-11-17T09:07:36.227415Z",
            "url": "https://files.pythonhosted.org/packages/d4/26/f0aaa8f1e8bf6c9b6a43875dd630dedf73e2c54730bb5ed6b56f5711a176/toddleocr-1.2.8.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2023-11-17 09:07:36",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "arry-lee",
    "github_project": "ToddleOCR",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "requirements": [],
    "lcname": "toddleocr"
}
        
Elapsed time: 3.41433s