人工智能计算机视觉OCR深度学习大模型RAG【免费下载链接】PaddleOCR飞桨多语言OCR工具包实用超轻量OCR系统支持80种语言识别提供数据标注与合成工具支持服务器、移动端、嵌入式及IoT设备端的训练与部署 Awesome multilingual OCR toolkits based on PaddlePaddle (practical ultra lightweight OCR system, support 80 languages recognition, provide data annotation and synthesis tools, support training and deployment among server, mobile, embedded and IoT devices)项目地址https://gitcode.com/paddlepaddle/PaddleOCR点击查看免费下载本文以 PaddleOCR 仓库 docs/version2.x/ppocr/quick_start.en.md 为核心骨架系统讲解基于 PP-OCR 系列模型PP-OCR / PP-OCRv2 / PP-OCRv3 / PP-OCRv4 及其后续版本的快速使用方式包括 PaddlePaddle 与paddleocrwhl 包的安装、命令行一键式 OCR、Python 代码调用、结果可视化、PDF 文档推理、滑动窗口切片以及 80 语言模型的切换。读者学完后将能够在自己的机器上用三条命令完成「检测 方向分类 识别」的端到端 OCR 推理并能够把识别结果绘制回原图、扩展到自定义模型与多语言场景。提示本文聚焦 PP-OCR 系列模型的快速使用。如需文档解析版面分析、表格识别、公式识别等相关功能请参阅 PP-Structure 快速上手。1. 环境安装1.1 安装 PaddlePaddle 深度学习框架paddleocr依赖飞桨PaddlePaddle作为底层推理引擎。如果本机尚无 Python 环境请先参考 环境准备 完成 Python 与依赖的搭建。根据硬件情况选择对应的安装命令有 NVIDIA GPUCUDA 11安装 GPU 版本注意版本约束2.6与本文档对应的 PaddleOCR 2.x 系列兼容pip install paddlepaddle-gpu2.6无可用 GPU纯 CPU 环境安装 CPU 版本python -m pip install paddlepaddle2.6PaddlePaddle 对各操作系统、Python 版本与 CUDA 版本有具体的兼容矩阵安装前建议对照官方安装指引核对软件版本要求。对于 Windows 用户若安装shapely时出现OSError: [WinError 126] The specified module could not be found可尝试下载预编译的 Shapely whl 文件进行安装。1.2 安装 PaddleOCR whl 包pip install paddleocr2.0.1 # 推荐使用 2.0.1 及以上版本安装完成后即获得paddleocr命令行工具与PaddleOCRPython 类。当前仓库中paddleocr包在 paddleocr/init.py 中导出了PaddleOCR、TextDetection、TextRecognition、PPStructureV3等一系列推理入口其中PaddleOCR类被特别注释为与 PaddleOCR 2.x 接口保持兼容因此 2.x 时代的使用习惯可以平滑迁移。2. 命令行一键使用Easy-to-UsePaddleOCR 提供了系列测试图片下载后解压并在终端中切换到对应目录cd /path/to/ppocr_img如果不使用官方测试图把下面的--image_dir参数替换为本地图片路径即可。2.1 中英文模型① 检测 方向分类 识别完整流水线paddleocr --image_dir ./imgs_en/img_12.jpg --use_angle_cls true --lang en --use_gpu false输出为列表每个元素包含文本框四顶点坐标、识别文本与置信度[[[441.0, 174.0], [1166.0, 176.0], [1165.0, 222.0], [441.0, 221.0]], (ACKNOWLEDGEMENTS, 0.9971134662628174)] [[[403.0, 346.0], [1204.0, 348.0], [1204.0, 384.0], [402.0, 383.0]], (We would like to thank all the designers and, 0.9761400818824768)] [[[403.0, 396.0], [1204.0, 398.0], [1204.0, 434.0], [402.0, 433.0]], (contributors who have been involved in the, 0.9791957139968872)] ......其中--use_gpu false用于在无 GPU 设备时禁用 GPU 推理--use_angle_cls true开启文本行方向分类器处理旋转 180° 的文字--lang en指定语言为英文。PDF 文件同样支持通过page_num参数指定推理前几页默认值为0即推理全部页面paddleocr --image_dir ./xxx.pdf --use_angle_cls true --use_gpu false --page_num 2② 仅检测把--rec设为false关闭识别子模块paddleocr --image_dir ./imgs_en/img_12.jpg --rec false输出只包含文本框坐标[[397.0, 802.0], [1092.0, 802.0], [1092.0, 841.0], [397.0, 841.0]] [[397.0, 750.0], [1211.0, 750.0], [1211.0, 789.0], [397.0, 789.0]] [[397.0, 702.0], [1209.0, 698.0], [1209.0, 734.0], [397.0, 738.0]] ......③ 仅识别把--det设为false关闭检测子模块此时输入通常是已裁剪好的单词/文本行图片paddleocr --image_dir ./imgs_words_en/word_10.png --det false --lang en输出只包含文本与置信度[PAIN, 0.9934559464454651]2.2 选择 PP-OCR 模型版本--ocr_version2.x 版本的paddleocr默认使用PP-OCRv4模型--ocr_version PP-OCRv4。如需使用其他版本可通过--ocr_version参数切换版本名说明PP-OCRv4支持中英文检测识别、方向分类器支持多语言识别PP-OCRv3支持中英文检测识别、方向分类器支持多语言识别PP-OCRv2仅支持中英文检测识别与方向分类器多语言模型未更新PP-OCR支持中英文检测识别、方向分类器支持多语言识别从当前仓库源码看3.x 兼容层的模型版本支持面进一步扩大paddleocr/_pipelines/ocr.py 中定义_SUPPORTED_OCR_VERSIONS [PP-OCRv3, PP-OCRv4, PP-OCRv5, PP-OCRv6]PaddleOCR(ocr_version...)构造函数会校验传入版本并抛出ValueError当lang与ocr_version均未指定时_get_ocr_model_names()默认返回PP-OCRv6_medium_det与PP-OCRv6_medium_rec两个模型名。也就是说文档层面的默认 v4是针对 2.x 指南的表述当前仓库代码在未显式指定时已默认走 PP-OCRv6 系列模型且会根据lang自动匹配最合适的版本与模型例如ch、en、japan等语言落在 PP-OCRv6拉丁语系小语种落在 PP-OCRv5ka格鲁吉亚语回退到 PP-OCRv3详见 paddleocr/_pipelines/ocr.py 的_get_ocr_model_names实现。如果想接入自己训练的模型可以在paddleocr.py中追加模型链接与键值后重新编译更推荐的做法是使用 3.x 接口的text_detection_model_dir/text_recognition_model_dir参数直接指定推理模型目录详见下文第 5 节。whl 包的更多用法可参阅 whl 包使用文档。2.3 多语言模型80 语言PaddleOCR 目前支持80 种语言通过修改--lang参数即可切换无需更换代码paddleocr --image_dir ./doc/imgs_en/254.jpg --langen输出同样是「文本框 文本 置信度」的列表[[[67.0, 51.0], [327.0, 46.0], [327.0, 74.0], [68.0, 80.0]], (PHOCAPITAL, 0.9944712519645691)] [[[72.0, 92.0], [453.0, 84.0], [454.0, 114.0], [73.0, 122.0]], (107 State Street, 0.9744491577148438)] [[[69.0, 135.0], [501.0, 125.0], [501.0, 156.0], [70.0, 165.0]], (Montpelier Vermont, 0.9357033967971802)] ......常用语言的缩写对照如下语言缩写语言缩写语言缩写中英文ch法语fr日语japan英文en德语german韩语korean繁体中文chinese_cht意大利语it俄语ru全部语言及其对应缩写的完整列表可参阅 多语言模型教程。从源码结构看语言映射在 paddleocr/_utils/langs.py 中被组织为若干字符集分组LATIN_LANGS拉丁语系含fr、german、it、es、vi等 50 个左右代码、ARABIC_LANGS阿拉伯语系、CYRILLIC_LANGS西里尔语系、ESLAV_LANGS斯拉夫语系、DEVANAGARI_LANGS天城文语系。PaddleOCR在解析lang时正是依据这些分组去匹配对应的识别模型这也是80 语言一条命令切换得以实现的底层机制。3. Python 代码调用3.1 中英文 / 多语言模型检测 方向分类 识别from paddleocr import PaddleOCR, draw_ocr # Paddleocr 支持中文、英文、法语、德语、韩语、日语等。 # 可通过设置参数 lang 为 ch、en、fr、german、korean、japan 来切换对应语言模型。 ocr PaddleOCR(use_angle_clsTrue, langen) # 只需运行一次自动下载并加载模型到内存 img_path ./imgs_en/img_12.jpg result ocr.ocr(img_path, clsTrue) for idx in range(len(result)): res result[idx] for line in res: print(line) # 绘制结果 from PIL import Image result result[0] image Image.open(img_path).convert(RGB) boxes [line[0] for line in result] txts [line[1][0] for line in result] scores [line[1][1] for line in result] im_show draw_ocr(image, boxes, txts, scores, font_path./fonts/simfang.ttf) im_show Image.fromarray(im_show) im_show.save(result.jpg)输出为列表每项包含文本框、文本与识别置信度[[[441.0, 174.0], [1166.0, 176.0], [1165.0, 222.0], [441.0, 221.0]], (ACKNOWLEDGEMENTS, 0.9971134662628174)] [[[403.0, 346.0], [1204.0, 348.0], [1204.0, 384.0], [402.0, 383.0]], (We would like to thank all the designers and, 0.9761400818824768)] [[[403.0, 396.0], [1204.0, 398.0], [1204.0, 434.0], [402.0, 433.0]], (contributors who have been involved in the, 0.9791957139968872)] ......可视化效果如下红色边界框标出文字区域并叠加识别文本字体文件simfang.ttf可在仓库 doc/fonts/simfang.ttf 中找到用于保证中文等文字在可视化时正确渲染。从源码结构看draw_ocr由paddleocr包导出见 paddleocr/init.py而PaddleOCR.ocr()方法在当前仓库中被标记为deprecated(Please use \predict instead.)即 3.x 兼容层推荐改用predict/predict_iter 接口见 paddleocr/_pipelines/ocr.py两者返回结构保持一致旧代码仍可运行。3.2 直接推理 PDF 并逐页可视化若输入是 PDF 文件PaddleOCR会按页返回结果无内容的页返回None需要跳过配合fitzPyMuPDF把 PDF 渲染成图像后即可逐页绘制from paddleocr import PaddleOCR, draw_ocr # Paddleocr 支持中文、英文、法语、德语、韩语和日语。 # 通过设置 lang 为 ch、en、fr、german、korean、japan 切换语言模型。 PAGE_NUM 10 # 设置识别的页数 pdf_path default.pdf ocr PaddleOCR(use_angle_clsTrue, langch, page_numPAGE_NUM) # 只需运行一次自动下载并加载模型到内存 # ocr PaddleOCR(use_angle_clsTrue, langch, page_numPAGE_NUM, use_gpu0) # 使用 GPU 时取消本行注释并注释上面一行 result ocr.ocr(pdf_path, clsTrue) for idx in range(len(result)): res result[idx] if res None: # 空结果时跳过避免 TypeError:NoneType print(f[DEBUG] Empty page {idx1} detected, skip it.) continue for line in res: print(line) # 绘制结果 import fitz from PIL import Image import cv2 import numpy as np imgs [] with fitz.open(pdf_path) as pdf: for pg in range(0, PAGE_NUM): page pdf[pg] mat fitz.Matrix(2, 2) pm page.get_pixmap(matrixmat, alphaFalse) # 若宽或高超过 2000 像素则不放大图像 if pm.width 2000 or pm.height 2000: pm page.get_pixmap(matrixfitz.Matrix(1, 1), alphaFalse) img Image.frombytes(RGB, [pm.width, pm.height], pm.samples) img cv2.cvtColor(np.array(img), cv2.COLOR_RGB2BGR) imgs.append(img) for idx in range(len(result)): res result[idx] if res None: continue image imgs[idx] boxes [line[0] for line in res] txts [line[1][0] for line in res] scores [line[1][1] for line in res] im_show draw_ocr(image, boxes, txts, scores, font_pathdoc/fonts/simfang.ttf) im_show Image.fromarray(im_show) im_show.save(result_page_{}.jpg.format(idx))使用前需安装 PDF 渲染依赖pip install PyMuPDF即fitz。命令行方式只需在--image_dir中传入 PDF 路径并配合--page_num即可无需额外编写渲染代码。3.3 大图的滑动窗口切片推理slice对于超大尺寸图片PaddleOCR 支持按滑动窗口切片推理避免整图缩放导致的小字漏检。示例代码如下from paddleocr import PaddleOCR from PIL import Image, ImageDraw, ImageFont # 初始化 OCR 引擎 ocr PaddleOCR(use_angle_clsTrue, langen) img_path ./very_large_image.jpg slice {horizontal_stride: 300, vertical_stride: 500, merge_x_thres: 50, merge_y_thres: 35} results ocr.ocr(img_path, clsTrue, sliceslice) # 加载图片 image Image.open(img_path).convert(RGB) draw ImageDraw.Draw(image) font ImageFont.truetype(./doc/fonts/simfang.ttf, size20) # 按需调整字号 # 处理并绘制结果 for res in results: for line in res: box [tuple(point) for point in line[0]] # 计算外接矩形 box [(min(point[0] for point in box), min(point[1] for point in box)), (max(point[0] for point in box), max(point[1] for point in box))] txt line[1][0] draw.rectangle(box, outlinered, width2) # 绘制矩形 draw.text((box[0][0], box[0][1] - 25), txt, fillblue, fontfont) # 在框上方绘制文本 # 保存结果 image.save(result.jpg)slice字典中的四个键含义为horizontal_stride/vertical_stride控制水平 / 垂直方向切片的步长即相邻窗口的重叠程度merge_x_thres/merge_y_thres控制相邻切片检测框在 x / y 方向上的合并阈值阈值越大越倾向于把跨切片的文本框合并为一条。更完整的切片机制说明可参阅 slice 操作文档。4. 核心参数详解下表整理了paddleocr常用参数及其默认值覆盖检测DB 算法、识别CRNN 算法、方向分类与运行环境四类配置参数说明默认值use_gpu是否使用 GPUTRUEgpu_mem初始化时使用的 GPU 显存大小8000Mimage_dir命令行模式下输入图片路径或文件夹路径page_num输入为 PDF 时生效指定推理前 page_num 页默认全部页0det_algorithm选择的检测算法类型DBdet_model_dir文本检测推理模型目录1. 传 None 时自动下载内置模型到~/.paddleocr/det2. 传自己转换的推理模型路径目录内必须包含 model 和 params 文件Nonedet_max_side_len图像长边最大值超过则把长边缩放至该值、短边等比缩放960det_db_threshDB 输出图的二值化阈值0.3det_db_box_threshDB 输出框阈值得分低于该值的框被丢弃0.5det_db_unclip_ratioDB 输出框的扩展比例2det_db_score_mode检测框得分的计算方式可选 fast 与 slow检测弯曲文本时建议用 slowfastdet_east_score_threshEAST 输出图二值化阈值0.8det_east_cover_threshEAST 输出框阈值得分低于该值被丢弃0.1det_east_nms_threshEAST 模型输出框的 NMS 阈值0.2rec_algorithm选择的识别算法类型CRNNrec_model_dir文本识别推理模型目录传参方式同 det_model_dir默认下载到~/.paddleocr/recNonerec_image_shape识别算法输入图像形状3,32,320rec_batch_num识别时前向推理的 batchsize30max_text_length识别算法能识别的最大文本长度25rec_char_dict_path字典路径使用自定义识别模型时需要改为自己的字典路径./ppocr/utils/ppocr_keys_v1.txtuse_space_char是否识别空格TRUEdrop_score按识别得分过滤输出低于该值的结果不返回0.5use_angle_cls是否加载方向分类模型FALSEcls_model_dir分类推理模型目录传参方式同 det_model_dir默认下载到~/.paddleocr/clsNonecls_image_shape分类算法输入图像形状3,48,192label_list分类算法的标签列表[0,180]cls_batch_num分类时前向推理的 batchsize30enable_mkldnn是否启用 mkldnn 加速FALSEuse_zero_copy_run是否使用 zero_copy_run 前向FALSElang支持的语言ch中文、en英文、fr法语、german德语、korean韩语、japan日语等chdet执行ppocr.ocr时是否启用检测TRUErec执行ppocr.ocr时是否启用识别TRUEcls执行ppocr.ocr时是否启用方向分类命令行模式用 use_angle_cls 控制FALSEshow_log是否打印日志FALSEtype执行 ocr 还是表格结构化取值 [ocr,structure]ocrocr_versionOCR 模型版本PP-OCRv3 支持中英文检测识别、多语言识别与方向分类器PP-OCRv2 支持中文检测识别模型PP-OCR 支持中文检测识别、方向分类器与多语言识别模型PP-OCRv3参数与源码的对应关系以 DB 检测为例上表中的det_db_thresh、det_db_box_thresh、det_db_unclip_ratio、det_max_side_len对应 paddleocr/_pipelines/ocr.py 中PaddleOCR构造函数的text_det_thresh、text_det_box_thresh、text_det_unclip_ratio、text_det_limit_side_len参数从 paddleocr/_pipelines/ocr.py 的 CLI 帮助文本可以确认它们的语义text_det_thresh是概率图上判定文本像素的像素级阈值text_det_box_thresh是判定文本框的边框平均得分阈值text_det_unclip_ratio是文本框外扩系数值越大外扩区域越大。此外2.x 时代的参数名如det_model_dir、rec_model_dir、rec_batch_num、use_angle_cls、cls_model_dir等在当前 3.x 兼容层中仍可使用但会收到弃用告警并被映射到新名称见 paddleocr/_pipelines/ocr.py 的_DEPRECATED_PARAM_NAME_MAPPING命令行模式下--use_gpu也已由通用参数--device取值如cpu、gpu、gpu:0、npu取代并新增了--enginepaddle / paddle_static / onnxruntime / transformers 等、--precision、--enable_mkldnn、--cpu_threads等推理引擎配置项见 paddleocr/_common_args.py。本快速上手文档以 2.x 的--use_gpu写法为准在新版本环境遇到参数不存在时请优先改用上述新参数名。5. 进阶使用自定义模型、网络图片与 numpy 输入当内置模型无法满足需求时可加载自训练的推理模型。推理模型目录必须同时包含model与params两个文件训练模型需先完成导出导出方法可参考 model_train 训练与导出文档。代码方式from paddleocr import PaddleOCR, draw_ocr # 检测、识别、分类模型路径必须包含 model 和 params 文件 ocr PaddleOCR(det_model_dir{your_det_model_dir}, rec_model_dir{your_rec_model_dir}, rec_char_dict_path{your_rec_char_dict_path}, cls_model_dir{your_cls_model_dir}, use_angle_clsTrue) img_path PaddleOCR/doc/imgs_en/img_12.jpg result ocr.ocr(img_path, clsTrue) for idx in range(len(result)): res result[idx] for line in res: print(line) # 绘制结果 from PIL import Image result result[0] image Image.open(img_path).convert(RGB) boxes [line[0] for line in result] txts [line[1][0] for line in result] scores [line[1][1] for line in result] im_show draw_ocr(image, boxes, txts, scores, font_path/path/to/PaddleOCR/doc/fonts/simfang.ttf) im_show Image.fromarray(im_show) im_show.save(result.jpg)命令行方式paddleocr --image_dir PaddleOCR/doc/imgs/11.jpg --det_model_dir {your_det_model_dir} --rec_model_dir {your_rec_model_dir} --rec_char_dict_path {your_rec_char_dict_path} --cls_model_dir {your_cls_model_dir} --use_angle_cls true此外--image_dir也支持URL 形式的网络图片代码与命令行均可直接传入 http 链接而numpy 数组输入则仅限代码方式——直接把cv2.imread读取得到的 BGR 数组传给ocr.ocr(img)即可无需保存为临时文件。6. 总结通过本文你已经掌握了 PaddleOCR whl 包的完整使用链路安装pip install paddlepaddle2.6或 GPU 版pip install paddleocr2.0.1命令行三连paddleocr --image_dir img --use_angle_cls true --lang lang一次完成检测、方向分类与识别--rec false/--det false可单独关闭识别或检测--page_num N支持 PDF 前 N 页推理--ocr_version切换 PP-OCR 系列版本--lang切换 80 语言Python 编程实例化PaddleOCR(use_angle_clsTrue, langen)后调用ocr.ocr(img_path, clsTrue)配合draw_ocr与doc/fonts/simfang.ttf字体即可输出带边界框的可视化结果超大图用slice参数滑动切片PDF 场景可叠加 PyMuPDF 完成逐页渲染与绘制自定义扩展传入det_model_dir/rec_model_dir/rec_char_dict_path即可无缝替换为自己训练的模型。进一步深入学习可继续阅读 whl 包使用文档、推理参数说明、多语言模型教程 与 slice 切片操作文档需要文档解析能力时请转至 PP-Structure 快速上手。赞分享人工智能计算机视觉OCR深度学习大模型RAG【免费下载链接】PaddleOCR飞桨多语言OCR工具包实用超轻量OCR系统支持80种语言识别提供数据标注与合成工具支持服务器、移动端、嵌入式及IoT设备端的训练与部署 Awesome multilingual OCR toolkits based on PaddlePaddle (practical ultra lightweight OCR system, support 80 languages recognition, provide data annotation and synthesis tools, support training and deployment among server, mobile, embedded and IoT devices)项目地址https://gitcode.com/paddlepaddle/PaddleOCR点击查看免费下载相关推荐PaddleOCR 3.x 快速上手安装、命令行与 Python API 实战指南PaddleOCR 3.x 快速上手安装、命令行与 Python API 实战指南 本篇技术指南以 PaddleOCR 官方 Quick Start 文档为主人工智能计算机视觉OCR深度学习大模型RAGPaddleOCR 3.x 快速上手指南安装、命令行与 Python 推理实战PaddleOCR 3.x 快速上手指南安装、命令行与 Python 推理实战 本文是 PaddleOCR 3.x 的官方快速入门指南对应仓库 docs/q人工智能计算机视觉深度学习PaddleOCR 实战指南从 PP-OCR 到 PP-OCRv3 的超轻量 OCR 系统架构、模型与快速上手PaddleOCR 实战指南从 PP OCR 到 PP OCRv3 的超轻量 OCR 系统架构、模型与快速上手 PP OCR 是 PaddleOCR 仓库本人工智能计算机视觉深度学习创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考