OnnxOCR源代码解析:TextSystem类如何串联检测、识别与分类三大核心模块

【免费下载链接】OnnxOCR 基于PaddleOCR重构,并且脱离PaddlePaddle深度学习训练框架的轻量级OCR,推理速度超快 —— A lightweight OCR system based on PaddleOCR, decoupled from the PaddlePaddle deep learning training framework, with ultra-fast inference speed. 【免费下载链接】OnnxOCR 项目地址: https://gitcode.com/gh_mirrors/on/OnnxOCR

OnnxOCR是一个基于PaddleOCR重构的轻量级OCR系统,它脱离了PaddlePaddle深度学习训练框架,实现了超快的推理速度。在OnnxOCR中,TextSystem类扮演着核心角色,它巧妙地串联起文本检测、文本识别和文本方向分类三大核心模块,构建了完整的OCR处理流程。

TextSystem类的初始化:三大模块的集成

TextSystem类在初始化阶段就完成了对三大核心模块的实例化,为后续的OCR流程奠定了基础。

class TextSystem(object):
    def __init__(self, args):
        self.text_detector = predict_det.TextDetector(args)  # 文本检测模块
        self.text_recognizer = predict_rec.TextRecognizer(args)  # 文本识别模块
        self.use_angle_cls = args.use_angle_cls
        self.drop_score = args.drop_score
        if self.use_angle_cls:
            self.text_classifier = predict_cls.TextClassifier(args)  # 文本方向分类模块

从上述代码可以看出,TextSystem的构造函数接收一个参数对象args,通过这个参数对象分别初始化了TextDetector(文本检测)、TextRecognizer(文本识别)和TextClassifier(文本方向分类)三个模块。这种设计使得各模块之间松耦合,便于独立维护和升级。

文本检测:定位图像中的文本区域

文本检测是OCR流程的第一步,其任务是从输入图像中定位出所有可能包含文本的区域。TextSystem类通过调用text_detector的__call__方法来完成这一任务。

OnnxOCR文本检测示例图

TextDetector类位于onnxocr/predict_det.py文件中,它实现了基于ONNX模型的文本检测功能。其核心处理流程包括图像预处理、模型推理和后处理三个步骤。在预处理阶段,图像会被调整大小、归一化并转换为模型输入格式。模型推理阶段,ONNX模型会输出文本区域的概率图。后处理阶段则通过DBPostProcess等算法从概率图中提取出文本框的坐标。

文本方向分类:确保文本正确朝向

对于检测到的文本区域,还需要进行方向分类,以确保文本是正向的,便于后续的识别。当use_angle_cls参数为True时,TextSystem会调用text_classifier对每个文本区域进行方向判断。

TextClassifier类定义在onnxocr/predict_cls.py文件中,它同样基于ONNX模型实现。该模块会对输入的文本图像进行分类,判断其方向是0度还是180度。如果分类结果为180度且置信度超过阈值,系统会将图像旋转180度以校正方向。

文本识别:将图像中的文本转换为字符串

经过检测和方向校正后,文本区域将被送入文本识别模块进行识别。TextSystem通过调用text_recognizer的__call__方法来完成这一任务。

OnnxOCR文本识别结果示例

TextRecognizer类位于onnxocr/predict_rec.py文件中,它实现了基于ONNX模型的文本识别功能。该模块支持多种识别算法,如CRNN、NRTR、ViTSTR等。其核心流程包括对文本图像进行归一化处理、模型推理以及通过CTCLabelDecode等后处理算法将模型输出转换为字符串。

TextSystem的核心流程:串联三大模块

TextSystem类通过__call__方法将上述三大模块串联起来,形成完整的OCR处理流程。其核心代码如下:

def __call__(self, img, cls=True):
    ori_im = img.copy()
    # 文字检测
    dt_boxes = self.text_detector(img)
    
    if dt_boxes is None:
        return None, None
    
    img_crop_list = []
    dt_boxes = sorted_boxes(dt_boxes)
    
    # 图片裁剪
    for bno in range(len(dt_boxes)):
        tmp_box = copy.deepcopy(dt_boxes[bno])
        if self.args.det_box_type == "quad":
            img_crop = get_rotate_crop_image(ori_im, tmp_box)
        else:
            img_crop = get_minarea_rect_crop(ori_im, tmp_box)
        img_crop_list.append(img_crop)
    
    # 方向分类
    if self.use_angle_cls and cls:
        img_crop_list, angle_list = self.text_classifier(img_crop_list)
    
    # 图像识别
    rec_res = self.text_recognizer(img_crop_list)
    
    # 结果过滤
    filter_boxes, filter_rec_res = [], []
    for box, rec_result in zip(dt_boxes, rec_res):
        text, score = rec_result
        if score >= self.drop_score:
            filter_boxes.append(box)
            filter_rec_res.append(rec_result)
    
    return filter_boxes, filter_rec_res

从上述代码可以清晰地看到TextSystem的工作流程:

  1. 文本检测:调用text_detector获取文本框坐标。
  2. 文本区域裁剪:根据检测到的文本框坐标,从原始图像中裁剪出各个文本区域。
  3. 方向分类:如果启用了方向分类,则对每个文本区域进行方向判断和校正。
  4. 文本识别:将校正后的文本区域送入text_recognizer进行识别,得到文本内容和置信度。
  5. 结果过滤:根据置信度阈值过滤掉低置信度的识别结果。

总结:TextSystem类的设计亮点

TextSystem类通过巧妙的设计,将文本检测、方向分类和文本识别三大核心模块有机地串联起来,实现了高效、准确的OCR功能。其主要设计亮点包括:

  1. 模块化设计:将不同功能封装在独立的类中,便于维护和扩展。
  2. 灵活的参数配置:通过args参数对象,可以灵活配置各个模块的行为,如是否启用方向分类、置信度阈值等。
  3. 高效的流程控制:通过__call__方法实现了清晰的OCR处理流程,使代码易于理解和调试。

通过对TextSystem类的深入解析,我们不仅了解了OnnxOCR的核心工作原理,也为我们自己设计和实现类似的复杂系统提供了宝贵的参考。这种模块化、松耦合的设计思想,以及清晰的流程控制,是构建高效、可维护系统的关键。

如果你想深入了解OnnxOCR的更多细节,可以查看项目中的相关源代码文件,如onnxocr/predict_system.pyonnxocr/predict_det.pyonnxocr/predict_cls.pyonnxocr/predict_rec.py等。

要开始使用OnnxOCR,你可以通过以下命令克隆仓库:

git clone https://gitcode.com/gh_mirrors/on/OnnxOCR

希望这篇文章能帮助你更好地理解OnnxOCR的内部工作机制,为你的OCR相关项目开发提供有益的参考。

【免费下载链接】OnnxOCR 基于PaddleOCR重构,并且脱离PaddlePaddle深度学习训练框架的轻量级OCR,推理速度超快 —— A lightweight OCR system based on PaddleOCR, decoupled from the PaddlePaddle deep learning training framework, with ultra-fast inference speed. 【免费下载链接】OnnxOCR 项目地址: https://gitcode.com/gh_mirrors/on/OnnxOCR

Logo

脑启社区是一个专注类脑智能领域的开发者社区。欢迎加入社区,共建类脑智能生态。社区为开发者提供了丰富的开源类脑工具软件、类脑算法模型及数据集、类脑知识库、类脑技术培训课程以及类脑应用案例等资源。

更多推荐