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

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
相关推荐
白书宇2 小时前
【STM32实战】从零开始写Linux 0.12内核 第2个实验 准备开发板
linux·stm32·嵌入式硬件
大连好光景2 小时前
Linux系统中那些重要的文件路径
linux·运维·服务器
FIT2CLOUD飞致云2 小时前
汇报丨1Panel开源面板2025年终总结
linux·运维·服务器·开源·github·1panel
羌俊恩2 小时前
win10系统升级失败,报错:0x800f0805 你的设备中缺少重要的安全和质量修复
windows·系统升级·0x800f0805·sfc·dism
xiaoliuliu123452 小时前
libicu-62.1-6.ky10.x86_64.rpm 安装步骤详解(麒麟V10系统)
linux·服务器·centos
qq_5470261792 小时前
Linux 磁盘管理
linux·运维·服务器
oMcLin2 小时前
如何排查 Linux 系统服务器的性能故障问题:使用 `top`、`htop`、`iostat` 等工具
linux·服务器·数据库
Howrun7772 小时前
Linux进程通信---4---信号量System V & POSIX
linux·数据库
喂自己代言2 小时前
Linux基础命令速查指南
linux·运维·服务器