端侧AI创新挑战赛-Qwen-OpenVINO驱动的智能煤矿巡检认知数字孪生系统

赛道二:英特尔AI-PC

1.项目背景

传统煤矿巡检场景,依赖人工巡检,成本高、费时且容易造成人员伤亡。随着无人化巡检技术的日益发展,无人机、无人巡检车等设备陆续被投入到日常巡检中。然而,目前的无人化巡检系统存在以下痛点:

(1)管理端与执行端脱节。管理人员缺少直观查看巡检状态的有效手段。

(2)需要人工将巡检任务配置成结构化指令,产生大量时间成本、人员培训成本,也增加了系统复杂度。

(3)巡检故障诊断算法精确度低,泛化能力差,严重依赖于人工从数据中提取的特征,处理多模态数据能力弱。

(4)需要大规模算力支撑,管理平台依赖云端部署,任务发布者需要到固定地点采用固定设备进行任务发布,灵活性差。

基于以上原因,我们为煤矿无人化巡检打造数字孪生系统,为管理人员提供能方便、直观的巡检管理工具。我们摒弃了传统的任务发布与故障诊断模式,引入通义大模型,实现了自然语言到结构化任务的快速转换,以及巡检故障的智能化诊断。系统部署在Intel AI PC上,为管理人员提供了便携式巡检管理平台,为矿山巡检领域提供了一项新颖的端侧人工智能应用案例。

本项目的优势与创新如下:

(1)基于数字孪生的直观管理与实时交互,实现管理执行一体化闭环。

本项目创新地构建了高保真煤矿数字孪生场景,将物理世界的巡检设备(无人机、巡检车)及其运行状态实时映射至虚拟空间。管理人员可通过AI PC上的三维可视化界面,直观地实时监控巡检轨迹、设备状态,并能直接接收诊断结果与故障告警,打破了管理端与执行端的信息壁垒。

(2)基于Qwen大模型的自然语言任务交互,极大降低系统使用门槛。

本项目的一项关键创新在于利用Qwen大模型的强大自然语言理解与推理能力。任务发布者无需学习复杂的专业软件或编写结构化指令,可直接使用自然语言(如:“让无人机去检查一下A区皮带的运行状态”)描述巡检需求。Qwen大模型将自动理解用户意图,并将其精准转化为可供无人机、巡检车执行的结构化任务序列与巡检路线,极大简化了操作流程,消除了培训成本。

(3)基于大模型的端侧智能诊断,实现精准、可解释的故障分析。

区别于传统单一、固化的诊断算法,本项目利用Qwen大模型的信息融合与强大的因果推理能力,对巡检设备传回的温度、振动等多源数据进行一体化综合分析。它不仅能识别预定义的故障模式,更能基于其内化的丰富知识进行推理,发现潜在隐患、分析故障根因,并以自然语言形式生成可读的诊断报告与维修建议。

(4)基于英特尔® OpenVINO™工具套件的AI-PC端侧部署,实现高效能、高灵活性。

本项目最大的特色在于将完整的认知智能 pipeline(从自然语言理解到故障诊断)通过英特尔® OpenVINO™工具套件优化并部署在AI PC端侧。这不仅减少了对云端算力的依赖,降低了网络延迟与数据安全风险,更使得管理人员能够随时随地通过个人AI PC发布任务、接收结果,实现了真正的移动办公与即时响应,系统灵活性与实用性获得质的飞跃。

综上,我们利用LLM的自然语言理解能力,赋能数字孪生具有认知能力,从宏观上看,管理人员可以直接对数字孪生体发出自然语言,数字孪生体能够理解自然语言进行巡检任务发布,接受巡检数据后,能够利用LLM在内部标记出故障。

2.功能介绍

系统结构图如下:

系统使用流程:

(1)无人化巡检数字孪生体

在”数字孪生系统“窗口中,可以查看矿区的3D建模场景,通过W、A、S、D键可以进行视角的前、左、后、右移动。

(2)巡检任务文档上传与自动解析

用自然语言描述的巡检任务文档:

点击按钮上传巡检任务文件,Qwen解析文档提取文本,提供预览:

点击解析任务按钮,Qwen将自然语言描述的巡检任务解析为json格式的结构化任务:

解析后提供任务概览:

解析后得到的结构化任务:

(3)将结构化任务发送到数字孪生

点击任务发布按钮,发送任务到数字孪生

数字孪生系统根据结构化任务执行巡检任务:

(4)故障诊断

巡检任务完成后,巡检数据被反馈到Qwen:

Qwen根据巡检数据,进行设备故障诊断:

得到结构化的诊断结果后,将诊断结果发送到数字孪生体,数字孪生体在故障相应位置进行标记:

与此同时,自动生成巡检故障诊断报告,在主页面可以下载最新的报告:

故障报告:

3.技术实现

(1)运行平台

  • PC:HP 战66
  • CPU: Intel UItra7-155H
  • GPU: Intel Arc Graphics
  • NPU: intel AI Boost

(2)开发工具

  • 关键工具:
工具名称 版本号 作用
Python 3.10.18 编写模型部署、推理代码、构建管理平台
streamlit 1.28.2 搭建巡检任务发布平台
Qwen Qwen2.5-Coder-7B-Instruct-int4-ov 结构化巡检任务,实现故障诊断
OpenVINO 2025.3.0 部署Qwen模型
modelScope 1.30.0 魔搭模型库
PyMuPDF 1.26.4 处理 PDF 文档
websockets 15.0.1 数字孪生与Qwen间的数据传输
reportlab 4.4.4 生成故障诊断报告pdf文档
unity Editor 2022.3.62f2c1 构建数字孪生模型
WebGL 2.0 在浏览器渲染数字孪生模型
  • 环境配置

Qwen模型端:

pip install openvino-genai streamlit
pip install PyMuPDF
pip install websockets asyncio websocket-client

Qwen模型下载:

组织详情 · 魔搭社区

数字孪生端:

为Unity Editor添加WebGL模块

在Unity Editor中添加UnityWebsocket:

GitHub - psygames/UnityWebSocket: :whale: The Best Unity WebSocket Plugin for All Platforms.

按照教程添加并补充代码

(3)核心代码

  • 多源故障诊断融合
def fuse_diagnosis_results(self, basic: dict, llm: dict) -> dict:
    """融合规则引擎与大模型的诊断结果"""
    # 若大模型解析失败,降级使用规则诊断
    if "error" in llm:
        return {
            "equipment_status": basic["status"],
            "severity": max([anom["severity"] for anom in basic["anomalies"]], default=0),
            "repair_priority": "高" if basic["status"] == "故障" else "中",
            "diagnosis_details": "基于规则的初步诊断",
            "recommended_actions": ["检查传感器", "人工复核"]
        }
    
    # 成功时融合:用规则补充大模型可能缺失的严重度
    final = llm.copy()
    if "severity" not in final or final["severity"] == 0:
        final["severity"] = max([anom["severity"] for anom in basic["anomalies"]], default=0)
    return final

当大模型输出异常时,自动切换至可靠规则系统,保障系统鲁棒性。且优先使用大模型语义理解能力,同时用规则数据补全缺失数值

  • 无人机调度与故障显示
private GameObject GetNearestDrone(Vector3 targetPosition)
{
    // 从vehicleMap中筛选出未被使用的无人机
    var availableDrones = vehicleMap
        .Where(pair => pair.Key.Contains("无人机") && pair.Value != null)
        .Select(pair => pair.Value)
        .Where(drone => !usedDrones.Contains(drone)) // 关键:排除已占用的无人机
        .OrderBy(drone => Vector3.Distance(drone.transform.position, targetPosition))
        .ToList();

    if (availableDrones.Count == 0)
    {
        Debug.Log("没有可用的空闲无人机");
        return null;
    }

    GameObject nearestDrone = availableDrones.First();
    usedDrones.Add(nearestDrone); // 标记为已使用
    return nearestDrone;
}

// 当收到AI诊断结果时,显示红色报警图标
private void ShowWarningEffect(Vector3 position, float severity)
{
    if (warningIconPrefab == null) return;

    GameObject icon = Instantiate(warningIconPrefab, position + Vector3.up * 2, Quaternion.identity);
    icon.transform.localScale *= Mathf.Lerp(0.5f, 1.5f, severity); // 严重度越高图标越大

    // 颜色随严重度变化:绿 -> 黄 -> 红
    SpriteRenderer renderer = icon.GetComponent<SpriteRenderer>();
    if (renderer != null)
        renderer.color = severity > 0.7f ? Color.red : severity > 0.3f ? Color.yellow : Color.green;

    Destroy(icon, 100f); // 持续显示100秒
}

使用 LINQ 筛选并排序可用无人机,实现高效的资源分配。通过 usedDrones 集合避免多任务抢占同一设备。

4.完整项目地址

Github仓库:

ysy0804/Qwen-OpenVINO-Driven-Intelligent-Coal-Mine-Inspection-Cognitive-Digital-Twin-System at unity

!!!注意:服务端代码中不包含打包的unity模型资源,所占存储太大,无法推送至仓库