简介:本文详细介绍PaddleOCR的安装、配置及图片文字识别提取的完整流程,通过代码示例和实操步骤,帮助开发者快速掌握高效OCR工具的使用。
PaddleOCR是由飞桨(PaddlePaddle)深度学习框架推出的开源OCR工具库,其核心优势在于高精度、多语言支持、轻量化部署。相比传统OCR工具,PaddleOCR通过深度学习模型(如CRNN、DB等)实现了对复杂场景文字的精准识别,同时支持中英文、日韩文、法德文等80+语言,覆盖印刷体、手写体、倾斜文本等多种场景。
对于开发者而言,PaddleOCR的开源特性(Apache-2.0协议)意味着可自由修改和商业使用,且其模块化设计支持快速集成到现有系统中。例如,企业可通过微调模型适配特定业务场景(如发票识别、车牌识别),而无需从头训练。
PaddleOCR支持Windows/Linux/macOS系统,推荐使用Python 3.7+环境。安装前需确保已安装:
通过pip直接安装PaddleOCR的Python包:
pip install paddlepaddle # CPU版本pip install paddlepaddle-gpu # GPU版本(需匹配CUDA版本)pip install paddleocr
若需从源码编译,可访问PaddleOCR GitHub仓库获取最新代码。
PaddleOCR提供预训练模型(如中英文检测模型ch_PP-OCRv3_det_infer、识别模型ch_PP-OCRv3_rec_infer),默认存储在~/.paddleocr/目录。可通过以下命令下载:
from paddleocr import PaddleOCRocr = PaddleOCR(use_angle_cls=True, lang="ch") # 自动下载模型
或手动下载后指定路径:
ocr = PaddleOCR(det_model_dir="./custom_det/",rec_model_dir="./custom_rec/",cls_model_dir="./custom_cls/")
使用PaddleOCR类初始化后,直接调用ocr方法:
from paddleocr import PaddleOCR# 初始化(支持中英文)ocr = PaddleOCR(use_angle_cls=True, lang="ch")# 图片路径img_path = "test.jpg"# 执行识别result = ocr.ocr(img_path, cls=True)# 输出结果for line in result:print(line)
输出结果为列表,每个元素包含:
[(x1, y1), (x2, y2)]:文字框坐标(text, confidence):识别文本及置信度通过循环遍历文件夹实现批量识别:
import osfrom paddleocr import PaddleOCRocr = PaddleOCR()img_dir = "./images/"output_dir = "./results/"for img_name in os.listdir(img_dir):img_path = os.path.join(img_dir, img_name)result = ocr.ocr(img_path)# 保存结果到文本文件with open(os.path.join(output_dir, f"{img_name}.txt"), "w") as f:for line in result:f.write(f"{line[1][0]}\n") # 仅保存文本
使用OpenCV绘制检测框和识别文本:
import cv2from paddleocr import PaddleOCRocr = PaddleOCR()img_path = "test.jpg"result = ocr.ocr(img_path)img = cv2.imread(img_path)for line in result:box = line[0]text = line[1][0]# 绘制文本框pts = [[box[i][0], box[i][1]] for i in range(4)]pts = np.array(pts, np.int32)cv2.polylines(img, [pts], True, (0, 255, 0), 2)# 添加文本cv2.putText(img, text, (box[0][0], box[0][1]-10),cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 1)cv2.imwrite("result.jpg", img)
若默认模型在特定场景(如手写体、小字体)下效果不佳,可通过以下步骤微调:
configs/rec/rec_chinese_lite_train.yml中的学习率、批次大小等。
python tools/train.py -c configs/rec/rec_chinese_lite_train.yml
app = FastAPI()
ocr = PaddleOCR()
@app.post(“/ocr”)
async def ocr_api(img_bytes: bytes):
import io
from PIL import Image
img = Image.open(io.BytesIO(img_bytes))
result = ocr.ocr(img)
return {“result”: result}
if name == “main“:
uvicorn.run(app, host=”0.0.0.0”, port=8000)
```
nvidia-smi确认GPU是否被占用。lang="ch",并下载中文模型。det_db_thresh(文本检测阈值)或使用det_db_box_thresh过滤低置信度框。PaddleOCR通过开箱即用的高精度模型、灵活的定制能力和跨平台部署支持,成为OCR任务的首选工具。无论是快速原型开发还是企业级应用,其模块化设计和丰富的文档(官方文档)均能显著降低开发成本。建议开发者从默认模型入手,逐步探索微调和服务化部署,以最大化工具价值。