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

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
相关推荐
fruge3 分钟前
数字人从演示到场景落地:突破交互瓶颈,走进真实服务
microsoft·ai·交互
s_w.h6 分钟前
【 linux 】认识make和makefile
linux·运维·bash
不怕犯错,就怕不做17 分钟前
ARM设备异常断电容易造成数据损坏,硬件如何设计
linux·驱动开发·嵌入式硬件
Harm灬小海21 分钟前
【云计算学习之路】学习Centos7系统-Linux软件包管理
linux·运维·服务器·学习·云计算·yum·rpm
caicai_xiaobai24 分钟前
Ubuntu上Git安装步骤
linux·git·ubuntu
忆~遂愿26 分钟前
从文字应答到具象共情:Agent 交互的底层革新
人工智能·深度学习·目标检测·microsoft·机器学习·ar·交互
Ai.den28 分钟前
Windows 安装 MinerU 3.x 实现本地批量解析 PDF
人工智能·windows·ai
平行云34 分钟前
实时云渲染平台数据通道,支持3D应用文件上传下载分享无缝交互
linux·unity·云原生·ue5·gpu算力·实时云渲染·像素流送
谪星·阿凯1 小时前
Linux提权全攻略博客
linux·运维·服务器·网络安全
风度前端1 小时前
阿里云宝塔面板部署https证书
linux·后端·https