千问3.5-2B实战教程:用JSON接口批量处理PDF截图,自动生成结构化图文摘要
1. 为什么需要批量处理PDF截图
在日常工作中,我们经常会遇到需要处理大量PDF截图的情况。比如:
- 从学术论文中提取关键图表和说明
- 整理产品文档中的界面截图和功能描述
- 将会议资料中的幻灯片内容转换为结构化笔记
传统方法是人工一张张查看截图并记录内容,效率低下且容易出错。千问3.5-2B的视觉理解能力可以帮我们自动化这个过程。
2. 准备工作与环境配置
2.1 获取访问权限
首先确保你可以访问千问3.5-2B的Web服务:
https://gpu-hv221npax2-7860.web.gpu.csdn.net/2.2 安装必要工具
我们需要Python环境来处理PDF和调用API:
pip install PyMuPDF requests pillow2.3 准备测试数据
找一个包含多页截图的PDF文件作为测试素材。如果没有现成的,可以用以下代码从网页生成PDF:
import fitz # PyMuPDF doc = fitz.open() page = doc.new_page() rect = fitz.Rect(0, 0, 400, 600) page.insert_image(rect, filename="screenshot.png") doc.save("test.pdf")3. 核心实现步骤
3.1 提取PDF中的图片
使用PyMuPDF从PDF中提取所有图片:
def extract_images_from_pdf(pdf_path, output_folder): import os os.makedirs(output_folder, exist_ok=True) doc = fitz.open(pdf_path) image_paths = [] for page_num in range(len(doc)): page = doc.load_page(page_num) images = page.get_images() for img_index, img in enumerate(images): xref = img[0] base_image = doc.extract_image(xref) image_path = f"{output_folder}/page{page_num}_img{img_index}.png" with open(image_path, "wb") as f: f.write(base_image["image"]) image_paths.append(image_path) return image_paths3.2 调用千问3.5-2B的JSON接口
创建调用API的函数:
import requests import base64 def call_qwen_api(image_path, prompt): with open(image_path, "rb") as f: img_base64 = base64.b64encode(f.read()).decode("utf-8") payload = { "image": img_base64, "prompt": prompt, "max_length": 256, "temperature": 0.3 } response = requests.post( "https://gpu-hv221npax2-7860.web.gpu.csdn.net/api", json=payload ) return response.json()["result"]3.3 设计结构化摘要模板
根据需求设计输出格式,例如:
def generate_summary(image_path, description): return { "image_file": image_path, "summary": description, "keywords": extract_keywords(description), "timestamp": datetime.now().isoformat() }4. 完整批处理脚本
将以上功能整合成完整脚本:
import os from datetime import datetime import json def batch_process_pdf(pdf_path, output_json): # 步骤1:提取图片 image_folder = "temp_images" image_paths = extract_images_from_pdf(pdf_path, image_folder) results = [] # 步骤2:批量处理每张图片 for img_path in image_paths: # 基础描述 description = call_qwen_api( img_path, "请用中文详细描述这张图片的内容,包括主要元素、文字信息和整体风格" ) # 关键信息提取 keywords = call_qwen_api( img_path, "提取这张图片中最关键的3-5个中文关键词" ) # 结构化存储 results.append({ "image": os.path.basename(img_path), "description": description, "keywords": keywords.split("、"), "page_number": int(img_path.split("_")[0][4:]), "processing_time": datetime.now().isoformat() }) # 保存结果 with open(output_json, "w", encoding="utf-8") as f: json.dump(results, f, ensure_ascii=False, indent=2) return results5. 实际应用案例
5.1 学术论文整理
对一篇30页的计算机视觉论文运行脚本:
batch_process_pdf("cv_paper.pdf", "paper_summary.json")输出示例:
[ { "image": "page4_img0.png", "description": "这是一张算法流程图,展示了YOLOv7的网络结构...", "keywords": ["YOLOv7", "目标检测", "神经网络", "流程图"], "page_number": 4 }, { "image": "page12_img0.png", "description": "实验结果的对比表格,显示在COCO数据集上...", "keywords": ["实验结果", "COCO", "准确率", "对比"], "page_number": 12 } ]5.2 产品文档处理
处理一份产品说明文档:
batch_process_pdf("user_manual.pdf", "manual_summary.json")典型输出:
{ "image": "page3_img0.png", "description": "手机设置界面的截图,显示网络设置选项...", "keywords": ["设置界面", "WiFi", "移动网络", "蓝牙"], "page_number": 3 }6. 性能优化建议
6.1 并行处理加速
使用多线程提高处理速度:
from concurrent.futures import ThreadPoolExecutor def parallel_process_images(image_paths): with ThreadPoolExecutor(max_workers=4) as executor: results = list(executor.map(process_single_image, image_paths)) return results6.2 缓存机制
避免重复处理相同图片:
import hashlib def get_image_hash(image_path): with open(image_path, "rb") as f: return hashlib.md5(f.read()).hexdigest()6.3 错误处理
增强脚本的健壮性:
def safe_call_api(image_path, prompt, retries=3): for attempt in range(retries): try: return call_qwen_api(image_path, prompt) except Exception as e: print(f"Attempt {attempt+1} failed: {str(e)}") time.sleep(2) return None7. 总结与下一步
通过本教程,我们实现了:
- 自动从PDF提取截图
- 调用千问3.5-2B的API分析图片内容
- 生成结构化的图文摘要
- 支持批量处理提高效率
下一步改进方向:
- 添加更精细的内容分类
- 支持多轮问答完善摘要细节
- 开发可视化界面展示结果
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。