读入图片中的文字 OCR技术:用于解析图片中的文字,是一种比较老的技术。例如可以解析出图片中文字内容。
解析图片文字 解析图片:
实现方法:使用UnstructuredImageLoader工具,代码示例:
1 2 3 4 5 6 7 from langchain_community.document_loaders import UnstructuredImageLoaderimage_path = "../data/黑悟空/黑悟空英文.jpg" loader = UnstructuredImageLoader(image_path) data = loader.load() print (data)
执行结果,输出内容:
1 [Document(metadata={'source': '../data/黑悟空/黑悟空英文.jpg'}, page_content='2\n\nPons\n\nBLACK MYTH -\n\n4')]
从结果看到,输出了BLACK MYTH内容,WUKONG没有输出来,说明解析的不是很好,极有可能是因色彩关系识别困难。
注意事项:不同OCR工具效果可能不同,可以尝试多种工具以获得更好效果。
解析PPT文字 实现方法:使用partition_ppt函数解析PPT内容,再转换为Document数据结构:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 from unstructured.partition.ppt import partition_pptppt_elements = partition_ppt(filename="../data/黑悟空/黑神话悟空.pptx" ) print ("PPT 内容:" ) from langchain_core.documents import Documentdocuments = [ Document(page_content=element.text, metadata={"source" : "../data/黑神话悟空PPT.pptx" }) for element in ppt_elements ] print (documents[0 :3 ])
执行结果,输出内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 ``` - 解析特点:能解析90%左右的文字内容,但对竖排文字处理可能不理想,会将竖排文字横向排列。 - 局限性:只能解析文字内容,无法展现PPT的设计风格、图片内涵等更深层次的信息。 注意:在使用 unstructured 解析 PPT 等 Office 文件时,如果出现 FileNotFoundError: soffice command was not found 错误怎么办? 这是因为系统中缺少 libreoffice。unstructured 需要调用 libreoffice 的 soffice 命令来处理 Office 文档。 解决方案是在系统中安装 libreoffice。 在 Debian/Ubuntu 系统中,可以使用以下命令安装: sudo apt-get update && sudo apt-get install -y libreoffice - Install instructions: https://www.libreoffice.org/get-help/install-howto/ - Mac: https://formulae.brew.sh/cask/libreoffice - 安装命令:brew install --cask libreoffice (注:安装报404,可换种方式进行安装) - Debian: https://wiki.debian.org/LibreOffice # 通过大模型解析图文 - 技术区别:与OCR不同,大模型解析是"image grounding"(视觉对齐)过程,将图像对象与自然语言描述关联。 - 实现原理:通过对比学习和对齐技术,结合视觉编码器(如ViT)和大语言模型进行多模态训练。 示例代码: ```python from pdf2image import convert_from_path import base64 import os from openai import OpenAI from dotenv import load_dotenv # 加载环境变量 load_dotenv() # 初始化 OpenAI 客户端 client = OpenAI( api_key=os.getenv("QWEN_VL_API_KEY"), # 从环境变量加载API key base_url=os.getenv("QWEN_VL_BASE_URL") ) output_dir = "temp_images" # 1. PDF 转图片 if not os.path.exists(output_dir): os.makedirs(output_dir) images = convert_from_path("../data/黑悟空/黑神话悟空.pdf") image_paths = [] for i, image in enumerate(images): image_path = os.path.join(output_dir, f'page_{i+1}.jpg') image.save(image_path, 'JPEG') image_paths.append(image_path) print(f"成功转换 {len(image_paths)} 页") # 2. 多模态大模型分析图片 print("\n开始分析图片...") results = [] for image_path in image_paths: with open(image_path, "rb") as image_file: base64_image = base64.b64encode(image_file.read()).decode('utf-8') response = client.chat.completions.create( model=os.getenv("QWEN_VL_MODEL"), messages=[ { "role": "user", "content": [ {"type": "text", "text": "请详细描述这张PPT幻灯片的内容,包括标题、正文和图片内容。"}, { "type": "image_url", "image_url": { "url": f"data:image/jpeg;base64,{base64_image}" } } ] } ], max_tokens=300 ) results.append(response.choices[0].message.content) # 3. 转换为 LangChain 的 Document 数据结构 from langchain_core.documents import Document documents = [ Document( page_content=result, metadata={"source": "../data/黑悟空/黑神话悟空.pdf", "page_number": i + 1} ) for i, result in enumerate(results) ] # 输出所有生成的 Document 对象 print("\n分析结果:") for doc in documents: print(f"内容: {doc.page_content}\n元数据: {doc.metadata}\n") print("-" * 80) # 清理临时文件 for image_path in image_paths: os.remove(image_path) os.rmdir(output_dir)
需要安装工具:pdf2image 库依赖 Poppler 的工具(如 pdfinfo)来处理 PDF 文件。
1 2 3 4 5 6 7 8 # Ubuntu/Debian sudo apt-get install poppler-utils # CentOS/RHEL sudo yum install poppler-utils # macOS (Homebrew) brew install poppler
执行结果,输出内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 成功转换 5 页 开始分析图片... 分析结果: 内容: 这张PPT幻灯片的内容丰富,包含了标题、正文和图片等多个元素。以下是对这张幻灯片的详细描述: ### 标题 幻灯片的标题是“天命”,字体较大,位于幻灯片的左上角。标题下方有较小的文字“TIAN MING”,进一步强调了主题。 ### 正文 1. **主要文字**: - “天命人——你,也想当神仙?”这句话是幻灯片的核心内容,位于幻灯片的中部偏左位置。这句话以一种挑衅或质疑的语气提出问题,引发观众的思考。 2. **右侧文字**: - 右侧有一列竖排的文字,内容如下: - “荒冢一堆草未了” - “古今将相在何方” - “唯有功名忘不了” - “世人都晓神仙好” 这些文字引用了一些古诗词或俗语,增加了幻灯片的文化内涵和深度。这些句子可能表达了对人生、功名利禄以及追求不朽的思考。 ### 图片内容 - **背景图像**: - 幻灯片的背景是一幅暗色调的图像,背景中有两个角色的形象。这两个角色看起来像是神话或传说中的形象,具有浓厚的东方神话色彩。 - 左侧的角色戴着一个绿色的面具,面具上有尖锐的角,整体 元数据: {'source': '../data/黑悟空/黑神话悟空.pdf', 'page_number': 1} --------------------------------------------------------------------------------
扩展:安装LibreOffice
下载:LibreOffice
打开浏览器,访问 LibreOffice 官方下载页面:https://www.libreoffice.org/download/download-libreoffice/
网站会自动检测你的操作系统是 macOS。你需要根据你的 Mac 型号选择正确的版本:
Apple Silicon: 如果你使用的是新款的、搭载 M1, M2, M3 等芯片的 Mac。
Intel: 如果你使用的是旧款的、搭载 Intel 处理器的 Mac。
点击 “Download” 按钮,浏览器会开始下载一个 .dmg 安装文件。
安装 LibreOffice
下载完成后,在你的 “下载” 文件夹中找到这个 .dmg 文件,并双击打开它。
你会看到一个安装窗口,里面有 LibreOffice 的图标和一个指向 Applications (应用程序) 文件夹的快捷方式。
将 LibreOffice 图标拖拽到 Applications 图标上。
系统会开始复制文件。这可能需要一两分钟。复制完成后,安装就结束了。
你可以关闭安装窗口,并将桌面上的 LibreOffice “磁盘” 图标拖到废纸篓来推出它。
首次打开和验证
打开你的 “应用程序” 文件夹,找到 LibreOffice.app 并双击它。
macOS 首次打开从网上下载的应用时,会进行安全检查。你可能会看到一个 “正在验证 LibreOffice” 的进度条。
验证完成后,系统会弹出一个安全提示:“无法打开‘LibreOffice’,因为无法验证开发者。” 或者 “‘LibreOffice’是从互联网下载的 App。您确定要打开它吗?”
如果看到”无法验证开发者” :
点击“取消”。
打开“系统设置” > “隐私与安全性”。
向下滚动,在“安全性”部分你会看到一条信息:“已阻止使用‘LibreOffice’,因为它不是来自已认证的开发者。”
点击旁边的 “仍要打开” 按钮,然后输入你的 Mac 密码。
如果看到”您确定要打开它吗?” :
完成以上步骤后,LibreOffice 主界面将会启动。这表明你已经成功安装并可以正常使用。
环境变量配置,执行以下命令
1 sudo ln -s /Applications/LibreOffice.app/Contents/MacOS/soffice /usr/local/bin/libreoffice