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

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
相关推荐
KING-WU51215 分钟前
Linux GDB 调试实战指南:从编译到断点调试
linux·运维·服务器
Lucis__17 分钟前
深入理解程序链接与加载—从动静态链接到库加载
linux·elf·链接·程序·动静态库
bbq烤鸡22 分钟前
Win11 资源管理器“白条“修复报告
windows
影视飓风TIM32 分钟前
Linux 进程信号原理与剖析
linux·运维·服务器
缘友一世1 小时前
开源 Linux截图工具闪构(SnapForge)
linux·运维·ubuntu·开源·截图
10mAh1 小时前
【Java】ArrayList 遍历删除为什么报错?三种写法与漏删复现
java·开发语言·windows
朱包林2 小时前
iTerm2终端配置指南
linux·javascript·python·云原生·容器·kubernetes·云计算
祖力552 小时前
Linux系统移植、烧录与环境的搭建
linux·运维·服务器
张小姐的猫3 小时前
【Linux】网络编程 —— 多路转接:epoll
linux·运维·网络
宋明河3 小时前
五种 IO 模型与 select、poll、epoll 对比
linux