一、案例背景
在實際教學、辦公及政務系統中,紙質材料(如手寫作文、表格、試卷等)仍廣泛存在。為提升信息處理效率,采用 OCR(Optical Character Recognition)技術將圖像中的文字提取為可編輯文本已成為剛需。
本項目基于開源深度學習庫 PaddleOCR,構建了一個輕量級的圖像文字識別工具,能夠自動識別圖像中的中文文本,并提供置信度評估和可視化支持。該工具特別適用于作業掃描圖像中的內容提取場景,便于后續分析、存檔或自動批改。
二、技術架構與實現方案
1. 技術選型
組件 | 工具/庫 | 說明 |
---|---|---|
OCR引擎 | PaddleOCR | 百度開源的中文文本識別框架,支持多語言、多角度、多段文字識別 |
圖像處理 | PIL(Pillow) | 圖像加載與繪制框,用于標記識別區域 |
環境支持 | Conda + Paddle 環境 | 配置 DLL 依賴,保證在 Windows 系統上正常運行 |
2. 核心流程圖
┌────────────┐│ 輸入圖像路徑 │└─────┬──────┘│┌───────▼────────┐│ 加載 PaddleOCR 模型 │└───────┬────────┘│┌───────▼─────────────┐│ ocr.predict(圖像路徑) │└───────┬─────────────┘│┌───────▼────────────┐│ 提取文本、置信度、位置 │└───────┬────────────┘│┌─────────▼──────────────┐│ 可視化標記文字與邊框框選 │└─────────┬──────────────┘│┌────▼────┐│ 顯示結果 │└─────────┘
?三、開發環境搭建
本例我們使用anaconda創建開發環境。具體步驟如下:
(1)新建環境
conda create -n paddle_env python=3.10 -y
conda activate paddle_env
(2)安裝cudatoolkit
conda install cudatoolkit=11.8 -c conda-forge
(3)安裝cudnn
conda install cudnn=8.9.* -c conda-forge
(4)安裝paddlepaddle
conda install paddlepaddle-gpu==3.0.0 paddlepaddle-cuda=11.8 -c paddle -c nvidia
(5)Paddleocr 安裝
pip install paddleocr -i Simple index
(6)指定 DLL 路徑
在開發實踐中發現,用anaconda單獨安裝的cudatoolkit在程序運行時居然找不到,于是在代碼中增加:
dll_path = r"C:\Users\39040\.conda\envs\paddle_env\Library\bin"
os.environ["PATH"] = dll_path + ";" + os.environ["PATH"]
目的是將指定的 DLL 路徑添加到系統的環境變量 PATH
中,以確保在運行 Python 時,能夠成功加載某些依賴的動態鏈接庫(.dll
文件)。
三、代碼關鍵解析
1. OCR 模型初始化
ocr = PaddleOCR(use_textline_orientation=True, lang='ch')
-
lang='ch'
:指定中文識別模型。 -
use_textline_orientation=True
:自動校正圖像中文字的方向,增強識別準確率,適用于手寫或旋轉圖像。
2. OCR 識別執行
result = ocr.predict(image_path)
返回結果 result[0]
為一個字典對象,包含:
-
rec_texts
:識別的文字內容列表 -
rec_scores
:每條文字識別的置信度評分 -
rec_polys
:對應的文本框坐標,用于可視化繪圖
3. 識別結果輸出
for idx, (text, score) in enumerate(zip(texts, scores)):print(f"[{idx + 1}] 文字:{text} 置信度:{score:.2f}")
結構清晰地打印識別文本,方便人工復核與評估。
4. 可視化文字框與內容
draw_ocr_custom(image, boxes, texts, scores, font_path='simfang.ttf')
通過 PIL.ImageDraw
實現紅色多邊形邊框和文字疊加,提供強直觀反饋,便于查看識別準確性與位置匹配。
5.完整代碼
本例的完整代碼如下:
from paddleocr import PaddleOCR
from PIL import Image, ImageDraw, ImageFont
import osdll_path = r"C:\Users\39040\.conda\envs\paddle_env\Library\bin" #換成自己電腦中的環境的實際路徑。
os.environ["PATH"] = dll_path + ";" + os.environ["PATH"]def draw_ocr_custom(image, boxes, texts, scores, font_path=None):draw = ImageDraw.Draw(image)font = ImageFont.truetype(font_path, 20) if font_path else Nonefor box, text, score in zip(boxes, texts, scores):box = [tuple(point) for point in box]draw.polygon(box, outline='red')draw.text(box[0], f'{text} {score:.2f}', fill='red', font=font)return image# 初始化 OCR
ocr = PaddleOCR(use_textline_orientation=True, lang='ch') # 新版本使用該參數# 圖像路徑
image_path = 'D:\\test\\1.jpg' #換成自己電腦的圖像實際路徑。if not os.path.exists(image_path):raise FileNotFoundError(f"圖片文件不存在: {image_path}")# 執行 OCR 識別
result = ocr.predict(image_path)# 獲取識別數據(注意 result 是列表)
result_data = result[0]
texts = result_data['rec_texts']
scores = result_data['rec_scores']
boxes = result_data['rec_polys']# 輸出識別結果
print("📝 作業識別結果:\n")
for idx, (text, score) in enumerate(zip(texts, scores)):print(f"[{idx + 1}] 文字:{text} 置信度:{score:.2f}")# 可視化
image = Image.open(image_path).convert('RGB')
drawn_img = draw_ocr_custom(image, boxes, texts, scores, font_path='simfang.ttf')
drawn_img.show()
四、應用場景與擴展建議
1.應用場景
-
作業、試卷批改系統的文字識別與對比分析;
-
圖書館數字化管理中的圖片轉文字;
-
政務文件 OCR 歸檔;
-
票據識別與數據采集;
2.可擴展功能
功能 | 描述 |
---|---|
批量識別 | 支持整個目錄下圖片的自動批處理 |
格式化導出 | 支持將識別結果輸出為 Excel、JSON、Word 等格式 |
文本糾錯 | 加入語言模型輔助優化識別錯誤(如錯別字校正) |
手寫優化 | 替換模型為專門優化手寫體的 PP-OCRv3 模型 |
五、運行效果
1.手寫作文識別
(1)小孩的手寫作文拍照如下:
(2)識別的可視化效果如下:
(3)提取的文字效果如下:
2.數學作業識別
(1)小孩的手寫數學作業拍照如下:
(2)識別的可視化效果如下:
(3)提取的內容效果如下:
六、總結與評價
該案例展示了基于 PaddleOCR 框架實現中文圖像文字識別的完整流程,具備如下特點:
-
高準確率:在常規印刷和清晰手寫場景中表現優秀;
-
可復用性強:代碼結構清晰,便于集成到教學或業務系統;
-
可視化支持:提供實時圖像標注,助力人工復核和驗證。