---
title: anyocr
canonical_url: "https://www.modelscope.cn/models/anyforge/anyocr"
md_url: "https://www.modelscope.cn/models/anyforge/anyocr.md"
repository: anyforge/anyocr
last_updated: 2025-05-13
license: "Apache License 2.0"
pipeline_tag: ocr-recognition
tasks:
  - ocr-recognition
  - ocr-detection
library_name:
  - onnx
  - other
frameworks:
  - other
downloads: 475
stars: 2
---

# anyocr

> anyocr - anyforge 在 ModelScope 开源的模型。目前，我们非常开心的推出了兼容多平台的onnx格式的ocr工具AnyOCR，其核心亮点在于采用ONNXRuntime作为推理引擎，相比PaddlePaddle推理引擎，确保了高效稳定的运行。

anyforge/anyocr 是 ModelScope 魔搭社区上的ocr-recognition、ocr-detection模型，采用 Apache License 2.0 许可。

- **Repository**: anyforge/anyocr
- **License**: Apache License 2.0
- **Tasks**: ocr-recognition, ocr-detection
- **Downloads**: 475
- **Stars**: 2
- **Last updated**: 2025-05-13

Source: https://www.modelscope.cn/models/anyforge/anyocr

---

# AnyOCR

<a href="https://huggingface.co/anyforge/anyocr" target="_blank"><img src="https://img.shields.io/badge/%F0%9F%A4%97-HuggingFace-blue"></a>
<a href="https://www.modelscope.cn/models/anyforge/anyocr" target="_blank"><img alt="Static Badge" src="https://img.shields.io/badge/%E9%AD%94%E6%90%AD-ModelScope-blue"></a>
<a href=""><img src="https://img.shields.io/badge/Python->=3.6-aff.svg"></a>
<a href=""><img src="https://img.shields.io/badge/OS-Linux%2C%20Win%2C%20Mac-pink.svg"></a>
<a href=""><img alt="Static Badge" src="https://img.shields.io/badge/engine-cpu_gpu_onnxruntime-blue"></a>

```
    ___                ____  __________ 
   /   |  ____  __  __/ __ \/ ____/ __ \
  / /| | / __ \/ / / / / / / /   / /_/ /
 / ___ |/ / / / /_/ / /_/ / /___/ _, _/ 
/_/  |_/_/ /_/\__, /\____/\____/_/ |_|  
             /____/                     

```

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


## 1. 简介

目前，我们非常开心的推出了兼容多平台的onnx格式的ocr工具`AnyOCR`，其核心亮点在于采用ONNXRuntime作为推理引擎，相比PaddlePaddle推理引擎，确保了高效稳定的运行。

- github地址：[AnyOCR](https://github.com/anyforge/anyocr)
- Hugging Face: [AnyOCR](https://huggingface.co/anyforge/anyocr)
- ModelScope: [AnyOCR](https://www.modelscope.cn/models/anyforge/anyocr)

## 2. 缘起

PaddlePaddle团队在PaddleOCR项目上，实现了一个基于PaddlePaddle的OCR工具，其性能和功能都十分强大，但是，在某些场景下，PaddlePaddle推理引擎的运行速度和稳定性，都存在一些问题。所以我们搜集很多新的OCR数据对paddleocr进行微调优化，并导出成onnx格式，直接使用onnxruntime推理，避开paddlepaddle推理引擎的坑，并支持cpu，gpu等。

Paddleocr在一些新型的数据上或者领域数据上表现的并不是很好，所以我们采集了很多数据进行微调训练，覆盖各个领域，包括：
- cc-ocr
- 工业
- 医疗
- 体检
- 中文
- 英文
- 论文
- 网络
- 自建
- 等等

数据集总计：大于`385K`。

### 扩展训练

- 训练集：`385K`
- 测试集：`5k`
- 准确率：`0.952`

### 模型介绍

- 检测模型：`anyocr_det_ch_v4_lite.onnx`，由`ch_PP-OCRv4_det`在我们的数据集上微调训练而来。
- 识别模型：`anyocr_rec_v4_server.onnx`，由`ch_PP-OCRv4_server_rec`在我们的数据集上微调训练而来。
- 方向分类：`anyocr_cls_v4.onnx`，来源于`ch_ppocr_mobile_v2.0_cls`未做训练。
- 文字字符：`anyocr_keys_v4.txt`，来源于`ppocr/utils/ppocr_keys_v1.txt`。
- 更大更强：我们还训练了一个更大更强的文字识别模型，支持中英文、数字识别，支持1.5万+字符和部分生僻字识别，需要可邮件申请使用。

### 评估

自建评估集：`1.1K`

抽取1150对未训练的数据作为评估，覆盖中文，英文，数字，符号等。

我们的评估集与其它ocr准确率的测试评估：

 - anyocr: 0.97
 - 百度paddleocr：0.92
 - 阿里通义读光ocr：0.86
 - 阶跃星辰GOT_OCR2.0：0.89
 - olm-ocr: 0.46

## 3. 使用方法

### 安装依赖

```bash
## for cpu
pip install -r requirements.txt

## for gpu
pip install -r requirements-gpu.txt
```

### 使用方法

#### 您可以通过如下git clone命令，或者ModelScope SDK来下载模型

SDK下载
```bash
#安装ModelScope
pip install modelscope
```
```python
#SDK模型下载
from modelscope import snapshot_download
model_dir = snapshot_download('oriforge/anyocr')
```
Git下载
```
#Git模型下载
git clone https://www.modelscope.cn/oriforge/anyocr.git
```



```python
## simple
# use_det = True or False, 是否使用文本检测
# use_cls = True or False, 是否使用文本方向
# use_rec = True or False, 是否使用文本识别

from anyocr.pipeline import anyocr

model = anyocr()

res = model.raw_completions('/to/your/image',use_cls=True,use_det=True)

print(res)


## 返回单字坐标

from anyocr.pipeline import anyocr

model = anyocr()

res = model.raw_completions('/to/your/image',use_cls=True,use_det=True,return_word_box = True)


### 自定义模型地址
from anyocr.pipeline import anyocr
from anyocr.pipeline import anyocrConfig


config = anyocrConfig(
    det_model_path = "anyocr/models/anyocr_det_ch_v4_lite.onnx",
    rec_model_path = "anyocr/models/anyocr_rec_v4_server.onnx",
    cls_model_path = "anyocr/models/anyocr_cls_v4.onnx",
    rec_keys_path = "anyocr/models/anyocr_keys_v4.txt"   
)
config = config.model_dump()
model = anyocr(config)

res = model.raw_completions('/to/your/image',use_cls=True,use_det=True)

print(res)
```

### Use paddleocr integration

```python
from paddleocr import PaddleOCR, draw_ocr

ocrmodel = PaddleOCR(
    use_gpu = False, # or True
    det_model_dir = "anyocr/paddlemodels/det/ch_PP-OCRv4_det_infer",
    cls_model_dir = "anyocr/paddlemodels/cls/ch_ppocr_mobile_v2.0_cls_infer",
    rec_model_dir = "anyocr/paddlemodels/rec/anyocr_rec_v4_server",
    rec_char_dict_path = "anyocr/paddlemodels/anyocr_keys_v4.txt",
    use_dilation = True,  
)
img_path = '/to/your/image'

result = ocrmodel.ocr(img_path, cls=True)
for idx in range(len(result)):
    res = result[idx]
    for line in res:
        print(line)

```

- 如果您有更好的文字检测，文本识别识别也可以只使用我们的一部分。
- 您也可以将paddleocr的模型导出成onnx格式，使用AnyOCR推理，或者您自己微调的paddleocr模型，使用AnyOCR推理。


### 参数配置

```python
from pydantic import BaseModel

class anyocrConfig(BaseModel):
    text_score: float = 0.5   # 文本识别结果置信度，取值范围：[0, 1]
    use_det: bool = True  # 是否使用文本检测
    use_cls: bool = True  # 是否使用文本行方向分类
    use_rec: bool = True  # 是否使用文本行识别
    print_verbose: bool = False # 打印进度
    min_height: int = 30  # 图像最小高度（单位是像素），低于这个值，会跳过文本检测阶段，直接进行后续识别。
    width_height_ratio: float = 8 # 如果输入图像的宽高比大于width_height_ratio，则会跳过文本检测，直接进行后续识别
    max_side_len: int = 2000 #  如果输入图像的最大边大于max_side_len，则会按宽高比，将最大边缩放到max_side_len
    min_side_len: int = 30 # 如果输入图像的最小边小于min_side_len，则会按宽高比，将最小边缩放到min_side_len
    return_word_box: bool = False # 是否返回文字的单字坐标。
    
    det_use_cuda: bool = False  # 是否使用gpu
    det_model_path: Optional[str] = None #文本检测模型路径
    det_limit_side_len: float = 736 # 限制图像边的长度的像素值。
    det_limit_type: str = "min" # 限制图像的最小边长度还是最大边为limit_side_len，取值范围为：[min, max]
    det_max_candidates:int = 1000 # 最大候选框数目
    det_thresh: float = 0.3  # 图像中文字部分和背景部分分割阈值。值越大，文字部分会越小。取值范围：[0, 1]
    det_box_thresh: float = 0.5 # 文本检测所得框是否保留的阈值，值越大，召回率越低。取值范围：[0, 1]
    det_unclip_ratio: float = 1.6 # 控制文本检测框的大小，值越大，检测框整体越大。取值范围：[1.6, 2.0]
    det_donot_use_dilation: bool = False # 是否使用膨胀，该参数用于将检测到的文本区域做形态学的膨胀处理。
    det_score_mode: str = "slow"  # 计算文本框得分的方式。取值范围为：[slow, fast]
    
    cls_use_cuda: bool = False  # 是否使用gpu
    cls_model_path: Optional[str] = None #  文本行方向分类模型路径
    cls_image_shape: List[int] = [3, 48, 192] # 输入方向分类模型的图像Shape(CHW)
    cls_label_list: List[str] = ["0", "180"] # 方向分类的标签，0°或者180°，该参数不能动。
    cls_batch_num: int = 6 # 批次推理的batch大小，一般采用默认值即可，太大并没有明显提速，效果还可能会差。默认值为6。
    cls_thresh: float = 0.9 # 方向分类结果的置信度。取值范围：[0, 1]
    
    rec_use_cuda: bool = False  # 是否使用gpu
    rec_keys_path: Optional[str] = None # 文本识别模型对应的字典文件
    rec_model_path: Optional[str] = None # 文本识别模型路径
    rec_img_shape: List[int] = [3, 48, 320] # 输入文本识别模型的图像Shape(CHW)
    rec_batch_num: int = 6 # 批次推理的batch大小，一般采用默认值即可，太大并没有明显提速，效果还可能会差。默认值为6。

```

## Buy me a coffee

- 微信(WeChat)

<div align="left">
    <img src="./zanshan.jpg" width="30%" height="30%">
</div>


<p style="color: lightgrey;">如果您是本模型的贡献者，我们邀请您根据<a href="https://modelscope.cn/docs/ModelScope%E6%A8%A1%E5%9E%8B%E6%8E%A5%E5%85%A5%E6%B5%81%E7%A8%8B%E6%A6%82%E8%A7%88" style="color: lightgrey; text-decoration: underline;">模型贡献文档</a>，及时完善模型卡片内容。</p>
