使用
引言¶
该部分涉及如何使用rapidocr
库来进行图像文字识别工作。
最简单的使用¶
一切都使用默认值。默认使用来自PP-OCRv4的DBNet中文轻量检测,来自PP-OCRv4的SVTR_LCNet中文识别模型。
推荐可以先使用ONNXRuntime CPU版作为推理引擎。
其他默认值的详细参数设置参见:config.yaml
初始化RapidOCR实例输入¶
输入支持传入YAML格式的配置文件,同时支持参数直接传入使用。
-
生成default_rapidocr.yaml的配置文件。终端执行以下代码,即可在当前目录下生成默认的default_rapidocr.yaml文件。
-
根据自己的需要更改default_rapidocr.yaml相应的值。例如使用OpenVINO作为推理引擎,更改如下:
-
传入到
RapidOCR
中使用。
由于rapidocr中涉及可调节的参数众多,为了便于维护,引入omageconf库来更新参数。这样带来的代价是传入参数没有1.x系列中直观一些。但是现阶段方式也容易理解和使用。
例如,我想使用OpenVINO作为推理引擎,可以通过下面这种方式使用:
其他参数传入方式,基本就是参考config.yaml
,关键字之间用点分割,直接写就可以了。例如:
config.yaml
部分参数示例:
对应参数写法
输出¶
RapidOCR输出包括4种类型:Union[TextDetOutput, TextClsOutput, TextRecOutput, RapidOCROutput]
。这4种类型均是Dataclasses类,可以直接访问对应的键值。
TextDetOutput
:仅有检测TextClsOutput
: 仅有文本行方向分类TextRecOutput
: 仅有识别RapidOCROutput
: 检测+方向分类+识别
详细搭配如下:
返回值为RapidOCROutput
,可以通过result.xxxx
直接访问。主要包含以下字段:
RapidOCROutput.img (np.ndarray)
: 传入的原始图像RapidOCROutput.boxes (np.ndarray)
: 图像中每行坐标框,shape为(N, 4, 2)
。N
表示有多少文本行。RapidOCROutput.txts (Tuple[str])
: 和boxes
文本框对应识别到的文本内容。长度和RapidOCROutput.boxes
长度一致。RapidOCROutput.scores (Tuple[float])
: 每行识别文本结果的置信度。长度和RapidOCROutput.boxes
长度一致。RapidOCROutput.word_results (Tuple[Any])
: 该部分结果只有在return_word_box=True
时,才会有值。RapidOCROutput.elapse_list (List[float])
: 文本检测,文本行方向分类和文本识别三部分各自推理耗时,单位为秒。RapidOCROutput.elapse (float)
: 三部分整体耗时,单位为秒。
详细返回值示例
Tip
只有文本检测和文本识别的组合可以正常使用的前提是:确保传入图像中文字都是正的。
返回值类型同 检测 + 分类 + 识别 部分。
返回值为TextClsOutput
类,主要包含以下字段:
TextClsOutput.img_list (List[np.ndarray])
: 多个文本行图像组成的列表。TextClsOutput.cls_res (List[Tuple(str, float)])
: 每个文本行对应的方向及置信度。TextClsOutput.elapse (float)
: 识别耗时,单位为秒。
详细返回值示例
返回值为TextDetOutput
类,主要包含以下字段:
TextDetOutput.img (np.ndarray)
: 传入的原始图像TextDetOutput.boxes (np.ndarray)
: 文本行坐标,4个点组成,依次是[左上,右上,右下,左下]
TextDetOutput.scores (List[float])
: 每个文本行对应的置信度。- `TextDetOutput.elapse (float): 文本检测整体耗时,单位为秒。
详细返回值示例
返回值为TextClsOutput
类,主要包含以下字段:
TextClsOutput.img_list (List[np.ndarray])
: 多个文本行图像组成的列表。TextClsOutput.cls_res (List[Tuple(str, float)])
: 每个文本行对应的方向及置信度。TextClsOutput.elapse (float)
: 识别耗时,单位为秒。
返回值为TextRecOutput
类,主要包含以下字段:
TextRecOutput.imgs (List[np.ndarray])
: 多个文本行图像组成的列表。TextRecOutput.txts (List[Tuple(str, float)])
: 每个文本行对应的识别结果。TextRecOutput.scores (float)
: 每个文本行识别结果。TextRecOutput.word_results (Tuple[None])
: 仅在指定return_word_box=True
时,有值。
返回值RapidOCROutput
类,主要包含以下字段:
RapidOCROutput.img (np.ndarray)
: 传入的原始图像RapidOCROutput.boxes (np.ndarray)
: 图像中每行坐标框,shape为(N, 4, 2)
。N
表示有多少文本行。RapidOCROutput.txts (Tuple[str])
: 和boxes
文本框对应识别到的文本内容。长度和RapidOCROutput.boxes
长度一致。RapidOCROutput.scores (Tuple[float])
: 每行识别文本结果的置信度。长度和RapidOCROutput.boxes
长度一致。RapidOCROutput.word_results (Tuple[Tuple[str, float, List[List[int]]]])
: 由(识别内容,置信度,[[左上], [右上], [右下], [左下]])
构成。RapidOCROutput.elapse_list (List[float])
: 文本检测,文本行方向分类和文本识别三部分各自推理耗时,单位为秒。RapidOCROutput.elapse (float)
: 三部分整体耗时,单位为秒。
详细返回值示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 |
|
选择不同推理引擎¶
rapidocr
支持4种推理引擎(ONNXRuntime / OpenVINO / PaddlePaddle / PyTorch),推荐首先使用ONNXRuntime CPU版。
rapidocr
是通过指定不同参数来选择使用不同的推理引擎的。当然,使用不同推理引擎的前提是事先安装好对应的推理引擎库,并确保安装正确。
-
安装ONNXRuntime。推荐用CPU版的ONNXRuntime,GPU版不推荐在
rapidocr
中使用,相关原因参见:ONNXRuntime GPU推理 -
ONNXRuntime作为默认推理引擎,无需显式指定即可使用。
-
查看输出日志。下面日志中打印出了Using engine_name: onnxruntime,则证明使用的推理引擎是ONNXRuntime。
-
安装OpenVINO
-
指定OpenVINO作为推理引擎
-
查看输出日志。下面日志中打印出了Using engine_name: openvino,则证明使用的推理引擎是OpenVINO。
-
安装PaddlePaddle。
参见PaddlePaddle官方安装文档 → 快速安装
大家可以根据实际情况,选择安装CPU版、GPU版。
-
指定PaddlePaddle作为推理引擎
-
查看输出日志。下面日志中打印出了Using engine_name: paddle,则证明使用的推理引擎是PaddlePaddle。
-
安装PyTorch。
参见PyTorch官方安装文档 → Install PyTorch
大家可以根据实际情况,选择安装CPU版、GPU版。
-
指定PyTorch作为推理引擎
-
查看输出日志。下面日志中打印出了Using engine_name: torch,则证明使用的推理引擎是PyTorch。
使用本地已下载模型¶
使用方法同样也是有两种:一是通过配置文件传入;二是通过初始化参数传入。下面以通过初始化参数传入为例:
上面第4行通过Det.model_path
指定了本地已经下载好的文本检测模型。文本方向分类和文本识别模型也可同样指定。(Cls.model_path
和Rec.model_path
)