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

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
相关推荐
假如梵高是飞行员1 小时前
WSL2 从 img 镜像文件启动特定 Linux 发行版完整指南
linux·windows·wsl
瓶中怪2 小时前
ROS2 机器人软件系统
linux·c++·python·ubuntu·vmware·ros2·机器人软件开发
iangyu2 小时前
linux配置时间同步
linux·运维·服务器
天空'之城2 小时前
Linux 系统编程 04:进程基础
linux·开发语言·进程基础
从零开始的代码生活_2 小时前
NAT、代理服务与内网穿透详解
linux·服务器·网络·c++·http·智能路由器
2501_943782353 小时前
【共创季稿事节】猜数字游戏:二分法思维与交互式反馈
前端·游戏·microsoft·harmonyos·鸿蒙·鸿蒙系统
灯厂码农3 小时前
C语言内存管理——内存对齐与共用体union
linux·服务器·c语言
charlie1145141913 小时前
Cinux: 加载第一个内核:从 bootloader 跳进 C++
linux·开发语言·c++·嵌入式
iCxhust4 小时前
linux目录是否保存在硬盘 启动后读入解析的
linux·运维·服务器
懒鸟一枚4 小时前
Linux 系统 Service 服务配置详解
linux·服务器·网络