当前位置: 首页 > ops >正文

paddle ocr本地化部署进行文字识别

一、Paddle 简介

1. 基本概念

Paddle(全称 PaddlePaddle,飞桨)是百度开发的 开源深度学习平台,也是中国首个自主研发、功能丰富、技术领先的工业级深度学习平台。它覆盖了深度学习从数据准备、模型训练、模型部署到预测的全流程,旨在帮助开发者快速实现 AI 应用。

2. 核心特点
  • 全场景覆盖:支持云端、边缘端、移动端等多硬件环境,适配 CPU、GPU、FPGA 等多种芯片。
  • 易用性与高效性:提供简洁的 API 和动态图机制(如 PyTorch 风格的编程体验),降低开发门槛;同时支持静态图优化,提升推理效率。
  • 丰富的工具与生态
    • 模型库:包含计算机视觉、自然语言处理、语音等领域的预训练模型(如 ERNIE、PP-YOLO 等)。
    • 开发工具链:支持自动并行、混合精度训练、模型压缩(剪枝、量化)等高级功能。
    • 社区与文档:提供详细的教程、示例和活跃的开发者社区。
3. 应用场景
  • 计算机视觉:图像分类、目标检测、语义分割、OCR 等。
  • 自然语言处理:文本分类、机器翻译、对话系统等。
  • 语音与音频:语音识别、语音合成等。
  • 工业与科研:智能制造、自动驾驶、医疗影像分析等。

二、Paddle OCR 简介

1. 基本概念

Paddle OCR 是基于 PaddlePaddle 平台开发的 光学字符识别(OCR)工具库,专注于文本检测、文本识别及多语言文字处理,支持中英文、数字、日文、韩文等多语言场景,广泛应用于文档扫描、票据识别、车牌识别、直播字幕提取等领域。

2. 技术架构

Paddle OCR 采用 端到端(End-to-End)的深度学习架构,主要包含以下模块:

  • 文本检测:定位图像中的文本区域(如 EAST、DB 算法)。
  • 文本识别:识别文本区域中的字符(如 CRNN、STAR-Net、RARE 等算法)。
  • 后处理:对识别结果进行校正(如基于语言模型的纠错)。
3. 核心功能
  • 多语言支持:支持中、英、日、韩、法、德等多种语言,以及竖排文本、弯曲文本(如弧形标识)的识别。
  • 多场景适配
    • 通用场景:印刷体文本(如文档、书籍)、手写体文本(部分支持)。
    • 特殊场景:票据(如发票、身份证)、车牌、街景文字(低光照、模糊图像)等。
  • 高性能部署
    • 支持 CPU/GPU/ARM 等硬件,提供轻量级模型(如 PP-OCR Mobile),适合移动端和嵌入式设备。
    • 支持多后端部署(如 Paddle Inference、Paddle Lite、Paddle.js),满足实时性需求。
4. 优势
  • 高精度:在公开数据集(如 ICDAR、CTW1500)上表现领先,部分场景准确率超过 95%。
  • 易用性:提供预训练模型、命令行工具和 Python SDK,支持一键安装和快速部署。
  • 可定制化:支持自定义数据集训练,适配特定领域(如医疗、金融)的文字识别需求。
5. 典型应用场景
  • 办公自动化:扫描文档电子化、表格识别、合同文本提取。
  • 智慧金融:银行卡号识别、发票验真、银行单据处理。
  • 智慧城市:车牌识别、交通标志识别、公共设施文字标注。
  • 移动应用:拍照翻译、名片识别、直播实时字幕生成。

三、Paddle 与 Paddle OCR 的关系

  • Paddle 是底层平台:提供深度学习框架、工具链和计算能力。
  • Paddle OCR 是上层应用:基于 Paddle 实现具体的 OCR 功能,依赖 Paddle 的模型训练和推理能力。
  • 生态协同:Paddle 的模型压缩、自动调参等功能可直接优化 Paddle OCR 的性能,形成技术闭环。

四 环境搭建

python环境搭建参考linux使用pyenv安装python环境-CSDN博客

# 安装Flask、NumPy
pip install flask numpy# 安装OpenCV(cv2)
pip install opencv-python-headless
pip install paddlepaddle -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install paddleocr -i https://pypi.tuna.tsinghua.edu.cn/simple

 python代码,新建ocr_server.py,写入以下代码,这段代码会生成一个服务,监听5000端口,接收base64图片,进行识别,然后把图片里面的文字返回

from flask import Flask, request, jsonify
from paddleocr import PaddleOCR
import base64
import numpy as np
import cv2
import jsonapp = Flask(__name__)@app.route('/ocr', methods=['POST'])
def ocr_api():data = request.jsonimage_b64 = data.get('image')if not image_b64:return jsonify({"error": "No image provided"}), 400# 解码 Base64 图像img_bytes = base64.b64decode(image_b64)img_np = np.frombuffer(img_bytes, dtype=np.uint8)img = cv2.imdecode(img_np, flags=1)ocr = PaddleOCR(use_angle_cls=True, lang='ch')  # 加载中文模型# 执行 OCRresult = ocr.ocr(img, cls=True)print(result)# 提取识别文本text_list = []for line in result[0]:text = line[1][0]text_list.append(text)# 组合为JSON格式output = {"text": text_list}# 转为JSON字符串json_output = json.dumps(output, ensure_ascii=False, indent=2)return json_outputif __name__ == '__main__':app.run(host='0.0.0.0', port=5000)
# 服务器要求
# 2核4G内存以上
# 格式:nohup python3 脚本路径 > 输出文件 2>&1 &,启动服务
nohup python3 ocr_server.py > output.log 2>&1 &

调用方java代码,这段代码读取一张图片,转成base64,然后通过http调用ocr_server.py的接口,其他语言如js,python等都能实现类似效果

public class OCRClient {public static void main(String[] args) throws Exception {long time = System.currentTimeMillis();String imagePath = "d:\\test3.jpg";String urlStr = "http://localhost:5000/ocr";// 读取图片并转为 Base64byte[] imageBytes = Files.readAllBytes(Paths.get(imagePath));String base64Image = Base64.getEncoder().encodeToString(imageBytes);// 发送 POST 请求URL url = new URL(urlStr);HttpURLConnection conn = (HttpURLConnection) url.openConnection();conn.setRequestMethod("POST");conn.setRequestProperty("Content-Type", "application/json");conn.setDoOutput(true);String jsonInputString = "{\"image\": \"" + base64Image + "\"}";try (OutputStream os = conn.getOutputStream()) {byte[] input = jsonInputString.getBytes("utf-8");os.write(input, 0, input.length);}// 读取响应try (BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"))) {StringBuilder response = new StringBuilder();String responseLine;while ((responseLine = br.readLine()) != null) {response.append(responseLine.trim());}System.out.println("OCR Result:\n" + response.toString());}System.out.println(System.currentTimeMillis() - time);}
}

http://www.xdnf.cn/news/7187.html

相关文章:

  • 从编程助手到AI工程师:Trae插件Builder模式实战Excel合并工具开发
  • 解决 MySQL 错误 1356 (HY000)
  • WPF技巧-BindingProxy
  • 基于局部显著位置感知的异常掩码合成方法在CT图像肺部疾病异常检测与病变定位中的应用|文献速递-深度学习医疗AI最新文献
  • iOS:重新定义移动交互,引领智能生活新潮流
  • 《算法导论(第4版)》阅读笔记:p86-p90
  • LabVIEW数据库使用说明
  • std::ranges::iota
  • ArcGIS Pro 3.4 二次开发 - 内容
  • DDoS与CC攻击:谁才是服务器的终极威胁?
  • 免费开放试乘体验!苏州金龙自动驾驶巴士即将上线阳澄数谷
  • 1.1 结构体与类对象在List中使用区别
  • C++23 std::mdspan:多维数组处理新利器
  • 如何用Python批量解压ZIP文件?快速解决方案
  • NC105NC106美光固态颗粒NC108NC109
  • Python学习笔记--使用Django操作mysql
  • C++开源库argh使用教程
  • 20250519使用TF卡将NanoPi NEO core开发板刷机为Ubuntu core22.04.3系统完成之后执行poweroff自动关机
  • CSS之网页元素的显示与隐藏(旧土豆网遮罩案例)
  • Unity开发:预制体、接口与枚举
  • 光子神经网络加速器编程范式研究:光子矩阵乘法的误差传播模型构建
  • 从单体到分布式:深入解析Data Mesh架构及其应用场景与价值
  • 【VMware】虚拟机运行 Linux Ubuntu、MAC 安装和配置
  • 整合安全能力:观测云进一步强化数据价值
  • 如何利用DeepSeek提升工作效率
  • 估分啦~全国青少年信息素养大赛部分赛项已考完~图形化/算法创意实践
  • PWM讲解+STM32任意频率、占空比、脉宽生成函数介绍
  • 2023年河南CCPC(ABCEFHK)
  • 算法第21天 | 第77题. 组合、216. 组合总和 III、17. 电话号码的字母组合
  • 探索 Python 的利器:help()、dir() 与 AI 工具的结合应用