cnocr


Namecnocr JSON
Version 2.3.1 PyPI version JSON
download
home_pagehttps://github.com/breezedeus/cnocr
SummaryPython3 package for Chinese/English OCR, with small pretrained models
upload_time2024-11-30 13:41:39
maintainerNone
docs_urlNone
authorbreezedeus
requires_pythonNone
licenseApache 2.0
keywords
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            <div align="center">
  <img src="./docs/figs/cnocr-logo.jpg" width="250px"/>
  <div>&nbsp;</div>

[![Discord](https://img.shields.io/discord/1200765964434821260?label=Discord)](https://discord.gg/GgD87WM8Tf)
[![Downloads](https://static.pepy.tech/personalized-badge/cnocr?period=total&units=international_system&left_color=grey&right_color=orange&left_text=Downloads)](https://pepy.tech/project/cnocr)
[![Visitors](https://api.visitorbadge.io/api/visitors?path=https%3A%2F%2Fgithub.com%2Fbreezedeus%2FCnOCR&label=Visitors&countColor=%23f5c791&style=flat&labelStyle=none)](https://visitorbadge.io/status?path=https%3A%2F%2Fgithub.com%2Fbreezedeus%2FCnOCR)
[![license](https://img.shields.io/github/license/breezedeus/cnocr)](./LICENSE)
[![Docs](https://readthedocs.org/projects/cnocr/badge/?version=latest)](https://cnocr.readthedocs.io/zh-cn/stable/?badge=latest)
[![PyPI version](https://badge.fury.io/py/cnocr.svg)](https://badge.fury.io/py/cnocr)
[![forks](https://img.shields.io/github/forks/breezedeus/cnocr)](https://github.com/breezedeus/cnocr)
[![stars](https://img.shields.io/github/stars/breezedeus/cnocr)](https://github.com/breezedeus/cnocr)
![last-releast](https://img.shields.io/github/release-date/breezedeus/cnocr)
![last-commit](https://img.shields.io/github/last-commit/breezedeus/cnocr)
[![Twitter](https://img.shields.io/twitter/url?url=https%3A%2F%2Ftwitter.com%2Fbreezedeus)](https://twitter.com/breezedeus)

[📖 文档](https://cnocr.readthedocs.io/zh-cn/stable/) |
[🛠️ 安装](https://cnocr.readthedocs.io/zh-cn/stable/install/) |
[🧳 可用模型](https://cnocr.readthedocs.io/zh-cn/stable/models/) |
[🕹 模型训练](https://cnocr.readthedocs.io/zh-cn/stable/train/) |
[🛀🏻 在线Demo](https://huggingface.co/spaces/breezedeus/CnOCR-Demo) |
[💬 交流群](https://www.breezedeus.com/article/join-group)

</div>

<div align="center">

[English](./README_en.md) | 中文

</div>

# CnOCR

<div align="center">
<strong>Tech should serve the people, not enslave them!</strong>
<br>
<strong>请勿将此项目用于文字审查!</strong>
<br>
---
</div>

### [Update 2024.11.28]:发布 V2.3.1

主要变更:

* 基于 RapidOCR 集成 PPOCRv4 最新版 OCR 模型,提供更多的模型选择
  * 新增支持 PP-OCRv4  识别模型,包括标准版和服务器版
* 修改读文件实现方式,支持 Windows 的中文路径
* 修复Bug:当使用多个进程时,transform_func 无法序列化
* 修复Bug:与 albumentations=1.4.* 兼容

### [Update 2023.12.24]:发布 V2.3

主要变更:

* 重新训练了所有的模型,比上一版精度更高。
* 按使用场景把模型分为几大类场景(见 [识别模型列表](#可使用的识别模型)):
  * `scene`:场景图片,适合识别一般拍照图片中的文字。此类模型以 `scene-` 开头,如模型 `scene-densenet_lite_136-gru`。
  * `doc`:文档图片,适合识别规则文档的截图图片,如书籍扫描件等。此类模型以 `doc-` 开头,如模型 `doc-densenet_lite_136-gru`。
  * `number`:仅识别**纯数字**(只能识别 `0~9` 十个数字)图片,适合银行卡号、身份证号等场景。此类模型以 `number-` 开头,如模型 `number-densenet_lite_136-gru`。
  * `general`: 通用场景,适合图片无明显倾向的一般图片。此类模型无特定开头,与旧版模型名称保持一致,如模型 `densenet_lite_136-gru`。
  > 注意 ⚠️:以上说明仅为参考,具体选择模型时建议以实际效果为准。
* 加入了两个更大的系列模型:
  * `*-densenet_lite_246-gru_base`:优先供 **知识星球** [**CnOCR/CnSTD私享群**](https://t.zsxq.com/FEYZRJQ) 会员使用,一个月后会免费开源。
  * `*-densenet_lite_666-gru_large`:Pro 模型,购买后可使用。
  
更多细节请参考:[CnOCR V2.3 新版发布:模型更好、更多、更大 | Breezedeus.com](https://www.breezedeus.com/article/cnocr-v2.3-better-more)。



[**CnOCR**](https://github.com/breezedeus/cnocr) 是 **Python 3** 下的**文字识别**(**Optical Character Recognition**,简称**OCR**)工具包,支持**简体中文**、**繁体中文**(部分模型)、**英文**和**数字**的常见字符识别,支持竖排文字的识别。自带了**20+个** [训练好的模型](https://cnocr.readthedocs.io/zh-cn/stable/models/),适用于不同应用场景,安装后即可直接使用。同时,CnOCR也提供简单的[训练命令](https://cnocr.readthedocs.io/zh-cn/stable/train/)供使用者训练自己的模型。欢迎扫码加小助手为好友,备注 `ocr`,小助手会定期统一邀请大家入群:

<div align="center">
  <img src="https://huggingface.co/datasets/breezedeus/cnocr-wx-qr-code/resolve/main/wx-qr-code.JPG" alt="微信群二维码" width="300px"/>
</div>


作者也维护 **知识星球** [**CnOCR/CnSTD私享群**](https://t.zsxq.com/FEYZRJQ) ,这里面的提问会较快得到作者的回复,欢迎加入。**知识星球会员** 可享受以下福利:

- 可免费下载部分**未开源的付费模型**;
- 购买其他所有的付费模型一律八折优化;
- 作者快速回复使用过程中遇到的各种困难;
- 作者每月提供两次免费特有数据的训练服务。
- 星球会陆续发布一些CnOCR/CnSTD相关的私有资料;
- 星球会持续发布 OCR/STD/CV 等相关的最新研究资料。



## 详细文档

见 [CnOCR在线文档](https://cnocr.readthedocs.io/) 。

## 使用说明

**CnOCR** 从 **V2.2** 开始,内部自动调用文字检测引擎 **[CnSTD](https://github.com/breezedeus/cnstd)** 进行文字检测和定位。所以 **CnOCR** V2.2 不仅能识别排版简单的印刷体文字图片,如截图图片,扫描件等,也能识别**一般图片中的场景文字**。

以下是一些不同场景的调用示例。



## 不同场景的调用示例

### 常见的图片识别

所有参数都使用默认值即可。如果发现效果不够好,多调整下各个参数看效果,最终往往能获得比较理想的精度。

```python
from cnocr import CnOcr

img_fp = './docs/examples/huochepiao.jpeg'
ocr = CnOcr()  # 所有参数都使用默认值
out = ocr.ocr(img_fp)

print(out)
```

识别结果:

<div align="center">
  <img src="./docs/predict-outputs/huochepiao.jpeg-result.jpg" alt="火车票识别" width="800px"/>
</div>


### 排版简单的印刷体截图图片识别

针对 **排版简单的印刷体文字图片**,如截图图片,扫描件图片等,可使用 `det_model_name='naive_det'`,相当于不使用文本检测模型,而使用简单的规则进行分行。

> **Note**
>
>  `det_model_name='naive_det'` 的效果相当于 `V2.2` 之前(`V2.0.*`, `V2.1.*`)的 CnOCR 版本。

使用 `det_model_name='naive_det'` 的最大优势是**速度快**,劣势是对图片比较挑剔。如何判断是否该使用此检测模型呢?最简单的方式就是拿应用图片试试效果,效果好就用,不好就不用。

```python
from cnocr import CnOcr

img_fp = './docs/examples/multi-line_cn1.png'
ocr = CnOcr(det_model_name='naive_det') 
out = ocr.ocr(img_fp)

print(out)
```

识别结果:

<div align="center">

| 图片                                                                      | OCR结果                                                                                                                         |
| ----------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
| ![docs/examples/multi-line_cn1.png](./docs/examples/multi-line_cn1.png) | 网络支付并无本质的区别,因为<br />每一个手机号码和邮件地址背后<br />都会对应着一个账户--这个账<br />户可以是信用卡账户、借记卡账<br />户,也包括邮局汇款、手机代<br />收、电话代收、预付费卡和点卡<br />等多种形式。 |

</div>


### 竖排文字识别

采用来自 [**PaddleOCR**](https://github.com/PaddlePaddle/PaddleOCR)(之后简称 **ppocr**)的中文识别模型 `rec_model_name='ch_PP-OCRv3'` 进行识别。

```python
from cnocr import CnOcr

img_fp = './docs/examples/shupai.png'
ocr = CnOcr(rec_model_name='ch_PP-OCRv3')
out = ocr.ocr(img_fp)

print(out)
```

识别结果:
<div align="center">
  <img src="./docs/predict-outputs/shupai.png-result.jpg" alt="竖排文字识别" width="800px"/>
</div>


### 英文识别

虽然中文检测和识别模型也能识别英文,但**专为英文文字训练的检测器和识别器往往精度更高**。如果是纯英文的应用场景,建议使用来自 **ppocr** 的英文检测模型 `det_model_name='en_PP-OCRv3_det'`, 和英文识别模型 `rec_model_name='en_PP-OCRv3'` 。

```python
from cnocr import CnOcr

img_fp = './docs/examples/en_book1.jpeg'
ocr = CnOcr(det_model_name='en_PP-OCRv3_det', rec_model_name='en_PP-OCRv3')
out = ocr.ocr(img_fp)

print(out)
```

识别结果:

<div align="center">
  <img src="./docs/predict-outputs/en_book1.jpeg-result.jpg" alt="英文识别" width="600px"/>
</div>


### 繁体中文识别

采用来自ppocr的繁体识别模型 `rec_model_name='chinese_cht_PP-OCRv3'` 进行识别。

```python
from cnocr import CnOcr

img_fp = './docs/examples/fanti.jpg'
ocr = CnOcr(rec_model_name='chinese_cht_PP-OCRv3')  # 识别模型使用繁体识别模型
out = ocr.ocr(img_fp)

print(out)
```

使用此模型时请注意以下问题:

* 识别精度一般,不是很好;

* 除了繁体字,对标点、英文、数字的识别都不好;

* 此模型不支持竖排文字的识别。

识别结果:
<div align="center">
  <img src="./docs/predict-outputs/fanti.jpg-result.jpg" alt="繁体中文识别" width="700px"/>
</div>


### 单行文字的图片识别

如果明确知道待识别的图片是单行文字图片(如下图),可以使用类函数 `CnOcr.ocr_for_single_line()` 进行识别。这样就省掉了文字检测的时间,速度会快一倍以上。

<div align="center">
  <img src="./docs/examples/helloworld.jpg" alt="单行文本识别" width="300px"/>
</div>
调用代码如下:

```python
from cnocr import CnOcr

img_fp = './docs/examples/helloworld.jpg'
ocr = CnOcr()
out = ocr.ocr_for_single_line(img_fp)
print(out)
```



### 更多应用示例

* **核酸疫苗截图识别**
<div align="center">
  <img src="./docs/predict-outputs/jiankangbao.jpeg-result.jpg" alt="核酸疫苗截图识别" width="500px"/>
</div>

* **身份证识别**
<div align="center">
  <img src="./docs/predict-outputs/aobama.webp-result.jpg" alt="身份证识别" width="700px"/>
</div>

* **饭店小票识别**
<div align="center">
  <img src="./docs/predict-outputs/fapiao.jpeg-result.jpg" alt="饭店小票识别" width="500px"/>
</div>
  

  

## 安装

嗯,顺利的话一行命令即可。

```bash
$ pip install cnocr[ort-cpu]
```

如果是 **GPU** 环境使用 ONNX 模型,请使用以下命令进行安装:

```bash
$ pip install cnocr[ort-gpu]
```



如果要训练自己的模型,,可以使用以下命令安装:

```bash
$ pip install cnocr[dev]
```



安装速度慢的话,可以指定国内的安装源,如使用阿里云的安装源:

```bash
$ pip install cnocr[ort-cpu] -i https://mirrors.aliyun.com/pypi/simple
```

> **Note** 
>
> 请使用 **Python3**(3.7.\*~3.10.\*之间的版本应该都行),没测过Python2下是否ok。

更多说明可见 [安装文档](https://cnocr.readthedocs.io/zh-cn/stable/install/)。

> **Warning** 
>
> 如果电脑中从未安装过 `PyTorch`,`OpenCV` python包,初次安装可能会遇到问题,但一般都是常见问题,可以自行百度/Google解决。



### Docker Image

可以从 [Docker Hub](https://hub.docker.com/u/breezedeus) 直接拉取已安装好 CnOCR 的镜像使用。

```bash
$ docker pull breezedeus/cnocr:latest
```

更多说明可见 [安装文档](https://cnocr.readthedocs.io/zh-cn/stable/install/)。



## HTTP服务

CnOCR **V2.2.1** 加入了基于 FastAPI 的HTTP服务。开启服务需要安装几个额外的包,可以使用以下命令安装:

```bash
pip install cnocr[serve]
```



安装完成后,可以通过以下命令启动HTTP服务(**`-p`** 后面的数字是**端口**,可以根据需要自行调整):

```bash
cnocr serve -p 8501
```



服务开启后,可以使用以下方式调用服务。



### 命令行

比如待识别文件为 `docs/examples/huochepiao.jpeg`,如下使用 curl 调用服务:

```bash
> curl -F image=@docs/examples/huochepiao.jpeg http://0.0.0.0:8501/ocr
```



### Python

使用如下方式调用服务:

```python
import requests

image_fp = 'docs/examples/huochepiao.jpeg'
r = requests.post(
    'http://0.0.0.0:8501/ocr', files={'image': (image_fp, open(image_fp, 'rb'), 'image/png')},
)
ocr_out = r.json()['results']
print(ocr_out)
```



具体也可参考文件 [scripts/screenshot_daemon_with_server.py](scripts/screenshot_daemon_with_server.py) 。 



### 其他语言

请参照 curl 的调用方式自行实现。





## 可使用的模型

### 可使用的检测模型

具体参考 [CnSTD的下载说明](https://github.com/breezedeus/CnSTD?tab=readme-ov-file#%E5%B7%B2%E6%9C%89std%E6%A8%A1%E5%9E%8B)。

| `det_model_name`                                             | PyTorch 版本 | ONNX 版本 | 模型原始来源 | 模型文件大小 | 支持语言                       | 是否支持竖排文字识别 |
| ------------------------------------------------------------ | ------------ | --------- | ------------ | ------------ | ------------------------------ | -------------------- |
| db_shufflenet_v2                                             | √            | X         | cnocr        | 18 M         | 简体中文、繁体中文、英文、数字 | √                    |
| **db_shufflenet_v2_small**                                   | √            | X         | cnocr        | 12 M         | 简体中文、繁体中文、英文、数字 | √                    |
| db_mobilenet_v3                                              | √            | X         | cnocr        | 16 M         | 简体中文、繁体中文、英文、数字 | √                    |
| db_mobilenet_v3_small                                        | √            | X         | cnocr        | 7.9 M        | 简体中文、繁体中文、英文、数字 | √                    |
| db_resnet34                                                  | √            | X         | cnocr        | 86 M         | 简体中文、繁体中文、英文、数字 | √                    |
| db_resnet18                                                  | √            | X         | cnocr        | 47 M         | 简体中文、繁体中文、英文、数字 | √                    |
| ch_PP-OCRv4_det                                              | X            | √         | ppocr        | 4.5 M        | 简体中文、繁体中文、英文、数字 | √                    |
| ch_PP-OCRv4_det_server                                       | X            | √         | ppocr        | 108 M        | 简体中文、繁体中文、英文、数字 | √                    |
| ch_PP-OCRv3_det                                              | X            | √         | ppocr        | 2.3 M        | 简体中文、繁体中文、英文、数字 | √                    |
| **en_PP-OCRv3_det**                                          | X            | √         | ppocr        | 2.3 M        | **英文**、数字                 | √                    |



### 可使用的识别模型

相比于 CnOCR V2.2.* 版本,**V2.3** 中的大部分模型都经过了重新训练和精调,精度比旧版模型更高。同时,加入了两个参数量更多的模型系列:

  * `*-densenet_lite_246-gru_base`:优先供 **知识星球** [**CnOCR/CnSTD私享群**](https://t.zsxq.com/FEYZRJQ) 会员使用,后续会免费开源。
  * `*-densenet_lite_666-gru_large`:**Pro 模型**,购买后可使用。购买链接见文档:

**V2.3** 中的模型按使用场景可以分为以下几大类:

* `scene`:场景图片,适合识别一般拍照图片中的文字。此类模型以 `scene-` 开头,如模型 `scene-densenet_lite_136-gru`。
* `doc`:文档图片,适合识别规则文档的截图图片,如书籍扫描件等。此类模型以 `doc-` 开头,如模型 `doc-densenet_lite_136-gru`。
* `number`:仅识别**纯数字**(只能识别 `0~9` 十个数字)图片,适合银行卡号、身份证号等场景。此类模型以 `number-` 开头,如模型 `number-densenet_lite_136-gru`。
* `general`: 通用场景,适合图片无明显倾向的一般图片。此类模型无特定开头,与旧版模型名称保持一致,如模型 `densenet_lite_136-gru`。

> 注意 ⚠️:以上说明仅供参考,具体选择模型时建议以实际效果为准。

更多说明见:[可用模型](https://cnocr.readthedocs.io/zh-cn/stable/models/)。

| `rec_model_name`                                             | PyTorch 版本 | ONNX 版本 | 模型原始来源 | 模型文件大小 | 支持语言                            | 是否支持竖排文字识别 |
| ------------------------------------------------------------ | ------------ | --------- | ------------ | ------------ | ----------------------------------- | -------------------- |
| **densenet_lite_136-gru** 🆕                                  | √            | √         | cnocr        | 12 M         | 简体中文、英文、数字                | X                    |
| **scene-densenet_lite_136-gru** 🆕                            | √            | √         | cnocr        | 12 M         | 简体中文、英文、数字                | X                    |
| **doc-densenet_lite_136-gru** 🆕                              | √            | √         | cnocr        | 12 M         | 简体中文、英文、数字                | X                    |
| **densenet_lite_246-gru_base** 🆕 <br /> ([星球会员](https://t.zsxq.com/FEYZRJQ)专享) | √            | √         | cnocr        | 25 M         | 简体中文、英文、数字                | X                    |
| **scene-densenet_lite_246-gru_base** 🆕 <br /> ([星球会员](https://t.zsxq.com/FEYZRJQ)专享) | √            | √         | cnocr        | 25 M         | 简体中文、英文、数字                | X                    |
| **doc-densenet_lite_246-gru_base** 🆕 <br /> ([星球会员](https://t.zsxq.com/FEYZRJQ)专享) | √            | √         | cnocr        | 25 M         | 简体中文、英文、数字                | X                    |
| **densenet_lite_666-gru_large** 🆕 <br />(购买链接:[B站](https://gf.bilibili.com/item/detail/1104812055)、[Lemon Squeezy](https://ocr.lemonsqueezy.com/)) | √            | √         | cnocr        | 82 M         | 简体中文、英文、数字                | X                    |
| **scene-densenet_lite_666-gru_large** 🆕 <br />(购买链接:[B站](https://gf.bilibili.com/item/detail/1104815055)、[Lemon Squeezy](https://ocr.lemonsqueezy.com/)) | √            | √         | cnocr        | 82 M         | 简体中文、英文、数字                | X                    |
| **doc-densenet_lite_666-gru_large** 🆕 <br />(购买链接:[B站](https://gf.bilibili.com/item/detail/1104820055)、[Lemon Squeezy](https://ocr.lemonsqueezy.com/)) | √            | √         | cnocr        | 82 M         | 简体中文、英文、数字                | X                    |
| **number-densenet_lite_136-fc** 🆕                            | √            | √         | cnocr        | 2.7 M        | **纯数字**(仅包含 `0~9` 十个数字) | X                    |
| **number-densenet_lite_136-gru**  🆕 <br /> ([星球会员](https://t.zsxq.com/FEYZRJQ)专享) | √            | √         | cnocr        | 5.5 M        | **纯数字**(仅包含 `0~9` 十个数字) | X                    |
| **number-densenet_lite_666-gru_large** 🆕 <br />(购买链接:[B站](https://gf.bilibili.com/item/detail/1104055055)、[Lemon Squeezy](https://ocr.lemonsqueezy.com/)) | √            | √         | cnocr        | 55 M         | **纯数字**(仅包含 `0~9` 十个数字) | X                    |
| ch_PP-OCRv4                                                  | X            | √         | ppocr        | 10 M         | 简体中文、英文、数字                | √                    |
| ch_PP-OCRv4_server                                           | X            | √         | ppocr        | 86 M         | 简体中文、英文、数字                | √                    |
| ch_PP-OCRv3                                                  | X            | √         | ppocr        | 10 M         | 简体中文、英文、数字                | √                    |
| ch_ppocr_mobile_v2.0                                         | X            | √         | ppocr        | 4.2 M        | 简体中文、英文、数字                | √                    |
| en_PP-OCRv4                                                  | X            | √         | ppocr        | 8.6 M        | **英文**、数字                      | √                    |
| en_PP-OCRv3                                                  | X            | √         | ppocr        | 8.5 M        | **英文**、数字                      | √                    |
| en_number_mobile_v2.0                                        | X            | √         | ppocr        | 1.8 M        | **英文**、数字                      | √                    |
| chinese_cht_PP-OCRv3                                         | X            | √         | ppocr        | 11 M         | **繁体中文**、英文、数字            | X                    |
| japan_PP-OCRv3                                               | X            | √         | ppocr        | 9.6 M         | **日文**、英文、数字                | √                    |
| korean_PP-OCRv3                                              | X            | √         | ppocr        | 9.4 M         | **韩文**、英文、数字                | √                    |
| latin_PP-OCRv3                                               | X            | √         | ppocr        | 8.6 M         | **拉丁文**、英文、数字              | √                    |
| arabic_PP-OCRv3                                              | X            | √         | ppocr        | 8.6 M         | **阿拉伯文**、英文、数字            | √                    |



## 未来工作

* [x] 支持图片包含多行文字 (`Done`)
* [x] crnn模型支持可变长预测,提升灵活性 (since `V1.0.0`)
* [x] 完善测试用例 (`Doing`)
* [x] 修bugs(目前代码还比较凌乱。。) (`Doing`)
* [x] 支持`空格`识别(since `V1.1.0`)
* [x] 尝试新模型,如 DenseNet,进一步提升识别准确率(since `V1.1.0`)
* [x] 优化训练集,去掉不合理的样本;在此基础上,重新训练各个模型
* [x] 由 MXNet 改为 PyTorch 架构(since `V2.0.0`)
* [x] 基于 PyTorch 训练更高效的模型
* [x] 支持列格式的文字识别
* [x] 打通与 [CnSTD](https://github.com/breezedeus/cnstd) 的无缝衔接(since `V2.2`)
* [ ] 模型精度进一步优化
* [ ] 支持更多的应用场景



## 给作者来杯咖啡

开源不易,如果此项目对您有帮助,可以考虑 [给作者加点油🥤,鼓鼓气💪🏻](https://cnocr.readthedocs.io/zh-cn/stable/buymeacoffee/) 。

---

官方代码库:[https://github.com/breezedeus/cnocr](https://github.com/breezedeus/cnocr)。



            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/breezedeus/cnocr",
    "name": "cnocr",
    "maintainer": null,
    "docs_url": null,
    "requires_python": null,
    "maintainer_email": null,
    "keywords": null,
    "author": "breezedeus",
    "author_email": "breezedeus@163.com",
    "download_url": "https://files.pythonhosted.org/packages/e6/9a/923b55bc621a386f0a7df4b93f36e3067afdd52e73727f4c9e32c8f50bc7/cnocr-2.3.1.tar.gz",
    "platform": "Mac",
    "description": "<div align=\"center\">\n  <img src=\"./docs/figs/cnocr-logo.jpg\" width=\"250px\"/>\n  <div>&nbsp;</div>\n\n[![Discord](https://img.shields.io/discord/1200765964434821260?label=Discord)](https://discord.gg/GgD87WM8Tf)\n[![Downloads](https://static.pepy.tech/personalized-badge/cnocr?period=total&units=international_system&left_color=grey&right_color=orange&left_text=Downloads)](https://pepy.tech/project/cnocr)\n[![Visitors](https://api.visitorbadge.io/api/visitors?path=https%3A%2F%2Fgithub.com%2Fbreezedeus%2FCnOCR&label=Visitors&countColor=%23f5c791&style=flat&labelStyle=none)](https://visitorbadge.io/status?path=https%3A%2F%2Fgithub.com%2Fbreezedeus%2FCnOCR)\n[![license](https://img.shields.io/github/license/breezedeus/cnocr)](./LICENSE)\n[![Docs](https://readthedocs.org/projects/cnocr/badge/?version=latest)](https://cnocr.readthedocs.io/zh-cn/stable/?badge=latest)\n[![PyPI version](https://badge.fury.io/py/cnocr.svg)](https://badge.fury.io/py/cnocr)\n[![forks](https://img.shields.io/github/forks/breezedeus/cnocr)](https://github.com/breezedeus/cnocr)\n[![stars](https://img.shields.io/github/stars/breezedeus/cnocr)](https://github.com/breezedeus/cnocr)\n![last-releast](https://img.shields.io/github/release-date/breezedeus/cnocr)\n![last-commit](https://img.shields.io/github/last-commit/breezedeus/cnocr)\n[![Twitter](https://img.shields.io/twitter/url?url=https%3A%2F%2Ftwitter.com%2Fbreezedeus)](https://twitter.com/breezedeus)\n\n[\ud83d\udcd6 \u6587\u6863](https://cnocr.readthedocs.io/zh-cn/stable/) |\n[\ud83d\udee0\ufe0f \u5b89\u88c5](https://cnocr.readthedocs.io/zh-cn/stable/install/) |\n[\ud83e\uddf3 \u53ef\u7528\u6a21\u578b](https://cnocr.readthedocs.io/zh-cn/stable/models/) |\n[\ud83d\udd79 \u6a21\u578b\u8bad\u7ec3](https://cnocr.readthedocs.io/zh-cn/stable/train/) |\n[\ud83d\udec0\ud83c\udffb \u5728\u7ebfDemo](https://huggingface.co/spaces/breezedeus/CnOCR-Demo) |\n[\ud83d\udcac \u4ea4\u6d41\u7fa4](https://www.breezedeus.com/article/join-group)\n\n</div>\n\n<div align=\"center\">\n\n[English](./README_en.md) | \u4e2d\u6587\n\n</div>\n\n# CnOCR\n\n<div align=\"center\">\n<strong>Tech should serve the people, not enslave them!</strong>\n<br>\n<strong>\u8bf7\u52ff\u5c06\u6b64\u9879\u76ee\u7528\u4e8e\u6587\u5b57\u5ba1\u67e5\uff01</strong>\n<br>\n---\n</div>\n\n### [Update 2024.11.28]\uff1a\u53d1\u5e03 V2.3.1\n\n\u4e3b\u8981\u53d8\u66f4\uff1a\n\n* \u57fa\u4e8e RapidOCR \u96c6\u6210 PPOCRv4 \u6700\u65b0\u7248 OCR \u6a21\u578b\uff0c\u63d0\u4f9b\u66f4\u591a\u7684\u6a21\u578b\u9009\u62e9\n  * \u65b0\u589e\u652f\u6301 PP-OCRv4  \u8bc6\u522b\u6a21\u578b\uff0c\u5305\u62ec\u6807\u51c6\u7248\u548c\u670d\u52a1\u5668\u7248\n* \u4fee\u6539\u8bfb\u6587\u4ef6\u5b9e\u73b0\u65b9\u5f0f\uff0c\u652f\u6301 Windows \u7684\u4e2d\u6587\u8def\u5f84\n* \u4fee\u590dBug\uff1a\u5f53\u4f7f\u7528\u591a\u4e2a\u8fdb\u7a0b\u65f6\uff0ctransform_func \u65e0\u6cd5\u5e8f\u5217\u5316\n* \u4fee\u590dBug\uff1a\u4e0e albumentations=1.4.* \u517c\u5bb9\n\n### [Update 2023.12.24]\uff1a\u53d1\u5e03 V2.3\n\n\u4e3b\u8981\u53d8\u66f4\uff1a\n\n* \u91cd\u65b0\u8bad\u7ec3\u4e86\u6240\u6709\u7684\u6a21\u578b\uff0c\u6bd4\u4e0a\u4e00\u7248\u7cbe\u5ea6\u66f4\u9ad8\u3002\n* \u6309\u4f7f\u7528\u573a\u666f\u628a\u6a21\u578b\u5206\u4e3a\u51e0\u5927\u7c7b\u573a\u666f\uff08\u89c1 [\u8bc6\u522b\u6a21\u578b\u5217\u8868](#\u53ef\u4f7f\u7528\u7684\u8bc6\u522b\u6a21\u578b)\uff09\uff1a\n  * `scene`\uff1a\u573a\u666f\u56fe\u7247\uff0c\u9002\u5408\u8bc6\u522b\u4e00\u822c\u62cd\u7167\u56fe\u7247\u4e2d\u7684\u6587\u5b57\u3002\u6b64\u7c7b\u6a21\u578b\u4ee5 `scene-` \u5f00\u5934\uff0c\u5982\u6a21\u578b `scene-densenet_lite_136-gru`\u3002\n  * `doc`\uff1a\u6587\u6863\u56fe\u7247\uff0c\u9002\u5408\u8bc6\u522b\u89c4\u5219\u6587\u6863\u7684\u622a\u56fe\u56fe\u7247\uff0c\u5982\u4e66\u7c4d\u626b\u63cf\u4ef6\u7b49\u3002\u6b64\u7c7b\u6a21\u578b\u4ee5 `doc-` \u5f00\u5934\uff0c\u5982\u6a21\u578b `doc-densenet_lite_136-gru`\u3002\n  * `number`\uff1a\u4ec5\u8bc6\u522b**\u7eaf\u6570\u5b57**\uff08\u53ea\u80fd\u8bc6\u522b `0~9` \u5341\u4e2a\u6570\u5b57\uff09\u56fe\u7247\uff0c\u9002\u5408\u94f6\u884c\u5361\u53f7\u3001\u8eab\u4efd\u8bc1\u53f7\u7b49\u573a\u666f\u3002\u6b64\u7c7b\u6a21\u578b\u4ee5 `number-` \u5f00\u5934\uff0c\u5982\u6a21\u578b `number-densenet_lite_136-gru`\u3002\n  * `general`: \u901a\u7528\u573a\u666f\uff0c\u9002\u5408\u56fe\u7247\u65e0\u660e\u663e\u503e\u5411\u7684\u4e00\u822c\u56fe\u7247\u3002\u6b64\u7c7b\u6a21\u578b\u65e0\u7279\u5b9a\u5f00\u5934\uff0c\u4e0e\u65e7\u7248\u6a21\u578b\u540d\u79f0\u4fdd\u6301\u4e00\u81f4\uff0c\u5982\u6a21\u578b `densenet_lite_136-gru`\u3002\n  > \u6ce8\u610f \u26a0\ufe0f\uff1a\u4ee5\u4e0a\u8bf4\u660e\u4ec5\u4e3a\u53c2\u8003\uff0c\u5177\u4f53\u9009\u62e9\u6a21\u578b\u65f6\u5efa\u8bae\u4ee5\u5b9e\u9645\u6548\u679c\u4e3a\u51c6\u3002\n* \u52a0\u5165\u4e86\u4e24\u4e2a\u66f4\u5927\u7684\u7cfb\u5217\u6a21\u578b\uff1a\n  * `*-densenet_lite_246-gru_base`\uff1a\u4f18\u5148\u4f9b **\u77e5\u8bc6\u661f\u7403** [**CnOCR/CnSTD\u79c1\u4eab\u7fa4**](https://t.zsxq.com/FEYZRJQ) \u4f1a\u5458\u4f7f\u7528\uff0c\u4e00\u4e2a\u6708\u540e\u4f1a\u514d\u8d39\u5f00\u6e90\u3002\n  * `*-densenet_lite_666-gru_large`\uff1aPro \u6a21\u578b\uff0c\u8d2d\u4e70\u540e\u53ef\u4f7f\u7528\u3002\n  \n\u66f4\u591a\u7ec6\u8282\u8bf7\u53c2\u8003\uff1a[CnOCR V2.3 \u65b0\u7248\u53d1\u5e03\uff1a\u6a21\u578b\u66f4\u597d\u3001\u66f4\u591a\u3001\u66f4\u5927 | Breezedeus.com](https://www.breezedeus.com/article/cnocr-v2.3-better-more)\u3002\n\n\n\n[**CnOCR**](https://github.com/breezedeus/cnocr) \u662f **Python 3** \u4e0b\u7684**\u6587\u5b57\u8bc6\u522b**\uff08**Optical Character Recognition**\uff0c\u7b80\u79f0**OCR**\uff09\u5de5\u5177\u5305\uff0c\u652f\u6301**\u7b80\u4f53\u4e2d\u6587**\u3001**\u7e41\u4f53\u4e2d\u6587**\uff08\u90e8\u5206\u6a21\u578b\uff09\u3001**\u82f1\u6587**\u548c**\u6570\u5b57**\u7684\u5e38\u89c1\u5b57\u7b26\u8bc6\u522b\uff0c\u652f\u6301\u7ad6\u6392\u6587\u5b57\u7684\u8bc6\u522b\u3002\u81ea\u5e26\u4e86**20+\u4e2a** [\u8bad\u7ec3\u597d\u7684\u6a21\u578b](https://cnocr.readthedocs.io/zh-cn/stable/models/)\uff0c\u9002\u7528\u4e8e\u4e0d\u540c\u5e94\u7528\u573a\u666f\uff0c\u5b89\u88c5\u540e\u5373\u53ef\u76f4\u63a5\u4f7f\u7528\u3002\u540c\u65f6\uff0cCnOCR\u4e5f\u63d0\u4f9b\u7b80\u5355\u7684[\u8bad\u7ec3\u547d\u4ee4](https://cnocr.readthedocs.io/zh-cn/stable/train/)\u4f9b\u4f7f\u7528\u8005\u8bad\u7ec3\u81ea\u5df1\u7684\u6a21\u578b\u3002\u6b22\u8fce\u626b\u7801\u52a0\u5c0f\u52a9\u624b\u4e3a\u597d\u53cb\uff0c\u5907\u6ce8 `ocr`\uff0c\u5c0f\u52a9\u624b\u4f1a\u5b9a\u671f\u7edf\u4e00\u9080\u8bf7\u5927\u5bb6\u5165\u7fa4\uff1a\n\n<div align=\"center\">\n  <img src=\"https://huggingface.co/datasets/breezedeus/cnocr-wx-qr-code/resolve/main/wx-qr-code.JPG\" alt=\"\u5fae\u4fe1\u7fa4\u4e8c\u7ef4\u7801\" width=\"300px\"/>\n</div>\n\n\n\u4f5c\u8005\u4e5f\u7ef4\u62a4 **\u77e5\u8bc6\u661f\u7403** [**CnOCR/CnSTD\u79c1\u4eab\u7fa4**](https://t.zsxq.com/FEYZRJQ) \uff0c\u8fd9\u91cc\u9762\u7684\u63d0\u95ee\u4f1a\u8f83\u5feb\u5f97\u5230\u4f5c\u8005\u7684\u56de\u590d\uff0c\u6b22\u8fce\u52a0\u5165\u3002**\u77e5\u8bc6\u661f\u7403\u4f1a\u5458** \u53ef\u4eab\u53d7\u4ee5\u4e0b\u798f\u5229\uff1a\n\n- \u53ef\u514d\u8d39\u4e0b\u8f7d\u90e8\u5206**\u672a\u5f00\u6e90\u7684\u4ed8\u8d39\u6a21\u578b**\uff1b\n- \u8d2d\u4e70\u5176\u4ed6\u6240\u6709\u7684\u4ed8\u8d39\u6a21\u578b\u4e00\u5f8b\u516b\u6298\u4f18\u5316\uff1b\n- \u4f5c\u8005\u5feb\u901f\u56de\u590d\u4f7f\u7528\u8fc7\u7a0b\u4e2d\u9047\u5230\u7684\u5404\u79cd\u56f0\u96be\uff1b\n- \u4f5c\u8005\u6bcf\u6708\u63d0\u4f9b\u4e24\u6b21\u514d\u8d39\u7279\u6709\u6570\u636e\u7684\u8bad\u7ec3\u670d\u52a1\u3002\n- \u661f\u7403\u4f1a\u9646\u7eed\u53d1\u5e03\u4e00\u4e9bCnOCR/CnSTD\u76f8\u5173\u7684\u79c1\u6709\u8d44\u6599\uff1b\n- \u661f\u7403\u4f1a\u6301\u7eed\u53d1\u5e03 OCR/STD/CV \u7b49\u76f8\u5173\u7684\u6700\u65b0\u7814\u7a76\u8d44\u6599\u3002\n\n\n\n## \u8be6\u7ec6\u6587\u6863\n\n\u89c1 [CnOCR\u5728\u7ebf\u6587\u6863](https://cnocr.readthedocs.io/) \u3002\n\n## \u4f7f\u7528\u8bf4\u660e\n\n**CnOCR** \u4ece **V2.2** \u5f00\u59cb\uff0c\u5185\u90e8\u81ea\u52a8\u8c03\u7528\u6587\u5b57\u68c0\u6d4b\u5f15\u64ce **[CnSTD](https://github.com/breezedeus/cnstd)** \u8fdb\u884c\u6587\u5b57\u68c0\u6d4b\u548c\u5b9a\u4f4d\u3002\u6240\u4ee5 **CnOCR** V2.2 \u4e0d\u4ec5\u80fd\u8bc6\u522b\u6392\u7248\u7b80\u5355\u7684\u5370\u5237\u4f53\u6587\u5b57\u56fe\u7247\uff0c\u5982\u622a\u56fe\u56fe\u7247\uff0c\u626b\u63cf\u4ef6\u7b49\uff0c\u4e5f\u80fd\u8bc6\u522b**\u4e00\u822c\u56fe\u7247\u4e2d\u7684\u573a\u666f\u6587\u5b57**\u3002\n\n\u4ee5\u4e0b\u662f\u4e00\u4e9b\u4e0d\u540c\u573a\u666f\u7684\u8c03\u7528\u793a\u4f8b\u3002\n\n\n\n## \u4e0d\u540c\u573a\u666f\u7684\u8c03\u7528\u793a\u4f8b\n\n### \u5e38\u89c1\u7684\u56fe\u7247\u8bc6\u522b\n\n\u6240\u6709\u53c2\u6570\u90fd\u4f7f\u7528\u9ed8\u8ba4\u503c\u5373\u53ef\u3002\u5982\u679c\u53d1\u73b0\u6548\u679c\u4e0d\u591f\u597d\uff0c\u591a\u8c03\u6574\u4e0b\u5404\u4e2a\u53c2\u6570\u770b\u6548\u679c\uff0c\u6700\u7ec8\u5f80\u5f80\u80fd\u83b7\u5f97\u6bd4\u8f83\u7406\u60f3\u7684\u7cbe\u5ea6\u3002\n\n```python\nfrom cnocr import CnOcr\n\nimg_fp = './docs/examples/huochepiao.jpeg'\nocr = CnOcr()  # \u6240\u6709\u53c2\u6570\u90fd\u4f7f\u7528\u9ed8\u8ba4\u503c\nout = ocr.ocr(img_fp)\n\nprint(out)\n```\n\n\u8bc6\u522b\u7ed3\u679c\uff1a\n\n<div align=\"center\">\n  <img src=\"./docs/predict-outputs/huochepiao.jpeg-result.jpg\" alt=\"\u706b\u8f66\u7968\u8bc6\u522b\" width=\"800px\"/>\n</div>\n\n\n### \u6392\u7248\u7b80\u5355\u7684\u5370\u5237\u4f53\u622a\u56fe\u56fe\u7247\u8bc6\u522b\n\n\u9488\u5bf9 **\u6392\u7248\u7b80\u5355\u7684\u5370\u5237\u4f53\u6587\u5b57\u56fe\u7247**\uff0c\u5982\u622a\u56fe\u56fe\u7247\uff0c\u626b\u63cf\u4ef6\u56fe\u7247\u7b49\uff0c\u53ef\u4f7f\u7528 `det_model_name='naive_det'`\uff0c\u76f8\u5f53\u4e8e\u4e0d\u4f7f\u7528\u6587\u672c\u68c0\u6d4b\u6a21\u578b\uff0c\u800c\u4f7f\u7528\u7b80\u5355\u7684\u89c4\u5219\u8fdb\u884c\u5206\u884c\u3002\n\n> **Note**\n>\n>  `det_model_name='naive_det'` \u7684\u6548\u679c\u76f8\u5f53\u4e8e `V2.2` \u4e4b\u524d\uff08`V2.0.*`, `V2.1.*`\uff09\u7684 CnOCR \u7248\u672c\u3002\n\n\u4f7f\u7528 `det_model_name='naive_det'` \u7684\u6700\u5927\u4f18\u52bf\u662f**\u901f\u5ea6\u5feb**\uff0c\u52a3\u52bf\u662f\u5bf9\u56fe\u7247\u6bd4\u8f83\u6311\u5254\u3002\u5982\u4f55\u5224\u65ad\u662f\u5426\u8be5\u4f7f\u7528\u6b64\u68c0\u6d4b\u6a21\u578b\u5462\uff1f\u6700\u7b80\u5355\u7684\u65b9\u5f0f\u5c31\u662f\u62ff\u5e94\u7528\u56fe\u7247\u8bd5\u8bd5\u6548\u679c\uff0c\u6548\u679c\u597d\u5c31\u7528\uff0c\u4e0d\u597d\u5c31\u4e0d\u7528\u3002\n\n```python\nfrom cnocr import CnOcr\n\nimg_fp = './docs/examples/multi-line_cn1.png'\nocr = CnOcr(det_model_name='naive_det') \nout = ocr.ocr(img_fp)\n\nprint(out)\n```\n\n\u8bc6\u522b\u7ed3\u679c\uff1a\n\n<div align=\"center\">\n\n| \u56fe\u7247                                                                      | OCR\u7ed3\u679c                                                                                                                         |\n| ----------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- |\n| ![docs/examples/multi-line_cn1.png](./docs/examples/multi-line_cn1.png) | \u7f51\u7edc\u652f\u4ed8\u5e76\u65e0\u672c\u8d28\u7684\u533a\u522b\uff0c\u56e0\u4e3a<br />\u6bcf\u4e00\u4e2a\u624b\u673a\u53f7\u7801\u548c\u90ae\u4ef6\u5730\u5740\u80cc\u540e<br />\u90fd\u4f1a\u5bf9\u5e94\u7740\u4e00\u4e2a\u8d26\u6237--\u8fd9\u4e2a\u8d26<br />\u6237\u53ef\u4ee5\u662f\u4fe1\u7528\u5361\u8d26\u6237\u3001\u501f\u8bb0\u5361\u8d26<br />\u6237\uff0c\u4e5f\u5305\u62ec\u90ae\u5c40\u6c47\u6b3e\u3001\u624b\u673a\u4ee3<br />\u6536\u3001\u7535\u8bdd\u4ee3\u6536\u3001\u9884\u4ed8\u8d39\u5361\u548c\u70b9\u5361<br />\u7b49\u591a\u79cd\u5f62\u5f0f\u3002 |\n\n</div>\n\n\n### \u7ad6\u6392\u6587\u5b57\u8bc6\u522b\n\n\u91c7\u7528\u6765\u81ea [**PaddleOCR**](https://github.com/PaddlePaddle/PaddleOCR)\uff08\u4e4b\u540e\u7b80\u79f0 **ppocr**\uff09\u7684\u4e2d\u6587\u8bc6\u522b\u6a21\u578b `rec_model_name='ch_PP-OCRv3'` \u8fdb\u884c\u8bc6\u522b\u3002\n\n```python\nfrom cnocr import CnOcr\n\nimg_fp = './docs/examples/shupai.png'\nocr = CnOcr(rec_model_name='ch_PP-OCRv3')\nout = ocr.ocr(img_fp)\n\nprint(out)\n```\n\n\u8bc6\u522b\u7ed3\u679c\uff1a\n<div align=\"center\">\n  <img src=\"./docs/predict-outputs/shupai.png-result.jpg\" alt=\"\u7ad6\u6392\u6587\u5b57\u8bc6\u522b\" width=\"800px\"/>\n</div>\n\n\n### \u82f1\u6587\u8bc6\u522b\n\n\u867d\u7136\u4e2d\u6587\u68c0\u6d4b\u548c\u8bc6\u522b\u6a21\u578b\u4e5f\u80fd\u8bc6\u522b\u82f1\u6587\uff0c\u4f46**\u4e13\u4e3a\u82f1\u6587\u6587\u5b57\u8bad\u7ec3\u7684\u68c0\u6d4b\u5668\u548c\u8bc6\u522b\u5668\u5f80\u5f80\u7cbe\u5ea6\u66f4\u9ad8**\u3002\u5982\u679c\u662f\u7eaf\u82f1\u6587\u7684\u5e94\u7528\u573a\u666f\uff0c\u5efa\u8bae\u4f7f\u7528\u6765\u81ea **ppocr** \u7684\u82f1\u6587\u68c0\u6d4b\u6a21\u578b `det_model_name='en_PP-OCRv3_det'`\uff0c \u548c\u82f1\u6587\u8bc6\u522b\u6a21\u578b `rec_model_name='en_PP-OCRv3'` \u3002\n\n```python\nfrom cnocr import CnOcr\n\nimg_fp = './docs/examples/en_book1.jpeg'\nocr = CnOcr(det_model_name='en_PP-OCRv3_det', rec_model_name='en_PP-OCRv3')\nout = ocr.ocr(img_fp)\n\nprint(out)\n```\n\n\u8bc6\u522b\u7ed3\u679c\uff1a\n\n<div align=\"center\">\n  <img src=\"./docs/predict-outputs/en_book1.jpeg-result.jpg\" alt=\"\u82f1\u6587\u8bc6\u522b\" width=\"600px\"/>\n</div>\n\n\n### \u7e41\u4f53\u4e2d\u6587\u8bc6\u522b\n\n\u91c7\u7528\u6765\u81eappocr\u7684\u7e41\u4f53\u8bc6\u522b\u6a21\u578b `rec_model_name='chinese_cht_PP-OCRv3'` \u8fdb\u884c\u8bc6\u522b\u3002\n\n```python\nfrom cnocr import CnOcr\n\nimg_fp = './docs/examples/fanti.jpg'\nocr = CnOcr(rec_model_name='chinese_cht_PP-OCRv3')  # \u8bc6\u522b\u6a21\u578b\u4f7f\u7528\u7e41\u4f53\u8bc6\u522b\u6a21\u578b\nout = ocr.ocr(img_fp)\n\nprint(out)\n```\n\n\u4f7f\u7528\u6b64\u6a21\u578b\u65f6\u8bf7\u6ce8\u610f\u4ee5\u4e0b\u95ee\u9898\uff1a\n\n* \u8bc6\u522b\u7cbe\u5ea6\u4e00\u822c\uff0c\u4e0d\u662f\u5f88\u597d\uff1b\n\n* \u9664\u4e86\u7e41\u4f53\u5b57\uff0c\u5bf9\u6807\u70b9\u3001\u82f1\u6587\u3001\u6570\u5b57\u7684\u8bc6\u522b\u90fd\u4e0d\u597d\uff1b\n\n* \u6b64\u6a21\u578b\u4e0d\u652f\u6301\u7ad6\u6392\u6587\u5b57\u7684\u8bc6\u522b\u3002\n\n\u8bc6\u522b\u7ed3\u679c\uff1a\n<div align=\"center\">\n  <img src=\"./docs/predict-outputs/fanti.jpg-result.jpg\" alt=\"\u7e41\u4f53\u4e2d\u6587\u8bc6\u522b\" width=\"700px\"/>\n</div>\n\n\n### \u5355\u884c\u6587\u5b57\u7684\u56fe\u7247\u8bc6\u522b\n\n\u5982\u679c\u660e\u786e\u77e5\u9053\u5f85\u8bc6\u522b\u7684\u56fe\u7247\u662f\u5355\u884c\u6587\u5b57\u56fe\u7247\uff08\u5982\u4e0b\u56fe\uff09\uff0c\u53ef\u4ee5\u4f7f\u7528\u7c7b\u51fd\u6570 `CnOcr.ocr_for_single_line()` \u8fdb\u884c\u8bc6\u522b\u3002\u8fd9\u6837\u5c31\u7701\u6389\u4e86\u6587\u5b57\u68c0\u6d4b\u7684\u65f6\u95f4\uff0c\u901f\u5ea6\u4f1a\u5feb\u4e00\u500d\u4ee5\u4e0a\u3002\n\n<div align=\"center\">\n  <img src=\"./docs/examples/helloworld.jpg\" alt=\"\u5355\u884c\u6587\u672c\u8bc6\u522b\" width=\"300px\"/>\n</div>\n\u8c03\u7528\u4ee3\u7801\u5982\u4e0b\uff1a\n\n```python\nfrom cnocr import CnOcr\n\nimg_fp = './docs/examples/helloworld.jpg'\nocr = CnOcr()\nout = ocr.ocr_for_single_line(img_fp)\nprint(out)\n```\n\n\n\n### \u66f4\u591a\u5e94\u7528\u793a\u4f8b\n\n* **\u6838\u9178\u75ab\u82d7\u622a\u56fe\u8bc6\u522b**\n<div align=\"center\">\n  <img src=\"./docs/predict-outputs/jiankangbao.jpeg-result.jpg\" alt=\"\u6838\u9178\u75ab\u82d7\u622a\u56fe\u8bc6\u522b\" width=\"500px\"/>\n</div>\n\n* **\u8eab\u4efd\u8bc1\u8bc6\u522b**\n<div align=\"center\">\n  <img src=\"./docs/predict-outputs/aobama.webp-result.jpg\" alt=\"\u8eab\u4efd\u8bc1\u8bc6\u522b\" width=\"700px\"/>\n</div>\n\n* **\u996d\u5e97\u5c0f\u7968\u8bc6\u522b**\n<div align=\"center\">\n  <img src=\"./docs/predict-outputs/fapiao.jpeg-result.jpg\" alt=\"\u996d\u5e97\u5c0f\u7968\u8bc6\u522b\" width=\"500px\"/>\n</div>\n  \n\n  \n\n## \u5b89\u88c5\n\n\u55ef\uff0c\u987a\u5229\u7684\u8bdd\u4e00\u884c\u547d\u4ee4\u5373\u53ef\u3002\n\n```bash\n$ pip install cnocr[ort-cpu]\n```\n\n\u5982\u679c\u662f **GPU** \u73af\u5883\u4f7f\u7528 ONNX \u6a21\u578b\uff0c\u8bf7\u4f7f\u7528\u4ee5\u4e0b\u547d\u4ee4\u8fdb\u884c\u5b89\u88c5\uff1a\n\n```bash\n$ pip install cnocr[ort-gpu]\n```\n\n\n\n\u5982\u679c\u8981\u8bad\u7ec3\u81ea\u5df1\u7684\u6a21\u578b\uff0c\uff0c\u53ef\u4ee5\u4f7f\u7528\u4ee5\u4e0b\u547d\u4ee4\u5b89\u88c5\uff1a\n\n```bash\n$ pip install cnocr[dev]\n```\n\n\n\n\u5b89\u88c5\u901f\u5ea6\u6162\u7684\u8bdd\uff0c\u53ef\u4ee5\u6307\u5b9a\u56fd\u5185\u7684\u5b89\u88c5\u6e90\uff0c\u5982\u4f7f\u7528\u963f\u91cc\u4e91\u7684\u5b89\u88c5\u6e90\uff1a\n\n```bash\n$ pip install cnocr[ort-cpu] -i https://mirrors.aliyun.com/pypi/simple\n```\n\n> **Note** \n>\n> \u8bf7\u4f7f\u7528 **Python3**\uff083.7.\\*~3.10.\\*\u4e4b\u95f4\u7684\u7248\u672c\u5e94\u8be5\u90fd\u884c\uff09\uff0c\u6ca1\u6d4b\u8fc7Python2\u4e0b\u662f\u5426ok\u3002\n\n\u66f4\u591a\u8bf4\u660e\u53ef\u89c1 [\u5b89\u88c5\u6587\u6863](https://cnocr.readthedocs.io/zh-cn/stable/install/)\u3002\n\n> **Warning** \n>\n> \u5982\u679c\u7535\u8111\u4e2d\u4ece\u672a\u5b89\u88c5\u8fc7 `PyTorch`\uff0c`OpenCV` python\u5305\uff0c\u521d\u6b21\u5b89\u88c5\u53ef\u80fd\u4f1a\u9047\u5230\u95ee\u9898\uff0c\u4f46\u4e00\u822c\u90fd\u662f\u5e38\u89c1\u95ee\u9898\uff0c\u53ef\u4ee5\u81ea\u884c\u767e\u5ea6/Google\u89e3\u51b3\u3002\n\n\n\n### Docker Image\n\n\u53ef\u4ee5\u4ece [Docker Hub](https://hub.docker.com/u/breezedeus) \u76f4\u63a5\u62c9\u53d6\u5df2\u5b89\u88c5\u597d CnOCR \u7684\u955c\u50cf\u4f7f\u7528\u3002\n\n```bash\n$ docker pull breezedeus/cnocr:latest\n```\n\n\u66f4\u591a\u8bf4\u660e\u53ef\u89c1 [\u5b89\u88c5\u6587\u6863](https://cnocr.readthedocs.io/zh-cn/stable/install/)\u3002\n\n\n\n## HTTP\u670d\u52a1\n\nCnOCR **V2.2.1** \u52a0\u5165\u4e86\u57fa\u4e8e FastAPI \u7684HTTP\u670d\u52a1\u3002\u5f00\u542f\u670d\u52a1\u9700\u8981\u5b89\u88c5\u51e0\u4e2a\u989d\u5916\u7684\u5305\uff0c\u53ef\u4ee5\u4f7f\u7528\u4ee5\u4e0b\u547d\u4ee4\u5b89\u88c5\uff1a\n\n```bash\npip install cnocr[serve]\n```\n\n\n\n\u5b89\u88c5\u5b8c\u6210\u540e\uff0c\u53ef\u4ee5\u901a\u8fc7\u4ee5\u4e0b\u547d\u4ee4\u542f\u52a8HTTP\u670d\u52a1\uff08**`-p`** \u540e\u9762\u7684\u6570\u5b57\u662f**\u7aef\u53e3**\uff0c\u53ef\u4ee5\u6839\u636e\u9700\u8981\u81ea\u884c\u8c03\u6574\uff09\uff1a\n\n```bash\ncnocr serve -p 8501\n```\n\n\n\n\u670d\u52a1\u5f00\u542f\u540e\uff0c\u53ef\u4ee5\u4f7f\u7528\u4ee5\u4e0b\u65b9\u5f0f\u8c03\u7528\u670d\u52a1\u3002\n\n\n\n### \u547d\u4ee4\u884c\n\n\u6bd4\u5982\u5f85\u8bc6\u522b\u6587\u4ef6\u4e3a `docs/examples/huochepiao.jpeg`\uff0c\u5982\u4e0b\u4f7f\u7528 curl \u8c03\u7528\u670d\u52a1\uff1a\n\n```bash\n> curl -F image=@docs/examples/huochepiao.jpeg http://0.0.0.0:8501/ocr\n```\n\n\n\n### Python\n\n\u4f7f\u7528\u5982\u4e0b\u65b9\u5f0f\u8c03\u7528\u670d\u52a1\uff1a\n\n```python\nimport requests\n\nimage_fp = 'docs/examples/huochepiao.jpeg'\nr = requests.post(\n    'http://0.0.0.0:8501/ocr', files={'image': (image_fp, open(image_fp, 'rb'), 'image/png')},\n)\nocr_out = r.json()['results']\nprint(ocr_out)\n```\n\n\n\n\u5177\u4f53\u4e5f\u53ef\u53c2\u8003\u6587\u4ef6 [scripts/screenshot_daemon_with_server.py](scripts/screenshot_daemon_with_server.py) \u3002 \n\n\n\n### \u5176\u4ed6\u8bed\u8a00\n\n\u8bf7\u53c2\u7167 curl \u7684\u8c03\u7528\u65b9\u5f0f\u81ea\u884c\u5b9e\u73b0\u3002\n\n\n\n\n\n## \u53ef\u4f7f\u7528\u7684\u6a21\u578b\n\n### \u53ef\u4f7f\u7528\u7684\u68c0\u6d4b\u6a21\u578b\n\n\u5177\u4f53\u53c2\u8003 [CnSTD\u7684\u4e0b\u8f7d\u8bf4\u660e](https://github.com/breezedeus/CnSTD?tab=readme-ov-file#%E5%B7%B2%E6%9C%89std%E6%A8%A1%E5%9E%8B)\u3002\n\n| `det_model_name`                                             | PyTorch \u7248\u672c | ONNX \u7248\u672c | \u6a21\u578b\u539f\u59cb\u6765\u6e90 | \u6a21\u578b\u6587\u4ef6\u5927\u5c0f | \u652f\u6301\u8bed\u8a00                       | \u662f\u5426\u652f\u6301\u7ad6\u6392\u6587\u5b57\u8bc6\u522b |\n| ------------------------------------------------------------ | ------------ | --------- | ------------ | ------------ | ------------------------------ | -------------------- |\n| db_shufflenet_v2                                             | \u221a            | X         | cnocr        | 18 M         | \u7b80\u4f53\u4e2d\u6587\u3001\u7e41\u4f53\u4e2d\u6587\u3001\u82f1\u6587\u3001\u6570\u5b57 | \u221a                    |\n| **db_shufflenet_v2_small**                                   | \u221a            | X         | cnocr        | 12 M         | \u7b80\u4f53\u4e2d\u6587\u3001\u7e41\u4f53\u4e2d\u6587\u3001\u82f1\u6587\u3001\u6570\u5b57 | \u221a                    |\n| db_mobilenet_v3                                              | \u221a            | X         | cnocr        | 16 M         | \u7b80\u4f53\u4e2d\u6587\u3001\u7e41\u4f53\u4e2d\u6587\u3001\u82f1\u6587\u3001\u6570\u5b57 | \u221a                    |\n| db_mobilenet_v3_small                                        | \u221a            | X         | cnocr        | 7.9 M        | \u7b80\u4f53\u4e2d\u6587\u3001\u7e41\u4f53\u4e2d\u6587\u3001\u82f1\u6587\u3001\u6570\u5b57 | \u221a                    |\n| db_resnet34                                                  | \u221a            | X         | cnocr        | 86 M         | \u7b80\u4f53\u4e2d\u6587\u3001\u7e41\u4f53\u4e2d\u6587\u3001\u82f1\u6587\u3001\u6570\u5b57 | \u221a                    |\n| db_resnet18                                                  | \u221a            | X         | cnocr        | 47 M         | \u7b80\u4f53\u4e2d\u6587\u3001\u7e41\u4f53\u4e2d\u6587\u3001\u82f1\u6587\u3001\u6570\u5b57 | \u221a                    |\n| ch_PP-OCRv4_det                                              | X            | \u221a         | ppocr        | 4.5 M        | \u7b80\u4f53\u4e2d\u6587\u3001\u7e41\u4f53\u4e2d\u6587\u3001\u82f1\u6587\u3001\u6570\u5b57 | \u221a                    |\n| ch_PP-OCRv4_det_server                                       | X            | \u221a         | ppocr        | 108 M        | \u7b80\u4f53\u4e2d\u6587\u3001\u7e41\u4f53\u4e2d\u6587\u3001\u82f1\u6587\u3001\u6570\u5b57 | \u221a                    |\n| ch_PP-OCRv3_det                                              | X            | \u221a         | ppocr        | 2.3 M        | \u7b80\u4f53\u4e2d\u6587\u3001\u7e41\u4f53\u4e2d\u6587\u3001\u82f1\u6587\u3001\u6570\u5b57 | \u221a                    |\n| **en_PP-OCRv3_det**                                          | X            | \u221a         | ppocr        | 2.3 M        | **\u82f1\u6587**\u3001\u6570\u5b57                 | \u221a                    |\n\n\n\n### \u53ef\u4f7f\u7528\u7684\u8bc6\u522b\u6a21\u578b\n\n\u76f8\u6bd4\u4e8e CnOCR V2.2.* \u7248\u672c\uff0c**V2.3** \u4e2d\u7684\u5927\u90e8\u5206\u6a21\u578b\u90fd\u7ecf\u8fc7\u4e86\u91cd\u65b0\u8bad\u7ec3\u548c\u7cbe\u8c03\uff0c\u7cbe\u5ea6\u6bd4\u65e7\u7248\u6a21\u578b\u66f4\u9ad8\u3002\u540c\u65f6\uff0c\u52a0\u5165\u4e86\u4e24\u4e2a\u53c2\u6570\u91cf\u66f4\u591a\u7684\u6a21\u578b\u7cfb\u5217\uff1a\n\n  * `*-densenet_lite_246-gru_base`\uff1a\u4f18\u5148\u4f9b **\u77e5\u8bc6\u661f\u7403** [**CnOCR/CnSTD\u79c1\u4eab\u7fa4**](https://t.zsxq.com/FEYZRJQ) \u4f1a\u5458\u4f7f\u7528\uff0c\u540e\u7eed\u4f1a\u514d\u8d39\u5f00\u6e90\u3002\n  * `*-densenet_lite_666-gru_large`\uff1a**Pro \u6a21\u578b**\uff0c\u8d2d\u4e70\u540e\u53ef\u4f7f\u7528\u3002\u8d2d\u4e70\u94fe\u63a5\u89c1\u6587\u6863\uff1a\n\n**V2.3** \u4e2d\u7684\u6a21\u578b\u6309\u4f7f\u7528\u573a\u666f\u53ef\u4ee5\u5206\u4e3a\u4ee5\u4e0b\u51e0\u5927\u7c7b\uff1a\n\n* `scene`\uff1a\u573a\u666f\u56fe\u7247\uff0c\u9002\u5408\u8bc6\u522b\u4e00\u822c\u62cd\u7167\u56fe\u7247\u4e2d\u7684\u6587\u5b57\u3002\u6b64\u7c7b\u6a21\u578b\u4ee5 `scene-` \u5f00\u5934\uff0c\u5982\u6a21\u578b `scene-densenet_lite_136-gru`\u3002\n* `doc`\uff1a\u6587\u6863\u56fe\u7247\uff0c\u9002\u5408\u8bc6\u522b\u89c4\u5219\u6587\u6863\u7684\u622a\u56fe\u56fe\u7247\uff0c\u5982\u4e66\u7c4d\u626b\u63cf\u4ef6\u7b49\u3002\u6b64\u7c7b\u6a21\u578b\u4ee5 `doc-` \u5f00\u5934\uff0c\u5982\u6a21\u578b `doc-densenet_lite_136-gru`\u3002\n* `number`\uff1a\u4ec5\u8bc6\u522b**\u7eaf\u6570\u5b57**\uff08\u53ea\u80fd\u8bc6\u522b `0~9` \u5341\u4e2a\u6570\u5b57\uff09\u56fe\u7247\uff0c\u9002\u5408\u94f6\u884c\u5361\u53f7\u3001\u8eab\u4efd\u8bc1\u53f7\u7b49\u573a\u666f\u3002\u6b64\u7c7b\u6a21\u578b\u4ee5 `number-` \u5f00\u5934\uff0c\u5982\u6a21\u578b `number-densenet_lite_136-gru`\u3002\n* `general`: \u901a\u7528\u573a\u666f\uff0c\u9002\u5408\u56fe\u7247\u65e0\u660e\u663e\u503e\u5411\u7684\u4e00\u822c\u56fe\u7247\u3002\u6b64\u7c7b\u6a21\u578b\u65e0\u7279\u5b9a\u5f00\u5934\uff0c\u4e0e\u65e7\u7248\u6a21\u578b\u540d\u79f0\u4fdd\u6301\u4e00\u81f4\uff0c\u5982\u6a21\u578b `densenet_lite_136-gru`\u3002\n\n> \u6ce8\u610f \u26a0\ufe0f\uff1a\u4ee5\u4e0a\u8bf4\u660e\u4ec5\u4f9b\u53c2\u8003\uff0c\u5177\u4f53\u9009\u62e9\u6a21\u578b\u65f6\u5efa\u8bae\u4ee5\u5b9e\u9645\u6548\u679c\u4e3a\u51c6\u3002\n\n\u66f4\u591a\u8bf4\u660e\u89c1\uff1a[\u53ef\u7528\u6a21\u578b](https://cnocr.readthedocs.io/zh-cn/stable/models/)\u3002\n\n| `rec_model_name`                                             | PyTorch \u7248\u672c | ONNX \u7248\u672c | \u6a21\u578b\u539f\u59cb\u6765\u6e90 | \u6a21\u578b\u6587\u4ef6\u5927\u5c0f | \u652f\u6301\u8bed\u8a00                            | \u662f\u5426\u652f\u6301\u7ad6\u6392\u6587\u5b57\u8bc6\u522b |\n| ------------------------------------------------------------ | ------------ | --------- | ------------ | ------------ | ----------------------------------- | -------------------- |\n| **densenet_lite_136-gru** \ud83c\udd95                                  | \u221a            | \u221a         | cnocr        | 12 M         | \u7b80\u4f53\u4e2d\u6587\u3001\u82f1\u6587\u3001\u6570\u5b57                | X                    |\n| **scene-densenet_lite_136-gru** \ud83c\udd95                            | \u221a            | \u221a         | cnocr        | 12 M         | \u7b80\u4f53\u4e2d\u6587\u3001\u82f1\u6587\u3001\u6570\u5b57                | X                    |\n| **doc-densenet_lite_136-gru** \ud83c\udd95                              | \u221a            | \u221a         | cnocr        | 12 M         | \u7b80\u4f53\u4e2d\u6587\u3001\u82f1\u6587\u3001\u6570\u5b57                | X                    |\n| **densenet_lite_246-gru_base** \ud83c\udd95 <br /> ([\u661f\u7403\u4f1a\u5458](https://t.zsxq.com/FEYZRJQ)\u4e13\u4eab) | \u221a            | \u221a         | cnocr        | 25 M         | \u7b80\u4f53\u4e2d\u6587\u3001\u82f1\u6587\u3001\u6570\u5b57                | X                    |\n| **scene-densenet_lite_246-gru_base** \ud83c\udd95 <br /> ([\u661f\u7403\u4f1a\u5458](https://t.zsxq.com/FEYZRJQ)\u4e13\u4eab) | \u221a            | \u221a         | cnocr        | 25 M         | \u7b80\u4f53\u4e2d\u6587\u3001\u82f1\u6587\u3001\u6570\u5b57                | X                    |\n| **doc-densenet_lite_246-gru_base** \ud83c\udd95 <br /> ([\u661f\u7403\u4f1a\u5458](https://t.zsxq.com/FEYZRJQ)\u4e13\u4eab) | \u221a            | \u221a         | cnocr        | 25 M         | \u7b80\u4f53\u4e2d\u6587\u3001\u82f1\u6587\u3001\u6570\u5b57                | X                    |\n| **densenet_lite_666-gru_large** \ud83c\udd95 <br />\uff08\u8d2d\u4e70\u94fe\u63a5\uff1a[B\u7ad9](https://gf.bilibili.com/item/detail/1104812055)\u3001[Lemon Squeezy](https://ocr.lemonsqueezy.com/)\uff09 | \u221a            | \u221a         | cnocr        | 82 M         | \u7b80\u4f53\u4e2d\u6587\u3001\u82f1\u6587\u3001\u6570\u5b57                | X                    |\n| **scene-densenet_lite_666-gru_large** \ud83c\udd95 <br />\uff08\u8d2d\u4e70\u94fe\u63a5\uff1a[B\u7ad9](https://gf.bilibili.com/item/detail/1104815055)\u3001[Lemon Squeezy](https://ocr.lemonsqueezy.com/)\uff09 | \u221a            | \u221a         | cnocr        | 82 M         | \u7b80\u4f53\u4e2d\u6587\u3001\u82f1\u6587\u3001\u6570\u5b57                | X                    |\n| **doc-densenet_lite_666-gru_large** \ud83c\udd95 <br />\uff08\u8d2d\u4e70\u94fe\u63a5\uff1a[B\u7ad9](https://gf.bilibili.com/item/detail/1104820055)\u3001[Lemon Squeezy](https://ocr.lemonsqueezy.com/)\uff09 | \u221a            | \u221a         | cnocr        | 82 M         | \u7b80\u4f53\u4e2d\u6587\u3001\u82f1\u6587\u3001\u6570\u5b57                | X                    |\n| **number-densenet_lite_136-fc** \ud83c\udd95                            | \u221a            | \u221a         | cnocr        | 2.7 M        | **\u7eaf\u6570\u5b57**\uff08\u4ec5\u5305\u542b `0~9` \u5341\u4e2a\u6570\u5b57\uff09 | X                    |\n| **number-densenet_lite_136-gru**  \ud83c\udd95 <br /> ([\u661f\u7403\u4f1a\u5458](https://t.zsxq.com/FEYZRJQ)\u4e13\u4eab) | \u221a            | \u221a         | cnocr        | 5.5 M        | **\u7eaf\u6570\u5b57**\uff08\u4ec5\u5305\u542b `0~9` \u5341\u4e2a\u6570\u5b57\uff09 | X                    |\n| **number-densenet_lite_666-gru_large** \ud83c\udd95 <br />\uff08\u8d2d\u4e70\u94fe\u63a5\uff1a[B\u7ad9](https://gf.bilibili.com/item/detail/1104055055)\u3001[Lemon Squeezy](https://ocr.lemonsqueezy.com/)\uff09 | \u221a            | \u221a         | cnocr        | 55 M         | **\u7eaf\u6570\u5b57**\uff08\u4ec5\u5305\u542b `0~9` \u5341\u4e2a\u6570\u5b57\uff09 | X                    |\n| ch_PP-OCRv4                                                  | X            | \u221a         | ppocr        | 10 M         | \u7b80\u4f53\u4e2d\u6587\u3001\u82f1\u6587\u3001\u6570\u5b57                | \u221a                    |\n| ch_PP-OCRv4_server                                           | X            | \u221a         | ppocr        | 86 M         | \u7b80\u4f53\u4e2d\u6587\u3001\u82f1\u6587\u3001\u6570\u5b57                | \u221a                    |\n| ch_PP-OCRv3                                                  | X            | \u221a         | ppocr        | 10 M         | \u7b80\u4f53\u4e2d\u6587\u3001\u82f1\u6587\u3001\u6570\u5b57                | \u221a                    |\n| ch_ppocr_mobile_v2.0                                         | X            | \u221a         | ppocr        | 4.2 M        | \u7b80\u4f53\u4e2d\u6587\u3001\u82f1\u6587\u3001\u6570\u5b57                | \u221a                    |\n| en_PP-OCRv4                                                  | X            | \u221a         | ppocr        | 8.6 M        | **\u82f1\u6587**\u3001\u6570\u5b57                      | \u221a                    |\n| en_PP-OCRv3                                                  | X            | \u221a         | ppocr        | 8.5 M        | **\u82f1\u6587**\u3001\u6570\u5b57                      | \u221a                    |\n| en_number_mobile_v2.0                                        | X            | \u221a         | ppocr        | 1.8 M        | **\u82f1\u6587**\u3001\u6570\u5b57                      | \u221a                    |\n| chinese_cht_PP-OCRv3                                         | X            | \u221a         | ppocr        | 11 M         | **\u7e41\u4f53\u4e2d\u6587**\u3001\u82f1\u6587\u3001\u6570\u5b57            | X                    |\n| japan_PP-OCRv3                                               | X            | \u221a         | ppocr        | 9.6 M         | **\u65e5\u6587**\u3001\u82f1\u6587\u3001\u6570\u5b57                | \u221a                    |\n| korean_PP-OCRv3                                              | X            | \u221a         | ppocr        | 9.4 M         | **\u97e9\u6587**\u3001\u82f1\u6587\u3001\u6570\u5b57                | \u221a                    |\n| latin_PP-OCRv3                                               | X            | \u221a         | ppocr        | 8.6 M         | **\u62c9\u4e01\u6587**\u3001\u82f1\u6587\u3001\u6570\u5b57              | \u221a                    |\n| arabic_PP-OCRv3                                              | X            | \u221a         | ppocr        | 8.6 M         | **\u963f\u62c9\u4f2f\u6587**\u3001\u82f1\u6587\u3001\u6570\u5b57            | \u221a                    |\n\n\n\n## \u672a\u6765\u5de5\u4f5c\n\n* [x] \u652f\u6301\u56fe\u7247\u5305\u542b\u591a\u884c\u6587\u5b57 (`Done`)\n* [x] crnn\u6a21\u578b\u652f\u6301\u53ef\u53d8\u957f\u9884\u6d4b\uff0c\u63d0\u5347\u7075\u6d3b\u6027 (since `V1.0.0`)\n* [x] \u5b8c\u5584\u6d4b\u8bd5\u7528\u4f8b (`Doing`)\n* [x] \u4feebugs\uff08\u76ee\u524d\u4ee3\u7801\u8fd8\u6bd4\u8f83\u51cc\u4e71\u3002\u3002\uff09 (`Doing`)\n* [x] \u652f\u6301`\u7a7a\u683c`\u8bc6\u522b\uff08since `V1.1.0`\uff09\n* [x] \u5c1d\u8bd5\u65b0\u6a21\u578b\uff0c\u5982 DenseNet\uff0c\u8fdb\u4e00\u6b65\u63d0\u5347\u8bc6\u522b\u51c6\u786e\u7387\uff08since `V1.1.0`\uff09\n* [x] \u4f18\u5316\u8bad\u7ec3\u96c6\uff0c\u53bb\u6389\u4e0d\u5408\u7406\u7684\u6837\u672c\uff1b\u5728\u6b64\u57fa\u7840\u4e0a\uff0c\u91cd\u65b0\u8bad\u7ec3\u5404\u4e2a\u6a21\u578b\n* [x] \u7531 MXNet \u6539\u4e3a PyTorch \u67b6\u6784\uff08since `V2.0.0`\uff09\n* [x] \u57fa\u4e8e PyTorch \u8bad\u7ec3\u66f4\u9ad8\u6548\u7684\u6a21\u578b\n* [x] \u652f\u6301\u5217\u683c\u5f0f\u7684\u6587\u5b57\u8bc6\u522b\n* [x] \u6253\u901a\u4e0e [CnSTD](https://github.com/breezedeus/cnstd) \u7684\u65e0\u7f1d\u8854\u63a5\uff08since `V2.2`\uff09\n* [ ] \u6a21\u578b\u7cbe\u5ea6\u8fdb\u4e00\u6b65\u4f18\u5316\n* [ ] \u652f\u6301\u66f4\u591a\u7684\u5e94\u7528\u573a\u666f\n\n\n\n## \u7ed9\u4f5c\u8005\u6765\u676f\u5496\u5561\n\n\u5f00\u6e90\u4e0d\u6613\uff0c\u5982\u679c\u6b64\u9879\u76ee\u5bf9\u60a8\u6709\u5e2e\u52a9\uff0c\u53ef\u4ee5\u8003\u8651 [\u7ed9\u4f5c\u8005\u52a0\u70b9\u6cb9\ud83e\udd64\uff0c\u9f13\u9f13\u6c14\ud83d\udcaa\ud83c\udffb](https://cnocr.readthedocs.io/zh-cn/stable/buymeacoffee/) \u3002\n\n---\n\n\u5b98\u65b9\u4ee3\u7801\u5e93\uff1a[https://github.com/breezedeus/cnocr](https://github.com/breezedeus/cnocr)\u3002\n\n\n",
    "bugtrack_url": null,
    "license": "Apache 2.0",
    "summary": "Python3 package for Chinese/English OCR, with small pretrained models",
    "version": "2.3.1",
    "project_urls": {
        "Homepage": "https://github.com/breezedeus/cnocr"
    },
    "split_keywords": [],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "9bc3e1c4725156196c4fa8e09760583c9cf02f288773687d3c1f392f074261ba",
                "md5": "e3534173646ec9d94662c8550ae776e7",
                "sha256": "e0924caa84dd1169a57a127cd87867488be6a114cee8c08e183f4c41bb192b09"
            },
            "downloads": -1,
            "filename": "cnocr-2.3.1-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "e3534173646ec9d94662c8550ae776e7",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": null,
            "size": 224642,
            "upload_time": "2024-11-30T13:41:26",
            "upload_time_iso_8601": "2024-11-30T13:41:26.759558Z",
            "url": "https://files.pythonhosted.org/packages/9b/c3/e1c4725156196c4fa8e09760583c9cf02f288773687d3c1f392f074261ba/cnocr-2.3.1-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "e69a923b55bc621a386f0a7df4b93f36e3067afdd52e73727f4c9e32c8f50bc7",
                "md5": "991b67915ec49d70f6d25ba0b69f991c",
                "sha256": "b4134f7c15a861bd3042dbd3a0c9c6204a12b161a040d78bdf99ea18942c97ec"
            },
            "downloads": -1,
            "filename": "cnocr-2.3.1.tar.gz",
            "has_sig": false,
            "md5_digest": "991b67915ec49d70f6d25ba0b69f991c",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": null,
            "size": 160575,
            "upload_time": "2024-11-30T13:41:39",
            "upload_time_iso_8601": "2024-11-30T13:41:39.500008Z",
            "url": "https://files.pythonhosted.org/packages/e6/9a/923b55bc621a386f0a7df4b93f36e3067afdd52e73727f4c9e32c8f50bc7/cnocr-2.3.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-11-30 13:41:39",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "breezedeus",
    "github_project": "cnocr",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "requirements": [],
    "lcname": "cnocr"
}
        
Elapsed time: 0.31796s