Qianfan-OCR代码实例:基于requests的带Layout分析OCR封装类
Qianfan-OCR代码实例:基于requests的带Layout分析OCR封装类
1. 项目概述
Qianfan-OCR是百度千帆推出的开源端到端文档智能多模态模型,基于4B参数的Qwen3-4B语言模型构建。这个多模态视觉语言模型(VLM)采用Apache 2.0协议,完全开源且可商用,能够替代传统OCR流水线,单模型即可完成OCR识别、版面分析和文档理解任务。
1.1 核心功能
- 通用OCR:准确识别图像中的文字内容
- 布局分析:自动识别文档结构(标题、段落、表格等)
- 定向提取:通过提示词实现特定信息抽取
- 多语言支持:支持中英文等多种语言识别
2. 环境准备
2.1 安装依赖
pip install requests pillow2.2 服务访问
确保Qianfan-OCR服务已启动并运行在以下地址:
http://localhost:78603. 封装类实现
3.1 基础OCR封装类
import requests from PIL import Image import base64 import io import json class QianfanOCR: def __init__(self, base_url="http://localhost:7860"): self.base_url = base_url def _image_to_base64(self, image_path): """将图片转换为base64编码""" with Image.open(image_path) as img: buffered = io.BytesIO() img.save(buffered, format="PNG") return base64.b64encode(buffered.getvalue()).decode('utf-8') def recognize_text(self, image_path, prompt=None, layout=False): """ 识别图片中的文字内容 参数: image_path: 图片路径 prompt: 可选提示词 layout: 是否启用布局分析 返回: 识别结果 """ url = f"{self.base_url}/api/ocr" image_base64 = self._image_to_base64(image_path) payload = { "image": image_base64, "prompt": prompt, "layout": layout } try: response = requests.post(url, json=payload) response.raise_for_status() return response.json() except requests.exceptions.RequestException as e: print(f"请求失败: {e}") return None3.2 进阶功能扩展
3.2.1 表格提取方法
def extract_tables(self, image_path): """提取图片中的表格内容""" prompt = "请提取文档中的表格内容,以Markdown格式输出" return self.recognize_text(image_path, prompt=prompt, layout=True)3.2.2 关键信息提取方法
def extract_fields(self, image_path, fields): """ 提取图片中的特定字段 参数: image_path: 图片路径 fields: 要提取的字段列表,如["姓名", "日期", "金额"] 返回: JSON格式的提取结果 """ fields_str = "、".join(fields) prompt = f"请从图片中提取以下字段:{fields_str}。使用JSON格式输出。" return self.recognize_text(image_path, prompt=prompt, layout=True)4. 使用示例
4.1 基础OCR识别
ocr = QianfanOCR() result = ocr.recognize_text("invoice.png") print(result["text"])4.2 带布局分析的OCR
result = ocr.recognize_text("document.png", layout=True) print(json.dumps(result["layout"], indent=2, ensure_ascii=False))4.3 表格提取
table_result = ocr.extract_tables("report.png") print(table_result["text"])4.4 关键信息提取
fields = ["姓名", "日期", "金额"] info_result = ocr.extract_fields("receipt.png", fields) print(info_result["text"])5. 最佳实践
5.1 错误处理
def safe_ocr(ocr, image_path): try: result = ocr.recognize_text(image_path) if result is None: print("识别失败") return None if "error" in result: print(f"识别错误: {result['error']}") return None return result["text"] except Exception as e: print(f"发生异常: {e}") return None5.2 批量处理
def batch_process(ocr, image_paths): results = [] for path in image_paths: result = ocr.recognize_text(path) if result: results.append(result["text"]) return results5.3 性能优化建议
- 图片预处理:适当调整图片大小和对比度可提高识别率
- 缓存结果:对相同图片避免重复识别
- 并发请求:使用线程池处理大量图片
6. 总结
本文介绍了如何使用Python的requests库封装Qianfan-OCR的API接口,实现带布局分析功能的OCR识别。通过这个封装类,开发者可以轻松实现:
- 基础文字识别功能
- 文档结构分析
- 定向信息提取
- 表格内容抽取
Qianfan-OCR作为端到端的文档智能模型,相比传统OCR方案具有以下优势:
- 一体化:单模型完成OCR+布局分析+文档理解
- 灵活:通过提示词实现定制化提取
- 开源:Apache 2.0协议允许商用和二次开发
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。
