【多模态】13-基于Gemini的半结构化图像检索系统分析

发布时间:2026/8/7 12:12:48

【多模态】13-基于Gemini的半结构化图像检索系统分析
1. 案例目标本案例演示如何使用Gemini Pro Vision模型从图像中提取结构化信息并结合向量数据库实现语义搜索和元数据过滤的自动检索系统。具体目标包括从收据图像中提取结构化信息公司、日期、地址、总额等将提取的结构化信息存储到向量数据库中实现基于语义搜索和元数据过滤的混合检索功能展示如何结合多模态LLM和向量检索技术构建实用的图像检索系统2. 技术栈与核心依赖本案例使用了以下技术栈和核心依赖多模态LLM: Gemini Pro Vision - 用于从图像中提取结构化信息向量数据库: Qdrant - 用于存储和检索结构化数据的向量表示嵌入模型: Gemini Embedding - 用于将文本转换为向量表示核心框架: LlamaIndex - 提供多模态处理和向量检索功能结构化输出: Pydantic - 定义和验证结构化数据模型主要依赖包:llama-index-multi-modal-llms-gemini llama-index-vector-stores-qdrant llama-index-embeddings-gemini llama-index-llms-gemini3. 环境配置本案例需要配置以下环境变量GOOGLE_API_KEY - 用于访问Gemini API的密钥注意: 需要获取Google AI Studio的API密钥并将其设置为环境变量GOOGLE_API_KEY。4. 案例实现1 准备图像数据下载SROIE v2收据图像数据集并定义函数加载图像文件路径def get_image_files(path: Path) - List[Path]: 获取指定目录下的所有图像文件 files [] for ext in [*.jpg, *.jpeg, *.png]: files.extend(path.glob(ext)) return sorted(files)2 定义结构化数据模型使用Pydantic定义收据信息的结构化模型class ReceiptInfo(BaseModel): company: Optional[str] Field(description公司名称) date: Optional[str] Field(description日期) address: Optional[str] Field(description地址) total: Optional[float] Field(description总额) currency: Optional[str] Field(description货币) phone: Optional[str] Field(description电话号码) email: Optional[str] Field(description电子邮件地址)3 实现结构化信息提取函数创建异步函数调用Gemini Pro Vision模型从图像中提取结构化信息async def pydantic_gemini( img_doc: ImageDocument, pydantic_model: Type[BaseModel] ) - BaseModel: 使用Gemini Pro Vision从图像中提取结构化信息 gemini_llm GeminiMultiModal( model_namemodels/gemini-pro-vision, temperature0.1, max_tokens1024, ) # 构建提示词 prompt f 请从这张收据图像中提取以下信息并按照指定的JSON格式返回 {pydantic_model.model_json_schema()} 请只返回JSON格式的结果不要包含其他文本。 # 调用模型 response await gemini_llm.acomplete( promptprompt, image_documents[img_doc] ) # 解析响应 try: json_str response.text.strip() # 提取JSON部分 start_idx json_str.find({) end_idx json_str.rfind(}) 1 if start_idx ! -1 and end_idx ! -1: json_str json_str[start_idx:end_idx] return pydantic_model.model_validate(json_str) except Exception as e: print(f解析响应时出错: {e}) return pydantic_model()4 处理图像文件使用SimpleDirectoryReader加载图像并并发处理图像文件生成结构化结果async def run_jobs( jobs: List[Tuple[ImageDocument, Type[BaseModel]]], semaphore: asyncio.Semaphore, ) - List[BaseModel]: 并发处理多个图像提取任务 async def process_job( job: Tuple[ImageDocument, Type[BaseModel]] ) - BaseModel: img_doc, pydantic_model job async with semaphore: return await pydantic_gemini(img_doc, pydantic_model) tasks [process_job(job) for job in jobs] return await asyncio.gather(*tasks) # 加载图像 image_documents SimpleDirectoryReader( input_dir./receipt_images, required_exts[.jpg, .jpeg, .png] ).load_data() # 创建任务列表 jobs [(img_doc, ReceiptInfo) for img_doc in image_documents] # 并发处理 semaphore asyncio.Semaphore(5) # 限制并发数 receipt_infos await run_jobs(jobs, semaphore)5 将结构化数据转换为TextNode实现函数将ReceiptInfo对象转换为TextNode设置文本内容、元数据及排除的嵌入/LLM元数据键def get_nodes_from_objs( objs: List[BaseModel], img_paths: List[str] ) - List[TextNode]: 将结构化对象转换为TextNode nodes [] for obj, img_path in zip(objs, img_paths): # 创建文本内容 text_content f 公司名称: {obj.company or 未知} 日期: {obj.date or 未知} 地址: {obj.address or 未知} 总额: {obj.total or 未知} 货币: {obj.currency or 未知} 电话: {obj.phone or 未知} 电子邮件: {obj.email or 未知} # 创建元数据 metadata { company: obj.company, date: obj.date, address: obj.address, total: obj.total, currency: obj.currency, phone: obj.phone, email: obj.email, image_path: img_path, } # 创建TextNode node TextNode( texttext_content.strip(), metadatametadata, excluded_embed_metadata_keyslist(metadata.keys()), excluded_llm_metadata_keyslist(metadata.keys()) ) nodes.append(node) return nodes6 创建向量存储索引使用QdrantVectorStore和GeminiEmbedding/LLM初始化VectorStoreIndex# 初始化向量存储 vector_store QdrantVectorStore( clientqdrant_client, collection_namereceipt_collection ) # 初始化嵌入模型和LLM embed_model GeminiEmbedding( model_namemodels/embedding-001, api_keyos.getenv(GOOGLE_API_KEY) ) llm Gemini( model_namemodels/gemini-pro, api_keyos.getenv(GOOGLE_API_KEY) ) # 创建索引 index VectorStoreIndex( nodesnodes, embed_modelembed_model, llmllm, vector_storevector_store )7 定义向量存储信息和自动检索器定义VectorStoreInfo包含收据内容信息和元数据字段的描述并初始化VectorIndexAutoRetrievervector_store_info VectorStoreInfo( content_info收据的详细信息包括公司名称、日期、地址、总额等, metadata_info[ MetadataInfo( namecompany, typestring, description公司名称 ), MetadataInfo( namedate, typestring, description收据日期 ), MetadataInfo( nameaddress, typestring, description公司地址 ), MetadataInfo( nametotal, typefloat, description收据总额 ), MetadataInfo( namecurrency, typestring, description货币类型 ), MetadataInfo( namephone, typestring, description电话号码 ), MetadataInfo( nameemail, typestring, description电子邮件地址 ) ] ) # 创建自动检索器 retriever VectorIndexAutoRetriever( indexindex, vector_store_infovector_store_info, similarity_top_k3, empty_query_top_k10 )8 实现查询和结果展示实现display_response函数用于打印节点内容和显示关联图像并执行查询示例def display_response(response: QueryBundle) - None: 显示查询结果 for node in response.nodes: print( * 50) print(文本内容:) print(node.text) print(\n元数据:) for key, value in node.metadata.items(): print(f{key}: {value}) # 显示图像 if image_path in node.metadata and os.path.exists(node.metadata[image_path]): print(\n关联图像:) display(Image(filenamenode.metadata[image_path])) print( * 50) # 执行查询 query 查找总额超过100美元的收据 response retriever.retrieve(query) display_response(response)5. 案例效果本案例实现了以下效果结构化信息提取: 成功从收据图像中提取公司名称、日期、地址、总额等结构化信息向量存储与检索: 将提取的结构化信息存储到向量数据库中实现高效的语义检索混合检索: 结合语义搜索和元数据过滤支持复杂的查询需求可视化展示: 展示检索结果的同时显示关联的原始图像6. 案例实现思路本案例的实现思路如下多模态处理: 利用Gemini Pro Vision的多模态能力从图像中提取结构化信息结构化输出: 使用Pydantic定义数据模型确保提取的信息具有一致的结构向量表示: 将结构化信息转换为向量表示便于进行语义检索元数据过滤: 保留结构化信息作为元数据支持精确的过滤查询自动检索: 使用VectorIndexAutoRetriever自动分析查询意图结合语义搜索和元数据过滤7. 扩展建议本案例可以进一步扩展和优化支持更多文档类型: 扩展到发票、合同等其他文档类型的结构化信息提取多语言支持: 支持多语言文档的结构化信息提取和检索更复杂的查询: 支持更复杂的查询条件如时间范围、金额范围等用户界面: 开发图形用户界面方便用户上传文档和执行查询增量更新: 支持增量添加新文档到向量数据库性能优化: 优化向量存储和检索的性能支持大规模文档处理8. 总结本案例展示了如何结合多模态LLM和向量检索技术构建一个实用的半结构化图像检索系统。通过使用Gemini Pro Vision从图像中提取结构化信息并将这些信息存储到向量数据库中我们实现了语义搜索和元数据过滤的混合检索功能。这种方法可以应用于各种需要从图像中提取结构化信息并进行检索的场景如文档管理、财务分析等。核心价值: 本案例的核心价值在于展示了多模态LLM与向量检索技术的结合为构建智能文档管理系统提供了实用方案。

相关新闻

如何用Python一键完整下载任何网站到本地?终极离线浏览解决方案

如何用Python一键完整下载任何网站到本地?终极离线浏览解决方案

2026/8/7 12:12:48

如何用Python一键完整下载任何网站到本地?终极离线浏览解决方案 【免费下载链接】WebSite-Downloader A website downloader written with Python 项目地址: https://gitcode.com/gh_mirrors/web/WebSite-Downloader 你是否曾遇到过网络不稳定却急需访问重要…

基于差动磁场阵列的矿热炉电极毫米级高精度定位技术解析

基于差动磁场阵列的矿热炉电极毫米级高精度定位技术解析

2026/8/7 12:12:48

1. 项目概述与核心价值 在矿热炉这种大型工业电炉的生产现场,电极位置的精确控制一直是个老大难问题。炉内是上千度的高温熔池,电极在高温、强腐蚀、粉尘弥漫的环境下工作,传统的机械式或光学式检测手段在这里基本失灵。电极位置哪怕偏差几厘…

Python libvirt API开发实战:探索KVM虚拟化的编程之路

Python libvirt API开发实战:探索KVM虚拟化的编程之路

2026/8/7 12:12:48

Python libvirt API开发实战:探索KVM虚拟化的编程之路 在云计算与虚拟化技术蓬勃发展的当下,KVM(Kernel-based Virtual Machine)凭借其高效、稳定且开源的特性,成为了众多企业和开发者构建虚拟化环境的优选方案。而Pyt…

AI Agent 面试题 478:Agent的常识推理(Commonsense Reasoning)能力如何增强?

AI Agent 面试题 478:Agent的常识推理(Commonsense Reasoning)能力如何增强?

2026/8/7 13:02:50

🔥 AI Agent 面试题 478:Agent的常识推理(Commonsense Reasoning)能力如何增强?摘要:本文深入解析了「Agent的常识推理(Commonsense Reasoning)能力如何增强?」这一 AI A…

AI Agent 面试题 475:如何通过强化学习提升Agent的规划能力?

AI Agent 面试题 475:如何通过强化学习提升Agent的规划能力?

2026/8/7 13:02:50

🔥 AI Agent 面试题 475:如何通过强化学习提升Agent的规划能力?摘要:本文深入解析了「如何通过强化学习提升Agent的规划能力?」这一 AI Agent 领域的核心面试题。文章从 目标导向规划 的基本概念出发,系统性…

Stratix FPGA远程升级实战:架构、安全与工程避坑指南

Stratix FPGA远程升级实战:架构、安全与工程避坑指南

2026/8/7 13:02:50

1. 项目缘起:为什么FPGA远程升级是个“硬骨头”? 在嵌入式系统开发里,给MCU或者Linux系统做远程升级,现在已经是常规操作了,OTA(Over-The-Air)方案遍地都是。但一提到给FPGA做远程升级&#xff…

终极指南:如何在Blender中轻松编辑GTA V游戏模型

终极指南:如何在Blender中轻松编辑GTA V游戏模型

2026/8/7 13:02:50

终极指南:如何在Blender中轻松编辑GTA V游戏模型 【免费下载链接】Sollumz Grand Theft Auto V modding suite for Blender. This add-on allows the creation of modded game assets: 3D models, maps, interiors, animations, etc. 项目地址: https://gitcode.c…

终极黑苹果指南:从零开始打造完美的macOS系统

终极黑苹果指南:从零开始打造完美的macOS系统

2026/8/7 13:02:50

终极黑苹果指南:从零开始打造完美的macOS系统 【免费下载链接】Hackintosh 国光的黑苹果安装教程:手把手教你配置 OpenCore 项目地址: https://gitcode.com/gh_mirrors/hac/Hackintosh 国光的黑苹果安装教程为技术爱好者和实践者提供了一套完整的…

AutoHotkey V2扩展库完全指南:从脚本到专业应用的快速升级

AutoHotkey V2扩展库完全指南:从脚本到专业应用的快速升级

2026/8/7 12:52:49

AutoHotkey V2扩展库完全指南:从脚本到专业应用的快速升级 【免费下载链接】ahk2_lib 项目地址: https://gitcode.com/gh_mirrors/ah/ahk2_lib AutoHotkey V2扩展库ahk2_lib是一个功能强大的Windows开发工具箱,它能将简单的AutoHotkey脚本转变为…

ncmdumpGUI:一键解锁网易云音乐ncm文件的终极解决方案

ncmdumpGUI:一键解锁网易云音乐ncm文件的终极解决方案

2026/8/6 19:19:00

ncmdumpGUI:一键解锁网易云音乐ncm文件的终极解决方案 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换,Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 你是否曾经从网易云音乐下载了心爱的歌曲&am…

分布式配置中心选型实战:Nacos与Consul在创业场景下的对比

分布式配置中心选型实战:Nacos与Consul在创业场景下的对比

2026/8/5 6:02:27

分布式配置中心选型实战:Nacos与Consul在创业场景下的对比工程导读:本文深入讨论 分布式配置中心选型实战:Nacos与Consul在创业场景下的对比 在生产工程实践中的核心落地方案。基于 分布式架构与微服务设计 视角,剖析实际痛点、架…

MoneyPrinterPlus实战指南:AI视频批量生成与自动化发布完整解决方案

MoneyPrinterPlus实战指南:AI视频批量生成与自动化发布完整解决方案

2026/8/5 8:19:55

MoneyPrinterPlus实战指南:AI视频批量生成与自动化发布完整解决方案 【免费下载链接】MoneyPrinterPlus AI一键批量生成各类短视频,自动批量混剪短视频,自动把视频发布到抖音,快手,小红书,视频号上,赚钱从来没有这么容易过! 支持本地语音模型chatTTS,fasterwhisper,…

CAD图库管理:从文件归档到设计资产管理的效率革命

CAD图库管理:从文件归档到设计资产管理的效率革命

2026/8/7 0:02:15

你肯定遇到过这种情况:打开一个老项目,想找某个特定的图块——比如一个标准的门、一个特定的设备符号,或者一个公司logo。你记得它就在某个DWG文件里,或者曾经从某个同事那里拷来过。于是,你开始在一堆命名混乱的文件夹…

5分钟掌握Wand-Enhancer:2026年终极WeMod专业版免费解锁指南

5分钟掌握Wand-Enhancer:2026年终极WeMod专业版免费解锁指南

2026/8/7 0:02:15

5分钟掌握Wand-Enhancer:2026年终极WeMod专业版免费解锁指南 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/GitHub_Trending/we/Wand-Enhancer Wand-Enhancer是一款功能强…

“Quality Control(质量控制)”在软件工程中通常指通过一系列活动确保软件产品符合预定的质量标准和用户需求

“Quality Control(质量控制)”在软件工程中通常指通过一系列活动确保软件产品符合预定的质量标准和用户需求

2026/8/7 0:02:15

“Quality Control(质量控制)”在软件工程中通常指通过一系列活动确保软件产品符合预定的质量标准和用户需求。而“软件测试”是质量控制的关键手段之一,属于QC范畴下的具体实践,其目标是发现缺陷、验证功能正确性、评估软件质量属…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/6 5:43:30

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/7 8:02:42

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/4 15:11:03

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…