ESP32部署TensorFlow Lite

本来是想找一篇中文教程,不过只看到一个英文官方的,也行吧,虽然效率会慢丢丢。

GitHub - espressif/esp-tflite-micro: TensorFlow Lite Micro for Espressif Chipsets

看了一圈,有个中文的:

esp-dl/README_cn.md at master · espressif/esp-dl · GitHub

目前阶段还是照着做,然后写一点感想。。。后面有机会和能力再深度写一下。

之前都是用micropython,觉得简单。不过涉及到tensorflow lite的好像都是原厂环境。。。

没办法,搞了一阵终于把环境弄出来了。可以Hello了。。。

继续往机器学习的方向走,遇到的最大的问题就是不管是tensorflow还是tflite-micro,都无法下载。但是网上的很多教程都是先要拿到tensorflow lite。然后基于tensorflow lite的例子,送到idf环境去编译。

后面看了历险记(参考中)那个文章,说是现在乐鑫自己也有tflite的例子,可以曲线救国,先跑通乐鑫自己的例子,然后用python下的tensorflow生成lite模型,最后用xxd命令转换成model.cc。这个model.cc刚好又是乐鑫里面带了的。这样就可以闭环了。

照着他写的一步步来,晚上把乐鑫自己的hello world跑通了,还是很简单。(真不知道网上这些大神哪里找的教程,我是翻了半天都没翻到)

又试了下用tensorflow生成模型(生成模型和转换是在ubuntu上做的哈):

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
import math

x_values = np.random.uniform(low=0, high=2 * math.pi, size=1000).astype(np.float32)

np.random.shuffle(x_values)

y_values = np.sin(x_values).astype(np.float32)

plt.plot(x_values, y_values,"b.")
plt.show()

y_values += 0.1 * np.random.randn(*y_values.shape)

plt.plot(x_values, y_values, "b.")
plt.show()

TRAIN_SPLIT = int(0.6 * 1000)
TEST_SPLIT = int(0.2 * 1000 + TRAIN_SPLIT)

x_train, x_validate, x_test = np.split(x_values, [TRAIN_SPLIT, TEST_SPLIT])
y_train, y_validate, y_test = np.split(y_values, [TRAIN_SPLIT, TEST_SPLIT])

plt.plot(x_train, y_train, "b.", label="Train")
plt.plot(x_validate, y_validate, "y.", label="Validate")
plt.plot(x_test, y_test, "r.", label="Test")
plt.legend()
plt.show()

model = tf.keras.Sequential()

# First layer takes a scalar input and feeds it through 16 "neurons". The
# neurons decide whether to activate based on the 'relu' activation function.
model.add(tf.keras.layers.Dense(16, activation='relu', input_shape=(1,)))

# The new second and third layer will help the network learn more complex
# representations
model.add(tf.keras.layers.Dense(16, activation='relu'))

# Final layer is a single neuron, since we want to output a single value
model.add(tf.keras.layers.Dense(1))

# Compile the model using the standard 'adam' optimizer and the mean squared
# error or 'mse' loss function for regression.
model.compile(optimizer='adam', loss='mse', metrics=['mae'])
model.summary()

model.fit(x_values,
          y_values,
          epochs=400,
          validation_split=0.2,
          batch_size=64,
          verbose=2)
save_dir = './modes/test'
tf.saved_model.save(model, save_dir)

converter = tf.lite.TFLiteConverter.from_saved_model(save_dir)
tflite_model = converter.convert()

import pathlib

tflite_model_file = pathlib.Path('model.tflite')
tflite_model_file.write_bytes(tflite_model)

def representative_dataset(num_samples=500):
    for i in range(num_samples):
      yield [x_values[i].reshape(1, 1)]

saved_model_dir = "./modes/test"
converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir)
converter.optimizations = [tf.lite.Optimize.DEFAULT]
converter.target_spec.supported_ops = [tf.lite.OpsSet.TFLITE_BUILTINS_INT8]
converter.inference_input_type = tf.int8
converter.inference_output_type = tf.int8
converter.representative_dataset = representative_dataset
tflite_quant_model = converter.convert()
open("sine_model_quantized.tflite","wb").write(tflite_quant_model)

运行python之后生成sine_model_quantized.tflite

按照例程中说的安装xdd

sudo apt install xxd

然后运行转换命令。xdd命令也没什么特别的,就是在Linux中用于以二进制或十六进制显示文件的内容。-i 选项允许以C语言风格的数组形式输出文件内容。就是把二进制转成C的数组。

xxd -i sine_model_quantized.tflite > model.cc

之后把model.cc拷贝回esp32的hello world环境。但是代码要稍微改改,主要是要把模型数组换成g_model,否则要报错。

model.cc

#include "model.h"

alignas(8) const unsigned char g_model[] = {
  0x20, 0x00, 0x00, 0x00, 0x54, 0x46, 0x4c, 0x33, 0x00, 0x00, 0x00, 0x00,
  0x14, 0x00, 0x20, 0x00, 0x1c, 0x00, 0x18, 0x00, 0x14, 0x00, 0x10, 0x00,
  0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x14, 0x00, 0x00, 0x00,
  0x1c, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0xe8, 0x00, 0x00, 0x00,
  0xa4, 0x03, 0x00, 0x00, 0xb4, 0x03, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00,
  0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x04, 0x00,
  0x0a, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
  0x38, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x73, 0x65, 0x72, 0x76,
  0x69, 0x6e, 0x67, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x00,
  0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x98, 0xff, 0xff, 0xff,
  0x09, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
  0x64, 0x65, 0x6e, 0x73, 0x65, 0x5f, 0x32, 0x00, 0x01, 0x00, 0x00, 0x00,
  0x04, 0x00, 0x00, 0x00, 0xea, 0xfc, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00,
  0x0b, 0x00, 0x00, 0x00, 0x64, 0x65, 0x6e, 0x73, 0x65, 0x5f, 0x69, 0x6e,
  0x70, 0x75, 0x74, 0x00, 0x02, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00,
  0x04, 0x00, 0x00, 0x00, 0xdc, 0xff, 0xff, 0xff, 0x0c, 0x00, 0x00, 0x00,
  0x04, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x43, 0x4f, 0x4e, 0x56,
  0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x4d, 0x45, 0x54, 0x41, 0x44,
  0x41, 0x54, 0x41, 0x00, 0x08, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x04, 0x00,
  0x08, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
  0x13, 0x00, 0x00, 0x00, 0x6d, 0x69, 0x6e, 0x5f, 0x72, 0x75, 0x6e, 0x74,
  0x69, 0x6d, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x00,
  0x0d, 0x00, 0x00, 0x00, 0xb8, 0x02, 0x00, 0x00, 0xb0, 0x02, 0x00, 0x00,
  0x9c, 0x02, 0x00, 0x00, 0x74, 0x02, 0x00, 0x00, 0x24, 0x02, 0x00, 0x00,
  0x14, 0x01, 0x00, 0x00, 0xc4, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00,
  0x9c, 0x00, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00,
  0x6c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x96, 0xfd, 0xff, 0xff,
  0x04, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
  0x08, 0x00, 0x0e, 0x00, 0x08, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00,
  0x10, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00,
  0x08, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
  0x01, 0x00, 0x00, 0x00, 0xeb, 0x03, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00,
  0x10, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x04, 0x00, 0x0a, 0x00, 0x00, 0x00,
  0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
  0x06, 0x00, 0x00, 0x00, 0x32, 0x2e, 0x31, 0x33, 0x2e, 0x31, 0x00, 0x00,
  0xfa, 0xfd, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
  0x31, 0x2e, 0x31, 0x34, 0x2e, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x84, 0xfd, 0xff, 0xff, 0x88, 0xfd, 0xff, 0xff,
  0x8c, 0xfd, 0xff, 0xff, 0x22, 0xfe, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00,
  0x10, 0x00, 0x00, 0x00, 0x81, 0x87, 0x92, 0x83, 0x60, 0x58, 0xc4, 0x24,
  0xa3, 0x72, 0xaf, 0x32, 0x94, 0x9d, 0x30, 0xe8, 0x3e, 0xfe, 0xff, 0xff,
  0x04, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0xf2, 0x08, 0x00, 0x00, 0xb0, 0xf7, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
  0x8c, 0xf8, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x31, 0xff, 0xff, 0xff,
  0x00, 0x00, 0x00, 0x00, 0x97, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x17, 0xf6, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
  0x8a, 0xfe, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
  0x44, 0xdb, 0xdb, 0x31, 0x2d, 0xf6, 0xfa, 0xba, 0x33, 0x09, 0xd7, 0x48,
  0xed, 0xcd, 0xc7, 0x21, 0x4d, 0x39, 0x14, 0x23, 0x16, 0x15, 0xb6, 0x40,
  0x37, 0x4f, 0xf0, 0xbc, 0xf2, 0xe5, 0xd6, 0xeb, 0xdf, 0xe7, 0x11, 0xf2,
  0x1d, 0x44, 0xde, 0x34, 0xf8, 0xda, 0xc2, 0x24, 0x05, 0x00, 0x32, 0xf3,
  0xd2, 0xeb, 0xbf, 0xe7, 0xf6, 0x34, 0xd9, 0x36, 0xb7, 0x14, 0x27, 0x0e,
  0xb1, 0x31, 0xf4, 0x22, 0xf1, 0x47, 0xd0, 0x08, 0x09, 0x15, 0x4c, 0x5c,
  0x39, 0x3f, 0x2f, 0xce, 0x0f, 0xdc, 0x20, 0x0b, 0x53, 0xf5, 0x33, 0x08,
  0xe8, 0x46, 0x13, 0x10, 0xf9, 0xc0, 0x29, 0x21, 0xd2, 0xd0, 0xf4, 0x37,
  0xee, 0xcc, 0xb5, 0xb5, 0xbf, 0x22, 0x2a, 0x3c, 0x39, 0x37, 0xfc, 0xb8,
  0x0d, 0x22, 0xba, 0xc6, 0xd0, 0x1e, 0xc0, 0x1a, 0xfc, 0xb2, 0xdc, 0xf7,
  0x34, 0x36, 0xe4, 0xdd, 0xcb, 0x32, 0xd4, 0x4d, 0x01, 0xf5, 0xbf, 0xc2,
  0xdd, 0xd8, 0xe7, 0xea, 0xcc, 0x39, 0xea, 0xcb, 0x11, 0x20, 0x33, 0xd9,
  0xbf, 0xce, 0xf5, 0x2e, 0x0f, 0x5e, 0x53, 0x0a, 0xd2, 0xe4, 0x1c, 0x1d,
  0x46, 0x0d, 0x39, 0xc7, 0xae, 0xb5, 0x40, 0xc0, 0x05, 0xba, 0x3a, 0xfe,
  0xca, 0x81, 0xd7, 0xa4, 0x09, 0xef, 0xee, 0x14, 0x29, 0xc6, 0x0c, 0xf2,
  0xe2, 0x20, 0xe3, 0xf9, 0xec, 0x42, 0x51, 0x46, 0xc7, 0xcd, 0x48, 0xe7,
  0x41, 0xd3, 0x40, 0xf9, 0xe2, 0x50, 0x02, 0xdc, 0x39, 0xb7, 0x15, 0xd1,
  0xe1, 0x34, 0x35, 0x0b, 0xeb, 0x0d, 0x0a, 0xcd, 0xf8, 0x0e, 0xb4, 0x1a,
  0xd3, 0xf8, 0xce, 0xb1, 0xee, 0x43, 0xbb, 0x4b, 0x2f, 0x18, 0x3e, 0x2d,
  0x33, 0x0f, 0x40, 0x3d, 0x02, 0xcd, 0xe1, 0xab, 0x29, 0xb7, 0x22, 0x41,
  0xe2, 0x49, 0x4b, 0x35, 0x20, 0xed, 0x50, 0xe4, 0x41, 0x24, 0xf7, 0x31,
  0x1d, 0xdf, 0xb8, 0xfa, 0x96, 0xff, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00,
  0x40, 0x00, 0x00, 0x00, 0xe6, 0x0b, 0x00, 0x00, 0xcd, 0xf2, 0xff, 0xff,
  0x10, 0xf5, 0xff, 0xff, 0x05, 0x0b, 0x00, 0x00, 0xb0, 0xf6, 0xff, 0xff,
  0x89, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xb0, 0xfe, 0xff, 0xff,
  0x00, 0x00, 0x00, 0x00, 0x45, 0xf5, 0xff, 0xff, 0x50, 0x1c, 0x00, 0x00,
  0x6f, 0xef, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0xfe, 0xfe, 0xff, 0xff, 0x31, 0x0c, 0x00, 0x00, 0xe2, 0xff, 0xff, 0xff,
  0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x50, 0xd0, 0xe9, 0x0b,
  0xbb, 0xcd, 0xe8, 0xfd, 0xca, 0xf0, 0x81, 0xd9, 0xfe, 0xe9, 0xe4, 0x32,
  0x00, 0x00, 0x06, 0x00, 0x08, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00,
  0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xb0, 0x0a, 0x00, 0x00,
  0x84, 0xff, 0xff, 0xff, 0x88, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00,
  0x4d, 0x4c, 0x49, 0x52, 0x20, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74,
  0x65, 0x64, 0x2e, 0x00, 0x01, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x0e, 0x00, 0x18, 0x00, 0x14, 0x00, 0x10, 0x00, 0x0c, 0x00,
  0x08, 0x00, 0x04, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
  0x1c, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00,
  0xe4, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e,
  0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00,
  0x3c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x96, 0xff, 0xff, 0xff,
  0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x00,
  0x14, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00,
  0x01, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
  0x08, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
  0xca, 0xff, 0xff, 0xff, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08,
  0x10, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0xba, 0xff, 0xff, 0xff,
  0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
  0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
  0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x16, 0x00, 0x00, 0x00,
  0x10, 0x00, 0x0c, 0x00, 0x0b, 0x00, 0x04, 0x00, 0x0e, 0x00, 0x00, 0x00,
  0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x18, 0x00, 0x00, 0x00,
  0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x08, 0x00, 0x07, 0x00,
  0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00,
  0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x06, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
  0x09, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x0a, 0x00, 0x00, 0x00, 0xbc, 0x04, 0x00, 0x00, 0x2c, 0x04, 0x00, 0x00,
  0xa8, 0x03, 0x00, 0x00, 0x2c, 0x03, 0x00, 0x00, 0xc0, 0x02, 0x00, 0x00,
  0x4c, 0x02, 0x00, 0x00, 0xe0, 0x01, 0x00, 0x00, 0x34, 0x01, 0x00, 0x00,
  0x80, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x82, 0xfb, 0xff, 0xff,
  0x00, 0x00, 0x00, 0x01, 0x18, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
  0x3c, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09,
  0x50, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
  0x01, 0x00, 0x00, 0x00, 0x6c, 0xfb, 0xff, 0xff, 0x08, 0x00, 0x00, 0x00,
  0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0xee, 0x06, 0x3c,
  0x19, 0x00, 0x00, 0x00, 0x53, 0x74, 0x61, 0x74, 0x65, 0x66, 0x75, 0x6c,
  0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x43,
  0x61, 0x6c, 0x6c, 0x3a, 0x30, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
  0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xfa, 0xfb, 0xff, 0xff,
  0x00, 0x00, 0x00, 0x01, 0x18, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
  0x40, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09,
  0x88, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
  0x10, 0x00, 0x00, 0x00, 0xe4, 0xfb, 0xff, 0xff, 0x08, 0x00, 0x00, 0x00,
  0x14, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff,
  0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
  0x13, 0xa5, 0xce, 0x3b, 0x4c, 0x00, 0x00, 0x00, 0x73, 0x65, 0x71, 0x75,
  0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x2f, 0x64, 0x65, 0x6e, 0x73, 0x65,
  0x5f, 0x31, 0x2f, 0x4d, 0x61, 0x74, 0x4d, 0x75, 0x6c, 0x3b, 0x73, 0x65,
  0x71, 0x75, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x2f, 0x64, 0x65, 0x6e,
  0x73, 0x65, 0x5f, 0x31, 0x2f, 0x52, 0x65, 0x6c, 0x75, 0x3b, 0x73, 0x65,
  0x71, 0x75, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x2f, 0x64, 0x65, 0x6e,
  0x73, 0x65, 0x5f, 0x31, 0x2f, 0x42, 0x69, 0x61, 0x73, 0x41, 0x64, 0x64,
  0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
  0x10, 0x00, 0x00, 0x00, 0xaa, 0xfc, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01,
  0x18, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
  0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x80, 0x00, 0x00, 0x00,
  0x02, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x10, 0x00, 0x00, 0x00,
  0x94, 0xfc, 0xff, 0xff, 0x08, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
  0x01, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0e, 0x2c, 0x46, 0x3c,
  0x46, 0x00, 0x00, 0x00, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x74, 0x69,
  0x61, 0x6c, 0x2f, 0x64, 0x65, 0x6e, 0x73, 0x65, 0x2f, 0x4d, 0x61, 0x74,
  0x4d, 0x75, 0x6c, 0x3b, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x74, 0x69,
  0x61, 0x6c, 0x2f, 0x64, 0x65, 0x6e, 0x73, 0x65, 0x2f, 0x52, 0x65, 0x6c,
  0x75, 0x3b, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c,
  0x2f, 0x64, 0x65, 0x6e, 0x73, 0x65, 0x2f, 0x42, 0x69, 0x61, 0x73, 0x41,
  0x64, 0x64, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
  0x10, 0x00, 0x00, 0x00, 0xde, 0xfd, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01,
  0x14, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x09, 0x44, 0x00, 0x00, 0x00, 0x2c, 0xfd, 0xff, 0xff,
  0x08, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x01, 0x00, 0x00, 0x00, 0x01, 0xc6, 0x8e, 0x3b, 0x17, 0x00, 0x00, 0x00,
  0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x2f, 0x64,
  0x65, 0x6e, 0x73, 0x65, 0x2f, 0x4d, 0x61, 0x74, 0x4d, 0x75, 0x6c, 0x00,
  0x02, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
  0x46, 0xfe, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01, 0x14, 0x00, 0x00, 0x00,
  0x30, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
  0x50, 0x00, 0x00, 0x00, 0x94, 0xfd, 0xff, 0xff, 0x08, 0x00, 0x00, 0x00,
  0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0xf8, 0xe0, 0x38,
  0x27, 0x00, 0x00, 0x00, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x74, 0x69,
  0x61, 0x6c, 0x2f, 0x64, 0x65, 0x6e, 0x73, 0x65, 0x2f, 0x42, 0x69, 0x61,
  0x73, 0x41, 0x64, 0x64, 0x2f, 0x52, 0x65, 0x61, 0x64, 0x56, 0x61, 0x72,
  0x69, 0x61, 0x62, 0x6c, 0x65, 0x4f, 0x70, 0x00, 0x01, 0x00, 0x00, 0x00,
  0x10, 0x00, 0x00, 0x00, 0xb6, 0xfe, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01,
  0x14, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x09, 0x44, 0x00, 0x00, 0x00, 0x04, 0xfe, 0xff, 0xff,
  0x08, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
  0x43, 0x4f, 0xa9, 0x3b, 0x19, 0x00, 0x00, 0x00, 0x73, 0x65, 0x71, 0x75,
  0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x2f, 0x64, 0x65, 0x6e, 0x73, 0x65,
  0x5f, 0x31, 0x2f, 0x4d, 0x61, 0x74, 0x4d, 0x75, 0x6c, 0x00, 0x00, 0x00,
  0x02, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
  0x1e, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01, 0x14, 0x00, 0x00, 0x00,
  0x34, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
  0x58, 0x00, 0x00, 0x00, 0x6c, 0xfe, 0xff, 0xff, 0x08, 0x00, 0x00, 0x00,
  0x14, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
  0x71, 0x10, 0x83, 0x38, 0x29, 0x00, 0x00, 0x00, 0x73, 0x65, 0x71, 0x75,
  0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x2f, 0x64, 0x65, 0x6e, 0x73, 0x65,
  0x5f, 0x31, 0x2f, 0x42, 0x69, 0x61, 0x73, 0x41, 0x64, 0x64, 0x2f, 0x52,
  0x65, 0x61, 0x64, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x4f,
  0x70, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
  0x96, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01, 0x14, 0x00, 0x00, 0x00,
  0x30, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09,
  0x44, 0x00, 0x00, 0x00, 0xe4, 0xfe, 0xff, 0xff, 0x08, 0x00, 0x00, 0x00,
  0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x6e, 0x72, 0x29, 0x3c,
  0x19, 0x00, 0x00, 0x00, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x74, 0x69,
  0x61, 0x6c, 0x2f, 0x64, 0x65, 0x6e, 0x73, 0x65, 0x5f, 0x32, 0x2f, 0x4d,
  0x61, 0x74, 0x4d, 0x75, 0x6c, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
  0x01, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x00,
  0x1c, 0x00, 0x18, 0x00, 0x17, 0x00, 0x10, 0x00, 0x0c, 0x00, 0x08, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x16, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x01, 0x14, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
  0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x54, 0x00, 0x00, 0x00,
  0x64, 0xff, 0xff, 0xff, 0x08, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
  0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x01, 0x00, 0x00, 0x00, 0x58, 0xc7, 0x88, 0x38, 0x29, 0x00, 0x00, 0x00,
  0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x2f, 0x64,
  0x65, 0x6e, 0x73, 0x65, 0x5f, 0x32, 0x2f, 0x42, 0x69, 0x61, 0x73, 0x41,
  0x64, 0x64, 0x2f, 0x52, 0x65, 0x61, 0x64, 0x56, 0x61, 0x72, 0x69, 0x61,
  0x62, 0x6c, 0x65, 0x4f, 0x70, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
  0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x00, 0x20, 0x00, 0x1c, 0x00,
  0x1b, 0x00, 0x14, 0x00, 0x10, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x08, 0x00, 0x07, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
  0x18, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00,
  0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x64, 0x00, 0x00, 0x00,
  0x02, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00,
  0x0c, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00,
  0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
  0x01, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xcb, 0xb0, 0xc9, 0x3c,
  0x1d, 0x00, 0x00, 0x00, 0x73, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x5f,
  0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x64, 0x65, 0x6e, 0x73,
  0x65, 0x5f, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x3a, 0x30, 0x00, 0x00, 0x00,
  0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
  0x01, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x10, 0x00,
  0x0f, 0x00, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00,
  0x09, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09
};
unsigned int sine_model_quantized_tflite_len = 2664;

const int g_model_len = 2664;

然后就是编译三部曲:

idf.py set-target esp32
idf.py build
idf.py flash monitor

最后就能看到结果:

好吧,虽然还是很low,全部都只是照着弄,但是总算是跑通了。我有时候甚至觉得搭建环境算是成功了一半。。。接着有时间我会慢慢来分析分析的。

https://github.com/espressif/esp-tflite-micro/tree/master

https://github.com/tensorflow/tflite-micro

参考:

Windows 平台工具链的标准设置 - ESP32 - — ESP-IDF 编程指南 v5.2.2 文档

ESPFriends之ESP32模型部署训练历险记(一)_terserflowlite部署esp32-CSDN博客

【TinyML】用ESP32实现弱监督人体定位

最简单体验TinyML、TensorFlow Lite——ESP32跑机器学习(全代码)-CSDN博客

ESPFriends之ESP32模型部署训练历险记(一)_terserflowlite部署esp32-CSDN博客

Tensorflow Lite从入门到精通-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/803151.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot增加网关服务

一、新建gateway项目 二、添加依赖 dependencies {implementation org.springframework.cloud:spring-cloud-starter-gateway:4.0.0 } 三、增加路由规则配置 一个web服务、一个service服务 bootstrap.yaml: server:port: 80 spring:application:name: gatewayc…

品牌产业出海指南如何搭建国际化架构的跨境电商平台?

在“品牌&产业出海指南 – 成功搭建跨境电商平台”系列中,我们将从电商分销系统、跨境平台商城/多商户商城系统和国际化架构三个方面对帮助您梳理不同平台模式的优缺点、应用场景、开发重点和运营建议。 在“品牌&产业出海指南 – 成功搭建跨境电商平台”系…

记录|实体PLC+原理+编址

记录来源: 看一看PLC上面的文字写了什么信息呢~ PLC原理 PLC编址 PLC编址3 PLC编址4 额外补充: 开关量输入硬件连接(2)-按钮的接线 目录 总结一、DC/DC/DC二、DI a三、AI四、DQ五、AQ六、PLC原理七、PLC编址1. I、Q、M2. 编址表达2.1 位地址表…

R语言实现对模型的参数优化与评价KS曲线、ROC曲线、深度学习模型训练、交叉验证、网格搜索

目录 一、模型性能评估 1、数据预测评估 2、概率预测评估 二、模型参数优化 1、训练集、验证集、测试集的引入 2、k折线交叉验证 2、网格搜索 一、模型性能评估 1、数据预测评估 ### 数据预测评估 #### 加载包,不存在就进行在线下载后加载if(!require(mlben…

vue项目1分钟实现自定义右键菜单,懒人的福音

高效实现需求,避免重复造轮子,今天给大家分享的是,如何在最短的时间内实现右键菜单,方法也很简单,一个插件就可以搞定,话不多说,上效果图: 1. 效果图: 2. 安装&#xff…

【tabby】Tabby : vi/vim 中文乱码问题

修改配置文件: 原始是: appearance: {}替换为: 如下位置填写:UTF-8 或者 GBK。试试,重启tabby后查看效果。 注意-前是有两个空格的。 appearance:- Character encoding: UTF-8 参考文章 Tabby使用之:中文乱码问题

Pycharm 导入 conda 环境

使用时经常在此处卡壳,在此做个记录。 这个位置选择 conda 安装路径下的 python.exe 文件即可

C语言之大小端理解

目录 1前言2 大小端理解与区分3 大小端的识别和基本切换操作4 总结 1前言 在汽车CAN通讯报文中往往会接触到Intel类型和motorola类型,实际项目中涉及到多机通讯也会接触到大小端问题 2 大小端理解与区分 大端(Big_Endian) :低字节放在高地址小端(Little_Endian):…

STM32智能交通灯系统教程

目录 引言环境准备智能交通灯系统基础代码实现:实现智能交通灯系统 4.1 数据采集模块 4.2 数据处理与控制模块 4.3 通信与网络系统实现 4.4 用户界面与数据可视化应用场景:交通管理与优化问题解决方案与优化收尾与总结 1. 引言 智能交通灯系统通过STM…

提高使用安全,智慧校园在线用户功能概述

智慧校园系统融入了一个查看当前在线用户的功能,这一设计旨在为管理人员提供一个实时的窗口,洞悉校园平台的即时活跃情况,确保系统的高效运作与环境安全。通过这一功能,管理员能够一目了然地看到所有正活跃在平台上的用户群体&…

古玻璃制品的成分分析与鉴别详解【国一,附完整代码】

​ 声明:2024年数模国赛即将来临,为助力国赛和钉钉杯,我将重温22年小样本国赛C题和23年大样本国赛C题,给出详细思路和完整代码,供广大数模爱好者阅览,如需比赛指导,请联系文章底部卡片咨询。 未…

【实战】安装Webtours

首先,安装jdk。过程如下图。 添加环境变量,如下图。 安装activeperl,如下图。 复制Webtours文件夹到计算机中,之后双击webtours文件夹中的xigui32.exe,启动webtours的应用服务器。 之后,可以在任务栏右下角…

10校大满贯!中国内地高校2024年1-6月CNS发文统计出炉

随着全球科研竞争的日趋激烈,CNS(Cell、Nature、Science)作为科学领域的三大顶级期刊,不仅是科研成果的展示平台,更是各国科研实力比拼的重要战场。近年来,中国高校在国际科研舞台上的表现愈发抢眼&#xf…

LocalAI离线安装部署

简介 LocalAI是免费的开源 OpenAI 替代品。LocalAI 可作为替代 REST API,与 OpenAI(Elevenlabs、Anthropic……)API 规范兼容,用于本地 AI 推理。它允许您在本地或使用消费级硬件运行 LLM、生成图像、音频(不止于此&a…

xmind梳理测试点,根据这些测试点去写测试用例

基本流(冒烟用例必写) 备选流 公共测试点:

Large Language Model系列之二:Transformers和预训练语言模型

Large Language Model系列之二:Transformers和预训练语言模型 1 Transformer模型 Transformer模型是一种基于自注意力机制的深度学习模型,它最初由Vaswani等人在2017年的论文《Attention Is All You Need》中提出,主要用于机器翻译任务。随…

Linux下如何安装配置Graylog日志管理工具

Graylog是一个开源的日志管理工具,可以帮助我们收集、存储和分析大量的日志数据。它提供了强大的搜索、过滤和可视化功能,可以帮助我们轻松地监控系统和应用程序的运行情况。 在Linux系统下安装和配置Graylog主要包括以下几个步骤: 准备安装…

Hadoop3:HDFS存储优化之小文件归档

一、情景说明 我们知道,NameNode存储一个文件元数据,默认是150byte大小的内存空间。 那么,如果出现很多的小文件,就会导致NameNode的内存占用。 但注意,存储小文件所需要的磁盘容量和数据块的大小无关。 例如&#x…

学习Python的IDE功能--(一)入门导览

项目视图是主要工具窗口之一。它包含项目目录、SDK 特定的外部库和临时文件。点击带条纹的按钮可以预览演示项目。您也可以按Alt1打开。点击以打开项目视图,展开项目目录以查看项目文件。双击以打开welcome.py。 切换到"学习"工具窗口继续学习本课次。…

Qt中 .pro、.pri、.prf、.prl文件简解

一、pro文件 .pro就是工程文件(project),是Qt项目的主配置文件,用于描述整个项目的基本信息和编译配置。在Qt中用qmake生成makefile文件,它是由.pro文件生成而来的,.pro文件的具体格式语法如下&#xff1a…