You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python脚本中加载PaddleOCR非默认文本检测模型?

Python脚本中调用PaddleOCR非DB文本检测模型的方法

问题描述

PaddleOCR官方说明支持DB、SAST、EAST等多种文本检测算法,但通过PaddleOCR类加载DB以外的模型时,会触发报错:

ppocr ERROR: det_algorithm must in ['DB']

查看源码可知,当前版本的PaddleOCR封装类仅默认支持DB检测模型。我已下载EAST/SAST等非DB检测模型,但不想使用官方提供的命令行脚本调用方式(如python3 tools/infer/predict_det.py --image_dir="./doc/imgs_en/img_10.jpg" --det_model_dir="./inference/det_r50_east/" --det_algorithm="EAST"),想知道能否直接在Python脚本中调用这些模型。

我目前尝试的代码如下:

from paddleocr import PaddleOCR

ocr = PaddleOCR(use_angle_cls=True, lang="en", det_algorithm="DB")
result = ocr.ocr(img, cls=True)

解决方案

可以直接在Python脚本中调用非DB检测模型,核心是手动初始化PaddleOCR内部的各个预测器类,而非依赖封装好的PaddleOCR类。以下是具体实现步骤(以EAST模型为例):

1. 导入依赖模块

import cv2
from paddleocr.tools.infer.predict_det import DetPredictor
from paddleocr.tools.infer.predict_cls import ClsPredictor
from paddleocr.tools.infer.predict_rec import RecPredictor
from paddleocr.utils.utility import draw_ocr

2. 配置各模块参数

根据你的模型路径和需求调整配置:

# 文本检测模块配置(替换为SAST时修改det_algorithm和det_model_dir)
det_config = {
    'det_algorithm': 'EAST',
    'det_model_dir': './inference/det_r50_east/',
    'det_limit_side_len': 960,
    'det_limit_type': 'max'
}

# 方向分类模块配置(不需要可删除)
cls_config = {
    'cls_model_dir': './inference/cls/',
    'cls_image_shape': '3, 48, 192',
    'cls_batch_num': 6,
    'use_angle_cls': True
}

# 文本识别模块配置
rec_config = {
    'rec_algorithm': 'CRNN',
    'rec_model_dir': './inference/en_rec/',
    'rec_image_shape': '3, 32, 320',
    'rec_batch_num': 6,
    'lang': 'en'
}

3. 初始化预测器并执行推理

# 初始化各个预测器
det_predictor = DetPredictor(det_config)
cls_predictor = ClsPredictor(cls_config) if cls_config['use_angle_cls'] else None
rec_predictor = RecPredictor(rec_config)

# 加载目标图片
img = cv2.imread("./doc/imgs_en/img_10.jpg")

# 执行文本检测
dt_boxes, _ = det_predictor.predict(img)

# 执行方向分类(可选)
if cls_predictor:
    dt_boxes, _, _ = cls_predictor.predict(img, dt_boxes)

# 执行文本识别
rec_res, _ = rec_predictor.predict(img, dt_boxes)

# 整理结果(与PaddleOCR.ocr返回格式一致)
final_result = [[box, (text, score)] for box, (text, score) in zip(dt_boxes, rec_res)]

# 可选:可视化识别结果
result_img = draw_ocr(img, dt_boxes, [text for text, score in rec_res], [score for text, score in rec_res])
cv2.imwrite("ocr_result.jpg", result_img)

关键说明

  • 这种方式完全复用PaddleOCR内部的推理逻辑,和官方脚本效果一致,且更灵活;
  • 切换到SAST等其他检测模型时,只需修改det_algorithm和det_model_dir参数即可;
  • 不需要方向分类功能时,直接删除cls相关的配置和代码即可。

内容的提问来源于stack exchange,提问作者Nicoloc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 22:10:32