You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过Python调用Gemini 1.5系列模型直接处理图片以提取指定表格数据对?

如何通过Python调用Gemini 1.5系列模型直接处理图片以提取指定表格数据对?

我明白你遇到的问题了——单独用OCR提取文本后再传给LLM,丢失了表格的布局上下文,模型根本没法判断哪个代码对应哪个商品描述。其实完全不用绕这个弯路,Gemini 1.5系列模型本身就支持多模态输入(图文结合),可以直接把图片和你的提示词一起传给模型,它能像聊天界面那样理解表格的结构,准确配对出你需要的结果。

下面是具体的Python实现方案,直接调用Gemini的多模态API来完成任务:

第一步:安装依赖

首先需要安装Google的Generative AI SDK和环境变量管理工具:

pip install google-generativeai python-dotenv

第二步:编写Python代码

这个代码会直接把图片和提示词传给Gemini 1.5 Flash,让模型处理图片中的表格结构,返回你需要的代码-描述配对:

import os
import json
import google.generativeai as genai
from dotenv import load_dotenv

# 加载环境变量(建议把API密钥存在.env文件里,避免硬编码)
load_dotenv()

# 配置Gemini API:支持两种认证方式
# 方式1:用API密钥(适合快速测试,从Google AI Studio获取)
genai.configure(api_key=os.getenv("GOOGLE_API_KEY"))

# 方式2:用服务账号认证(适合企业级项目)
# from google.oauth2 import service_account
# credentials = service_account.Credentials.from_service_account_file("my_key.json")
# genai.configure(credentials=credentials, project="my_project")

def extract_code_description_pairs(image_path):
    # 初始化Gemini 1.5 Flash模型
    model = genai.GenerativeModel("gemini-1.5-flash-001")
    
    # 加载本地图片,转为模型可识别的格式
    image_file = genai.upload_file(path=image_path)
    
    # 构造和聊天界面一致的提示词,明确要求配对规则和输出格式
    prompt = """
    这是一张包含表格的图片,表格核心列是"CÓDIGO"(代码)和"DESIGNACIÓN DE LA MERCANCÍA"(商品描述)。
    请提取每一行的代码和对应的商品描述,严格整理成标准JSON数组格式,每个元素的结构为:
    {"CÓDIGO": "code_value", "DESIGNACIÓN DE LA MERCANCÍA": "description"}
    注意:商品描述列的内容可能以连字符"-"开头,处理时保留完整描述;不要添加任何额外的解释性文字,只返回JSON。
    """
    
    # 调用模型,传入提示词和图片
    response = model.generate_content([prompt, image_file])
    response.resolve()  # 等待模型处理完成
    
    # 解析模型返回的结果
    try:
        # 尝试直接解析为JSON数组
        result = json.loads(response.text)
    except json.JSONDecodeError:
        # 若模型返回带格式的文本,做降级解析处理
        result = []
        lines = response.text.split("\n")
        for line in lines:
            line = line.strip()
            if line.startswith("- {") or line.startswith("{"):
                # 提取JSON部分并尝试解析
                json_start = line.index("{")
                json_str = line[json_start:]
                if json_str.endswith(","):
                    json_str = json_str[:-1]
                try:
                    result.append(json.loads(json_str))
                except:
                    continue
    return result

# 测试调用
if __name__ == "__main__":
    pairs = extract_code_description_pairs("your_table_image.png")
    for idx, pair in enumerate(pairs, 1):
        print(f"第{idx}组配对:")
        print(f"代码:{pair.get('CÓDIGO')}")
        print(f"描述:{pair.get('DESIGNACIÓN DE LA MERCANCÍA')}\n")

关键说明

  1. 为什么这个方案可行?
    Gemini 1.5系列模型具备强大的多模态布局理解能力,能直接识别图片中表格的行列对应关系,不需要你提前做OCR提取文本。这样模型能保留原始的空间上下文,完全复刻聊天界面的配对准确率。

  2. 提示词的重要性
    要和你在聊天界面用的prompt保持一致,明确指定表格列名、输出格式,甚至可以补充“不要返回任何解释性文字,只给纯JSON”这类约束,让模型返回的结果更便于直接解析。

  3. 认证方式选择

    • 用API密钥适合快速原型开发,可从Google AI Studio免费获取;
    • 用服务账号适合企业级生产环境,需要给服务账号授予Generative AI Developer等相关权限。

注意事项

  • 确保你的Google Cloud项目已经启用了Generative AI API;
  • 图片文件大小不要超过模型限制(Gemini 1.5 Flash支持最大2GB输入,但实际建议控制在合理范围内);
  • 如果模型返回格式有波动,可以在prompt中进一步强化格式要求(比如“必须返回标准JSON数组,无任何额外内容”)。

备注:内容来源于stack exchange,提问作者Andrés Meza-Escallón

火山引擎 最新活动