多类型图像OCR:基于Dify的多模态Agent实现

news2025/3/1 23:56:58

大模型相关目录

大模型,包括部署微调prompt/Agent应用开发、知识库增强、数据库增强、知识图谱增强、自然语言处理、多模态等大模型应用开发内容
从0起步,扬帆起航。

  1. 大模型应用向开发路径:AI代理工作流
  2. 大模型应用开发实用开源项目汇总
  3. 大模型问答项目问答性能评估方法
  4. 大模型数据侧总结
  5. 大模型token等基本概念及参数和内存的关系
  6. 大模型应用开发-华为大模型生态规划
  7. 从零开始的LLaMA-Factory的指令增量微调
  8. 基于实体抽取-SMC-语义向量的大模型能力评估通用算法(附代码)
  9. 基于Langchain-chatchat的向量库构建及检索(附代码)
  10. 一文教你成为合格的Prompt工程师
  11. 最简明的大模型agent教程
  12. 批量使用API调用langchain-chatchat知识库能力
  13. langchin-chatchat部分开发笔记(持续更新)
  14. 文心一言、讯飞星火、GPT、通义千问等线上API调用示例
  15. 大模型RAG性能提升路径
  16. langchain的基本使用
  17. 结合基础模型的大模型多源信息应用开发
  18. COT:大模型的强化利器
  19. 多角色大模型问答性能提升策略(附代码)
  20. 大模型接入外部在线信息提升应用性能
  21. 从零开始的Dify大模型应用开发指南
  22. 基于dify开发的多模态大模型应用(附代码)
  23. 基于零一万物多模态大模型通过外接数据方案优化图像文字抽取系统
  24. 快速接入stable diffusion的文生图能力
  25. 多模态大模型通过外接数据方案实现电力智能巡检(设计方案)
  26. 大模型prompt实例:知识库信息质量校验模块
  27. 基于Dify的LLM-RAG多轮对话需求解决方案(附代码)
  28. Dify大模型开发技巧:约束大模型回答范围
  29. 以API形式调用Dify项目应用(附代码)
  30. 基于Dify的QA数据集构建(附代码)
  31. Qwen-2-7B和GLM-4-9B:大模型届的比亚迪秦L
  32. 文擎毕昇和Dify:大模型开发平台模式对比
  33. 多类型图像OCR:基于Dify的多模态Agent实现

文章目录

  • 大模型相关目录
  • 背景
  • 技术方案
  • 代码及Dify设计


背景

Agent 通常是一个智能软件实体,能够感知其环境,并根据这些感知做出决策和行动。它可能包括学习能力,以优化其未来的决策和行动。

当下Agent研究往往是针对于文本类型数据输入,对语义进行感知并决策,现在对图文多模态输入的Agent研究相对比较匮乏。

技术方案

对不同类型图像进行识别时的解决方案。

  • 主Agent负责对图像类型进行识别,并格式化输出。
  • 子Agent负责对指定图像类型进行分析,被注入了一定的先验知识,如表格分析模型、铭牌分析模型等,并格式化输出。

技术架构图如下:
在这里插入图片描述
其中,工具使用效果如下:
在这里插入图片描述

代码及Dify设计

在这里插入图片描述
在这里插入图片描述

from fastapi import FastAPI, HTTPException, Depends
from typing import List, Optional
import re
import json
import datetime
import pandas as pd
from pydantic import BaseModel


app = FastAPI()
def post_processing(input_data):
    # 使用正则表达式匹配{}之间的内容
    pattern = r'{(.*?)}'
    match = re.search(pattern, input_data, re.DOTALL)

    # 匹配后做数据后处理
    if match:
        match = '{' + match.group(1) + '}'
        json_str = match.replace(': {\n ', ':null,').replace('\n', '').replace('},', ',').replace(':',':')
        json_str = json_str.strip('"\"')
        return json_str
    else:
        return str({'error':'llm out error!'})
    
@app.get("/pic_type")
def get_pic_type(url):
    import openai
    from openai import OpenAI
    import re

    API_BASE = "https://api.lingyiwanwu.com/v1"
    API_KEY = "e6609f77a0fb40a290eb034535917144"

    client = OpenAI(
        # defaults to os.environ.get("OPENAI_API_KEY")
        api_key=API_KEY,
        base_url=API_BASE
    )


    prompt = '''
## 职位:你是一个图像类型判别小助手。
## 职能:你可以将图像分类为【设备铭牌、文件表格、其他】三个类型。其中,设备铭牌指包含设备类型、设备规范、设备厂家、编号、参数等信息的铭牌图像;文件表格指以表格形式存储信息的图像。
## 输出格式:你只能输出判断后得出的图像类型,不需要输出图像类型以外的信息。如:设备铭牌、文件表格、其他
    '''

    completion = client.chat.completions.create(
        model="yi-vl-plus",
        messages= [
            {
                "role": "user",
                "content": [
                    {
                        "type": "image_url",
                        "image_url": {
                            "url": url
                        }
                    },
                    {
                        "type": "text",
                        "text": prompt
                    }
                ]
            }
        ]
    )
    raw_result = completion.choices[0].message.content
    print('LLM Respone:',raw_result)
    
    
    # 定义正则表达式,匹配“设备铭牌”或“文件表格”
    pattern = re.compile(r'设备铭牌|文件表格')
    
    # 使用正则表达式搜索字符串
    match = pattern.search(raw_result)
    return match.group() if match else None,url

@app.get("/mingpai_info")
def get_mingpai_info(url):
    import openai
    from openai import OpenAI
    import re

    API_BASE = "https://api.lingyiwanwu.com/v1"
    API_KEY = "e6609f77a0fb40a290eb034535917144"

    client = OpenAI(
        # defaults to os.environ.get("OPENAI_API_KEY")
        api_key=API_KEY,
        base_url=API_BASE
    )


    prompt = '''
## 职位:你是一个具备图像信息提取、信息规整的智能助手
## 职能:请提取图像中的文字、数字等文本内容,重点提取【提取下二维码下方的数字和字母组成的条形码编号】。
根据识别内容信息提取【设备名称】、【规约标准】、【电压参数】、【电流参数】、【频率参数】、【生产年份】、【生产公司】等内容。
提取后,返回格式参考如下:{
"编号":"09991DY00000009999999999",
"设备名称":"配电箱",
"相关标准":"GB12345.1-2099",
"生产年份":"2059年",
"生产厂家":"某某有限公司",
"电压参数":"110V",
"电流参数":"0.3A",
"频率参数":"80HZ"
"功率参数":“COSΦ=0.8滞后”
}
注意,提取不到时将提取内容标注“null”,且不要填入多余内容。
注意,我不需要任何代码,请输出json格式结果,json中不允许嵌套json。
    '''

    completion = client.chat.completions.create(
        model="yi-vl-plus",
        messages= [
            {
                "role": "user",
                "content": [
                    {
                        "type": "image_url",
                        "image_url": {
                            "url": url
                        }
                    },
                    {
                        "type": "text",
                        "text": prompt
                    }
                ]
            }
        ]
    )
    raw_result = completion.choices[0].message.content
    print('LLM Respone:',raw_result)
    return post_processing(raw_result)
@app.get("/table_info")
def get_table_info(url):
    import openai
    from openai import OpenAI
    import re

    API_BASE = "https://api.lingyiwanwu.com/v1"
    API_KEY = "e6609f77a0fb40a290eb034535917144"

    client = OpenAI(
        # defaults to os.environ.get("OPENAI_API_KEY")
        api_key=API_KEY,
        base_url=API_BASE
    )


    prompt = '''
## 职位:你是一个具备表单图像信息提取、信息规整的智能助手
## 职能:请提取图像中的文字、数字等文本内容,注意图像是一个表格,你需要理解表格中的内容。
根据识别内容信息提取【工程项目名称】、【工作任务】、【工作内容】、【运行单位】、【承包商或作业施工单位】、【交底日期】、【安全措施】等内容。
提取后,返回格式参考如下:{
"工程项目名称":"某某项目",
"工作任务":"XXKv站XX任务",
"运行单位":"某某所",
"承包商或作业施工单位":"某某公司",
"交底日期":"2024年6月13日",
"安全措施":""
}
注意,提取不到时将提取内容标注“null”,且不要填入多余内容。
注意,我不需要任何代码,请输出json格式结果。
    '''

    completion = client.chat.completions.create(
        model="yi-vl-plus",
        messages= [
            {
                "role": "user",
                "content": [
                    {
                        "type": "image_url",
                        "image_url": {
                            "url": url
                        }
                    },
                    {
                        "type": "text",
                        "text": prompt
                    }
                ]
            }
        ]
    )
    raw_result = completion.choices[0].message.content
    print('LLM Respone:',raw_result)
    return post_processing(raw_result)


@app.get("/generate")
def get_table(input_str = Depends(post_processing)):
    print(input_str)
    # 将字符串转换为字典
    data_dict = json.loads(input_str.replace('\\n','').replace('\\',''))
    
    for k, v in data_dict.items():
        if type(v) == list:
            data_dict[k] = [' '.join(v)]
        else:
            data_dict[k] = [v]
    print('##################','json')
    df_json = pd.DataFrame(data_dict)
    print(data_dict)
    print('##################','df')
    print(df_json)
    '''
    # 读取excel文件
    df_excel = pd.read_excel('/home/gputest/lyq/py_file/result.xlsx', engine='openpyxl')

    # 将json数据追加到excel的DataFrame中(这里简单地追加到末尾)
    # 注意:你可能需要根据你的数据结构和需求调整这一步
    df_excel = pd.concat([df_excel, df_json], ignore_index=True)
    '''

    # 保存修改后的excel文件
    # 获取当下时间并format
    formatted_time = str(datetime.datetime.now().strftime("%Y_%m_%d_%H%M%S"))
    df_json.to_excel(formatted_time+'.xlsx', index=False, engine='openpyxl')

    return 'http://172.19.138.52:9707/'+formatted_time+'.xlsx'

if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="172.19.138.52", port=9706)

需要强调的是,由于Dify不支持图像数据在工作流中的流通控制,因此本设计使用图像链接。
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1823036.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

用Python处理Excel的资源

用Python处理Excel的资源 python-excel 读写Excel文件 openpyxl openpyx文档l 读写Excel2010文件(即xlsx) openpyxl示例: from openpyxl import Workbook wb Workbook()# 获取active worksheet ws wb.active# 给单元格赋值 ws[A1] 4…

创邻科技张晨:期待解锁图技术在供应链中的关联力

近日,创邻科技创始人兼CEO张晨博士受浙江省首席信息官协会邀请,参加数字化转型与企业出海研讨会。 此次研讨会旨在深入探讨数字经济时代下,企业如何有效应对成本提升与环境变化所带来的挑战,通过数字化转型实现提效增益&#xff…

生命在于学习——Python人工智能原理(3.3)

三、深度学习 4、激活函数 激活函数的主要作用是对神经元获得的输入进行非线性变换,以此反映神经元的非线性特性。常见的激活函数有线性激活函数、符号激活函数、Sigmod激活函数、双曲正切激活函数、高斯激活函数、ReLU激活函数。 (1)线性…

推流工具OBS的下载使用

一、下载安装 OBS,windows版本官网下载地址 二、推流步骤 安装好之后,打开软件 1、右下角,打开设置 2、输入推流地址,一般为rtmp格式开头的推流地址 输入完成后,应用并确定关闭窗口 3、“来源”里面新建媒体源、新…

RK3566调试VI5301

VI5301是南京芯视界推出的一款直接飞行时间(dToF)传感器,与ST的VL53L0x兼容。 一、开发平台 系统:linux 4.19(buidroot) 二、驱动移植 解压厂家提供的驱动文件:VI5301_Linux_General_M40_V202,目录结构…

4、视觉里程计:特征点法、直接法和半直接法

先说一下我自己的总体理解: 特征点法,基于最小化重投影误。 提取特征点,计算描述子,匹配,运动估计。 计算描述子和匹配部分可以用光流法跟踪替代 总体上先知道像素之间的关系,在估计运动(最…

【C语言】一篇文章带你深度理解函数

目录 1. 函数的概念 2. 库函数 2.1 标准库和头文件 2.2 库函数的使用方法 2.2.1 举例 sqrt 2.2.2 库函数文档的一般格式 3. 自定义函数 3.1 函数的语法形式 3.2 函数的举例 4. 形参和实参 4.1 实参 4.2 形参 4.3 实参和形参的关系 5. …

【区块链】记账的千年演化:从泥板到区块链

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 记账的千年演化:从泥板到区块链引言一、古代记账:泥板与…

ComfyUI-全民舞王-MusePose

musepose-demo 项目介绍 https://github.com/TMElyralab/MusePose发布的模型能够根据给定的姿势序列,生成参考图中人物的舞蹈视频,结果质量超越了同一主题中几乎所有当前开源的模型。发布pose align算法,以便用户可以将任意舞蹈视频与任意参…

基于Matlab的纸币币值检测系统设计(GUI界面) 【含Matlab源码 MX_004期】

简介: 基于Matlab的纸币币值检测系统是一种利用数字图像处理技术来自动识别和鉴别纸币面额的系统。 图像获取:获取纸币的图像。 预处理:对获取到的图像进行预处理,包括去噪、灰度化、边缘检测等操作,以便后续的处理。…

电脑找不到vcruntime140_1.dll的原因分析及5种解决方法分享

电脑已经成为我们生活和工作中不可或缺的工具。然而,在使用电脑的过程中,我们常常会遇到一些常见的问题,其中之一就是电脑显示vcruntime140_1.dll丢失。那么,这个问题是怎么回事呢?又有哪些解决方法呢?如何…

首期“软件企业 AI 开发提效实战营”成功举办

人工智能是国家战略的重要组成部分,是未来国际竞争的焦点和经济发展的新引擎。随着人工智能科技的飞速发展,软件企业如何借助 AI 工具辅助编程,提升开发效率,成为业界关注的焦点。此前,浙江省软件行业协会携手阿里云成…

GitCode热门开源项目推荐:Spider网络爬虫框架

在数字化高速发展时代,数据已成为企业决策和个人研究的重要资源。网络爬虫作为一种强大的数据采集工具受到了广泛的关注和应用。在GitCode这一优秀的开源平台上,Spider网络爬虫框架凭借其简洁、高效和易用性,成为了众多开发者的首选。 一、系…

网络编程---Java飞机大战联机

解析服务器端代码 代码是放在app/lib下的src下的main/java,而与之前放在app/src/main下路径不同 Main函数 Main函数里只放着创建MyServer类的一行 public static void main(String args[]){new MyServer();} MyServer构造函数 1.获取本机IP地址 //获取本机IP地…

上网行为管理的作用是什么?有哪些上网行为管理软件?

上网行为管理在现代企业及家庭环境中扮演着至关重要的角色,其作用不仅限于提升网络安全性,还涉及保护企业信息安全、提高员工工作效率等多个方面。以下将详细阐述上网行为管理的作用,并介绍几款主流的上网行为管理软件。 一、上网行为管理的作…

CANoe连接Option Scope使用方法

系列文章目录 文章目录 系列文章目录前言一、前提条件二、CANoe配置三、PicoScope接线四、CANoe捕捉报文五、眼图功能前言 本文档主要介绍如何使用CANoe Option .Scope捕获CAN总线上的物理波形,并利用眼图进行分析。 一、前提条件 使用CANoe Option .Scope,需要具备以下条件…

Folx软件下载及安装教程

简介: Folx Pro是一款适合Mac的专业下载工具也是一款BT下载器,Folx中文版有一个支持Retina显示的现代界面,提供独特的系统排序、存储下载内容与预览下载文件。Folx中文官网提供Folx教程、激活码、下载。 安 装 包 获 取 地 址: …

c->c++(一):部分KeyWord

本文主要探讨c相关关键字的使用。 char char默认是unsigned/signed取决平台,wchar_t宽字符:用于Unicode编码(超过一个字节),用wcin和wcout输入输出,字符串为wstring char8_t(20),char16_t(11起),char32_t(11):指定占用字节数且是无符号,字符串类u8string,u16s…

传闻Google谷歌代投印度slots游戏广告效果备受关注

传闻Google谷歌代投印度slots游戏广告效果备受关注 在印度,随着互联网的普及和移动设备的广泛使用,网络游戏和在线娱乐产业逐渐兴起。其中,“slots游戏”作为一种受欢迎的在线博彩形式,吸引了大量玩家。对于广告主而言&#xff0…

这世上又多了一只爬虫(spiderflow)

让我们一起默念: 爬虫爬虫爬虫爬虫爬虫爬虫爬虫爬虫爬虫爬虫爬虫爬虫爬虫爬虫爬虫爬虫爬虫爬虫爬虫爬虫爬虫爬虫爬虫 接着大声喊出来: 一!只!爬!虫!呀!爬!呀!爬&#xf…