亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

Windows 10 IoT Core:语音控制机器人

故事

在计算机的早期,与计算机的交互是通过打孔卡、轨迹球、光枪、键盘甚至通过触摸屏进行的。所有这些设备都需要某种物理接触才能操作。

随着时间的推移,新技术不断改进。无线输入设备变得流行,因为它们提供干净整洁的桌面。随着当前软件和硬件的增强,一种新的输入方式成为可能:视觉和语音输入。

本文将帮助您学习 Windows 10 IoT Core 中提供的语音识别技术。在本主题的结尾,我们将使用 Windows 10 IoT Core 和运行语音识别应用程序的 Raspberry Pi 2 创建一个机器人。该语音识别应用程序使机器人能够根据用户通过语音进行的交互来执行各种运动任务(例如:向前、转弯、停止等)。

Windows 10 IoT 核心版的新用户?还是初学者?请先参考此链接。

本文更新于2016年3月30日

什么是语音识别?

在单行中,语音识别意味着将口语翻译成可能的等效文本。语音识别可分为两个主要部分:信号处理和语音解码器。我们不必担心它的复杂性,因为微软已经为此开发了解决方案。我们只需要使用他们的语音库。

第一步

语音识别入门

让我们从基本思想开始:

  • 创建语音识别语法(SRGS 语法)
  • 初始化语音识别器对象并加载语法(SpeechRecognizer)
  • 注册语音识别器事件并创建处理程序

创建语音识别语法

在开始语音识别之前,我们需要了解如何编写通用 Windows 应用程序来理解我们的语言或命令。为此,我们需要创建语音识别语法。可以使用通用 Windows 应用程序的 SRGS 语法创建语音识别语法:

  • 使用 XML 创建符合语音识别语法规范 (SRGS) 1.0 版(W3C 语音识别语法标准)的语法文档。

注意:.Net Framework 中还有其他可能的方法,但在撰写本文时,UWP 不支持这些方法。分别是:

  • 使用 System.Speech.Recognition 命名空间中的 GrammarBuilder 和 Choices 类的成员以编程方式创作语法。
  • 使用 System.Speech.Recognition.SrgsGrammar 命名空间中的类的构造函数和方法,以编程方式创建符合 SRGS 的语法。

我们将从 XML 语法开始。在我们开始创建语法文件之前,我们需要设想并定义用户将如何与我们的应用程序交互。在该项目的上下文中,用户将命令机器人向任一方向移动、停止并命令进行/脱离障碍检测。我们可以制作如下语音词汇表:

  • 继续前进
  • 反向移动
  • 右转
  • 左转
  • 停止
  • 参与障碍物检测
  • 解除障碍物检测

对于这个词汇,我们需要设计XML Grammar。我们只需要遵循SRGS v1的一些基本规则即可。

SRGS 语法

要创建 SRGS 语法,必须遵循一些基本规则:

  • 根元素必须是语法
  • 必须存在属性语法的版本、语言和 XML 命名空间。
  • 语法必须至少包含一个规则元素。 (规则元素包含用户可以说的单词或短语)。
  • 每个规则元素必须具有唯一的 id 属性。

我们已经看到了 SRGS 语法所需的基本结构。现在我们需要为它创建词汇表。词汇是对机器人产生有意义的指令的一组词。

例如:“向前移动”或“向后移动”,这里的“移动”在“向前”和“向后”之前。因此,在规则中,它必须在 Forward 和 Reverse 之前出现。所以我们可以将 Forward 和 Reverse 提取到另一个规则中。见下图:

什么是根规则 ?它是语音识别器加载语法时要加载的起始节点或根节点。它是可选的。您可以忽略它,但您需要以编程方式指定根节点。

什么是根属性 在语法标签中? Root 属性定义了语音识别器加载语法时的启动规则。如果未指定为属性,则需要以编程方式指定。

本文适用于初学者,因此不可能涵盖复杂的 SRGS 标签和属性。您可以在 MSDN 和 W3C 上详细了解 SRGS 语法。

我们刚刚为我们的机器人创建了 SRGS 语法。现在,我们将看到如何为通用 Windows 应用程序实现语音识别器。

初始化语音识别器并加载语法

SpeechRecognizer 课程在 Windows.Media.SpeechRecognition 中可用 命名空间。将命名空间导入到您的代码文件中。在初始化之前,我们需要在我们的项目中创建 XML 语法文件。上一节我们已经为语法文件创建了内容。

注意:如果‘CompilationResult’失败,可能是麦克风接口有问题。验证与麦克风的连接。检查是否在默认的 IoT Core 应用中检测到。

注册语音识别器事件并创建处理程序

在最后一步,我们已经启动了语音识别器,准备听语音并解析它。成功解析后,“ContinuousRecognitionSession”将引发一个名为“ResultGenerated”的事件。此事件提供解析结果作为事件参数,可以处理以执行基于口语的任务。我们还可以通过事件“StateChanged”监听识别器的状态,让说话者知道识别器正在监听。

这里,‘MyRecognizerStateChanged’是当‘MyRecognizer’的状态从一个变为另一个时会触发的函数。它将提供有价值的状态信息,即“MyRecognizer”何时开始收听以及何时停止收听。停止侦听后,“MyRecognizer”根据提供的语法解析语音,并在成功时引发事件“ResultGenerated”。

注意:您不需要自己创建函数“MyRecognizer_StateChanged”和“MyRecognizer_ResultGenerated”。相反,Visual Studio 提供了一种为您自动创建它们的方法。您可以通过 Visual Studio 在事件的 +=右侧使用 两次自动创建它们。

您还可以在初始化 SpeechRecognizer 对象后立即注册事件处理程序。

我们快完成了!

步骤 2

如何驱动解析的语音?

在上一节中,我们为通用 Windows 应用程序配置了自定义语法和语音识别器。当语音识别器成功解析语音时,它会引发事件“ResultGenerated”。此事件包含解析结果作为参数。让我们看看如何根据口语检测正在说的内容以及要执行的操作:

在这里,“args”参数在成功解析语音时由 SpeechRecognizer 传递给事件处理程序。 ‘args.Result.Text’ 是字符串类型。它包含作为文本的口语。您可以使用条件块执行语音特定任务。

展示完整的代码来驱动机器人是不可行的。我提供了一个名为“MotorDriver”的静态类,其中包含驱动机器人的各种功能。此类管理 Gpio 引脚以驱动机器人。项目最后给出了完整的源代码。如果您不熟悉 Raspberry Pi 2 和 Windows 10 IoT,请参阅此链接以开始使用。

步骤 3

更新设备功能

在将通用 Windows 应用程序部署到 Raspberry Pi 2 之前,我们需要为应用程序设置适当的设备功能以使用特定的硬件访问权限运行。在此应用程序的上下文中,我们需要使用外部设备“麦克风”。要在包清单中启用“麦克风”:


全部在软件方面完成。现在是连接硬件的时候了。文章末尾提供了源代码。

实现语音识别的主要部分已经完成,在这里解释每一行代码是不可行的。相反,源代码有很好的注释。询问任何问题。

第 4 步

将应用程序部署和注册为启动应用程序

机器人需要在开机时识别语音命令。为此,您需要将您的应用程序注册为启动应用程序,以便每次 Raspberry Pi 2 启动时,它都会在启动后立即启动您的应用程序。为此,您首先需要将您的应用程序部署到 Raspberry Pi 2,然后将其注册为启动应用程序。

在部署之前,最好更改应用程序的包系列名称:


更改包系列名称后,将应用程序部署到远程设备(您的 Raspberry Pi 2)。




如果您不知道将应用程序部署到 Raspberry Pi 2 的正确方法,请参阅此链接。

应用成功部署后,您需要将应用注册为启动应用。您可以使用两种方法将您的应用注册为启动:使用 PowerShell 或 Windows IoT Core 的 Web 管理门户。我会用第二种方法。打开网络浏览器并关注:



注册为启动应用时遇到问题?请参阅这篇文章。

成功将您的应用注册为启动应用后,重启Raspberry Pi 2,看看您的应用是否在启动后启动。如果没有,请验证从部署到注册的所有步骤。随着应用程序的成功启动,现在是时候进行连接了。

示意图

硬件部分由机器人底盘(带直流电机)、Raspberry Pi 2(带 Windows 10 IoT Core)、电池、距离传感器等组成。电源来自于电机电池(如左侧“电池:9-12VDC”图像所示)并直接连接到 H 桥电机驱动器。 Raspberry Pi 2 需要单独的电源。 USB PowerBank 适合为树莓派 2 提供足够的电力。在没有 USB PowerBank 或过滤的 5VDC 电源的情况下,需要一个单独的稳压电路(使用 7805)来为树莓派和超声波距离传感器供电。

如果您没有 USB PowerBank 或 5VDC 过滤电源,您可以使用电机电池(如上图左侧所示 – 橙色,电池:9-12VDC)为 Raspberry Pi 2 供电。配置原理图提供于文章结尾(名为“原理图:电机电池”)。

为什么要使用带有超声波距离传感器的电阻器?

超声波距离传感器在 5V 电压下工作,而 Raspberry Pi 2 在 3.3V 电压下工作。我们不能将传感器的 Echo 引脚直接连接到 Raspberry Pi 的引脚,因为它具有 5V 输出。它会烧毁树莓派。因此,在发送到 Raspberry Pi 之前,我们需要将传感器的输出电压降至 3.3V。传感器的电压可以通过使用分压器电路来降低。因此,Vout 可以计算为:

R1 =1000 ohmR2 =2000 ohmVin =5V(传感器的回声引脚)Vout =5 * (2000 / (1000 + 2000)) =3.3V(到树莓派2)

警告:不要将超声波距离传感器的 Echo 引脚直接连接到 Raspberry Pi 的 GPIO 引脚。它可能会烧坏 Raspberry Pi。改用逻辑电平转换器或适当的分压器。

最后组装




已知问题

语音识别无法正常工作(内部版本 10586)

如果您安装了 Windows IoT build 10586,语音识别和合成将不适用于任何 IoT 设备(RPi2、MinnowBoard MAX 和 Dragonboard 410c)。

解决方法: 目前,没有有效的解决方案可用。我希望 Windows IoT 团队将在下一个版本中解决这个错误。不过,如果你想操纵语音识别,回到旧版本 10240,它会像魅力一样工作。

麦克风问题

语音识别肯定需要高质量的麦克风。低质量的麦克风在近处仍然可以使用,但是当麦克风远离1-2米时,将无法准确识别。

解决方法: (选项 1):购买高质量的麦克风。有时可能会发生即使使用高质量的麦克风,它也无法正确识别。在这种情况下,需要响亮的声音。 (选项 2):无线麦克风会很棒。您甚至可以远距离控制机器人,而无需担心外部噪音。您可以通过参考此视频购买其中一个或制作自己的视频。

识别器处理延迟

很明显,识别器需要一些时间来处理语音。这不是问题或问题,但它可能会导致实时系统出现问题。

假设,我们有一个高速机器人兼汽车,它遵循我们的语音命令。让我们假设,汽车将在 600-2000 毫秒后(由于处理延迟)遵循我们的语音命令。所以如果我们命令停车,汽车会在一段时间后解析信号,这可能会导致灾难性事件。

解决方案: 目前(撰写本文时),没有合适的解决方案可用。希望,它会在未来得到解决。 🙂

发音差异

不同地区的人对一个词使用不同的发音。语音识别器无法解析语音,如果口语单词的发音与编程的不同。

解决方案: 您可以在 SRGS XML 语法文件中指定语言和地区来解析特定地区的发音。

假设我们要解析英语(UK),我们需要设置语法标签的属性 xml:lang=”en-GB”。在这里,英国的 ISO 国家代码是 GB。因此,“en-GB”告诉语音识别器根据英语(英国)发音解析语音。另一个例子,对于加拿大法语,使用“fr-CA”。

环境噪声

由一个或多个外部实体引起的不需要的声音和振动会影响处理精度。有时,即使语音正确,识别器也无法理解。

解决方法: 可能无法解决或消除此类噪音。以目前的技术水平,我们只能希望在无噪声领域使用这种技术。另一种可能的解决方案是使用能够降低噪音的智能麦克风(称为降噪麦克风)。

USB 麦克风 / USB 声卡无法识别

随着版本 10531 的发布,Windows IoT Core 支持通用音频设备。大多数 USB 麦克风或 USB 声卡需要 USB 通用驱动程序。如果您的设备使用通用驱动程序,它会工作。

与我的 RPi2 (Amazin.in) 一起成功工作

解决方案: 尝试使用其他 USB 麦克风或 USB 声卡。

就我而言,我购买了 USB 声卡。它工作得很好。我将麦克风连接到声卡的麦克风插孔中。您可以从 Amazon.com 或其他在线购物网站购买 USB 声卡。印度人可以从 Amazon.in 购买 USB 声卡。

未来的改进

新想法没有限制。本文探讨了语音识别的基本实现。此外,您可以通过提供解析结果的视觉指示来扩展项目。例如,在成功解析语音命令后打开绿色 LED 一秒钟,否则打开红色 LED 一秒钟。此外,为了防止意外命令,您还可以对机器人进行编程,指示何时听,何时睡觉。

你注意到了吗?

那些仔细看过项目动画标题图片的人会知道我没有介绍我在那里展示的东西。仔细观察并尝试在您的机器人中实现该隐藏功能。

祝你好运🙂

来源: 语音控制机器人

制造工艺

  1. Windows 10 IoT Core – 读取心率脉冲
  2. Windows IoT:人脸识别门
  3. 运动控制的 AWS IoT 按钮
  4. Raspberry Pi 2 上的 Windows 10 IoT Core – Adafruit 传感器数据
  5. Windows 10 IoT Core 和 SHT15
  6. Windows 10 IoT Core for Raspberry Pi 3 Model B+
  7. 通过蓝牙控制的树莓派机器人
  8. 使用 Raspberry Pi 的手势控制机器人
  9. 由 ANDROID 智能手机控制的 RASPBERRY PI WIFI 机器人
  10. GoPiGo v2 与 Windows IoT
  11. 使用 Raspberry Pi 的 Wifi 控制机器人
  12. 打开简历机器人