news 2026/4/23 7:21:49

Qianfan-OCR代码实例:基于requests的带Layout分析OCR封装类

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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 pillow

2.2 服务访问

确保Qianfan-OCR服务已启动并运行在以下地址:

http://localhost:7860

3. 封装类实现

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 None

3.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 None

5.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 results

5.3 性能优化建议

  1. 图片预处理:适当调整图片大小和对比度可提高识别率
  2. 缓存结果:对相同图片避免重复识别
  3. 并发请求:使用线程池处理大量图片

6. 总结

本文介绍了如何使用Python的requests库封装Qianfan-OCR的API接口,实现带布局分析功能的OCR识别。通过这个封装类,开发者可以轻松实现:

  1. 基础文字识别功能
  2. 文档结构分析
  3. 定向信息提取
  4. 表格内容抽取

Qianfan-OCR作为端到端的文档智能模型,相比传统OCR方案具有以下优势:

  • 一体化:单模型完成OCR+布局分析+文档理解
  • 灵活:通过提示词实现定制化提取
  • 开源:Apache 2.0协议允许商用和二次开发

获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 7:21:19

Phi-4-mini-reasoning教育落地案例:在线考试系统自动阅卷与评分

Phi-4-mini-reasoning教育落地案例:在线考试系统自动阅卷与评分 1. 项目背景与挑战 在线教育平台面临的最大痛点之一就是大规模考试的阅卷工作。传统人工阅卷方式存在几个明显问题: 效率低下:一位老师每天最多批改200-300份试卷成本高昂&a…

作者头像 李华
网站建设 2026/4/23 7:18:50

量子计算在微分方程求解中的创新应用

1. 量子计算在微分方程求解中的创新实践量子计算正逐步从理论走向实际应用,其中在科学计算领域的突破尤为引人注目。作为一名长期关注量子算法应用的从业者,我最近深入研究了Pasqal团队在arXiv上发布的关于量子电路求解微分方程的前沿工作。这项研究首次…

作者头像 李华
网站建设 2026/4/23 7:13:49

深入浅出:图解RK3562的MIPI-CSI资源,搞懂4路摄像头到底怎么接

深入浅出:图解RK3562的MIPI-CSI资源,搞懂4路摄像头到底怎么接 在智能门禁、行车记录仪和工业检测等场景中,多摄像头系统的设计往往面临硬件资源分配的难题。RK3562作为一款集成强大图像处理能力的SoC,其MIPI-CSI子系统支持最多4路…

作者头像 李华
网站建设 2026/4/23 7:01:23

CMSIS DSP库在Cortex-M55/M85上的性能调优实战:以FFT和卷积为例

CMSIS DSP库在Cortex-M55/M85上的性能调优实战:以FFT和卷积为例 当你在Cortex-M55/M85这样的高性能微控制器上运行数字信号处理算法时,是否遇到过这样的困惑:为什么同样的FFT代码,在不同编译选项下性能差异能达到3倍?为…

作者头像 李华