多模态大模型通过外接数据方案实现电力智能巡检(附代码)

该文章已生成可运行项目,

大模型相关目录

大模型,包括部署微调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. 多模态大模型通过外接数据方案实现电力智能巡检(设计方案)


需求介绍

传统电网智能巡检锚定摄像机点位,将一系列点位组成巡检业务,通过yolo对一系列点位上传来的系列图像进行目标检测,发现预训练所设定的label后计为异常,最后返回巡检报告,报告内容包括点位总体异常占比、异常类型分布、异常置信度等等。
易知,该模式下,巡检颗粒度止步异常类型,其只起到异常检测的作用,对更详细的异常处理方案、该异常点位负责人、该异常点位相关信息等等信息未能更好利用。【事实上该问题我已在https://blog.csdn.net/qq_43128256/article/details/137204652一文中提出了解决方案】
此外,该模式下,其异常评估标准单一,识别模式较弱。例如,对于工装检查,传统yolo模式检测下,往往简单地将长袖归为正常,将短袖、卷袖一律视为不正常,这与实际判别逻辑存在一定距离。这是由于yolo小模型目标检测上能力的局限带来的。

解决方案

多模态大模型的相关能力和应用开发可参考我的系列文章:

https://blog.csdn.net/qq_43128256/article/details/138163078
https://blog.csdn.net/qq_43128256/article/details/138337768
https://blog.csdn.net/qq_43128256/article/details/138574623

本文想说的是,多模态大模型完全具备很强的图像理解能力,且完全可通过agent组多步利用其语义理解和逻辑推理能力,结合外接信息,对图像进行综合分析,实现 更高颗粒度下的异常巡检,以更贴合实际逻辑的标准进行识别

简而言之多模态大模型通过外接数据方案实现电力智能巡检,是 结合多源信息的多模态大模型应用开发。设计思路如下,在巡检过程中,不单单只应用到图像数据。
在这里插入图片描述
巡检结果,具体如下图所示:
在这里插入图片描述
多模态大模型

  1. 可利用文本对齐能力,对图像进行描述
  2. 可通过检测要求(利用prompt进行规范),对图片重点部分进行检测
  3. 可结合外部信息(脚本加载,嵌入query),与检测结果综合分析
  4. 最终给出隐患描述、隐患级别、整改措施等结论

其实现可参考往期代码,利用dify开发比较简单。

多模态大模型在线试用

https://huggingface.co/spaces/HuggingFaceM4/idefics2_playground

实例代码

import pandas as pd
import numpy as np
from datetime import datetime
import sqlite3
import openai
from openai import OpenAI

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

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

def get_dcandlc(input_data:str):
    camera_node = input_data
    # 连接到SQLite数据库(如果不存在,它将被创建)  
    conn = sqlite3.connect('db.sqlite3')  
    # 创建一个Cursor对象  
    cursor = conn.cursor()  
    # 查询并读取数据  
    cursor.execute("SELECT * FROM camera_node_table WHERE camera_code = {input_data_1}".format(input_data_1 = '"'+camera_node+'"'))  
    rows = cursor.fetchall()  
    # 关闭数据库连接  
    conn.close()
    # 打印查询结果 
    if len(rows) == 1:
        return rows[0][1],rows[0][2]
    else:
        print('Error : Data Select Error!')
        return None,None
    
def get_device_info(input_data:str):
    device_node = input_data
    # 连接到SQLite数据库(如果不存在,它将被创建)  
    conn = sqlite3.connect('db.sqlite3')  
    # 创建一个Cursor对象  
    cursor = conn.cursor()  
    # 查询并读取数据  
    cursor.execute("SELECT * FROM device_info_table WHERE device_code = {input_data_1}".format(input_data_1 = '"'+device_node+'"'))  
    rows = cursor.fetchall()  
    # 关闭数据库连接  
    conn.close()
    # 打印查询结果 
    if len(rows) == 1:
        if rows[0][5] == 1:
            return rows[0][0],rows[0][1],rows[0][3],rows[0][4]
        else:
            print('Error : Device Can Not Use!')
            return None,None,None,None
    else:
        print('Error : Data Select Error!')
        return None,None,None,None
    
def get_worker_info(input_data:str):
    worker_name = input_data
    # 连接到SQLite数据库(如果不存在,它将被创建)  
    conn = sqlite3.connect('db.sqlite3')  
    # 创建一个Cursor对象  
    cursor = conn.cursor()  
    # 查询并读取数据  
    cursor.execute("SELECT * FROM worker_info_table WHERE name = {input_data_1}".format(input_data_1 = '"'+worker_name+'"'))  
    rows = cursor.fetchall()  
    # 关闭数据库连接  
    conn.close()
    # 打印查询结果 
    if len(rows) == 1:
        return rows[0][1]
    else:
        print('Error : Data Select Error!')
        return None

def get_time_distance(date_time_str1,date_time_str2):
    # 将字符串转换为datetime对象  
    dt1 = datetime.strptime(date_time_str1, '%Y-%m-%d %H:%M:%S')  
    dt2 = datetime.strptime(date_time_str2, '%Y-%m-%d %H:%M:%S')  

    # 计算时间差  
    time_difference = dt1 - dt2
    # 如果你想要更详细的时间差(包括天、小时、分钟和秒)  
    return f"时间差为:{time_difference.days} 天, {time_difference.seconds // 3600} 小时, {time_difference.seconds // 60 % 60} 分钟, {time_difference.seconds % 60} 秒"

sbbz = {
    '变压器':'检测变电器设备是否存在渗油、漏油情况',
    '呼吸器':'检查呼吸器是否存在缺失、损坏情况;检查硅胶是否存在变色情况;检查油封是否存在油标无显示、油位超过上/下限、污浊情况'
}

sbms = {
    '变压器':'图像中的白色主题设备为变电器,需检查机器本身及其周边的渗漏油情况',
    '呼吸器':'图像中圆柱状物体为呼吸器,共分为上下两部分上部分。上部分为玻璃柱形容器,内含蓝色颗粒状硅胶,硅胶不为蓝色即视为变色;下部分为油封,标有刻度,装有油类物质。'
}


# pictures_path = r'C:\Users\12258\Desktop\图像理解_demo'
camera_node_ls = {'57a0f5b9':"https://01-platform-public.oss-cn-beijing.aliyuncs.com/playground/image/25059aba-83f2-4005-b919-7a65e7ecb99e-57a0f5b9.jpg",
                  '83c6b7c1':"https://01-platform-public.oss-cn-beijing.aliyuncs.com/playground/image/a471104a-4f78-4654-9877-2928e9c7eca2-83c6b7c1.jpg"}
# test = pictures_path+'\\'+ camera_node_ls[0] + '.jpg'

camera_node_list = list(camera_node_ls.keys())
print('本次巡检任务点位',camera_node_list)
for camera_node in camera_node_list:
    print('当前点位:',camera_node)
    
    result = {
        '巡检目标' : '',
        '巡检地点' : '',
        '巡检时间' : '',
        '设备负责人' : '',
        '负责人联系方式' : '',
        '据设备上次维护时间' : '',
        '检测结果' : ''
    }
    mid_dc,mid_lc = get_dcandlc(camera_node)
    mid_dn,mid_dt,mid_person,mid_time = get_device_info(mid_dc)
    print(mid_dc,mid_lc,mid_dn,mid_dt,mid_person,mid_time)
    
    # 获取当前时间  
    now_formatted_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S')

    # 获取时间差
    time_distance = get_time_distance(now_formatted_time,mid_time)

    # 获取负责人电话
    mid_tele = get_worker_info(mid_person)
    
    biaozhun = sbbz[mid_dt]
    miaoshu = sbms[mid_dt]
    prompt = '''请对图像进行设备情况检查,描述该设备存在隐患。
    该设备类型为:【{input_0}】。注意,{input_1}
    具体检测依据:【{input_2}】
    '''.format(input_0 = mid_dt,input_1 = miaoshu,input_2 = biaozhun)


    completion = client.chat.completions.create(
        model="yi-vl-plus",
        messages= [
            {
                "role": "user",
                "content": [
                    {
                        "type": "image_url",
                        "image_url": {
                            "url": camera_node_ls[camera_node]
                        }
                    },
                    {
                        "type": "text",
                        "text": prompt
                    }
                ]
            }
        ]
    )
    
    conclusion = str(completion.choices[0].message.content)
    
    try:
        result['巡检目标'] = mid_dn
        result['巡检地点'] = mid_lc
        result['巡检时间'] = now_formatted_time
        result['设备负责人'] = mid_person
        result['负责人联系方式'] = mid_tele
        result['据设备上次维护时间'] = time_distance
        result['检测结果'] = conclusion
        
        print(result)
    except:
        print('Error:Device Detect Error!')

输入图像

在这里插入图片描述

在这里插入图片描述

数据库信息

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

输出

本次巡检任务点位 ['57a0f5b9', '83c6b7c1']
当前点位: 57a0f5b9
yt_fs_bd_1 山东省烟台市福山区国网福山供电公司变电站二区 变压器SFPZ9-120000/110 变压器 张测 2024-04-11 14:47:12
{'巡检目标': '变压器SFPZ9-120000/110', '巡检地点': '山东省烟台市福山区国网福山供电公司变电站二区', '巡检时间': '2024-05-13 17:16:08', '设备负责人': '张测', '负责人联系方式': 15075461234, '据设备上次维护时间': '时间差为:32 天, 2 小时, 28 分钟, 56 秒', '检测结果': '经观察,图片中的变压器外壳上存在明显的油渍和渗透迹象,这表明变压器存在渗漏油的问题。油渍主要集中在变压器的下部区域,特别是靠近底部接线盒的位置。此外,变压器周围的油迹也表明油液可能已经渗入到变压器内部,这可能会导致绝缘性能下降,甚至引起火灾等安全隐患。根据变压器运行维护规程,变压器渗漏油是必须引起高度重视和立即处理的问题。'}
当前点位: 83c6b7c1
yt_fs_bd_2 山东省烟台市福山区国网福山供电公司变电站二区 呼吸器0.2KG 呼吸器 张测 2024-04-11 14:47:12
{'巡检目标': '呼吸器0.2KG', '巡检地点': '山东省烟台市福山区国网福山供电公司变电站二区', '巡检时间': '2024-05-13 17:16:15', '设备负责人': '张测', '负责人联系方式': 15075461234, '据设备上次维护时间': '时间差为:32 天, 2 小时, 29 分钟, 3 秒', '检测结果': '根据描述和图片,该呼吸器存在以下几个隐患:\n\n1. 硅胶变色情况:硅胶在正常工作状态应保持蓝色,如图中显示硅胶颜色已经变为棕色,这表明硅胶可能已经失效或污染。这可能导致呼吸器过滤性能下降,影响呼吸器正常的使用。\n\n2. 油封油位情况:油封上标有油位刻度,但图像中无法清晰看到油位是否符合要求。检查油位时,需要确认油位是否位于刻度的上限和下限之间。\n\n3. 油封的清洁程度:油封是否清洁也是影响呼吸器性能的重要因素。油封如果过于污浊,可能会影响过滤效果。\n\n4. 呼吸器整体是否完整:在检查中,还需要确认呼吸器主体结构是否完整,是否有破损或丢失部件。\n\n综上所述,根据检查标准,该呼吸器存在硅胶变色和油封可能存在的油位不合适、油封污浊等问题,需要进行维护或更换部件以保证其正常使用。'}
本文章已经生成可运行项目
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

德讯软件(欢迎合作)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值