在 Windows 上安裝
PaddlePaddle、PaddleOCR 3.7.0,使用 PaddleOCR_CPU_ImageToTXT.py 以 CPU 執行圖片 OCR,首次執行自動下載模型。設定步驟
-
安裝
Python 3.12,安裝時勾選Add Python.exe to PATH。 -
開啟
CMD,確認 Python:python --version
-
安裝 CPU 版
PaddlePaddle。 -
確認
PaddlePaddle:python -c "import paddle; print(paddle.__version__)"
-
安裝
PaddleOCR 3.7.0:python -m pip install paddleocr==3.7.0
-
確認
PaddleOCR:python -c "import paddleocr; print(paddleocr.__version__)"
-
建立
PaddleOCR_CPU_ImageToTXT.py,加入以下 CPU 相容性設定:import os os.environ["CUDA_VISIBLE_DEVICES"] = "" os.environ["FLAGS_enable_pir_api"] = "0" os.environ["FLAGS_use_mkldnn"] = "0"
-
在同一個
PaddleOCR_CPU_ImageToTXT.py中使用:from paddleocr import PaddleOCR
-
將 OCR 設定為:
ocr = PaddleOCR( lang="ch", use_doc_orientation_classify=False, use_doc_unwarping=False, use_textline_orientation=True, enable_mkldnn=False, ) -
將完整程式存放於例如
D:\管理工具\PaddleOCR_CPU_ImageToTXT.py。 import os # ============================================================ # PaddlePaddle CPU 相容性設定 # 必須放在 import paddle / paddleocr 之前 # ============================================================ # 不使用 GPU os.environ["CUDA_VISIBLE_DEVICES"] = "" # 關閉 PaddlePaddle 新 PIR API # 可避免 ConvertPirAttribute2RuntimeAttribute 錯誤 os.environ["FLAGS_enable_pir_api"] = "0" # 關閉 oneDNN / MKL-DNN os.environ["FLAGS_use_mkldnn"] = "0" from pathlib import Path from datetime import datetime import tkinter as tk from tkinter import filedialog, messagebox from paddleocr import PaddleOCR def choose_image(): """選擇圖片""" root = tk.Tk() root.withdraw() file_path = filedialog.askopenfilename( title="請選擇要 OCR 的圖片", filetypes=[ ( "圖片檔案", "*.jpg *.jpeg *.png *.bmp *.tif *.tiff *.webp" ), ("所有檔案", "*.*") ] ) root.destroy() return file_path def main(): # ======================================================== # 1. 選擇圖片 # ======================================================== image_file = choose_image() if not image_file: print("未選擇圖片,程式結束。") return image_path = Path(image_file) print("=" * 60) print("PaddleOCR 3.7.0 - CPU OCR") print("=" * 60) print(f"圖片:{image_path}") print() try: # ==================================================== # 2. 建立 PaddleOCR # ==================================================== print("正在載入 PaddleOCR...") print("CPU 模式") print("PIR:關閉") print("oneDNN:關閉") print() ocr = PaddleOCR( lang="ch", # 文件方向分類 use_doc_orientation_classify=False, # 文件去扭曲 use_doc_unwarping=False, # 文字行方向判斷 use_textline_orientation=True, # 關閉 oneDNN enable_mkldnn=False, ) # ==================================================== # 3. OCR # ==================================================== print("開始 OCR...") print() result = ocr.predict( str(image_path) ) # ==================================================== # 4. 取得辨識文字 # ==================================================== texts = [] for res in result: data = res.json if callable(data): data = data() if not isinstance(data, dict): continue res_data = data.get("res", data) rec_texts = res_data.get( "rec_texts", [] ) for text in rec_texts: text = str(text).strip() if text: texts.append(text) # ==================================================== # 5. 建立 TXT # ==================================================== desktop = Path.home() / "Desktop" timestamp = datetime.now().strftime( "%Y%m%d_%H%M%S" ) output_name = ( f"{image_path.stem}_{timestamp}.txt" ) output_path = desktop / output_name with open( output_path, "w", encoding="utf-8-sig" ) as f: f.write("\n".join(texts)) # ==================================================== # 6. 完成 # ==================================================== print() print("=" * 60) print("OCR 完成") print("=" * 60) print(f"辨識文字:{len(texts)} 行") print(f"輸出檔案:{output_path}") print() root = tk.Tk() root.withdraw() messagebox.showinfo( "OCR 完成", f"OCR 已完成。\n\n" f"圖片:\n{image_path.name}\n\n" f"辨識文字:{len(texts)} 行\n\n" f"TXT:\n{output_name}" ) root.destroy() except Exception as e: print() print("=" * 60) print("OCR 發生錯誤") print("=" * 60) print(e) print() root = tk.Tk() root.withdraw() messagebox.showerror( "OCR 錯誤", str(e) ) root.destroy() if __name__ == "__main__": main()- 執行程式:
python "D:\管理工具\PaddleOCR_CPU_ImageToTXT.py"
-
在
File Dialog選擇要辨識的圖片。 - 第一次執行時,等待 PaddleOCR 自動下載模型。
- 模型下載後會自動快取至:
`C:\Users\使用者名稱\.paddlex\official_models\`
- 再次執行程式時,直接使用已快取的模型。
-
OCR 完成後,TXT 會輸出至
Desktop,檔名為原始圖片檔名加上時間戳。
原理
PaddleOCR 會透過 PaddleX 自動下載並管理 OCR 模型,不需要下載 PaddleOCR 原始碼;第一次下載後,後續直接使用快取。關閉 PIR 與 oneDNN / MKL-DNN 可避免 Windows CPU 執行時的相容性錯誤。研究關鍵字:
PaddleOCR 3.7.0、PaddlePaddle CPU、PaddleX official_models