基于 TinyML的语音识别机器人车

在本文中,我将在 Wio 终端上制作一个带有内置麦克风的声控机器人车,以通过 TinyML 识别行驶、停止和背景噪音。

在这篇详细的博客文章中,我将介绍以下内容:

什么是 UART 串行通信?

Wio终端和uKit之间的UART串行通信探索

1.0 使用 Codecraft 训练嵌入式机器学习模型
2.0 Arduino文本代码修改
3.0 对机器人汽车进行编程(uKit 探索 - 基于 Arduino Mega 2560)
4.0 预期结果


什么是 UART 串行通信?

通俗地说,UART 允许嵌入式设备(例如 Arduino)通过 TX(发送)和 RX(接收)线将数据发送到另一个 Arduino,如下所示。


基于 TinyML的语音识别机器人车

举一个具体的例子:

Arduino UNO 没有内置的 WiFi,因此不可能做 IOT 相关的项目。通过了解基本的 UART 串行通信,我能够利用ESP8266/ESP32作为 Arduino UNO 的协处理器,以便从连接到 Arduino UNO 的传感器收集的数据将发送到 ESP8266/ESP32 发送转移到云平台,例如 Web 服务器、Blynk 或 FAVORIOT。


Wio终端和uKit之间的UART串行通信探索
Wio 终端的 TX 和 RX 引脚在引脚 8和10上可用。

  • TXD - 引脚 8 
  • RXD - 引脚 10

基于 TinyML的语音识别机器人车

而对于 uKit Explore,引脚 D0 和 D1 上也有可用的 TX/RX 引脚。您可以在此处查看完整的 uKit 探索引脚排列

  • RX0 - D0
  • TX0 - D1

基于 TinyML的语音识别机器人车

对于硬件连接,基本上,您只需要如下连接:

Wio 终端(引脚 8)到 uKit 探索(引脚 0) - TXD 到 RXD

Wio 终端(引脚 10)到 uKit 探索(引脚 1) - RXD 到 TXD

我将详细解释软件编程如何在 3.0 Program the Robot Car(uKit Explore - Arduino Mega 2560 based)上完成。


第 1 步:使用 Codecraft 训练嵌入式机器学习模型
在第一部分中,我们的目标是使用 Codecraft 平台创建一个嵌入式机器学习模型(语音识别)。

使用 Codecraft 训练嵌入式机器学习模型涉及 4 个步骤。

1.创建“唤醒词识别(内置麦克风)”模型

2.数据采集(车载)

3.培训和部署

4.编程与模型使用

创建“唤醒词识别(内置麦克风)”模型转到https://ide.tinkergen.com/。选择“(对于 TinyML)Wio 终端”。

基于 TinyML的语音识别机器人车

点击左中嵌入式机器学习框上的“模型创建”。然后选择“Wake-Up Words Recognition(内置麦克风)”,如下图。根据需求输入模型名称。

基于 TinyML的语音识别机器人车

点击确定,窗口会自动切换到“数据采集”界面。


第 2 步:数据采集(车载)

基于 TinyML的语音识别机器人车

系统会自动为您创建 3 个默认标签(hi wio、background 和其他词)。

除非您想为标签使用不同的名称,否则您可以不加任何更改地使用它。就我而言,我更改了两个默认标签,如下所示:

hi wio 删掉

其他词改成停止

重要提示:现在,您必须记住更改默认数据采集程序上的标签以反映正确的修改标签

基于 TinyML的语音识别机器人车

连接 Wio 终端和上传数据采集程序。

注意:您需要下载“ Codecraft Assistant ”才能在Codecraft在线IDE上连接和上传代码。

数据采集:在右上角的超链接中,您将找到数据采集的分步介绍。按照说明根据修改后的标签收集数据。


第 3 步:培训和部署

点击“Training & Deployment”,您将看到如下图所示的模型训练界面。

基于 TinyML的语音识别机器人车

选择神经网络和参数。选择合适的神经网络大小:小、中、大

设置参数:

训练周期数(正整数),

学习率(从 0 到 1 的数字)

最小置信度(从 0 到 1 的数字)

接口提供了50个训练周期的默认参数值,但是准确度不是很好。因此,我将训练周期更改为 100。

基于 TinyML的语音识别机器人车

点击“开始训练”。单击“开始训练”时,窗口将显示“正在加载..”!等待训练完成!

观察模型性能以选择理想模型。在“模型训练报告”窗口中,您可以观察训练结果,包括模型的准确率、损失和性能。

基于 TinyML的语音识别机器人车

在“模型训练报告”窗口中,点击“模型部署”。部署完成后,单击“确定”进入“编程”窗口,这是我们将模型部署到 Wio 终端之前的最后一步。

基于 TinyML的语音识别机器人车


第 4 步:编程和模型使用

好的,现在我们完成了使用 UART 通信协议将人工智能(在本例中为机器学习)与机器人(机器人汽车)集成的模型和有趣的部分。

这是从块编程接口创建的示例程序:

基于 TinyML的语音识别机器人车

我们使用 if-else 条件语句来评估标签的置信度。 

如果“go”的置信度大于0.8(80%),我会在串口终端打印“1”。

如果“停止”的置信度大于 0.8(80%),我会在串口终端上打印“2”。

否则,如果“背景”的置信度大于0.8(80%),我会在串口终端上打印“0”。

好的,所以现在,只需记住 3 个不同的条件:

"go" > 0.8,命令为 '1'

“停止”> 0.8,命令为“2”

“背景”。命令是'0'

2.0 Wio终端Arduino文本代码修改
好的,所以请注意以下两个重要发现,因为这将是我们项目的关键部分!

  • 您可以从 Wio Temrinal 的 40 针接头访问的串行线是 Serial1,而不是通常的 Serial,后者基本上通过串行终端显示输出。
  • 我们在引脚 8 和 10 上提供了 TX/RX 引脚,可用于连接到另一块电路板(本例中为 uKit 探索)。

基于 TinyML的语音识别机器人车

如果我们查看相应块代码的文本编码,您会注意到 Serial.print 没有使用 Serial1 行。因此,这导致我们进入第二步,即继续在 Arduino IDE 上进行编码以进行定制。

基于 TinyML的语音识别机器人车

切换到文本代码区域并复制文本代码

在文本代码区域,按 CTRL + A 复制所有代码以选择所有代码。

打开 Arduino IDE,创建一个新文件,按 CTRL+V 将代码粘贴到空草图中。继续以所需名称保存草图。

基于 TinyML的语音识别机器人车

基于 TinyML的语音识别机器人车

复制 Edge Impulse TinyML Arduino 库

导航到 C:Users<User_Name>AppDataLocalProgramscc-assistantresourcescompilersArduinocontentslibraries

找到与 Arduino 文本代码顶部的 Edge Impulse 头文件具有相同编号的文件夹名称(在我的情况下为 47606)。

基于 TinyML的语音识别机器人车

复制整个 ei-project_47606 文件夹并将其粘贴到 C:Users<User_Name>DocumentsArduinolibraries

基于 TinyML的语音识别机器人车

修改 Serial.println 函数

改为将 Serial.println 函数修改为 Serial1.println。

基于 TinyML的语音识别机器人车

上传代码

确保您已安装 Wio Terminal支持包。如果没有,请参阅Seeed Wiki 上的“ Wio 终端入门”指南。

在将代码上传到 Wio 终端之前,请确保选择了正确的板和 COM 端口。

基于 TinyML的语音识别机器人车

第 4 步:对机器人汽车进行编程(uKit 探索 - 基于 Arduino Mega 2560)
我们将对基于 uKit Explore 的 Robot Car 进行编程。

uKit 简介探索

让我让您了解一下这个 uKit Explore 的内容。

uKit Explore 是 UBTECH Robotics 制造的机器人套件,它基于 Arduino 生态系统(芯片组为 Arduino 2560)。

“uKit Explore 有一个主控箱,配备 Arduino 开源平台,提供来自全球用户贡献的大量电子和编程学习资源。”

基于 TinyML的语音识别机器人车

编程 uKit Explore 以读取 UART 数据

现在,我们需要对 Robo Car 进行编程,使其在收到来自 Wio Terminal 的命令“1”、“2”和“0”时根据不同的条件采取行动。

这里的关键概念是,如果它包含任何数据,我们将需要让 uKit Explore继续侦听串行线。如果它确实包含串行数据,则串行读取数据并将其分配给一个变量。最后一步是我们将比较变量并执行不同的操作。

对于我们的案例,当 uKit 探索 

  • 收到命令“1”(go),RoboCar 将向前移动; 
  • 收到命令'2'(停止),它将停止; 
  • 收到命令'0'(背景),它也会停止。

基于 TinyML的语音识别机器人车

上传代码

最后,我们将代码上传到板上。与往常一样,请确保在上传之前选择了正确的板和 COM 端口。

最后,Robo Car 可以通过语音“go,go,go”激活,并通过“stopppps....”或“background”停止。达到我们想要的目标!

结论
Codecraft 是一个非常简单的工具,可用于训练简单的嵌入式机器学习模型并将其与您自己的机器人系统集成,该系统由 Edge Impulse 和 Wio Terminal 支持的技术提供支持。如果您对文章有任何建议,请告诉我。谢谢!

GitHub源代码:https ://github.com/VincentK16/voicerecognitionrobocar


链接: https://www.eefocus.com/article/1423338.html

- 本文来自网络,如有侵权,请联系本站处理。

2022-08   阅读(104)   评论(0)
 标签: ai TinyML WioTerminal

涨知识
数码管

也称作LED数码管,是一种可以显示数字和其他信息的电子设备。玻璃管中包括一个金属丝网制成的阳极和多个阴极。大部分数码管阴极的形状为数字。

评论:
相关文章
Tflite-micro在ESP32实现离线命令识别

本文会介绍如何使用TensorFlow Lite构建一个本地语音识别系统,内容包括语音前端处理、语音识别模型的训练以及如何将其转换为TensorFlow Lite格式并部署到ESP32。


TinyML:在边缘侧实现超低功耗机器学习

分布最广的物联网设备往往体积很小、电量有限。它们被作为终端硬件,通过嵌入式传感器采集各种数据;计算能力有限,对功耗极为敏感。这类设备也能实现机器学习吗?