10分钟跑通PP-OCRv6文本识别部署:从装好环境到识别出第一行字 10分钟跑通PP-OCRv6文本识别部署从装好环境到识别出第一行字【免费下载链接】PP-OCRv6_medium_rec_onnx项目地址: https://ai.gitcode.com/paddlepaddle/PP-OCRv6_medium_rec_onnx如果你曾经对着满屏的截图、票据或扫描件逐字抄录一定知道这种活儿有多磨人。把图片里的文字自动提取出来正是 OCR光学字符识别要做的事。本文是一篇PP-OCRv6 文本识别部署实战教程带你用 10 分钟把飞桨 PaddlePaddle 的PP-OCRv6_medium_rec_onnx轻量级识别模型真正跑起来——它只有约 1900 万参数普通笔记本 CPU 也能流畅推理完全不需要昂贵的显卡集群。这篇文章会沿着一条从 0 到 1的真实路径推进先让你看一眼最终效果再一步步装环境、跑命令、读结果、接代码最后拆解配置并给出避坑清单。你只需要照着敲每一步都会得到看得见的反馈。先看看跑通之后你能得到什么在开始任何安装之前先给你一个成品预览这样后面每一步你都知道自己在为什么而努力。当你按本文操作完毕后给模型一张包含英文文本的图片你会拿到类似这样的输出{res: {input_path: test.jpg, page_index: None, rec_text: day as a reminder of the, rec_score: 0.9857}}注意看最后两个字段rec_text模型识别出的文本内容rec_score模型对自己的答案给出的置信度0.9857 意味着它相当有把握。是的整个过程就是图片进去文字出来这么简单。而为了把这一行结果拿到手你只需要完成下面这几步。动手前的两分钟先认识你要用的两个零件很多新手卡在第一步不是因为命令难而是不知道自己在装什么。其实这套方案只有两个核心组件1. PaddleOCR操作模型的工具箱它是飞桨推出的 OCR 工具库负责加载模型、读取图片、调用推理引擎、解码输出结果。你后续敲的所有命令、写的所有代码都是通过它来驱动的。2. onnxruntime真正干活的发动机模型的参数文件也就是仓库里的inference.onnx是一种通用的 ONNX 格式。ONNX 相当于模型的通用语言而 onnxruntime 就是读懂这门语言的解释器。它把模型文件翻译成能在你的 CPU/GPU 上高效运行的指令。一句话总结PaddleOCR 负责指挥onnxruntime 负责执行。装好这两个任务就完成了一半。第一步装环境两条命令搞定打开你的终端Windows 用 PowerShell 或 CMDmacOS/Linux 直接开终端依次执行# 安装 PaddleOCR 工具箱 pip install paddleocr# 安装 ONNX 推理引擎显卡用户可选 GPU 版 pip install onnxruntime-gpu如果你的电脑没有 NVIDIA 显卡或者驱动、CUDA 环境不完整请安装 CPU 版效果一样能用只是速度稍慢# 无显卡用户安装 CPU 版即可 pip install onnxruntime安装过程中如果提示依赖版本冲突绝大多数情况可以直接pip install --upgrade paddleocr先升级一次再重试。装完后你可以用下面这条命令确认 PaddleOCR 是否就位paddleocr --help只要能看到命令帮助信息环境就算准备好了。第二步用一条命令完成首次识别现在到了最激动人心的时刻。准备一张包含清晰文字的图片随手截一张屏幕截图、拍一张书页都行然后执行paddleocr text_recognition \ --model_name PP-OCRv6_medium_rec \ --engine onnxruntime \ -i ./test.jpg把-i后面的路径换成你自己的图片路径即可。三个参数各司其职--model_name指定使用哪个识别模型这里填PP-OCRv6_medium_rec--engine选择推理引擎填onnxruntime就会使用你刚装好的 ONNX 引擎-i输入图片的路径。第一次运行时PaddleOCR 会自动下载模型文件到本地缓存目录之后就会直接复用无需重复下载。看到类似上面的 JSON 输出恭喜你——第一条识别结果已经跑通了。读懂模型的答卷输出结果逐项解析刚才的 JSON 看起来简单但每一格都有含义。我们逐项拆开看字段含义通俗解释input_path输入图片的路径这张结果对应哪张图page_index页码索引处理多页文档时用单图为Nonerec_text识别出的文本模型读出来的字rec_score置信度分数0~1 之间越接近 1 越有把握理解置信度很重要它不是正确率而是模型自我感觉的把握程度。实战中rec_score低于 0.5 的结果基本可以判定为识别失败建议重新处理图片高于 0.9 的通常可以放心使用。在后续写程序时你可以用这个分数做自动化筛选把低分结果单独挑出来人工复核——这是很多生产系统的标准做法。第三步把识别能力接进你的项目命令行体验过瘾之后就该把模型焊进你自己的代码里了。PaddleOCR 为此提供了非常干净的 Python 接口三行核心代码即可from paddleocr import TextRecognition model TextRecognition(model_namePP-OCRv6_medium_rec, engineonnxruntime) output model.predict(input./test.jpg, batch_size1)如果你一次要处理多张图片可以把input换成图片路径列表再适当调大batch_size让模型一次性处理一批图片吞吐量会明显提升output model.predict(input[./test1.jpg, ./test2.jpg, ./test3.jpg], batch_size8)拿到结果后你还可以很方便地打印或保存for res in output: res.print() # 终端里打印识别结果 res.save_to_json(save_path./result.json) # 存成 JSON 文件对就这么多。TextRecognition帮你把模型加载、预处理、推理、解码全部封装好了你只需要喂图片、收结果。好奇心的价值拆开 inference.yml 看看模型在想什么模型能读字靠的是一套约定好的输入输出规则。仓库里的inference.yml就是这份说明书我们挑几个关键段落看看。预处理部分图片进入模型前要做什么PreProcess: transform_ops: - DecodeImage: channel_first: false img_mode: BGR - RecResizeImg: image_shape: - 3 - 48 - 320RecResizeImg指定了模型的输入规格3表示三通道彩色图48表示图片会被统一压缩到48 像素高320是宽度的默认值。也就是说不管原图多大进入模型前都会被规整成固定高度这就是为什么模型能一视同仁地处理各种尺寸的图片。后处理部分模型输出怎么变成文字PostProcess: name: CTCLabelDecode character_dict: - ! - - # ...模型输出的其实是一串每个位置最可能是哪个字符的概率分布CTCLabelDecode负责把这些概率串解码成连贯的文本——你可以把它理解成把打乱的字母按顺序拼回单词。而character_dict则是模型的识字范围这个字典里收录了约1.8 万个字符涵盖中英文、数字、标点、希腊字母、货币符号、特殊符号等这也是模型能支持50 种语言的基础。如果你在Global段还能看到model_name: PP-OCRv6_medium_rec那就是整份配置的总开关标明当前服务的模型身份。进阶玩法检测 识别一条命令跑完整 OCR 流水线前面我们用的都是识别模块——它假设图片里已经有文字行。但真实世界的图片往往是整张照片、整页文档文字散落在各个位置。这时候就需要检测模块先找到文字在哪再交给识别模块去读。PaddleOCR 把这两件事打包成了一个完整流水线一条命令就能跑paddleocr ocr -i ./full_page.png \ --text_detection_model_name PP-OCRv6_medium_det \ --text_recognition_model_name PP-OCRv6_medium_rec \ --engine onnxruntime \ --save_path ./output这里多出来的PP-OCRv6_medium_det就是同系列的文本检测模型。整条链路的工作方式是这样的检测模型扫一遍全图用方框标出每一块文字区域识别模型对每个框里的内容逐一阅读输出文本和置信度指定了--save_path时还会把画好框的标注图保存下来方便你直观检查效果。在 Python 里对应的是PaddleOCR类用法同样简洁from paddleocr import PaddleOCR ocr PaddleOCR( text_detection_model_namePP-OCRv6_medium_det, text_recognition_model_namePP-OCRv6_medium_rec, engineonnxruntime, ) result ocr.predict(./full_page.png)从识别一行字到识别整页文档你只多写了两个参数而已。实战中容易踩的坑与提效技巧最后分享几个我在实际使用中总结的经验能帮你少走弯路。1. 图片质量决定识别上限OCR 有一条铁律图片越清晰、文字越水平识别越准。拍歪的、模糊的、反光的图片模型再强也救不回来。输入前尽量裁剪出文字区域保持文字方向水平。2. 善用rec_score做质量把关前面提过低于 0.5 的结果基本不可信。批量处理大量图片时把低分结果单独输出交给人工复核是性价比最高的质量保障方案。3. 批量处理记得调大batch_size单张一张张跑很多时间浪费在启动和等待上。把图片攒成列表一次性喂给模型速度会快上好几倍。4. 按场景选择合适的模型档位PP-OCRv6 系列不止一个档位medium精度最高适合追求效果的场景如果你的设备性能紧张可以换成同系列的small或tiny版本用一点点精度换取更快的速度。只需要把--model_name换一下即可。5. 多语言是默认技能无需额外配置模型内置的字符字典已经覆盖 50 种语言中英文混排的文档直接识别即可不用做任何语言切换设置。现在轮到你了回头看整个部署过程其实就三件事装两个依赖、敲一条命令、读一个 JSON。PP-OCRv6_medium_rec_onnx 用约 1900 万参数换来了印刷体中文 91.5%、印刷体英文 94.1% 的识别准确率而这一切在普通笔记本上就能完成——这正是轻量级模型存在的意义让每个普通开发者都能轻松拥有高精度的 OCR 能力。如果你想进一步研究模型的权重文件、配置细节和完整源码可以把仓库克隆到本地慢慢看git clone https://gitcode.com/paddlepaddle/PP-OCRv6_medium_rec_onnx仓库中的inference.yml和inference.onnx就是整套方案的核心更多参数说明与高级用法可以翻阅 PaddleOCR 官方文档那里有每个接口的详细解释。现在就动手吧打开终端执行第一条pip install10 分钟后你就能看着自己的图片变成一行行文字。等你跑通第一个结果你会忍不住找第二张、第三张图片继续测试——这大概就是部署成功的快乐。【免费下载链接】PP-OCRv6_medium_rec_onnx项目地址: https://ai.gitcode.com/paddlepaddle/PP-OCRv6_medium_rec_onnx创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考