Jean's Blog

一个专注软件测试开发技术的个人博客

0%

RAG组件--数据导入之解析图片中的文字和内容

读入图片中的文字

OCR技术:用于解析图片中的文字,是一种比较老的技术。例如可以解析出图片中文字内容。

解析图片文字

解析图片:

image-20250806101720158

实现方法:使用UnstructuredImageLoader工具,代码示例:

1
2
3
4
5
6
7
from langchain_community.document_loaders import UnstructuredImageLoader

image_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_ppt
# 解析 PPT 文件
ppt_elements = partition_ppt(filename="../data/黑悟空/黑神话悟空.pptx")
print("PPT 内容:")
# for element in ppt_elements:
# print(element.text)

from langchain_core.documents import Document
# 转换为 Documents 数据结构
documents = [
Document(page_content=element.text,
metadata={"source": "../data/黑神话悟空PPT.pptx"})
for element in ppt_elements
]

# 输出转换后的 Documents
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

  1. 下载:LibreOffice

    打开浏览器,访问 LibreOffice 官方下载页面:
    https://www.libreoffice.org/download/download-libreoffice/

    网站会自动检测你的操作系统是 macOS。你需要根据你的 Mac 型号选择正确的版本:

    • Apple Silicon: 如果你使用的是新款的、搭载 M1, M2, M3 等芯片的 Mac。
    • Intel: 如果你使用的是旧款的、搭载 Intel 处理器的 Mac。

    点击 “Download” 按钮,浏览器会开始下载一个 .dmg 安装文件。

  2. 安装 LibreOffice

    下载完成后,在你的 “下载” 文件夹中找到这个 .dmg 文件,并双击打开它。

    你会看到一个安装窗口,里面有 LibreOffice 的图标和一个指向 Applications (应用程序) 文件夹的快捷方式。

    将 LibreOffice 图标拖拽到 Applications 图标上。

    系统会开始复制文件。这可能需要一两分钟。复制完成后,安装就结束了。

    你可以关闭安装窗口,并将桌面上的 LibreOffice “磁盘” 图标拖到废纸篓来推出它。

  3. 首次打开和验证

    打开你的 “应用程序” 文件夹,找到 LibreOffice.app 并双击它。

    macOS 首次打开从网上下载的应用时,会进行安全检查。你可能会看到一个 “正在验证 LibreOffice” 的进度条。

    验证完成后,系统会弹出一个安全提示:“无法打开‘LibreOffice’,因为无法验证开发者。” 或者 “‘LibreOffice’是从互联网下载的 App。您确定要打开它吗?”

    如果看到”无法验证开发者”

    1. 点击“取消”。
    2. 打开“系统设置” > “隐私与安全性”。
    3. 向下滚动,在“安全性”部分你会看到一条信息:“已阻止使用‘LibreOffice’,因为它不是来自已认证的开发者。”
    4. 点击旁边的 “仍要打开” 按钮,然后输入你的 Mac 密码。

    如果看到”您确定要打开它吗?”

    • 直接点击 “打开” 即可。

    完成以上步骤后,LibreOffice 主界面将会启动。这表明你已经成功安装并可以正常使用。

  4. 环境变量配置,执行以下命令

    1
    sudo ln -s /Applications/LibreOffice.app/Contents/MacOS/soffice /usr/local/bin/libreoffice