如何在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
相关产品推荐
相关产品推荐

