PP-OCR Linux 部署不再折腾:OpenCV、ONNX Runtime、OpenVINO 三版本开箱即用

作者:天天代码码天天日期:2026/7/23

目录

一套接口,三个 Linux 推理版本

不只是完整 OCR,也支持“只识别”

自带浏览器测试页面

解压后即可启动

支持 API Key,但不把密钥打印到日志

可以安装为 systemd 服务

ONNX Runtime 的 CPU 与 CUDA

OpenVINO 版不需要目标机器安装 SDK

不同开发语言如何接入?

v1.3.0 做了哪些验证?

下载与交流


做 OCR 项目时,真正让人头疼的往往不只是“能不能识别”,而是后面的部署问题:

  • C++、C#、Python、Java 等不同技术栈怎么统一调用?
  • 模型、推理框架和动态库怎么放,才能不互相冲突?
  • 客户机器没有开发环境,能不能解压后直接运行?
  • 已经裁剪好的文字区域,能不能跳过检测直接识别?
  • 能不能提供一个网页,让客户先直观看到识别效果和耗时?
  • Linux 服务如何开机启动,又如何做最基本的接口认证?

围绕这些实际问题,我们完成了 lw.PPOCR.Inference v1.3.0

这次正式发布 Linux OpenCV DNN、ONNX Runtime 和 OpenVINO 三个独立版本。每个版本都是完整部署包,不要求客户先安装 Python,也不需要从仓库重新编译。下载、校验、解压,就可以启动 HTTP OCR 服务。

一套接口,三个 Linux 推理版本

v1.3.0 同一个 Release 提供三个包:

版本设备适合场景
OpenCV DNNCPU部署简单、通用 CPU 基线、方便快速验证
ONNX RuntimeCPU / NVIDIA CUDA默认 CPU;有 NVIDIA 环境时可切换 CUDA
OpenVINOCPU注重 x64 CPU 推理效率的服务端场景

三个版本使用相同的 C ABI 和 HTTP API。上层程序切换推理框架时,不需要重写 OCR 调用逻辑。

推理框架的动态库被放在各自独立目录中,尽量避免 OpenCV、ONNX Runtime、OpenVINO 等组件在程序目录里相互覆盖或版本冲突。

不只是完整 OCR,也支持“只识别”

常规 OCR 流程包含:

1文字检测  方向分类  文字识别
2

HTTP 接口为:

1POST /api/ocr
2

但在很多真实项目中,客户已经使用摄像机 SDK、图像算法或其他检测模型裁剪好了文字区域。这时再运行一次文字检测,既浪费时间,也可能影响原有业务流程。

因此项目同时提供:

1POST /api/recognize
2

它可以直接识别已经裁剪好的文字图片,并支持一次提交多张图片。返回结果使用 source_index 对应原始输入顺序,方便批量业务处理。

自带浏览器测试页面

HTTP 服务启动后,浏览器访问:

1http://127.0.0.1:8787/
2

即可打开测试页面。

页面支持上传图片、调用 OCR,并把识别区域绘制回原图。同时显示图片解码、文字检测、方向分类、文字识别和服务端总耗时,方便开发者快速确认模型、参数与运行环境是否正常。

解压后即可启动

以任意一个 Linux v1.3.0 包为例,将 .tar.gz.sha256 上传到 Ubuntu 后执行:

1sha256sum -c 文件名.tar.gz.sha256
2tar -xzf 文件名.tar.gz
3cd 解压后的目录
4
5sudo ./install-deps-ubuntu.sh
6./verify-linux-package.sh
7./run-http-service.sh
8

verify-linux-package.sh 不只是检查文件是否存在,它还会验证包内 SHA-256、ELF 动态库依赖、健康接口,并使用真实示例图片执行一次 OCR。

启动后访问:

1http://127.0.0.1:8787/
2

需要注意:请使用 run-http-service.sh 启动,因为脚本会自动设置当前推理后端所需的私有动态库目录。

如果在 Windows 上解压目录后再上传到 Linux,脚本执行权限可能丢失。更推荐直接把 .tar.gz 上传到 Linux 后解压;必要时也可以运行:

1chmod +x *.sh
2

支持 API Key,但不把密钥打印到日志

本机测试时,服务默认只监听:

1127.0.0.1:8787
2

如果需要让局域网中的其他电脑调用,可以把 listen_host 修改为 0.0.0.0,并设置一个足够长的随机 API Key。

客户端通过请求头传递:

1X-API-Key: 你的密钥
2

浏览器测试页面也提供 API Key 输入框。服务启动日志只显示认证是否启用,不输出密钥明文。

API Key 是轻量级访问控制,不应替代 HTTPS、反向代理和防火墙。服务不建议在没有认证和网络限制的情况下直接暴露到公网。

可以安装为 systemd 服务

完成测试并修改好配置后,可以安装为 Linux 系统服务:

1sudo ./install-systemd.sh
2systemctl status lw-ppocr-http.service
3journalctl -u lw-ppocr-http.service -f
4

服务会安装到 /opt/lw-ppocr,支持开机启动和异常退出后自动重启。

ONNX Runtime 的 CPU 与 CUDA

ONNX Runtime 正式包默认携带官方 1.26.0 CPU Runtime,因此没有 NVIDIA 显卡也可以直接使用。

配置支持:

1{"device":"cpu"}
2
1{"device":"cuda"}
2
1{"device":"auto"}
2

如果需要 CUDA,必须准备兼容的 NVIDIA 驱动、CUDA、cuDNN,并使用相同 ONNX Runtime 版本和相同 CUDA 系列官方 GPU 包中的完整 libonnxruntime*.so* 集合。

这里特别提醒:不要只替换一个 libonnxruntime.so,也不要混用 CUDA 12 和 CUDA 13 的文件。本次 v1.3.0 随附附件和 Ubuntu 虚拟机验证以 CPU Runtime 为基线。

OpenVINO 版不需要目标机器安装 SDK

OpenVINO 包固定使用官方 OpenVINO 2025.2.0 Ubuntu 20.04 Runtime,已经携带 CPU plugin、ONNX frontend、oneTBB、hwloc 和 OCR 所需的 OpenCV 共享库。

目标机器不需要另外安装 OpenVINO SDK。

当前 v1.3.0 只开放 CPU。OpenVINO GPU 会在完成独立的正确性、驱动兼容和压力测试后再考虑加入,不在本次稳定支持范围内。

不同开发语言如何接入?

项目底层提供稳定的 C ABI,不向调用方暴露 STL、cv::Mat、C++ 类或异常。

因此除了现有的 C#、C 和 Python 示例,任何能够调用 C 动态库的语言都可以进行封装,例如:

  • C / C++
  • C#
  • Python
  • Java
  • Go
  • Rust
  • Delphi

如果业务系统不方便直接加载动态库,也可以统一通过 HTTP API 调用。

v1.3.0 做了哪些验证?

三个 Linux 包都已经完成:

  • GitHub Actions 自动构建;
  • Ubuntu 20.04 虚拟机验证;
  • ABI 兼容性测试;
  • 真实模型完整 OCR;
  • 单张和批量只识别;
  • HTTP 服务与测试网页;
  • 打包后的依赖和校验验证。

项目的 LW_PPOCR_API_VERSION 仍然保持为 1,v1.0.0 的 ABI 冻结承诺继续有效。

下载与交流

项目与 Release 地址:

1https://github.com/lxw112190/lw.PPOCR.Inference
2
3https://github.com/lxw112190/lw.PPOCR.Inference/releases
4

建议根据目标机器选择对应的完整包。三个后端的公共接口相同,但私有动态库不同,不建议把不同包中的 .so 混合复制到同一目录。

如果这个项目对你的 OCR 部署有帮助,欢迎测试、反馈问题,也欢迎分享给有相同需求的朋友。


PP-OCR Linux 部署不再折腾:OpenCV、ONNX Runtime、OpenVINO 三版本开箱即用》 是转载文章,点击查看原文


相关推荐


为什么 MCP、Skill、RAG 能工作?从 Conversation Loop 看现代 Agent 的底层架构
吴佳浩Alben2026/7/15

《为什么 MCP、Skill、RAG 能工作?从 Conversation Loop 看现代 Agent 的底层架构》 作 者:吴佳浩Alben 撰稿时间:2026.7.10 更新时间:2026.7.13 前言 很多文章介绍 Agent 时,都会分别讲 MCP、Skill、Function Calling、RAG,却很少回答一个更关键的问题: MCP、Skill、RAG 为什么能够协同工作?它们究竟是如何融入 Agent 的? 答案,其实都藏在 Agent 的执行主线——Convers


当 Linux 成为“空气”:容器、Agent 与不再重要的“桌面之争” -- 肘子的 Swift 周报 #143
东坡肘子2026/7/7

当 Linux 成为“空气”:容器、Agent 与不再重要的“桌面之争” 一周前,微软推出了无需 Docker 的 Windows 11 原生容器支持的公开预览;再结合苹果不久前发布的容器管理器(container)1.0 正式版,一时间,两大主流桌面操作系统都将 Linux 容器深度集成为了系统的一等公民。 这件事引发了一场有趣的讨论。有人认为,这是 Linux 的最终胜利:虽然它始终没能真正赢下桌面市场,但它已经无处不在;也有人提出反问:当 Windows 和 macOS 都能相对顺畅、轻量


让 AI Agent 系统自己发现 bug、自己提修复 PR:自我进化的 Harness
谭sir2026/6/29

本文介绍怎么让 AI Agent 的工程代码(Harness)具备自我进化能力——自动记录运行数据、自动识别错误模式、自动生成修复 PR(Pull Request,合并请求)。内容覆盖监控、错误模式识别、自动修复、行为分析和生产落地方案,每一章都会配合 demo 项目 evo-agent-demo 的代码和运行结果来讲解。 从一个 bug 说起 假设你做了一个 AI Agent 产品,它可以搜索资料、查数据库、执行代码。上线前也在内部进行了反复测试,并且没发现什么问题,于是就正式上线了。 但产品


【节点】[Rectangle节点]原理解析与实际应用
SmalBox2026/6/20

【Unity Shader Graph 使用与特效实现】专栏-直达 Rectangle 节点是 Unity URP Shader Graph 中一个功能强大的形状生成工具,专门用于在着色器中创建矩形图案。该节点基于输入的 UV 坐标生成矩形形状,通过精确的参数控制可以实现从简单的方形到复杂矩形图案的创建。在游戏开发中,矩形形状有着广泛的应用场景,包括创建 UI 元素、制作平铺纹理、构建几何图案、实现遮罩效果等。 该节点的核心工作原理是通过数学计算在 UV 空间中定义矩形区域。UV 空间是一个标


LangChain上手 MCP:从用别人工具到自己写工具
颜酱2026/6/12

LangChain上手 MCP:从用别人工具到自己写工具 读完这篇文章,你将能:用别人的 MCP Server(比如百度地图)、自己写一个 MCP Server(比如计算器)、用 Agent 自动调度多个工具。 先看效果 用别人的:百度地图 MCP 十几行代码,让 AI 变成地图助手: import asyncio from langchain_mcp_adapters.client import MultiServerMCPClient from langchain.agents imp


女程序媛多肉的 AI 小绿书,短短 3 天 220 粉
threerocks2026/6/5

微信公众号近 1~2 年,主推贴图类型作品,并且对这类内容有比较明显的流量倾斜。再叠加这两年 AI 生图的成熟,Nano Banana Pro 和 GPT-Image-2 先后出世,既然图片生产不再是卡点,那很多人会很自然地想到一个项目:用 OpenClaw、Codex、Claude Code 这类 Agent 工具,把公众号贴图自动化做起来。 理论上,这听起来像一个很好且成本不高的生意。AI 负责生图,Agent 负责写文案,公众号负责推荐流。人只要选图、点发布,甚至再往后一点,连选图都可以交


AI 大模型核心五:从 Transformer、RAG 到 Agent 架构
zhangxingchao2026/5/29

一、如果去掉多头只用单头,Transformer 会出现什么问题? 一句话概括: 单头注意力会把所有关系都压到一个注意力分布里,导致模型很难同时关注语法、语义、位置、指代、长程依赖等多种信息,表达能力会明显下降。 这里要注意,单头不是完全不能用,而是会形成明显的信息瓶颈。 1. 多头注意力到底解决什么问题? Multi-Head Attention 的关键价值,不只是“多算几次 attention”,而是让不同的 head 在不同子空间里学习不同类型的关系。 一段文本里,模型可能同时需要关注


深度学习(13)PyTorch神经网络基础
β添砖java2026/5/7

1. 层和块 ① nn.Sequential 定义了一种特殊的Module。 # 回顾一下多层感知机 import torch #基础计算(类似 numpy) from torch import nn #神经网络工具(层、模型) from torch.nn import functional as F #一些函数(比如激活函数) #搭建神经网络结构 net = nn.Sequential(nn.Linear(20,256),nn.ReLU(),nn.Linear(256,10))


Claude Code 从零上手:国内用户保姆级安装教程
易安说AI2026/4/27

Claude Code 是目前公认最强的 AI  编程 Agent 框架。很多人以为它必须配合 Claude 官方模型才能用,但实际上,Claude Code 本质是一个 Agent 框架,搭配任何模型都能运行。本文手把手教你从零安装 Claude Code,并用国产模型 GLM-5.1 接入,全程不需要海外手机号、Visa 卡,甚至不需要代理。  操作系统:macOS 或 Windows 均可 网络:有代理最好,没有也能用(本文两种方案都覆盖) 模型选择:推荐 GLM-5.1(国内效果最接近


js的深拷贝和浅拷贝?啥情况讲解下??底层堆栈空间??object.prototype.toString.call(),还有bind,的具体使用?
神の愛2026/4/19

js的深拷贝和浅拷贝?啥情况讲解下??底层堆栈空间??object.prototype.toString.call(),还有bind,的具体使用?还有instanceof对象的实例,还有哪个方法可以直接获取到我定义的数据是什么类型的。哟哪几种数据类型?包括哪些? 1. 堆(Heap)与 栈(Stack):内存的真相 在 JS 里,内存被分为两块: 栈(Stack):空间小、速度快。存放基本数据类型(String, Number, Boolean, Null, Undefined, Sy

首页编辑器站点地图

本站内容在 CC BY-SA 4.0 协议下发布

Copyright © 2026 聚合阅读