CnOCR 使用教程

2023-11-13

一、 简介

CnOCR 是 Python 3 下的文字识别(Optical Character Recognition,简称OCR)工具包,支持简体中文、繁体中文(部分模型)、英文和数字的常见字符识别,支持竖排文字的识别。自带了20+个训练好的识别模型,适用于不同应用场景,安装后即可直接使用。同时,CnOCR也提供简单的训练命令供使用者训练自己的模型。

二、使用教程

1. 相关文档

  • 项目地址:https://github.com/breezedeus/cnocr
  • 介绍文档:https://cnocr.readthedocs.io/zh/latest/

2. 安装

  • pip安装
    pip install cnocr
    
    国内安装源
    pip install cnocr -i https://pypi.doubanio.com/simple
    
    推荐使用python3.6及以上版本

3. 使用

  • 初始化
    类CnOcr 是识别主类,包含了三个函数针对不同场景进行文字识别。类CnOcr的初始化函数如下:
class CnOcr(object):
    def __init__(
        self,
        rec_model_name: str = 'densenet_lite_136-fc',
        *,
        det_model_name: str = 'ch_PP-OCRv3_det',
        cand_alphabet: Optional[Union[Collection, str]] = None,
        context: str = 'cpu',  # ['cpu', 'gpu', 'cuda']
        rec_model_fp: Optional[str] = None,
        rec_model_backend: str = 'onnx',  # ['pytorch', 'onnx']
        rec_vocab_fp: Union[str, Path] = VOCAB_FP,
        rec_more_configs: Optional[Dict[str, Any]] = None,
        rec_root: Union[str, Path] = data_dir(),
        det_model_fp: Optional[str] = None,
        det_model_backend: str = 'onnx',  # ['pytorch', 'onnx']
        det_more_configs: Optional[Dict[str, Any]] = None,
        det_root: Union[str, Path] = det_data_dir(),
        **kwargs,
    )

参数说明:

参数 说明
rec_model_name 识别模型名称。默认为 densenet_lite_136-fc,可选模型地址:https://cnocr.readthedocs.io/zh/latest/models/
det_model_name 检测模型名称。默认为 ch_PP-OCRv3_det,可选模型地址:https://cnocr.readthedocs.io/zh/latest/models/
cand_alphabet 待识别字符所在的候选集合。默认为 None,表示不限定识别字符范围。取值可以是字符串,如 “0123456789”,或者字符列表,如 [“0”, “1”, “2”, “3”, “4”, “5”, “6”, “7”, “8”, “9”]。
context 预测使用的机器资源,可取值为字符串cpu、gpu、cuda:0等。默认为 cpu。此参数仅在 model_backend==‘pytorch’ 时有效。
rec_model_fp 如果不使用系统自带的识别模型,可以通过此参数直接指定所使用的模型文件(.ckpt 或 .onnx 文件)。
rec_model_backend pytorch’, or ‘onnx’。表明识别时是使用 PyTorch 版本模型,还是使用 ONNX 版本模型。 同样的模型,ONNX 版本的预测速度一般是 PyTorch 版本的 2倍左右。 默认为 ‘onnx’。
rec_vocab_fp 识别字符集合的文件路径,即 label_cn.txt 文件路径。若训练的自有模型更改了字符集,看通过此参数传入新的字符集文件路径。
rec_more_configs 识别模型初始化时传入的其他参数。
rec_root 识别模型文件所在的根目录。
det_model_fp 如果不使用系统自带的检测模型,可以通过此参数直接指定所使用的模型文件(.ckpt 或 .onnx 文件)。
det_model_backend ‘pytorch’, or ‘onnx’。表明检测时是使用 PyTorch 版本模型,还是使用 ONNX 版本模型。 同样的模型,ONNX 版本的预测速度一般是 PyTorch 版本的 2倍左右。 默认为 ‘onnx’。
det_more_configs dict,识别模型初始化时传入的其他参数。
det_root 检测模型文件所在的根目录。
  • ocr操作
from cnocr import CnOcr

img_path = 'emoj.jpg'
ocr = CnOcr() 
result = ocr.ocr(img_path)

# 具体参数设置参考:https://cnocr.readthedocs.io/zh/latest/usage/

备注:

  • 首次使用 CnOCR 时,系统会自动下载 zip 格式的模型压缩文件,并存于 ~/.cnocr目录(Windows下默认路径为 C:\Users<username>\AppData\Roaming\cnocr)。 下载后的zip文件代码会自动对其解压,然后把解压后的模型相关目录放于~/.cnocr/2.2目录中。
  • 如果系统无法自动成功下载zip文件,则需要手动从https://huggingface.co/breezedeus/cnstd-cnocr-models/tree/main下载此zip文件并把它放于 ~/.cnocr/2.2目录。

三、效果展示

  • 在线Demo
    https://huggingface.co/spaces/breezedeus/cnocr
  • 效果展示
    在这里插入图片描述

查看其他开源中文OCR,点击此处

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CnOCR 使用教程 的相关文章

  • 使用 MongoDB 作为我们的主数据库,我应该使用单独的图数据库来实现实体之间的关系吗?

    我们目前正在为一家专业公司内部实施类似 CRM 的解决方案 由于存储信息的性质以及信息的不同值和键 我们决定使用文档存储数据库 因为它完全适合目的 在本例中我们选择 MongoDB 作为此 CRM 解决方案的一部分 我们希望存储实体之间的关
  • Python - 比较同一字典中的值

    我有一本字典 d Trump MAGA FollowTheMoney Clinton dems Clinton Stein FollowTheMoney Atlanta 我想删除字符串列表中的重复字符串 该字符串是键的值 对于这个例子 期望
  • Gunicorn 工作人员无论如何都会超时

    我正在尝试通过gunicorn运行一个简单的烧瓶应用程序 但是无论我做什么 我的工作人员都会超时 无论是否有针对应用程序的活动 工作人员在我设置任何内容后总是会超时timeout值到 是什么导致它们超时 当我发出请求时 请求成功通过 但工作
  • 如何在 __init__ 中使用await设置类属性

    我如何定义一个类await在构造函数或类体中 例如我想要的 import asyncio some code class Foo object async def init self settings self settings setti
  • 在 Celery 任务中调用 Google Cloud API 永远不会返回

    我正在尝试拨打外部电话Google Cloud Natural Language API从一个内Celery任务 使用google cloud python包裹 问题是对 API 的调用永远不会返回 挂起 celery task def g
  • matplotlib 图中点的标签

    所以这是一个关于已发布的解决方案的问题 我试图在我拥有的 matplotlib 散点图中的点上放置一些数据标签 我试图在这里模仿解决方案 是否有与 MATLAB 的 datacursormode 等效的 matplotlib https s
  • 多输出堆叠回归器

    一次性问题 我正在尝试构建一个多输入堆叠回归器 添加到 sklearn 0 22 据我了解 我必须结合StackingRegressor and MultiOutputRegressor 经过多次尝试 这似乎是正确的顺序 import nu
  • 我应该使用 Python 双端队列还是列表作为堆栈? [复制]

    这个问题在这里已经有答案了 我想要一个可以用作堆栈的 Python 对象 使用双端队列还是列表更好 元素数量较少还是数量较多有什么区别 您的情况可能会根据您的应用程序和具体用例而有所不同 但在一般情况下 列表非常适合堆栈 append is
  • Tensorboard SyntaxError:语法无效

    当我尝试制作张量板时 出现语法错误 尽管开源代码我还是无法理解 我尝试搜索张量板的代码 但不清楚 即使我不擅长Python 我这样写路径C Users jh902 Documents logs因为我正在使用 Windows 10 但我不确定
  • 从 Powershell 脚本安装 Python

    当以管理员身份从 PowerShell 命令行运行以下命令时 可以在 Windows 11 上成功安装 Python c temp python 3 11 4 amd64 exe quiet InstallAllUsers 0 Instal
  • python的shutil.move()在linux上是原子的吗?

    我想知道python的shutil move在linux上是否是原子的 如果源文件和目标文件位于两个不同的分区上 行为是否不同 或者与它们存在于同一分区上时的行为相同吗 我更关心的是如果源文件和目标文件位于同一分区上 shutil move
  • pandas - 包含时间序列数据的堆积条形图

    我正在尝试使用时间序列数据在 pandas 中创建堆积条形图 DATE TYPE VOL 0 2010 01 01 Heavy 932 612903 1 2010 01 01 Light 370 612903 2 2010 01 01 Me
  • 找到一个数字所属的一组范围

    我有一个 200k 行的数字范围列表 例如开始位置 停止位置 该列表包括除了非重叠的重叠之外的所有类型的重叠 列表看起来像这样 3 5 10 30 15 25 5 15 25 35 我需要找到给定数字所属的范围 并对 100k 个数字重复该
  • PySpark groupByKey 返回 pyspark.resultiterable.ResultIterable

    我试图找出为什么我的 groupByKey 返回以下内容 0
  • 为什么 csv.DictReader 给我一个无属性错误?

    我的 CSV 文件是 200 Service 我放入解释器的代码是 snav csv DictReader open screennavigation csv delimiter print snav fieldnames 200 for
  • 如何以正确的方式为独立的Python应用程序制作setup.py?

    我读过几个类似的主题 但还没有成功 我觉得我错过或误解了一些基本的事情 这就是我失败的原因 我有一个用 python 编写的 应用程序 我想在标准 setup py 的帮助下进行部署 由于功能复杂 它由不同的 python 模块组成 但单独
  • 每当使用 import cv2 时 OpenCV 都会出错

    我在终端上使用 pip3 install opencv contrib python 安装了 cv2 并且它工作了 但是每当我尝试导入 cv2 或运行导入了 cv2 的 vscode 文件时 在 python IDLE 上它都会说 Trac
  • 等待子进程使用 os.system

    我用了很多os system在 for 循环内调用创建后台进程 如何等待所有后台进程结束 os wait告诉我没有子进程 ps 我使用的是Solaris 这是我的代码 usr bin python import subprocess imp
  • python 对浮点数进行不正确的舍入

    gt gt gt a 0 3135 gt gt gt print 3f a 0 314 gt gt gt a 0 3125 gt gt gt print 3f a 0 312 gt gt gt 我期待 0 313 而不是 0 312 有没有
  • 如何在Python脚本中从youtube-dl中提取文件大小?

    我是 python 编程新手 我想在下载之前提取视频 音频大小 任何 YouTube 视频 gt gt gt from youtube dl import YoutubeDL gt gt gt url https www youtube c

随机推荐

  • Ubuntu16.04.7+Qt15.5.0环境配置(一条龙讲解)

    目录 1 下载并安装Ubuntu 2 Qt下载与安装 3 Qt环境配置 4 设置编译套件 5 创建qt快速启动脚本 1 下载并安装Ubuntu Ubuntu16 04 7下载链接https releases ubuntu com xenia
  • ipconfig bash: ipconfig: command not found...

    在使用linux查看端口的时候 应该用ifconfig Windows才使用ipconfig
  • Qt 操作SQLite数据库

    一 SQLite 介绍 Sqlite 数据库作为 Qt 项目开发中经常使用的一个轻量级的数据库 可以说是兼容性相对比较好的数据库之一 Sqlite就像Qt的亲儿子 如同微软兼容Access数据库一样 Qt5 以上版本可以直接使用 Qt自带驱
  • 09字符串排序

    给定两个字符串 从字符串2中找出字符串1中的所有字符 去重并按照ASCII码值从小到大排列 输入字符串1长度不超过1024 字符串2长度不超过100 字符范围满足ASCII编码要求 按照ASCII由小到大排序 输入描述 bach bbaac
  • CBAM:融合通道和空间注意力的注意力模块

    点击上方 AI公园 关注公众号 选择加 星标 或 置顶 作者 Sik Ho Tsang 编译 ronghuaiyang 导读 使用CBAM加持的MobileNetV1 ResNeXt ResNet WRN优于使用SENet的网络 在这篇文章
  • java:统计数组中元素出现的个数

    问题描述 定义一个方法传入一个int类型数组 输出这个数组中每一个数字及其出现的个数 例如 传入数组 1 2 2 2 3 3 4 4 4 4 打印结果 数字1出现了1次 数字2出现了3次 算法思想 这里主要是在实现数组元素的遍历过程中 如果
  • Springboot 整合mybatis-plus +代码生成器

    mybatis plus官方文档 https mp baomidou com guide 新建一个Springboot项目 代码生成结构如下 一 添加依赖
  • el-dialog弹窗改变默认样式,改变弹窗高度位置

    el dialog弹窗改变默认样式 改变弹窗高度位置 在el dialog上添加class view dialog
  • 4https 原理

    春光正暖 情绪微高 穿行于街巷 浮现三两过往事 不惧时光肆意流淌 新的一年 万事顺遂 文章目录 1 http的缺点 2 加密算法 2 1 对称加密 2 2 非对称加密 算法的实现的思路 公钥加密 私钥解密 2 3 ca的诞生 ca如何生成证
  • python---装饰器进阶之路

    装饰器的本质 在不改变被装饰对象原有的 调用方式 和 内部代码 的情况下给被装饰对象添加新的功能 装饰器的原则 对扩展开放 对修改封闭 为何要用装饰器 软件的设计应该遵循开放封闭原则 即对扩展是开放的 而对修改是封闭的 对扩展开放 意味着有
  • PR/AE/FCPX比较好用的插件有哪些?

    Beauty Box 磨皮润肤美容插件 Digital Anarchy比较出众的一款视频磨皮美白降噪插件 支持系统 windows Mac 软件版本 PR AE CS6 2023 Davinci Resolve 达芬奇11以上 FCPX 1
  • 机器学习二:支持向量机

    支持向量机 1 介绍 2 对偶问题 3 非线性数据 3 1 核函数与核技巧 3 1 1 数学解释 3 1 2 几种常用的核函数 4 SVM 响应离群点 4 1 软间隔 4 2 正则化 4 3 参数调整 4 3 1 SVM C Paramet
  • OpenGL学习书籍推荐

    1 opengl 红宝书 2 Nehe的Opengl教程 网上的文章 能形成一个完整系列的就是 Nehe的 有点老 不过不影响学习理论 3 知乎上的这个帖子也提供了不少思路 https www zhihu com question 2416
  • 汉堡王什么汉堡好吃_汉堡王9款汉堡测评,牛肉和鸡肉你喜欢哪个?

    从第一次吃汉堡王到现在已经好久了 数了一下 他们家的汉堡我已经吃了9种了 虽然还没有全部吃过一遍 今天就来盘点一下汉堡王的汉堡吧 小皇堡 第一次吃的就是小皇堡 当时不是很能吃得惯 所以从那时起就有点不太敢尝试皇堡系列 后来真香了 里面有西红
  • [中奖]第九届“泰迪杯”挑战赛A题

    问题概述 题目1如下 赛题有2个点 分别是 确定数据指标 即确定哪些特征是决定财务造假与否的关键特征 预测造假公司 训练模型 然后跑测试数据即可 预处理 首先使用missingno2 对全局数据进行观测 看一看缺失值等情况 然后删去无用的特
  • retrofit应用详解与源码解析--源码解析

    本文出自门心叼龙的博客 属于原创类容 未经允许 不得转载 本专栏的同步视频教程已经发布到CSDN学院 https edu csdn net course detail 30408 上一篇文章我们通过12个小案例 给大家演示了retrofit
  • Ado.net批量插入数据

    采用的是SqlBulkCopy方法 数据库是sql server 示例代码地址 https gitee com Alexander360 LearnAdoNet SqlBulkCopy批量插入的方法如下 包括list转datatable方法
  • Python书写的格式规范

    Python书写的格式规范 1 英文版Python书写格式 2 中文版Python书写规范
  • C++之const类成员变量,const成员函数,const指针

    https www cnblogs com cthon p 9178701 html 结合下面这个链接观看更佳 讲常量指针和指向常量的指针的 https www cnblogs com lihuidashen p 4378884 html
  • CnOCR 使用教程

    目录 一 简介 二 使用教程 三 效果展示 一 简介 CnOCR 是 Python 3 下的文字识别 Optical Character Recognition 简称OCR 工具包 支持简体中文 繁体中文 部分模型 英文和数字的常见字符识别