XIAO ESP32S3部署Edge Impulse模型

news2024/11/18 0:21:38

在上一篇文章中我们介绍了如何使用edge impulse训练一个图片分类模型并导出arduino库文件。在这篇文章中我们将介绍如何在esp32s3中部署这个训练好的图片分类模型。

添加进Arduino库

有两种方法将下载的文件添加进Arduino库。

  1. 在Arduino IDE程序中,转到项目选项卡并在导入库中选择选项添加.zip库,之后选择Edge Impulse下载的.zip文件即可添加成功。
    在这里插入图片描述
  2. 直接将下载的文件解压到Arduino库文件夹下。

导入成功后Arduino库文件夹下会多出来一个Edge Impulse导出的文件夹。
在这里插入图片描述

替换 ESP NN

在使用下载的库之前,需要启用ESP NN加速器。下载链接我放在了公众号“通信电子坊”中,在后台回复“ESP-NN”即可获取。下载并解压后将其替换为Edge Impulse导出库文件夹中“src/edge-impulse-sdk/porting/espressif”文件夹下的ESP-NN文件夹。

修改例程

之后我们在Edge Impulse导出库文件夹中的“examples\esp32\esp32_camera”目录下找到“esp32_camera.ino”示例文件。在这个文件的基础上我们进行修改。

打开PSRAM

由于我们采集到的图片比较占内存,是要存储到PSRAM中的,因此需要在Arduino中打开PSRAM选项。
在这里插入图片描述

修改管脚定义

在Edge impulse提供的示例代码中有两种开发板的摄像头管脚定义,分别是“CAMERA_MODEL_ESP_EYE ”和“CAMERA_MODEL_AI_THINKER”。具体如下:

#define CAMERA_MODEL_ESP_EYE // Has PSRAM
//#define CAMERA_MODEL_AI_THINKER // Has PSRAM

#if defined(CAMERA_MODEL_ESP_EYE)
#define PWDN_GPIO_NUM    -1
#define RESET_GPIO_NUM   -1
#define XCLK_GPIO_NUM    4
#define SIOD_GPIO_NUM    18
#define SIOC_GPIO_NUM    23

#define Y9_GPIO_NUM      36
#define Y8_GPIO_NUM      37
#define Y7_GPIO_NUM      38
#define Y6_GPIO_NUM      39
#define Y5_GPIO_NUM      35
#define Y4_GPIO_NUM      14
#define Y3_GPIO_NUM      13
#define Y2_GPIO_NUM      34
#define VSYNC_GPIO_NUM   5
#define HREF_GPIO_NUM    27
#define PCLK_GPIO_NUM    25

#elif defined(CAMERA_MODEL_AI_THINKER)
#define PWDN_GPIO_NUM     32
#define RESET_GPIO_NUM    -1
#define XCLK_GPIO_NUM      0
#define SIOD_GPIO_NUM     26
#define SIOC_GPIO_NUM     27

#define Y9_GPIO_NUM       35
#define Y8_GPIO_NUM       34
#define Y7_GPIO_NUM       39
#define Y6_GPIO_NUM       36
#define Y5_GPIO_NUM       21
#define Y4_GPIO_NUM       19
#define Y3_GPIO_NUM       18
#define Y2_GPIO_NUM        5
#define VSYNC_GPIO_NUM    25
#define HREF_GPIO_NUM     23
#define PCLK_GPIO_NUM     22

#else
#error "Camera model not selected"
#endif

如果你是用的是“CAMERA_MODEL_ESP_EYE ”或“CAMERA_MODEL_AI_THINKER”开发板,那么只需要修改开头的宏定义即可

#define CAMERA_MODEL_ESP_EYE // Has PSRAM
//#define CAMERA_MODEL_AI_THINKER // Has PSRAM

由于我们这里使用的是XIAO ESP32S3,因此我们需要查看其原理图找到摄像头对应的管脚进行修改。如果使用的是其它开发板,步骤也一样。

我们首先将上面的管脚定义都删除,之后把自己的开发板的管脚定义添加进去

#define PWDN_GPIO_NUM     -1
#define RESET_GPIO_NUM    -1
#define XCLK_GPIO_NUM     10
#define SIOD_GPIO_NUM     40
#define SIOC_GPIO_NUM     39

#define Y9_GPIO_NUM       48
#define Y8_GPIO_NUM       11
#define Y7_GPIO_NUM       12
#define Y6_GPIO_NUM       14
#define Y5_GPIO_NUM       16
#define Y4_GPIO_NUM       18
#define Y3_GPIO_NUM       17
#define Y2_GPIO_NUM       15
#define VSYNC_GPIO_NUM    38
#define HREF_GPIO_NUM     47
#define PCLK_GPIO_NUM     13

之后我们编译代码并将其下载到自己的开发板上即可看到效果了。

遇到的问题

在下载完程序后,我还遇到了报错“摄像头初始化失败,错误码0xffffffff”的问题。这个可能是由于摄像头与开发板的连接松动或者是管脚定义错误导致的,只需要重新拔插一下摄像头及其模块或者仔细检查引脚对应情况并修改即可解决。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

php apache 后台超时设置

最近在写一个thinkphp项目的时候,发现Ajax从后端请求数据时间比较长,大概需要45秒左右,但是一旦请求时间超过40s,页面就会超时500了,一开始以为是ajax请求时间不能太长,后来将Ajax请求改为同步且timeout设置…

景联文科技:提供行业垂直大模型训练数据

近年来,以大模型为代表的人工智能技术已成为国家科技实力竞争的焦点。其中垂直大模型作为重要方向,在相关政策引导及市场需求的驱动下,已展现出较强的发展活力。 行业垂直大模型是针对特定行业的需求和场景进行深度定制的。这意味着模型在训练…

软考高级:需求变更管理过程概念和例题

作者:明明如月学长, CSDN 博客专家,大厂高级 Java 工程师,《性能优化方法论》作者、《解锁大厂思维:剖析《阿里巴巴Java开发手册》》、《再学经典:《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

【ARM】MDK在programming algorithm界面添加FLM

【更多软件使用问题请点击亿道电子官方网站查询】 1、 文档目标 解决在programming algorithm界面中无法添加想要的Flash编程算法的问题 2、 问题场景 在对于Debug进行Flash Download进行配置的时候,在programming algorithm界面中有对应的Flash编程算法。可以通过…

【python】anaconda安装过程

【运行环境】Windows11 文章目录 一、anaconda下载二、anaconda安装三、环境变量配置四、测试环境变量是否配置成功五、总结 一、anaconda下载 1、输入网址“https://www.anaconda.com”进入Anaconda官网。 2、找到【Free Download】点击进入: 3、点击对应系统的…

spring源码环境搭建问题解决

源码搭建需要提前准备的环境 jdk环境变量配置 gradle环境变量配置(gradle安装配置详细教程(windows环境)_windows安装gradle-CSDN博客) spring5.2.x jdk1.8 gradle5.6.4(源码对应的gradle版本查看路径,在源码中找对应文件配置&#xff1a…

leetcode一天一题-第1天

为了增加自己的代码实战能力,希望通过刷leetcode的题目,不断提高自己,增加对代码的理解,同时开拓自己的思维方面。 题目名称:两数之和 题目编号:1 题目介绍: 给定一个整数数组 nums 和一个整数…

基于恒功率PQ控制的三电平并网逆变器MATLAB仿真模型

微❤关注“电气仔推送”获得资料(专享优惠) 模型简介 三相 T 型三电平逆变器电路如图所示,逆变器主回路由三个单相 T 型逆变器组成。 直流侧输入电压为 UPV,直流侧中点电位 O 设为零电位,交流侧输出侧是三相三线制连…

【快速上手ProtoBuf】proto 3 语法详解

1 🍑字段规则🍑 消息的字段可以⽤下⾯⼏种规则来修饰: singular :消息中可以包含该字段零次或⼀次(不超过⼀次)。 proto3 语法中,字段默认使⽤该规则。repeated :消息中可以包含该…

【Java设计模式】十九、中介者模式

文章目录 1、中介者模式2、案例3、总结 1、中介者模式 如图: 同事类之间关联较多时,整体出现网状结构,耦合度极高。一个对象一变动,好多对象都得改。若变为右边的星形结构,则一个类的变动,只影响自身与中介…

滴滴 Flink 指标系统的架构设计与实践

毫不夸张地说,Flink 指标是洞察 Flink 任务健康状况的关键工具,它们如同 Flink 任务的眼睛一般至关重要。简而言之,这些指标可以被理解为滴滴数据开发平台实时运维系统的数据图谱。在实时计算领域,Flink 指标扮演着举足轻重的角色…

vue中ref 根据多选框所选数量,动态地变换box的高度

查看本专栏目录 关于作者 还是大剑师兰特:曾是美国某知名大学计算机专业研究生,现为航空航海领域高级前端工程师;CSDN知名博主,GIS领域优质创作者,深耕openlayers、leaflet、mapbox、cesium,canvas&#x…

BufferWriter类解析

咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java SE相关知识点了,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好…

如何进行软件安全性测试?CMA、CNAS软件安全测试报告获取

软件安全性测试是保障软件应用安全的重要手段,通过对软件系统的安全性进行全面评估和检测,以确保软件能够抵御各种潜在的安全威胁和风险。那么如何进行软件安全性测试?CMA、CNAS软件安全测试报告又该如何获取呢? 软件安全性测试是一种基于黑盒测试的方…

【机器学习智能硬件开发全解】(三)—— 政安晨:嵌入式系统基本素养【计算机体系结构中的CPU关系】

通过上一篇文章的学习: 【机器学习智能硬件开发全解】(二)—— 政安晨:嵌入式系统基本素养【处理器原理】https://blog.csdn.net/snowdenkeke/article/details/136662796我们已经知道了CPU的设计流程和工作原理,紧接着一个新问题…

游戏数据处理

游戏行业关键数据指标 ~ 总激活码发放量、总激活量、总登录账号数 激活率、激活登录率 激活率 激活量 / 安装量 激活率 激活量 / 激活码发放量 激活且登录率 激活且登录量 / 激活码激活量 激活且登录率应用场景 激活且登录率是非常常用的转化率指标之一,广泛…

DETR Doesn’t Need Multi-Scale or Locality Design

论文名称:PlainDetr 发表时间:ICCV2023 开源代码 作者及组织: Yutong Lin,Yuhui Yuan等,来自西安交大,微软亚洲研究院。 前言 自Detr以来,后续paper的改进的方向:主要是将归纳偏置重新又引入进…

如何实现sam(Segment Anything Model)|fastsam模型

sam是2023年提出的一个在图像分割领域的大模型,其具备了对任意现实数据的分割能力,其论文的介绍可以参考 https://hpg123.blog.csdn.net/article/details/131137939,sam的亮点在于提出一种工作模式,同时将多形式的prompt集成到了语…

清华把大模型用于城市规划,回龙观和大红门地区成研究对象

引言:参与式城市规划的新篇章 随着城市化的不断推进,传统的城市规划方法面临着越来越多的挑战。这些方法往往需要大量的时间和人力,且严重依赖于经验丰富的城市规划师。为了应对这些挑战,参与式城市规划应运而生,它强…

短剧在线搜索源码(全网首发)

一个非常哇塞的在线短剧搜索页面,接口已经对接好了,上传源码到服务器解压就能直接用,有能力的可以自己改接口自己写自己的接口 接口文档地址:doc.djcat.sbs 源码下载地址:https://pan.xunlei.com/s/VNstN8C6N3VK1a1k…