PaddleOCR 产线推理 Benchmark 指南基于 PADDLE_PDX_PIPELINE_BENCHMARK 的端到端逐算子性能剖析【免费下载链接】PaddleOCRTurn any PDF or image document into structured data for your AI. A powerful, lightweight OCR toolkit that bridges the gap between images/PDFs and LLMs. Supports 100 languages.项目地址: https://gitcode.com/GitHub_Trending/pa/PaddleOCRPaddleOCR 3.x 提供了一套面向产线Pipeline推理的内置 Benchmark 能力通过一个环境变量开启后即可自动统计整条 OCR 推理链路中所有操作的平均执行时间单位毫秒并以详单、汇总、源码定位三种视角输出结果同时支持导出 CSV 供后续分析。本文以 官方文档 为骨架结合仓库源码说明其使用方法、结果含义与底层实现对应关系帮助你快速定位文本检测、文本识别等环节的耗时瓶颈。一、Benchmark 功能概述Benchmark 功能会统计产线在端到端推理过程中所有操作的执行时间并给出汇总信息其核心价值包括覆盖产线内每一个操作读图、预处理、模型推理、后处理等不做黑盒化处理统计的是多次推理的平均耗时能过滤单次波动同时输出详细数据按调用顺序、汇总数据按层级归并与操作源码位置便于从现象追到实现耗时数据单位为毫秒ms。1.1 通过环境变量启用Benchmark 功能默认关闭需通过环境变量开启环境变量说明PADDLE_PDX_PIPELINE_BENCHMARK设置为True时开启 benchmark 功能默认为False一个容易踩坑的关键点是该环境变量必须在import paddleocr之前设置生效。官方示例正是先写os.environ[PADDLE_PDX_PIPELINE_BENCHMARK] True再执行from paddleocr import PaddleOCR, benchmark顺序不能颠倒。1.2 源码中的接入点在仓库源码中benchmark对象由 paddleocr/init.py 从paddlex.inference.utils.benchmark导入并被列入包的__all__paddleocr/init.py。也就是说用户侧直接from paddleocr import benchmark拿到的就是底层 PaddleX 产线推理的 benchmark 单例其行为与文档描述一致。二、Benchmark API 方法一览产线推理 benchmark 提供的方法、参数说明如下表方法名称描述start_warmup()开始 benchmark 的 warmup预热。stop_warmup()结束 warmup会清除 warmup 时产生的所有 benchmark 数据。print_detail_data()打印详细的 benchmark 数据包括每个操作的顺序Step、名称Operation、平均耗时Time。print_summary_data()打印汇总的 benchmark 数据包括每个操作的层级Level、名称Operation、总平均耗时Time。level 为 1 的 Time 即为总平均耗时。print_operation_info()打印每个操作的源代码位置。print_pipeline_data()打印 benchmark 的 detail 数据、summary 数据和 operation_info 数据到控制台。save_pipeline_data(save_path)save_path: string。保存 benchmark 数据的文件路径包含详细的 benchmark 数据detail.csv和汇总的 benchmark 数据summary.csv。reset()清除已有的 benchmark 数据。需要区分两组方法的使用时机预热相关start_warmup()/stop_warmup()用于跳过模型加载、显存/内存分配、推理库初始化等一次性的冷启动开销保证正式统计的是稳态性能输出相关print_detail_data()/print_summary_data()/print_operation_info()分别输出三种视角的数据print_pipeline_data()是一次性输出三者save_pipeline_data(save_path)用于落盘reset()用于在一次进程中开启新一轮统计前清空旧数据。三、快速开始编写测速脚本创建test_infer.py脚本完整代码如下import os os.environ[PADDLE_PDX_PIPELINE_BENCHMARK] True from paddleocr import PaddleOCR, benchmark pipeline PaddleOCR() image general_ocr_002.png benchmark.start_warmup() # warmup开始 for _ in range(50): pipeline.predict(image) benchmark.stop_warmup() # warmup结束 for _ in range(100): # 开始正式测速 pipeline.predict(image) benchmark.print_pipeline_data() # 打印汇总的benchmark数据 benchmark.save_pipeline_data(./benchmark) # 将benchmark数据保存至benchmark文件夹脚本逻辑分四步启用开关设置PADDLE_PDX_PIPELINE_BENCHMARKTrue必须在 import 之前预热阶段start_warmup()后循环 50 次pipeline.predict(image)再stop_warmup()——预热期间产生的所有 benchmark 数据会被清除不会污染正式结果正式测速循环 100 次pipeline.predict(image)这 100 次推理的平均耗时即最终统计结果输出与落盘print_pipeline_data()在控制台打印三类数据save_pipeline_data(./benchmark)在当前目录生成benchmark/detail.csv与benchmark/summary.csv。执行脚本python test_infer.py注意示例中的general_ocr_002.png为演示用测试图实际使用时请替换为本地存在的图片路径相对路径或绝对路径均可。pipeline.predict()支持图片路径、URL、np.ndarray等多种输入具体可参考 快速开始。若需要控制模型选型如ocr_version、lang、text_detection_model_name等可在构造PaddleOCR()时传入相关参数定义见 paddleocr/_pipelines/ocr.py。四、运行结果解读运行示例程序所得到的 benchmark 结果由三张表组成下面逐表说明其含义。4.1 Operation Info每个操作的源码位置Operation Info ------------------------------------------------------------------------------------------------------------------------------------ | Operation | Source Code Location | ------------------------------------------------------------------------------------------------------------------------------------ | ReadImage | /PaddleX/paddlex/inference/common/reader/image_reader.py:47 | | DocTrPostProcess | /PaddleX/paddlex/inference/models/image_unwarping/processors.py:51 | | DetResizeForTest | /PaddleX/paddlex/inference/models/text_detection/processors.py:58 | | _DocPreprocessorPipeline.get_model_settings | /PaddleX/paddlex/inference/pipelines/doc_preprocessor/pipeline.py:110 | | Crop | /PaddleX/paddlex/inference/models/image_classification/processors.py:45 | | PaddleInferChainLegacy | /PaddleX/paddlex/inference/models/common/static_infer.py:248 | | _OCRPipeline.rotate_image | /PaddleX/paddlex/inference/pipelines/ocr/pipeline.py:140 | | _DocPreprocessorPipeline.predict | /PaddleX/paddlex/inference/pipelines/doc_preprocessor/pipeline.py:133 | | ClasPredictor.apply | /PaddleX/paddlex/inference/models/base/predictor/base_predictor.py:213 | | WarpPredictor.apply | /PaddleX/paddlex/inference/models/base/predictor/base_predictor.py:213 | | TextDetPredictor.apply | /PaddleX/paddlex/inference/models/base/predictor/base_predictor.py:213 | | ResizeByShort | /PaddleX/paddlex/inference/models/common/vision/processors.py:203 | | Normalize | /PaddleX/paddlex/inference/models/common/vision/processors.py:268 | | DBPostProcess | /PaddleX/paddlex/inference/models/text_detection/processors.py:487 | | TextRecPredictor.apply | /PaddleX/paddlex/inference/models/base/predictor/base_predictor.py:213 | | NormalizeImage | /PaddleX/paddlex/inference/models/text_detection/processors.py:252 | | _DocPreprocessorPipeline.check_model_settings_valid | /PaddleX/paddlex/inference/pipelines/doc_preprocessor/pipeline.py:82 | | _OCRPipeline.get_model_settings | /PaddleX/paddlex/inference/pipelines/ocr/pipeline.py:204 | | _OCRPipeline.get_text_det_params | /PaddleX/paddlex/inference/pipelines/ocr/pipeline.py:236 | | Resize | /PaddleX/paddlex/inference/models/common/vision/processors.py:117 | | CTCLabelDecode | /PaddleX/paddlex/inference/models/text_recognition/processors.py:189 | | Topk | /PaddleX/paddlex/inference/models/image_classification/processors.py:83 | | OCRReisizeNormImg | /PaddleX/paddlex/inference/models/text_recognition/processors.py:65 | | ToBatch | /PaddleX/paddlex/inference/models/text_recognition/processors.py:235 | | ToCHWImage | /PaddleX/paddlex/inference/models/common/vision/processors.py:277 | | _OCRPipeline.predict | /PaddleX/paddlex/inference/pipelines/ocr/pipeline.py:282 | | ToBatch | /PaddleX/paddlex/inference/models/common/vision/processors.py:284 | | _OCRPipeline.check_model_settings_valid | /PaddleX/paddlex/inference/pipelines/ocr/pipeline.py:176 | ------------------------------------------------------------------------------------------------------------------------------------Operation Info表给出了每个操作对应的源码文件与行号print_operation_info()的输出。当某个操作耗时异常时可以直接沿着该路径去阅读实现代码。需要说明的是示例输出中的路径指向底层PaddleX 依赖包内部paddlex.inference.*这是因为 benchmark 底层实现位于paddlex.inference.utils.benchmark见 paddleocr/init.py而 PaddleOCR 3.x 的产线封装则位于本仓库的 paddleocr/_pipelines 与 paddleocr/_models 目录二者通过配置覆盖机制衔接。4.2 Detail Data按调用顺序的逐操作耗时Detail Data --------------------------------------------------------------------------------------------- | Step | Operation | Time | --------------------------------------------------------------------------------------------- | 1 | _OCRPipeline.predict | 375.11244628956774 | | 2 | - _OCRPipeline.get_model_settings | 0.00428391998866573 | | 3 | - _OCRPipeline.check_model_settings_valid | 0.0024828016466926783 | | 4 | - _OCRPipeline.get_text_det_params | 0.005152080120751634 | | 5 | - ReadImage | 3.2029549301660154 | | 6 | - _DocPreprocessorPipeline.predict | 27.310913350374904 | | 7 | - _DocPreprocessorPipeline.get_model_settings | 0.004107539862161502 | | 8 | - _DocPreprocessorPipeline.check_model_settings_valid | 0.0016830896493047476 | | 9 | - ReadImage | 0.0029576495580840856 | | 10 | - ClasPredictor.apply | 4.701614730001893 | | 11 | - ReadImage | 0.13587839042884298 | | 12 | - ResizeByShort | 0.3281894406245556 | | 13 | - Crop | 0.01503000981756486 | | 14 | - Normalize | 0.3884544402535539 | | 15 | - ToCHWImage | 0.006330519245238975 | | 16 | - ToBatch | 0.14169737987685949 | | 17 | - PaddleInferChainLegacy | 3.283889550511958 | | 18 | - Topk | 0.10010718091507442 | | 19 | - WarpPredictor.apply | 21.893062600429403 | | 20 | - ReadImage | 0.004573430051095784 | | 21 | - Normalize | 4.245691860560328 | | 22 | - ToCHWImage | 0.005895959911867976 | | 23 | - ToBatch | 1.7250755491841119 | | 24 | - PaddleInferChainLegacy | 10.887994960212382 | | 25 | - DocTrPostProcess | 1.4253830898087472 | | 26 | - TextDetPredictor.apply | 49.976056129235076 | | 27 | - ReadImage | 0.004843260976485908 | | 28 | - DetResizeForTest | 3.3269549095712136 | | 29 | - NormalizeImage | 2.9576204597833566 | | 30 | - ToCHWImage | 0.005182310123927891 | | 31 | - ToBatch | 1.046062790119322 | | 32 | - PaddleInferChainLegacy | 34.70224040953326 | | 33 | - DBPostProcess | 5.826775671303039 | | 34 | - ClasPredictor.apply | 23.43678753997665 | | 35 | - ReadImage | 0.0633359991479665 | | 36 | - Resize | 0.24419097986537963 | | 37 | - Normalize | 0.480741420033155 | | 38 | - ToCHWImage | 0.0066608507768251 | | 39 | - ToBatch | 0.18536171046434902 | | 40 | - PaddleInferChainLegacy | 3.3766339404974133 | | 41 | - Topk | 0.15909907990135252 | | 42 | - ReadImage | 0.0395357194065582 | | 43 | - Resize | 0.2085290702234488 | | 44 | - Normalize | 0.4068155895220116 | | 45 | - ToCHWImage | 0.005677459557773545 | | 46 | - ToBatch | 0.11155156986205839 | | 47 | - PaddleInferChainLegacy | 2.7268862597702537 | | 48 | - Topk | 0.13428127014776692 | | 49 | - ReadImage | 0.032502070971531793 | | 50 | - Resize | 0.20152631899691187 | | 51 | - Normalize | 0.347195100330282 | | 52 | - ToCHWImage | 0.005517759709618986 | | 53 | - ToBatch | 0.10656953061698005 | | 54 | - PaddleInferChainLegacy | 2.612808299745666 | | 55 | - Topk | 0.13188434022595175 | | 56 | - ReadImage | 0.03589507090509869 | | 57 | - Resize | 0.2076980892161373 | | 58 | - Normalize | 0.3592138692329172 | | 59 | - ToCHWImage | 0.005206359783187509 | | 60 | - ToBatch | 0.1359267797670327 | | 61 | - PaddleInferChainLegacy | 2.619662079960108 | | 62 | - Topk | 0.130717080028262 | | 63 | - ReadImage | 0.038393009890569374 | | 64 | - Resize | 0.19743553988519125 | | 65 | - Normalize | 0.33197281998582184 | | 66 | - ToCHWImage | 0.00512515107402578 | | 67 | - ToBatch | 0.10293568033375777 | | 68 | - PaddleInferChainLegacy | 2.5824282996472903 | | 69 | - Topk | 0.129485729848966 | | 70 | - ReadImage | 0.04028105002362281 | | 71 | - Resize | 0.10972122952807695 | | 72 | - Normalize | 0.1787920702190604 | | 73 | - ToCHWImage | 0.00408922991482541 | | 74 | - ToBatch | 0.05458273953991011 | | 75 | - PaddleInferChainLegacy | 2.262636839877814 | | 76 | - Topk | 0.1055472502775956 | | 77 | - _OCRPipeline.rotate_image | 0.05102259965497069 | | 78 | - TextRecPredictor.apply | 169.44437422047486 | | 79 | - ReadImage | 0.004737989947898313 | | 80 | - OCRReisizeNormImg | 0.46037410967983305 | | 81 | - ToBatch | 0.6405122207070235 | | 82 | - PaddleInferChainLegacy | 15.439773340767715 | | 83 | - CTCLabelDecode | 10.742378439754248 | | 84 | - ReadImage | 0.006349970353767276 | | 85 | - OCRReisizeNormImg | 0.6252558408596087 | | 86 | - ToBatch | 0.7338531101413537 | | 87 | - PaddleInferChainLegacy | 15.204189889482222 | | 88 | - CTCLabelDecode | 6.7516070799320005 | | 89 | - ReadImage | 0.006978959863772616 | | 90 | - OCRReisizeNormImg | 0.7167729703360237 | | 91 | - ToBatch | 0.6568272292497568 | | 92 | - PaddleInferChainLegacy | 14.973864750063512 | | 93 | - CTCLabelDecode | 6.695752280211309 | | 94 | - ReadImage | 0.0070425499870907515 | | 95 | - OCRReisizeNormImg | 0.7757280093210284 | | 96 | - ToBatch | 0.6442721793428063 | | 97 | - PaddleInferChainLegacy | 15.027350780292181 | | 98 | - CTCLabelDecode | 6.661591530573787 | | 99 | - ReadImage | 0.007066540565574542 | | 100 | - OCRReisizeNormImg | 0.9195591000025161 | | 101 | - ToBatch | 0.7951801503077149 | | 102 | - PaddleInferChainLegacy | 15.379044259898365 | | 103 | - CTCLabelDecode | 9.372330370388227 | | 104 | - ReadImage | 0.006225309771252796 | | 105 | - OCRReisizeNormImg | 1.1437026296334807 | | 106 | - ToBatch | 1.091715270158602 | | 107 | - PaddleInferChainLegacy | 23.505835609685164 | | 108 | - CTCLabelDecode | 17.118994210031815 | ---------------------------------------------------------------------------------------------解读Detail Data的三个要点Step操作执行的顺序号Operation操作名称前面的-缩进层级直观反映了调用嵌套关系——缩进越深说明该操作越是某个上层操作内部的子步骤Time该操作在正式测速轮次中的平均耗时ms。从这张表可以还原出 OCR 产线的完整调用链示例环境默认开启了文档方向分类与文档矫正即 DocPreprocessor顶层_OCRPipeline.predict375.11ms→ReadImage3.20ms→_DocPreprocessorPipeline.predict27.31ms内部含 ClasPredictor 文档方向分类与 WarpPredictor 文档矫正→TextDetPredictor.apply49.98ms文本检测→ClasPredictor.apply23.44ms文本行方向分类含 8 个 batch 子步骤→_OCRPipeline.rotate_image0.05ms→TextRecPredictor.apply169.44ms文本识别含 6 个 batch 子步骤。从时间占比看文本识别TextRec是端到端推理的第一大耗时来源其次是文本检测TextDet而识别环节中PaddleInferChainLegacy模型推理与CTCLabelDecodeCTC 解码后处理又占据了绝大部分。这为后续的调优方向提供了直接依据。4.3 Summary Data按层级归并的汇总数据Summary Data ----------------------------------------------------------------------------------- | Level | Operation | Time | ----------------------------------------------------------------------------------- | 1 | _OCRPipeline.predict | 375.11244628956774 | | | | | | 2 | Layer | 375.11244628956774 | | | Core | 273.4340275716386 | | | Other | 101.67841871792916 | | | _OCRPipeline.get_model_settings | 0.00428391998866573 | | | _OCRPipeline.check_model_settings_valid | 0.0024828016466926783 | | | _OCRPipeline.get_text_det_params | 0.005152080120751634 | | | ReadImage | 3.2029549301660154 | | | _DocPreprocessorPipeline.predict | 27.310913350374904 | | | TextDetPredictor.apply | 49.976056129235076 | | | ClasPredictor.apply | 23.43678753997665 | | | _OCRPipeline.rotate_image | 0.05102259965497069 | | | TextRecPredictor.apply | 169.44437422047486 | | | | | | 3 | Layer | 270.1681312400615 | | | Core | 261.8130224109336 | | | Other | 8.355108829127857 | | | _DocPreprocessorPipeline.get_model_settings | 0.004107539862161502 | | | _DocPreprocessorPipeline.check_model_settings_valid | 0.0016830896493047476 | | | ReadImage | 0.29614515136927366 | | | ClasPredictor.apply | 4.701614730001893 | | | WarpPredictor.apply | 21.893062600429403 | | | DetResizeForTest | 3.3269549095712136 | | | NormalizeImage | 2.9576204597833566 | | | ToCHWImage | 0.03745912094018422 | | | ToBatch | 6.305350960610667 | | | PaddleInferChainLegacy | 150.41335475922097 | | | DBPostProcess | 5.826775671303039 | | | Resize | 1.1691012277151458 | | | Normalize | 2.104730869323248 | | | Topk | 0.7910147504298948 | | | OCRReisizeNormImg | 4.641392659832491 | | | CTCLabelDecode | 57.342653910891386 | | | | | | 4 | Layer | 26.594677330431296 | | | Core | 22.69419176140218 | | | Other | 3.900485569029115 | | | ReadImage | 0.14045182047993876 | | | ResizeByShort | 0.3281894406245556 | | | Crop | 0.01503000981756486 | | | Normalize | 4.634146300813882 | | | ToCHWImage | 0.012226479157106951 | | | ToBatch | 1.8667729290609714 | | | PaddleInferChainLegacy | 14.17188451072434 | | | Topk | 0.10010718091507442 | | | DocTrPostProcess | 1.4253830898087472 | -----------------------------------------------------------------------------------解读Summary Data的关键点Level 1 的 Time 即为端到端总平均耗时。本例中_OCRPipeline.predict为 375.11ms每个层级都会给出Layer / Core / Other三行汇总Layer是该层级全部操作的总体耗时Core为归因到具体操作的时间总和Other为 Layer 与 Core 的差值即未被归因到具体列出的操作、但发生在该层级内的其余开销。从数值上可以直接验证这一关系例如 Level 2 中Core273.43ms恰好等于该层级下列出的全部操作耗时之和Other 375.11 − 273.43 101.68ms通过Level 3可以看到模型推理环节的归并结果PaddleInferChainLegacy各子模型推理合计为 150.41msCTCLabelDecodeCTC 解码合计为 57.34ms二者是核心计算的主要构成Level由 1 到 4 逐层下钻可像树一样从总耗时逐步拆解到某个具体子模型内部的预处理 / 推理 / 后处理。五、结果持久化detail.csv 与 summary.csv上述结果可通过save_pipeline_data(./benchmark)保存到本地./benchmark/目录生成detail.csv和summary.csv两个文件便于用 Excel、pandas 等工具做进一步统计或对比。detail.csv内容与 Detail Data 表格一致格式为三列Step,Operation,Time示例如下Step,Operation,Time 1,_OCRPipeline.predict,375.11244628956774 2, - _OCRPipeline.get_model_settings,0.00428391998866573 3, - _OCRPipeline.check_model_settings_valid,0.0024828016466926783 4, - _OCRPipeline.get_text_det_params,0.005152080120751634 5, - ReadImage,3.2029549301660154 6, - _DocPreprocessorPipeline.predict,27.310913350374904 7, - _DocPreprocessorPipeline.get_model_settings,0.004107539862161502 8, - _DocPreprocessorPipeline.check_model_settings_valid,0.0016830896493047476 9, - ReadImage,0.0029576495580840856 10, - ClasPredictor.apply,4.701614730001893 ...summary.csv内容与 Summary Data 表格一致格式为三列Level,Operation,Time示例如下Level,Operation,Time 1,_OCRPipeline.predict,375.11244628956774 ,, 2,Layer,375.11244628956774 ,Core,273.4340275716386 ,Other,101.67841871792916 ,_OCRPipeline.get_model_settings,0.00428391998866573 ,_OCRPipeline.check_model_settings_valid,0.0024828016466926783 ,_OCRPipeline.get_text_det_params,0.005152080120751634 ,ReadImage,3.2029549301660154 ,_DocPreprocessorPipeline.predict,27.310913350374904 ,TextDetPredictor.apply,49.976056129235076 ,ClasPredictor.apply,23.43678753997665 ,_OCRPipeline.rotate_image,0.05102259965497069 ,TextRecPredictor.apply,169.44437422047486 ,, 3,Layer,270.1681312400615 ...注意 CSV 中 Operation 名称与 console 输出完全一致缩进同样保留在Operation字段内因此可以直接按字符串匹配如PaddleInferChainLegacy、CTCLabelDecode在数据集中检索归并耗时。六、Benchmark 结果与产线源码结构的对应关系把 benchmark 输出的操作名与本仓库源码对照可以进一步理解产线的真实结构benchmark 对象的来源from paddleocr import benchmark中的benchmark在 paddleocr/init.py 中从paddlex.inference.utils.benchmark导入属于产线推理的通用能力不仅限于 OCR 产线示例以 OCR 产线演示顶层操作_OCRPipeline.predict对应底层 PaddleX 的 OCR 产线。本仓库侧的用户入口是 paddleocr/_pipelines/ocr.py 中定义的PaddleOCR类其predict()/predict_iter()方法会把参数透传给底层产线见 paddleocr/_pipelines/ocr.py因此 benchmark 统计的正是这条完整的端到端调用链子模块操作与产线子模块的映射从 benchmark 输出可清晰还原_DocPreprocessorPipeline.*→ 文档预处理子产线内部含ClasPredictor.apply文档方向分类操作ResizeByShort/Crop/Topk等与WarpPredictor.apply文档矫正操作DocTrPostProcess等TextDetPredictor.apply→ 文本检测内部操作DetResizeForTest/NormalizeImage/PaddleInferChainLegacy/DBPostProcessClasPredictor.apply在 TextDet 之后的一组→ 文本行方向分类内部操作Resize/Normalize/Topk_OCRPipeline.rotate_image→ 依据方向分类结果旋转文本行图像TextRecPredictor.apply→ 文本识别内部操作OCRReisizeNormImg/ToBatch/PaddleInferChainLegacy/CTCLabelDecode。推理原语PaddleInferChainLegacy表示一次静态图模型推理对应 PaddleX 的 static infer 实现汇总表中按层级归并后可量化全部模型推理的总开销。七、典型使用场景与注意事项典型场景版本/模型对比更换ocr_version如 PP-OCRv5、PP-OCRv6或模型组合后用同一脚本分别测速并对比summary.csv量化模型升级带来的收益瓶颈定位通过 Detail Data 的缩进层级逐层下钻快速区分耗时来自模型推理PaddleInferChainLegacy还是前后处理CTCLabelDecode、DBPostProcess、图像预处理等回归监控把print_pipeline_data()的输出接入 CI/日志监控产线性能波动reset()可在同一进程中开启多轮独立统计。注意事项环境变量PADDLE_PDX_PIPELINE_BENCHMARKTrue必须在import paddleocr之前设置否则开关不生效warmup 轮次产生的 benchmark 数据会在stop_warmup()时被清除正式统计前务必执行预热以排除模型加载、推理库初始化等冷启动开销统计的是平均耗时为获得稳定结果建议正式测速轮次足够多官方示例为 100 次示例输出中的源码路径指向 PaddleX 依赖包内部paddlex.inference.*如需阅读具体算子实现可在本仓库 paddleocr/_models 与 paddleocr/_pipelines 中查看对应的产线封装与配置覆盖逻辑该能力针对的是产线端到端推理的耗时统计关于部署侧更细的性能优化推理引擎选择、并行推理等可进一步参考 推理引擎说明 与 并行推理指南。【免费下载链接】PaddleOCRTurn any PDF or image document into structured data for your AI. A powerful, lightweight OCR toolkit that bridges the gap between images/PDFs and LLMs. Supports 100 languages.项目地址: https://gitcode.com/GitHub_Trending/pa/PaddleOCR创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考