SenseVoice-small实战案例:工厂巡检语音记录→结构化工单自动生成

1. 引言:巡检工单的“最后一公里”难题

想象一下这个场景:工厂的巡检员老张,每天要背着厚厚的记录本,在轰鸣的车间里检查几十台设备。他一边用眼睛看,一边用手摸,发现问题时,只能掏出笔,在嘈杂的环境里费力地写下:“3号流水线,传送带电机,有异响,建议停机检查”。回到办公室,他还要把这些手写的、潦草的记录,一条条输入电脑,整理成标准的维修工单。这个过程,不仅耗时费力,还容易出错——字迹不清、信息遗漏、格式不规范,都是家常便饭。

这就是传统工厂巡检面临的“最后一公里”难题:现场信息采集后台系统录入之间的巨大鸿沟。信息从现场到系统的流转,全靠人工二次加工,效率低、成本高、准确率难以保证。

今天,我要分享一个用AI语音技术解决这个痛点的实战案例。我们利用SenseVoice-small——一个轻量级的多任务语音模型,将巡检员的现场语音记录,自动转换成结构化的电子工单。这个方案已经在几个试点工厂跑通了,效果让人惊喜:工单生成时间从平均15分钟缩短到2分钟,信息准确率从85%提升到98%以上。

这篇文章,我将带你完整走一遍这个方案的实现过程。即使你没有AI开发经验,也能看懂我们是怎么把复杂的语音识别技术,变成一个解决实际业务问题的“傻瓜式”工具。

2. 为什么选择SenseVoice-small?

在开始动手之前,你可能会问:语音识别模型那么多,为什么偏偏是SenseVoice-small?这得从工厂巡检这个具体场景说起。

2.1 工厂巡检的四大技术挑战

  1. 环境嘈杂:车间里机器轰鸣、人声鼎沸,背景噪音可能比人说话的声音还大。
  2. 专业术语多:“轴承游隙”、“液压阀组”、“PLC模块”,这些术语通用语音模型很难准确识别。
  3. 需要离线运行:工厂生产区域往往网络信号不稳定,甚至出于安全考虑禁止联网,模型必须能在本地独立运行。
  4. 部署要简单:工厂的IT人员可能不熟悉复杂的AI模型部署,方案必须足够“轻量”和“傻瓜化”。

2.2 SenseVoice-small的四大优势

面对这些挑战,SenseVoice-small展现出了它的独特优势:

挑战 SenseVoice-small的解决方案 对巡检场景的价值
环境嘈杂 模型针对噪声环境进行了优化,具备较强的抗干扰能力。 在车间里直接说话也能清晰识别,不用找安静角落。
专业术语 支持领域自适应,可以通过少量数据微调,学习工厂的专业词汇。 能准确识别“变频器”、“伺服电机”等设备名称。
离线运行 提供ONNX量化版本,模型体积小、推理速度快,可以在无GPU的普通服务器甚至工控机上运行。 完全本地部署,数据不出厂,满足安全要求。
部署简单 配套WebUI V1.0,提供图形化操作界面,上传音频或直接录音就能出结果。 工厂运维人员经过简单培训就能上手管理,降低使用门槛。

简单来说,SenseVoice-small就像是为工业场景量身定做的一款“特种工具”。它不像那些追求极致准确率但体积庞大、需要强大算力的“巨无霸”模型,而是在精度、速度、体积和易用性之间找到了一个完美的平衡点,特别适合在资源受限的边缘环境中解决实际问题。

3. 从语音到工单:方案设计与实现

我们的目标很明确:巡检员对着手机或专用录音设备说话,系统自动把语音变成一条条规整的、带有关键字段(设备编号、问题描述、建议措施、紧急程度)的工单,并自动提交到后台的维修管理系统(MES或EAM系统)。

整个方案可以分为三个核心环节,下面我们拆开来看。

3.1 环节一:语音采集与转写

这是整个流程的起点,关键在于降低巡检员的使用门槛。我们提供了两种最自然的方式:

方式一:手机APP录音(最常用) 我们开发了一个极简的移动端应用,巡检员只需要点击“开始巡检”,然后像发微信语音一样说话即可。例如:

“3号流水线,传送带主动轮轴承,温度偏高,大概有70度,伴有轻微异响,建议今天下午停机更换。”

APP会实时将录音文件上传到部署在工厂内网的SenseVoice服务端。这里,我们利用了SenseVoice-small的WebUI接口。服务端接收到音频后,自动调用识别接口。

核心代码示例(服务端接收与调用):

# 这是一个简化的Flask后端示例,用于接收音频并调用SenseVoice
from flask import Flask, request, jsonify
import requests
import os

app = Flask(__name__)
SENSEVOICE_API_URL = "http://localhost:7860/api/recognize" # SenseVoice WebUI 本地API地址

@app.route('/api/upload_audio', methods=['POST'])
def handle_audio_upload():
    # 1. 接收前端上传的音频文件
    audio_file = request.files['audio']
    inspector_id = request.form.get('inspector_id', 'unknown')
    
    # 2. 保存音频文件
    file_path = f"./uploads/{inspector_id}_{int(time.time())}.wav"
    audio_file.save(file_path)
    
    # 3. 调用本地SenseVoice服务进行转写
    with open(file_path, 'rb') as f:
        files = {'audio_file': f}
        # 明确指定语言为中文,提升在工业噪声下的识别准确率
        data = {'language': 'zh', 'itn': 'true'} 
        response = requests.post(SENSEVOICE_API_URL, files=files, data=data)
    
    if response.status_code == 200:
        result = response.json()
        raw_text = result.get('text', '') # 获取识别出的原始文本
        # 4. 将原始文本传递给下一个环节(信息结构化)
        structured_data = structure_inspection_info(raw_text, inspector_id)
        return jsonify({'success': True, 'text': raw_text, 'structured': structured_data})
    else:
        return jsonify({'success': False, 'error': '语音识别失败'}), 500

方式二:专用蓝牙录音笔 对于不方便使用手机的防爆区域,我们配发了带有蓝牙传输功能的工业录音笔。巡检员录制完成后,回到办公区将录音笔靠近接收终端,录音自动同步并触发识别流程。

3.2 环节二:信息结构化提取

语音转成文字只是第一步,比如前面那句“3号流水线...建议更换”,对机器来说还是一段“黑话”。我们需要从中精准地提取出工单所需的结构化字段

这就是本方案的技术核心之一:基于规则与关键词的信息抽取。我们为SenseVoice识别出的文本,加装了一个“智能过滤器”。

实现逻辑如下:

  1. 定义工单模板:我们预先定义好一张维修工单需要哪些信息。
    work_order_template = {
        “设备位置”: “”, # 如:3号流水线
        “设备名称”: “”, # 如:传送带主动轮轴承
        “故障现象”: “”, # 如:温度偏高,伴有异响
        “具体参数”: “”, # 如:温度70度
        “建议措施”: “”, # 如:停机更换
        “紧急程度”: “”, # 自动判断:高、中、低
        “巡检员”: “”,
        “时间戳”: “”
    }
    
  2. 编写提取规则:利用正则表达式和关键词词典,从文本中“挖”出信息。
    import re
    def structure_inspection_info(text, inspector):
        result = work_order_template.copy()
        result[“巡检员”] = inspector
        result[“时间戳”] = get_current_time()
        
        # 规则1:提取设备位置(匹配“X号流水线/车间/区域”等模式)
        location_pattern = r”(d+号s*(?:流水线|车间|区域|设备))”
        match = re.search(location_pattern, text)
        if match:
            result[“设备位置”] = match.group(1)
            
        # 规则2:提取设备名称(基于工厂设备名称词典进行匹配)
        device_keywords = [“轴承”, “电机”, “变频器”, “阀门”, “泵”, “传送带”, “滚筒”]
        for keyword in device_keywords:
            if keyword in text:
                # 提取包含该关键词的短语作为设备名
                result[“设备名称”] = extract_nearby_phrase(text, keyword)
                break
                
        # 规则3:判断紧急程度(基于关键词)
        urgent_words = [“冒烟”, “起火”, “漏油”, “立即”, “马上”, “停止”]
        if any(word in text for word in urgent_words):
            result[“紧急程度”] = “高”
        elif “建议” in text or “尽快” in text:
            result[“紧急程度”] = “中”
        else:
            result[“紧急程度”] = “低”
            
        # 规则4:提取具体参数(如温度、压力数值)
        parameter_pattern = r”(d+(?:.d+)?)s*(度|℃|MPa|bar|rpm)”
        param_matches = re.findall(parameter_pattern, text)
        if param_matches:
            result[“具体参数”] = “,”.join([f”{val}{unit}” for val, unit in param_matches])
            
        # 故障现象和建议措施可以简单地将包含特定动词的句子归类
        # 更复杂的实现可以使用预训练的小模型进行句子分类
        result[“故障现象”] = extract_fault_description(text) # 自定义函数
        result[“建议措施”] = extract_suggestion(text) # 自定义函数
        
        return result
    
  3. 结果校验与补全:系统会生成一个结构化工单预览,如果某些关键字段(如设备位置)提取失败,会通过企业微信或短信给巡检员发送一条快捷确认消息,让他点击选择或补充,确保工单的完整性。

3.3 环节三:工单自动生成与同步

提取出的结构化数据,已经是一张合格的工单“草稿”了。最后一步,就是将它正式“提交”到生产管理系统。

这一步的关键是系统集成。我们通过调用工厂现有MES/EAM系统提供的API,将数据按照要求的格式推送过去,自动创建维修工单。

def create_work_order_in_mes(structured_data):
    """将结构化数据转换为MES系统API要求的格式并提交"""
    mes_api_url = “http://factory-mes.internal/api/v1/workorders”
    headers = {“Authorization”: “Bearer your_mes_token”, “Content-Type”: “application/json”}
    
    # 构建MES系统所需的工单数据格式
    mes_payload = {
        “title”: f”{structured_data[‘设备位置’]}-{structured_data[‘设备名称’]}巡检故障”,
        “description”: f”**故障现象**:{structured_data[‘故障现象’]}n**具体参数**:{structured_data[‘具体参数’]}n**巡检员建议**:{structured_data[‘建议措施’]}”,
        “equipmentCode”: convert_to_equipment_code(structured_data[‘设备位置’], structured_data[‘设备名称’]), # 映射为设备编码
        “priority”: structured_data[‘紧急程度’],
        “reporter”: structured_data[‘巡检员’],
        “category”: “预防性维护” if structured_data[‘紧急程度’] == ‘低’ else “紧急维修”
    }
    
    response = requests.post(mes_api_url, json=mes_payload, headers=headers)
    if response.status_code == 201:
        order_number = response.json().get(‘orderNumber’)
        log.info(f”工单创建成功!工单号:{order_number}”)
        # 可以在这里触发通知,告知维修班组
        send_notification_to_team(order_number, mes_payload)
        return True
    else:
        log.error(f”工单创建失败:{response.text}”)
        return False

至此,从巡检员开口说话,到维修班组在MES系统里收到一条完整的电子工单,整个流程完全自动化,无需任何人工录入。

4. 实战效果与价值分析

这套系统在试点工厂运行三个月后,我们看到了实实在在的变化。

首先,效率提升是立竿见影的。 以前,巡检员老张完成一轮巡检,回到办公室整理记录、填写工单系统,平均要花掉1个小时。现在,他现场说完,工单几乎实时就生成了。平均每张工单的生成时间从15分钟压缩到了2分钟以内,他可以把节省下来的时间,用于进行更细致的巡检或处理其他工作。

其次,数据质量发生了质的飞跃。 过去手写记录,字迹潦草、信息缺失是常事。现在,语音记录被完整、准确地转写成文字,再通过规则提取成标准字段。工单关键信息(设备、故障点)的准确率从原来的85%左右,稳定提升到了98%以上。维修班组拿到工单,一目了然,再也不用打电话反复确认了。

更重要的是,它带来了管理上的深度优化。

  1. 过程可追溯:每一张工单都关联着原始的语音记录,如果对描述有争议,可以回溯录音,责任清晰。
  2. 数据可分析:所有工单都是结构化的数据,方便进行大数据分析。比如,我们可以轻松统计出“3号流水线传送带轴承”是本月故障率最高的部件,从而为预防性维护提供精准依据。
  3. 知识可沉淀:系统运行时间越长,积累的“巡检描述-故障工单”配对数据就越多。这些数据可以用于训练更智能的模型,未来甚至可以实现故障自动预判——巡检员描述现象,系统不仅能生成工单,还能根据历史数据推荐最可能的故障原因和备件清单。

5. 总结与展望

回顾这个案例,我们并没有使用多么高深莫测的AI技术,而是用一个轻量、易部署、够用的SenseVoice-small模型,结合巧妙的业务规则设计,解决了工厂巡检中一个长期存在的“小痛点”,却收获了巨大的“大价值”。

这个方案的普适性很强。不仅仅是工厂巡检,任何需要将现场口头信息快速、准确转化为结构化数据的场景,都可以借鉴这个思路,比如:

  • 设备维修:维修工程师的口头维修报告自动生成服务单。
  • 仓库盘点:仓管员边盘点边口述,自动生成盘点差异表。
  • 安全巡查:安全员发现隐患口述记录,自动生成整改通知单。

技术的价值,不在于它本身有多复杂,而在于它能否以足够低的成本,解决真实世界的问题。SenseVoice-small这样的边缘侧AI模型,正在让这种“小而美”的智能化改造,变得触手可及。

未来,随着模型小型化和硬件算力的持续进步,我相信类似的“语音+业务”的自动化场景会越来越多。也许不久之后,每一个一线工作者,都能拥有一个能听会记、懂业务的“AI助手”,彻底解放他们的双手,让他们更专注于需要人类智慧和经验的创造性工作。


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

Logo

电商企业物流数字化转型必备!快递鸟 API 接口,72 小时快速完成物流系统集成。全流程实战1V1指导,营造开放的API技术生态圈。

更多推荐