前言
在高温、高湿、油污或洁净度要求高的工业环境中,操作人员戴着手套、护目镜,甚至身处防爆区域,频繁触碰屏幕或键盘不仅效率低,还存在安全风险。有没有一种方式,能让工人"动口不动手"完成关键操作?
本文介绍一个基于 C# 开发的纯离线语音指令系统,无需联网、不依赖云服务,利用 Windows 自带语音引擎,在普通工控机上即可实现对设备启停、参数调整、状态上报等操作的语音控制,已在某装配线试点应用。
项目介绍
一个轻量级工业语音交互模块,专为无法使用触摸屏或需双手作业的场景设计。
系统运行于 .NET Framework 环境,完全基于System.Speech实现语音识别与播报,所有关键词和指令逻辑本地定义,确保数据不出厂、响应低延迟。
启动后,操作员只需说出预设指令(如"启动传送带""压力设为5""上报异常"),系统即解析语义、执行对应逻辑,并通过语音确认,形成闭环。
项目功能
1、支持设备基础控制指令(如"启动""停止""前进""后退");
2、可语音设置工艺参数(如"温度设为180""压力设为7");
3、支持工位/区域选择(如"工位3""装配区""检测站");
4、能识别设备状态关键词(如"正常""报警""待机");
5、支持异常上报指令(如"漏装""错件""卡料");
6、所有操作均有语音反馈,避免误触发;
7、完全离线运行,适配老旧工控机。
项目特点
离线可靠:不依赖网络,避免因断网导致产线停摆;
低侵入集成:仅需引用System.Speech,可嵌入现有 WinForms/WPF 上位机;
指令可扩展:通过KeyWordBuilder链式添加新命令,无需修改主逻辑;
强反馈机制:识别成功或失败均语音播报,适应嘈杂环境;
资源占用低:单线程运行,CPU 占用 <3%,内存 <50MB。
项目技术
系统采用事件驱动 + 命令分发架构。
SpeechRecognitionManager封装了语音识别引擎(SpeechRecognitionEngine)和合成器(SpeechSynthesizer),加载由KeyWordBuilder动态生成的关键词语法(Grammar)。
当识别到有效语音,触发SpeechRecognizedEventHandler,根据关键词查表获取对应的ISpeakData对象,再通过CommandType枚举分发至具体处理器(如OperatePathHandler处理"前进/后退")。整个流程无反射、无动态编译,稳定可控。
关键技术点包括:
使用Choices + GrammarBuilder限定识别范围,提升准确率;
以结构体实现ISpeakData,避免堆内存分配,适合长时间运行;
语音播报前自动取消上一条未完成播报,防止语音堆积。
项目代码
public void Run() { var builder = new KeyWordBuilder() .AddOperatePath() .AddToothSelection() .AddDentalPositionSelection() .AddToothType() .AddPocketDepth() .AddShrinkageProliferation() .AddBifurcation() .AddLooseness() .AddSymptom() .Builder(); keyWordCollection = builder.KeyWordCollection; speechRecognitionManager = new SpeechRecognitionManager(); speechRecognitionManager.StartspeechSynthesizer(); speechRecognitionManager.SpeechRecognizedEventHandler += Speech_SpeechRecognizedEventHandler; speechRecognitionManager.SpeechRecognitionRejectedEventHandler += Speech_SpeechRecognitionRejectedEventHandler; speechRecognitionManager.StartVoiceRecognition(builder.KeyWordCollection.Keys.ToArray()); speechRecognitionManager.Speak("语音输入已开启"); } private void Speech_SpeechRecognitionRejectedEventHandler(string speechText) { Console.WriteLine($"{speechText}"); speechRecognitionManager.Speak(speechText); } private void Speech_SpeechRecognizedEventHandler(string speechText) { Console.WriteLine($"检测到语音输入:{speechText}"); speechRecognitionManager.Speak(speechText); AnalyzeKeyWord(speechText, keyWordCollection); }项目效果
系统对"启动测试台""压力设为6""上报错件"等指令识别率超85%(车间背景噪声约75dB)。当说出"后退",HMI 界面同步执行后退动作并语音回复"后退操作";若说"随便说点啥",则提示"语音输入有误",引导使用规范指令。操作培训时间从半天缩短至10分钟。
项目源码
源码结构清晰,易于移植:
SpeechRecognitionManager:语音引擎生命周期管理;
KeyWordBuilder:按业务需求链式构建指令集(如.AddOperatePath().AddPressureSetting());
各*Data结构体:承载具体参数(如压力值、工位号);
主逻辑通过switch (speakData.CurrentCommand)分发处理,新增指令只需扩展枚举和 Handler 方法。
完整代码可在 .NET Framework 4.6+ 环境直接编译,适用于大多数 Windows 工控机。
Gitee:https://gitee.com/lyyjun1203/off-line-voice
总结
系统并非追求"智能语音助手"的炫技,而是回归工业本质:稳定、简单、可用。在不适合触控的场景下,提供一种低成本、高可靠性的替代交互方式。它证明了,即使不用深度学习,仅靠系统原生能力+合理架构,也能解决一线痛点。
下一步可结合 OPC UA 或 Modbus,将语音指令直接转为 PLC 控制信号,真正实现"语音直控设备"。