esp32 micropython spiffs_「ESP 教程」ESP32 如何运行 TensorFlow 模型

​人工智能之父,艾伦·图灵很早就曾预测“有一天,人们会带着电脑在公园散步,并告诉对方,今天早上我的计算机讲了个很有趣的事。”

人类一直试图让机器具有智能,也就是人工智能(Artificial Intelligence)。从上世纪 50 年代开始,人工智能相继进入了“推理期”和“知识期”,在这两个阶段,机器都是按照人类设定的规则和总结的知识运作,永远无法超越其创造者。机器学习(Machine Learning)方法应运而生,人工智能进入“机器学习时期”。机器学习的核心是“使用算法解析数据,从中学习,然后对世界上的某件事情做出决定或预测”。这意味着,与其显式地编写程序来执行某些任务,不如教计算机如何开发一个算法来完成任务。

随着机器学习领域不断的发展,在移动、嵌入式和 IoT 设备上部署/运行机器学习模型也成为了可能。这篇文章仅介绍在 ESP32 上如何部署/运行 TensorFlow 模型。在 create_sine_model.ipynb 文章中将介绍 “Hello World!” 正弦模型相关代码。

TensorFlow Lite

TensorFlow 是一个端到端开源机器学习平台。它拥有一个包含各种工具、库和社区资源的全面灵活生态系统,可以让研究人员推动机器学习领域的先进技术的发展,并让开发者轻松地构建和部署由机器学习提供支持的应用。

TensorFlow Lite 是一组工具,可帮助开发人员在移动、嵌入式和 IoT 设备上部署/运行 TensorFlow 模型。 TensorFlow Lite 使设备上的机器学习推理具有低延迟的特性,并使可执行文件更小。

TensorFlow Lite 由两个主要组件组成:

TensorFlow Lite 解释器 可在许多不同的硬件类型(包括手机,嵌入式 Linux 设备和微控制器)上运行经过优化的模型。

TensorFlow Lite 转换器 将 TensorFlow 模型转换为供解释器使用的有效形式,并且可以优化模型以改善可执行文件大小和性能。

接下来,将介绍如何将 TensorFlow Lite 运行在 ESP32 上,有两种方式:

使用 ESP-IDF

使用 PlatformIO 平台

使用 ESP-IDF

1. 搭建 ESP-IDF 开发环境

检查 ESP-IDF 环境是否已经正确安装:

检查 IDF_PATH 环境变量是否已经设置

检查 idf.py 和 xtensa-esp32-elf-* 工具链是否在 PATH 环境变量中

2. 克隆 TensorFlow

通过下面的命令,将 TensorFlow 克隆到本地:

git clone https://github.com/tensorflow/tensorflow.git

3. 生成 hello_world 示例项目

在 tensorflow 目录下通过下面的命令,可以生成 hello_world 示例项目:

make -f tensorflow/lite/micro/tools/make/Makefile TARGET=esp generate_hello_world_esp_project

4. 部署到 ESP32

在 hello_world 项目目录下,编译、烧录可执行文件到 ESP32:

cd tensorflow/lite/micro/tools/make/gen/esp_xtensa-esp32/prj/hello_world/esp-idf

idf.py --port /dev/ttyUSB0 flash monitor

运行结果:

使用 PlatformIO 平台

1. 安装 TensorFlow Lite 环境(PlatformIO)

首先,需要安装 PlatformIO ,打开终端输入:

pip install -U platformio

2. 新建 PlatformIO 项目

接下来可以开始搭建软件框架了,详细步骤:

创建项目目录,包含 src,lib,include 文件夹

新建 platformio.ini 文件,文件内容:

[env:esp32doit-devkit-v1]

platform = espressif32

board = esp32doit-devkit-v1

framework = arduino

board_build.partitions = custom.csv

lib_deps=tfmicro

新建 custom.csv 文件,文件内容:

# Name, Type, SubType, Offset, Size, Flags

nvs, data, nvs, 0x9000, 20K,

otadata, data, ota, 0xe000, 8K,

firm, app, ota_0, , 3400K,

eeprom, data, 0x99, , 4K,

spiffs, data, spiffs, , 444K,

3. 生成 hello_world 示例项目

在项目目录所在目录下,克隆 TensorFlow 仓库

git clone https://github.com/tensorflow/tensorflow.git

生成 ESP32 示例项目,获取生成的 tfmicro 库和示例模型,在 Tensorflow 目录下,运行:

make -f tensorflow/lite/micro/tools/make/Makefile TARGET=esp generate_hello_world_esp_project

生成的示例项目位于:

tensorflow/tensorflow/lite/micro/tools/make/gen/esp_xtensa-esp32/prj/hello_world/

4. 修改 PlatformIO 项目

在 hello_world/esp-idf 目录中拷贝 tfmicro 文件夹到 项目目录下的 lib 文件夹

在 main 目录中拷贝 sin_model_data.cc 到 项目目录下的 src 文件夹,拷贝 sine_model_data.h 到 项目目录下的 include 文件夹

在 third_party/flatbuffers/include 目录中拷贝 flatbuffers 目录到 tfmicro 文件夹.

在 third_party/gemmlowp 目录中拷贝 fixedpoint 和 internal 目录到 tfmicro 文件夹.

在 third_party 目录中拷贝 kissfft 目录到 tfmicro 文件夹.

在 third_party/flatbuffers/include 目录中拷贝 flatbuffers 到 tfmicro 文件夹

在 lib/tfmicro/flatbuffers 目录下打开 base.h, 将以下代码段

#if defined(ARDUINO) && !defined(ARDUINOSTL_M_H)

#include

#else

#include

#endif

修改为:

#include

接下来修改 “Hello World!” sin 模型来测试 TensorFlow Lite 是否正常工作,完整的源代码请在 GitHub 仓库中查看

代码结构:

5. 部署到 ESP32

在终端中输入以下命令将可执行文件烧录到 ESP32:

platformio run -t upload --upload-port /dev/ttyUSB0

在终端中输入以下命令将打开串口交互终端,输入一个浮点数,程序将给出 sin 模型预测的值:

screen /dev/ttyUSB0 115200

运行结果:

开发工作流程

这是将 TensorFlow 模型部署到微控制器的过程:

创建或获取 TensorFlow 模型

该模型必须非常小,以便在转换后适合您的目标设备。它只能使用支持的操作。如果要使用当前不被支持的操作,可以提供自己的实现。

将模型转换为 TensorFlow Lite FlatBuffer

您将使用 TensorFlow Lite 转换器来将模型转换为标准 TensorFlow Lite 格式。您可能希望输出量化模型,因为它们的尺寸更小、执行效率更高。

将 FlatBuffer 转换为 C byte 数组

模型保存在只读程序存储器中,并以简单的 C 文件的形式提供。标准工具可用于将 FlatBuffer 转换为 C 数组。

集成 TensorFlow Lite for Microcontrollers 的 C++ 库

编写微控制器代码以使用 C++ 库执行推断。

部署到您的设备

构建程序并将其部署到您的设备。

参考链接

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
2022 / 01/ 30: 新版esptool 刷micropython固件指令不是 esptool.py cmd... 而是 esptool cmd... 即可;另外rshell 在 >= python 3.10 的时候出错解决方法可以查看:  已于2022年发布的: 第二章:修复rshell在python3.10出错 免费内容: https://edu.csdn.net/course/detail/29666 micropython语法和python3一样,编写起来非常方便。如果你快速入门单片机玩物联网而且像轻松实现各种功能,那绝力推荐使用micropython。方便易懂易学。 同时如果你懂C语音,也可以用C写好函数并编译进micropython固件里然后进入micropython调用(非必须)。 能通过WIFI联网(2.1章),也能通过sim卡使用2G/3G/4G/5G联网(4.5章)。 为实现语音控制,本教程会教大家使用tensorflow利用神经网络训练自己的语音模型并应用。为实现通过网页控制,本教程会教大家linux(debian10 nginx->uwsgi->python3->postgresql)网站前后台入门。为记录单片机传输过来的数据, 本教程会教大家入门数据库。  本教程会通过通俗易懂的比喻来讲解各种原理与思路,并手把手编写程序来实现各项功能。 本教程micropython版本是 2019年6月发布的1.11; 更多内容请看视频列表。  学习这门课程之前你需要至少掌握: 1: python3基础(变量, 循环, 函数, 常用库, 常用方法)。 本视频使用到的零件与淘宝上大致价格:     1: 超声波传感器(3)     2: MAX9814麦克风放大模块(8)     3: DHT22(15)     4: LED(0.1)     5: 8路5V低电平触发继电器(12)     6: HX1838红外接收模块(2)     7:红外发射管(0.1),HX1838红外接收板(1)     other: 电表, 排线, 面包板(2)*2,ESP32(28)  

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值