Package: cnocr
📖 文档|🛠️ 安装|🧳 可用模型|🕹 模型训练|🛀🏻 在线Demo|💬 交流群English| 中文CnOCRTech should serve the people, not enslave them!请勿将此项目用于文字审查！---[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私享群会员使用，一个月后会免费开源。*-densenet_lite_666-gru_large：Pro 模型，购买后可使用。更多细节请参考：CnOCR V2.3 新版发布：模型更好、更多、更大 | Breezedeus.com。CnOCR是Python 3下的文字识别（Optical Character Recognition，简称OCR）工具包，支持简体中文、繁体中文（部分模型）、英文和数字的常见字符识别，支持竖排文字的识别。自带了20+个训练好的模型，适用于不同应用场景，安装后即可直接使用。同时，CnOCR也提供简单的训练命令供使用者训练自己的模型。欢迎扫码加小助手为好友，备注ocr，小助手会定期统一邀请大家入群：作者也维护知识星球CnOCR/CnSTD私享群，这里面的提问会较快得到作者的回复，欢迎加入。知识星球会员可享受以下福利：可免费下载部分未开源的付费模型；购买其他所有的付费模型一律八折优化；作者快速回复使用过程中遇到的各种困难；作者每月提供两次免费特有数据的训练服务。星球会陆续发布一些CnOCR/CnSTD相关的私有资料；星球会持续发布 OCR/STD/CV 等相关的最新研究资料。详细文档见CnOCR在线文档。使用说明CnOCR从V2.2开始，内部自动调用文字检测引擎CnSTD进行文字检测和定位。所以CnOCRV2.2 不仅能识别排版简单的印刷体文字图片，如截图图片，扫描件等，也能识别一般图片中的场景文字。以下是一些不同场景的调用示例。不同场景的调用示例常见的图片识别所有参数都使用默认值即可。如果发现效果不够好，多调整下各个参数看效果，最终往往能获得比较理想的精度。fromcnocrimportCnOcrimg_fp='./docs/examples/huochepiao.jpeg'ocr=CnOcr()# 所有参数都使用默认值out=ocr.ocr(img_fp)print(out)识别结果：排版简单的印刷体截图图片识别针对排版简单的印刷体文字图片，如截图图片，扫描件图片等，可使用det_model_name='naive_det'，相当于不使用文本检测模型，而使用简单的规则进行分行。Notedet_model_name='naive_det'的效果相当于V2.2之前（V2.0.*,V2.1.*）的 CnOCR 版本。使用det_model_name='naive_det'的最大优势是速度快，劣势是对图片比较挑剔。如何判断是否该使用此检测模型呢？最简单的方式就是拿应用图片试试效果，效果好就用，不好就不用。fromcnocrimportCnOcrimg_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'进行识别。fromcnocrimportCnOcrimg_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'。fromcnocrimportCnOcrimg_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'进行识别。fromcnocrimportCnOcrimg_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()进行识别。这样就省掉了文字检测的时间，速度会快一倍以上。调用代码如下：fromcnocrimportCnOcrimg_fp='./docs/examples/helloworld.jpg'ocr=CnOcr()out=ocr.ocr_for_single_line(img_fp)print(out)更多应用示例核酸疫苗截图识别身份证识别饭店小票识别安装嗯，顺利的话一行命令即可。$pipinstallcnocr[ort-cpu]如果是GPU环境使用 ONNX 模型，请使用以下命令进行安装：$pipinstallcnocr[ort-gpu]如果要训练自己的模型，，可以使用以下命令安装：$pipinstallcnocr[dev]安装速度慢的话，可以指定国内的安装源，如使用阿里云的安装源：$pipinstallcnocr[ort-cpu]-ihttps://mirrors.aliyun.com/pypi/simpleNote请使用Python3（3.7.*~3.10.*之间的版本应该都行），没测过Python2下是否ok。更多说明可见安装文档。Warning如果电脑中从未安装过PyTorch，OpenCVpython包，初次安装可能会遇到问题，但一般都是常见问题，可以自行百度/Google解决。HTTP服务CnOCRV2.2.1加入了基于 FastAPI 的HTTP服务。开启服务需要安装几个额外的包，可以使用以下命令安装：pipinstallcnocr[serve]安装完成后，可以通过以下命令启动HTTP服务（-p后面的数字是端口，可以根据需要自行调整）：cnocrserve-p8501服务开启后，可以使用以下方式调用服务。命令行比如待识别文件为docs/examples/huochepiao.jpeg，如下使用 curl 调用服务：>curl-Fimage=@docs/examples/huochepiao.jpeghttp://0.0.0.0:8501/ocrPython使用如下方式调用服务：importrequestsimage_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_namePyTorch 版本ONNX 版本模型原始来源模型文件大小支持语言是否支持竖排文字识别db_shufflenet_v2√Xcnocr18 M简体中文、繁体中文、英文、数字√db_shufflenet_v2_small√Xcnocr12 M简体中文、繁体中文、英文、数字√db_shufflenet_v2_tiny√Xcnocr7.5 M简体中文、繁体中文、英文、数字√db_mobilenet_v3√Xcnocr16 M简体中文、繁体中文、英文、数字√db_mobilenet_v3_small√Xcnocr7.9 M简体中文、繁体中文、英文、数字√db_resnet34√Xcnocr86 M简体中文、繁体中文、英文、数字√db_resnet18√Xcnocr47 M简体中文、繁体中文、英文、数字√ch_PP-OCRv3_detX√ppocr2.3 M简体中文、繁体中文、英文、数字√ch_PP-OCRv2_detX√ppocr2.2 M简体中文、繁体中文、英文、数字√en_PP-OCRv3_detX√ppocr2.3 M英文、数字√可使用的识别模型相比于 CnOCR V2.2.* 版本，V2.3中的大部分模型都经过了重新训练和精调，精度比旧版模型更高。同时，加入了两个参数量更多的模型系列：*-densenet_lite_246-gru_base：优先供知识星球CnOCR/CnSTD私享群会员使用，2024 年 2 月都会免费开源。*-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_namePyTorch 版本ONNX 版本模型原始来源模型文件大小支持语言是否支持竖排文字识别densenet_lite_136-gru🆕√√cnocr12 M简体中文、英文、数字Xscene-densenet_lite_136-gru🆕√√cnocr12 M简体中文、英文、数字Xdoc-densenet_lite_136-gru🆕√√cnocr12 M简体中文、英文、数字Xdensenet_lite_246-gru_base🆕(星球会员专享，2 月开源)√√cnocr25 M简体中文、英文、数字Xscene-densenet_lite_246-gru_base🆕(星球会员专享，2 月开源)√√cnocr25 M简体中文、英文、数字Xdoc-densenet_lite_246-gru_base🆕(星球会员专享，2 月开源)√√cnocr25 M简体中文、英文、数字Xdensenet_lite_666-gru_large🆕（购买链接：B站、Lemon Squeezy）√√cnocr82 M简体中文、英文、数字Xscene-densenet_lite_666-gru_large🆕（购买链接：B站、Lemon Squeezy）√√cnocr82 M简体中文、英文、数字Xdoc-densenet_lite_666-gru_large🆕（购买链接：B站、Lemon Squeezy）√√cnocr82 M简体中文、英文、数字Xnumber-densenet_lite_136-fc🆕√√cnocr2.7 M纯数字（仅包含0~9十个数字）Xnumber-densenet_lite_136-gru🆕(星球会员专享，2 月开源)√√cnocr5.5 M纯数字（仅包含0~9十个数字）Xnumber-densenet_lite_666-gru_large🆕（购买链接：B站、Lemon Squeezy）√√cnocr55 M纯数字（仅包含0~9十个数字）Xch_PP-OCRv3X√ppocr10 M简体中文、英文、数字√ch_ppocr_mobile_v2.0X√ppocr4.2 M简体中文、英文、数字√en_PP-OCRv3X√ppocr8.5 M英文、数字√en_number_mobile_v2.0X√ppocr1.8 M英文、数字√chinese_cht_PP-OCRv3X√ppocr11 M繁体中文、英文、数字X未来工作支持图片包含多行文字 (Done)crnn模型支持可变长预测，提升灵活性 (sinceV1.0.0)完善测试用例 (Doing)修bugs（目前代码还比较凌乱。。） (Doing)支持空格识别（sinceV1.1.0）尝试新模型，如 DenseNet，进一步提升识别准确率（sinceV1.1.0）优化训练集，去掉不合理的样本；在此基础上，重新训练各个模型由 MXNet 改为 PyTorch 架构（sinceV2.0.0）基于 PyTorch 训练更高效的模型支持列格式的文字识别打通与CnSTD的无缝衔接（sinceV2.2）模型精度进一步优化支持更多的应用场景给作者来杯咖啡开源不易，如果此项目对您有帮助，可以考虑给作者加点油🥤，鼓鼓气💪🏻。官方代码库：https://github.com/breezedeus/cnocr。