一、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);}
}