
Security News
Next.js Patches Critical Middleware Vulnerability (CVE-2025-29927)
Next.js has patched a critical vulnerability (CVE-2025-29927) that allowed attackers to bypass middleware-based authorization checks in self-hosted apps.
English | 中文
主要变更:
主要变更:
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私享群 会员使用,一个月后会免费开源。*-densenet_lite_666-gru_large
:Pro 模型,购买后可使用。更多细节请参考:CnOCR V2.3 新版发布:模型更好、更多、更大 | Breezedeus.com。
CnOCR 是 Python 3 下的文字识别(Optical Character Recognition,简称OCR)工具包,支持简体中文、繁体中文(部分模型)、英文和数字的常见字符识别,支持竖排文字的识别。自带了20+个 训练好的模型,适用于不同应用场景,安装后即可直接使用。同时,CnOCR也提供简单的训练命令供使用者训练自己的模型。欢迎扫码加小助手为好友,备注 ocr
,小助手会定期统一邀请大家入群:
作者也维护 知识星球 CnOCR/CnSTD私享群 ,这里面的提问会较快得到作者的回复,欢迎加入。知识星球会员 可享受以下福利:
见 CnOCR在线文档 。
CnOCR 从 V2.2 开始,内部自动调用文字检测引擎 CnSTD 进行文字检测和定位。所以 CnOCR V2.2 不仅能识别排版简单的印刷体文字图片,如截图图片,扫描件等,也能识别一般图片中的场景文字。
以下是一些不同场景的调用示例。
所有参数都使用默认值即可。如果发现效果不够好,多调整下各个参数看效果,最终往往能获得比较理想的精度。
from cnocr import CnOcr
img_fp = './docs/examples/huochepiao.jpeg'
ocr = CnOcr() # 所有参数都使用默认值
out = ocr.ocr(img_fp)
print(out)
识别结果:
针对 排版简单的印刷体文字图片,如截图图片,扫描件图片等,可使用 det_model_name='naive_det'
,相当于不使用文本检测模型,而使用简单的规则进行分行。
Note
det_model_name='naive_det'
的效果相当于V2.2
之前(V2.0.*
,V2.1.*
)的 CnOCR 版本。
使用 det_model_name='naive_det'
的最大优势是速度快,劣势是对图片比较挑剔。如何判断是否该使用此检测模型呢?最简单的方式就是拿应用图片试试效果,效果好就用,不好就不用。
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)
识别结果:
图片 | OCR结果 |
---|---|
![]() | 网络支付并无本质的区别,因为 每一个手机号码和邮件地址背后 都会对应着一个账户--这个账 户可以是信用卡账户、借记卡账 户,也包括邮局汇款、手机代 收、电话代收、预付费卡和点卡 等多种形式。 |
采用来自 PaddleOCR(之后简称 ppocr)的中文识别模型 rec_model_name='ch_PP-OCRv3'
进行识别。
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)
识别结果:
虽然中文检测和识别模型也能识别英文,但专为英文文字训练的检测器和识别器往往精度更高。如果是纯英文的应用场景,建议使用来自 ppocr 的英文检测模型 det_model_name='en_PP-OCRv3_det'
, 和英文识别模型 rec_model_name='en_PP-OCRv3'
。
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)
识别结果:
采用来自ppocr的繁体识别模型 rec_model_name='chinese_cht_PP-OCRv3'
进行识别。
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)
使用此模型时请注意以下问题:
识别精度一般,不是很好;
除了繁体字,对标点、英文、数字的识别都不好;
此模型不支持竖排文字的识别。
识别结果:
如果明确知道待识别的图片是单行文字图片(如下图),可以使用类函数 CnOcr.ocr_for_single_line()
进行识别。这样就省掉了文字检测的时间,速度会快一倍以上。
from cnocr import CnOcr
img_fp = './docs/examples/helloworld.jpg'
ocr = CnOcr()
out = ocr.ocr_for_single_line(img_fp)
print(out)
嗯,顺利的话一行命令即可。
$ pip install cnocr[ort-cpu]
如果是 GPU 环境使用 ONNX 模型,请使用以下命令进行安装:
$ pip install cnocr[ort-gpu]
如果要训练自己的模型,,可以使用以下命令安装:
$ pip install cnocr[dev]
安装速度慢的话,可以指定国内的安装源,如使用阿里云的安装源:
$ pip install cnocr[ort-cpu] -i https://mirrors.aliyun.com/pypi/simple
Note
请使用 Python3(3.7.*~3.10.*之间的版本应该都行),没测过Python2下是否ok。
更多说明可见 安装文档。
Warning
如果电脑中从未安装过
PyTorch
,OpenCV
python包,初次安装可能会遇到问题,但一般都是常见问题,可以自行百度/Google解决。
可以从 Docker Hub 直接拉取已安装好 CnOCR 的镜像使用。
$ docker pull breezedeus/cnocr:latest
更多说明可见 安装文档。
CnOCR V2.2.1 加入了基于 FastAPI 的HTTP服务。开启服务需要安装几个额外的包,可以使用以下命令安装:
pip install cnocr[serve]
安装完成后,可以通过以下命令启动HTTP服务(-p
后面的数字是端口,可以根据需要自行调整):
cnocr serve -p 8501
服务开启后,可以使用以下方式调用服务。
比如待识别文件为 docs/examples/huochepiao.jpeg
,如下使用 curl 调用服务:
> curl -F image=@docs/examples/huochepiao.jpeg http://0.0.0.0:8501/ocr
使用如下方式调用服务:
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 。
请参照 curl 的调用方式自行实现。
具体参考 CnSTD的下载说明。
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私享群 会员使用,后续会免费开源。*-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
。注意 ⚠️:以上说明仅供参考,具体选择模型时建议以实际效果为准。
更多说明见:可用模型。
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 🆕 (星球会员专享) | √ | √ | cnocr | 25 M | 简体中文、英文、数字 | X |
scene-densenet_lite_246-gru_base 🆕 (星球会员专享) | √ | √ | cnocr | 25 M | 简体中文、英文、数字 | X |
doc-densenet_lite_246-gru_base 🆕 (星球会员专享) | √ | √ | cnocr | 25 M | 简体中文、英文、数字 | X |
densenet_lite_666-gru_large 🆕 (购买链接:B站、Lemon Squeezy) | √ | √ | cnocr | 82 M | 简体中文、英文、数字 | X |
scene-densenet_lite_666-gru_large 🆕 (购买链接:B站、Lemon Squeezy) | √ | √ | cnocr | 82 M | 简体中文、英文、数字 | X |
doc-densenet_lite_666-gru_large 🆕 (购买链接:B站、Lemon Squeezy) | √ | √ | cnocr | 82 M | 简体中文、英文、数字 | X |
number-densenet_lite_136-fc 🆕 | √ | √ | cnocr | 2.7 M | 纯数字(仅包含 0~9 十个数字) | X |
number-densenet_lite_136-gru 🆕 (星球会员专享) | √ | √ | cnocr | 5.5 M | 纯数字(仅包含 0~9 十个数字) | X |
number-densenet_lite_666-gru_large 🆕 (购买链接:B站、Lemon Squeezy) | √ | √ | 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 | 阿拉伯文、英文、数字 | √ |
Done
)V1.0.0
)Doing
)Doing
)空格
识别(since V1.1.0
)V1.1.0
)V2.0.0
)V2.2
)开源不易,如果此项目对您有帮助,可以考虑 给作者加点油🥤,鼓鼓气💪🏻 。
FAQs
Python3 package for Chinese/English OCR, with small pretrained models
We found that cnocr demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Next.js has patched a critical vulnerability (CVE-2025-29927) that allowed attackers to bypass middleware-based authorization checks in self-hosted apps.
Security News
A survey of 500 cybersecurity pros reveals high pay isn't enough—lack of growth and flexibility is driving attrition and risking organizational security.
Product
Socket, the leader in open source security, is now available on Google Cloud Marketplace for simplified procurement and enhanced protection against supply chain attacks.