PaddleOCR 实战:中文文字识别从安装到部署

PaddleOCR 实战:中文文字识别从安装到部署

发票、证件、截图、表格——"把图片里的字提取出来"是需求最旺的 AI 能力之一。PaddleOCR 是中文场景最强的开源 OCR 方案,几行代码就能用。这篇从安装到部署一条龙。
在这里插入图片描述
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/8f24c3a4a65042a48737a69faae03422.png

前言

接过的需求里,"识别图片里的字"出现频率极高:客户拍一张发票要提取金额、拍一张合同要转成文字、截图里的代码要复制出来。手动抄?几百张图会疯。

PaddleOCR 是百度开源的中文 OCR 方案,中文识别效果目前开源里数一数二,而且用法极简。这篇把"识别"和"部署成服务"都讲清楚。

环境准备(先装依赖):

pip install numpy paddlepaddle "paddleocr<3"

一、PaddleOCR 是什么

PaddleOCR 是百度的开源文字识别套件,两阶段架构:

图片 → 文本检测(找出文字在哪)→ 文本识别(认出是什么字)→ 结果
  • 检测:定位图片里所有文字区域(文本框);
  • 识别:把每个文本框里的字识别出来;
  • 附带方向分类器:自动纠正旋转的文字。

模型(PP-OCRv4/v5 系列)预训练好的,直接下载使用,不用训练。

在这里插入图片描述

二、安装

:: 1. 装 PaddlePaddle 框架(CPU 版;有 N 卡用 paddlepaddle-gpu)
pip install paddlepaddle

:: 2. 装 PaddleOCR(本文以 2.x 稳定版为例,API 简洁)
pip install "paddleocr<3"

三、最快上手(五行代码)

from paddleocr import PaddleOCR

ocr = PaddleOCR(use_angle_cls=True, lang="ch")   # 中文识别

result = ocr.ocr("收据.jpg", cls=True)            # 识别

for line in result[0]:
    box, (text, conf) = line[0], line[1]
    print(f"{text}  置信度 {conf:.2f}")

输出示例:

北京科技有限公司  置信度 0.99
发票号码:12345678  置信度 0.98
金额合计:壹仟元整  置信度 0.95

每行包含:文本框坐标(box)、识别文本、置信度。第一次运行会自动下载模型(几十 MB)。

运行验证:准备一张带文字的图片(发票/截图/拍照),运行识别代码,期望终端逐行打印"文本 + 置信度"(如上),置信度 0.9+ 属正常水平。识别乱码先确认图片清晰、文字正立;角度斜的先旋转校正再识别。

注意:PaddleOCR 3.x 换了 API(用 ocr.predict()),本文代码对应 2.x,装的时候按上面命令固定版本,代码就能直接跑。

四、进阶用法

  1. 按位置排序:默认返回顺序不保证是阅读顺序,按 box 的纵坐标排序即可还原"从上到下":
    lines = sorted(result[0], key=lambda l: l[0][0][1])   # 按左上角 y 排序
    
  2. 整图转文字:把识别结果拼起来,就是"图片 → 纯文本":
    text = "\n".join(l[1][0] for l in lines)
    open("out.txt", "w", encoding="utf-8").write(text)
    
  3. 表格识别:需求是"发票/表格转 Excel"?PaddleOCR 的 PP-Structure 系列支持版面分析 + 表格还原,一个接口出结构化数据。

五、部署成服务

pip install fastapi uvicorn
from fastapi import FastAPI, UploadFile
from paddleocr import PaddleOCR
import numpy as np, cv2

app = FastAPI()
ocr = PaddleOCR(use_angle_cls=True, lang="ch")

@app.post("/ocr")
async def ocr_api(file: UploadFile):
    data = await file.read()
    img = cv2.imdecode(np.frombuffer(data, np.uint8), cv2.IMREAD_COLOR)
    result = ocr.ocr(img, cls=True)
    texts = [line[1][0] for line in (result[0] or [])]
    return {"texts": texts}

启动 uvicorn main:app --port 8000,客户 POST 一张图,返回文字列表——这就是能卖的"图片转文字"接口。

六、常见坑

坑 解决
装 paddlepaddle 报错 先确认 Python 版本(3.8~3.11 兼容最好);GPU 版和 CUDA 版本要匹配
API 对不上(3.x) 按文章固定 paddleocr<3;或改用 3.x 的 predict 写法
识别效果差 图片清晰度/角度:先旋转校正、提高分辨率再识别
中文路径报错 图片路径用英文;读文件用 cv2.imdecode(如上)避免编码问题
服务内存占用高 模型常驻内存是正常的(几百 MB);按需加载或加缓存

七、总结

  • 一句话:PaddleOCR = 中文 OCR 的最优解之一,检测+识别开箱即用;
  • 接单角度:票据/证件/截图文字提取、发票信息录入、文档数字化,全是高频需求,一个 FastAPI 接口就能交付;
  • 组合拳:和 《PyTorch 模型导出 ONNX》、《Docker 容器化实战》配合,OCR 服务直接容器化交付。

觉得有用点个赞收藏,有问题评论区见,看到都会回。

posted @ 2026-08-05 23:20  橘和柠  阅读(45)  评论(0)    收藏  举报