调用大模型解析图片中的文字

python 复制代码
def batch_extract_text_from_png(png_img_list ,system_prompt):
    """
    批量调用通义千问3-VL-4B-Instruct,识别多张 PNG 图片并提取文字
    参数:
        png_img_list: PNG 图片列表(元素为 图片路径str 或 PIL.Image 对象)
    返回:
        extracted_total_text: 带页号标识的所有图片识别文字(按列表顺序拼接)
    """
    # 初始化 API Key
    dashscope.api_key = DASHSCOPE_API_KEY
    extracted_total_text = ""
   
    # 遍历图片列表,批量处理(按顺序识别,保留页号)
    for img_index, png_img in enumerate(png_img_list, 1):
        png_img
        try:
            # 1. 将当前 PNG 图片转为 Base64 编码
            img_base64_str = png_to_base64(png_img)

            # 2. 构造精准的对话消息(提升文字提取准确性)
            messages = [
                {
                    "role": "user",
                    "content": [
                        {"image": img_base64_str},  # 传入 PNG 图片 Base64 数据
                        # 提示词:明确要求,避免冗余,保留格式
                        {"text": system_prompt}
                    ]
                }
            ]

            # 3. 调用通义千问3-VL-4B-Instruct 模型
            
            
            response = MultiModalConversation.call(
                        model=MODEL_NAME,
                        messages=messages,
                        result_format='message',  # 标准消息格式,易解析
                        stream=False,  # 非流式输出,直接获取完整结果
                        temperature=0.0 # 温度设为0,保证识别结果稳定精准
                   )
            
             # 4. 解析响应结果并拼接
            if response.status_code == 200:
                # 提取单张图片的识别文字
                single_page_text = response.output.choices[0].message.content[0]['text']
                # 拼接页号标识(便于区分不同图片)
                extracted_total_text += f"【第 {img_index} 张 PNG 图片】\n"
                extracted_total_text += single_page_text + "\n\n"
                #extracted_total_text = json.loads(total_text_result_tmp)
                print(f"第 {img_index} 张 PNG 图片识别成功!")
            else:
                # 记录 API 调用失败信息
                error_info = f"API调用失败:{response.message}"
                extracted_total_text += f"【第 {img_index} 张 PNG 图片】\n{error_info}\n\n"
                print(f"第 {img_index} 张 PNG 图片识别失败:{error_info}")

        except Exception as e:
            # 捕获其他异常(格式错误、网络问题等)
            exception_info = f"异常错误:{str(e)}"
            extracted_total_text += f"【第 {img_index} 张 PNG 图片】\n{exception_info}\n\n"
            print(f"第 {img_index} 张 PNG 图片识别异常:{exception_info}")
        

    return extracted_total_text
相关推荐
2501_944424124 小时前
Flutter for OpenHarmony游戏集合App实战之记忆翻牌配对消除
android·java·开发语言·javascript·windows·flutter·游戏
真的想上岸啊4 小时前
4、修改开发板内核启动日志级别
linux
RisunJan4 小时前
Linux命令-kill(向进程发送信号的核心命令)
linux·运维·服务器
大强同学4 小时前
AutoHotkey打包exe完全指南!
windows·microsoft
物理与数学4 小时前
linux内核 页缓存的脏页管理
linux·linux内核
自己的九又四分之三站台5 小时前
微软AI库Microsoft.Extensions.AI的发展历史和背景介绍
人工智能·microsoft
范纹杉想快点毕业5 小时前
嵌入式工程师一年制深度进阶学习计划(纯技术深耕版)
linux·运维·服务器·c语言·数据库·算法
物理与数学5 小时前
Linux 内核 vm_area_struct与vm_struct
linux·linux内核
运维行者_5 小时前
OpManager 对接 ERP 避坑指南,网络自动化提升数据同步效率
运维·服务器·开发语言·网络·microsoft·网络安全·php
txinyu的博客5 小时前
sprintf & snprintf
linux·运维·算法