基于Seeed XIAO ESP32S3 Sense开发板实现宠物表情识别系统
该项目使用了Robotflow与SenseCraft AI、edge impulse与Arduino IDE,实现了基于Seeed XIAO ESP32S3 Sense开发板实现宠物表情识别系统的设计,它的主要功能为:宠物表情识别、宠物愤怒程度检测。
标签
ESP32
ESP32-S3-BOX-LITE
嵌入式AI
宠物
表情识别
墨非沧海
更新2024-03-28
吉林大学
121

第1章                项目介绍

1.1       项目功能介绍

本项目实现了基于目标检测的宠物表情识别的功能,训练图片超过一千张,并以这些图片融合了更大的预训练模型提升推理效果。

利用相机获取图像,ESP32S3开发板实现图像识别推理,实时监控宠物表情,如果出现表情“悲伤”“快乐”“生气”等,将上传给上位机,及时向用户提供信息。

本项目依托于2024年寒假练活动平台7:https://www.eetree.cn/task/412

 根据平台活动要求,本项目已经同步上传至Hackster平台,链接:https://www.hackster.io/inkglede/pet-expression-recognition-system-with-seeed-xiao-esp32s3-df317d

 

1.2       设计思路

随着科技的日益发展,智能家居已经不是遥不可及的梦想。我们渴望创造一个不仅能让家人更舒适、安全和便捷的家居环境,同时也能让我们的宠物伙伴享受到同等的来自科技的关爱与舒适。

Seeed XIAO ESP32S3 Sense开发板具备摄像头,同时ESP32S3芯片适配嵌入式TinyML AI工具如Edge Impulse和SenseCraft AI,初步具备部署图像识别模型的能力。

矽递科技提供了ModelAssistant这一训练框架,训练完成的模型可以与SenseCraft AI适配。

在线合作数据标注网站roboflow可以快速标注,生成适用于ModelAssistant的数据集。

综上,电子森林与矽递科技提供的若干工具,可以围绕一组动物表情数据集,开展数据标注、数据预处理、模型训练、模型微调、模型部署,最终实现基于目标检测的宠物表情识别的功能。

 

1.3       硬件框图

XIAO ESP32S3/SIAO ESP32S3感应前端指示图

image.png


XIAO ESP32S3/SIAO ESP32S3感应返回指示图

image.png


XIAO ESP32S3/SIAO ESP32S3感应引脚列表

image.png

image.png


 

1.4       软件流程图

image.png

 

1.5       项目关联文件获取

宠物情绪数据集-分标签,该数据集分好各个标签,配合下文自动标注,可以迅速导出一千多张图片作为训练集。

网盘链接:

链接:https://pan.quark.cn/s/91d5bb453dd8

提取码:HH3G 

网站上传内容,ArduinoESP32S3_image.zip:

包含了“拍照代码调试”对应的相机代码,以及部署AI模型所用到的代码“esp32_camera_test_pe.ino”,

还有官方给出的预训练框架的教程,“分类Google-Colab-PFLD-Grove-Example.ipynb”和“目标检测Google-Colab-SWFIT-YOLO-A1101-Example.ipynb”。

还提供了“1epoch_5_int8.tflite”,可以直接部署于SenseCraft AI的“愤怒程度检测模型”,以及“4epoch_5_int8.tflite”宠物表情检测模型。

 

第2章                硬件介绍

2.1       特性

Seeed Studio XIAO系列是小型开发板,共享类似的硬件结构,尺寸实际上是拇指大小。这里的“XIAO”代表它的尺寸特征“小“,另一层意思是指它的功能强大“骁”。 Seeed Studio XIAO ESP32S3 Sense集成了摄像头传感器、数字麦克风和SD卡支持。结合嵌入式ML计算能力和摄影能力,这款开发板可以成为您开始使用智能语音和视觉AI的绝佳工具。

处理器

ESP32-S3R8

Xtensa LX7双核32位处理器,工作频率高达240 MHz

接口

1x UART, 1x IIC, 1x IIS, 1x SPI, 11x GPIOs (PWM), 9x ADC, 1x User LED, 1x Charge LED, 1x B2B Connector (with 2 additional GPIOs)

1x Reset button, 1x Boot button

无线

完整的2.4GHz Wi-Fi子系统

BLE:蓝牙5.0,蓝牙网状

尺寸

21 x 17.5 x 15mm(带扩展板)

内置传感器

适用于1600*1200的OV2640摄像头传感器、数字麦克风

输入电压

5V(Type-C)、4.2V(BAT)

存储器

片上8M PSRAM和8MB闪存

板载SD卡插槽,支持32GB FAT

工作温度

-40°C ~ 65°C

 

强大的MCU板:采用ESP32S3 32位双核Xtensa处理器芯片,运行频率高达240 MHz,安装多个开发端口,支持Arduino/MicroPython

高级功能:可拆卸的OV2640相机传感器,分辨率为1600*1200,与OV5640相机传感器兼容,内置额外的数字麦克风

精心设计的电源:锂电池充电管理功能,提供4种功耗模式,可实现低至14μA的深度睡眠模式

拥有更多可能性的美好记忆:提供8MB PSRAM和8MB FLASH,支持用于外部32GB FAT内存的SD卡插槽

出色的射频性能:支持2.4GHz Wi-Fi和BLE双无线通信,连接U.FL天线时支持100m+远程通信

紧凑型设计:21x17.5mm,采用XIAO的经典外形,适用于可穿戴设备等空间有限的项目

来自 SenseCraft Al 的预训练 Al 模型,无需代码即可部署

 

2.2       参考链接

·       [Wiki] 开始使用Seeed Studio XIAO ESP32S3 (Sense)

·       硬件基础教学(Sense版本)

·        

o   摄像头使用

o   麦克风使用

o   SD 卡槽使用和文件系统

·       基于 Seeed Studio XIAO 的教程和项目合集

·       XIAO SoM 用户手册

·       XIAO ESP32S3(Sense)上使用 TinyML 教程

·       XIAO ESP32S3 Sense成为 Edge Impulse 支持的社区板卡

·       PlatformIO新增对XIAO ESP32S3的支持

·       XIAO ESP32S3 with MicroPython

·        SenseCraft Al

 

第3章                实现的功能及图片展示

3.1       愤怒度识别

该部分只实现有关愤怒的目标检测,并根据宠物表情评估是否生气:


image.png

image.png

image.png

3.2       宠物表情识别

该部分可以识别四种表情。

image.png

image.png


image.png


第4章                主要代码片段及说明

4.1       Robotflow与SenseCraft AI方案

4.1.1      在线部署方案的实现——AI辅助标注教程

创建一个工程,选择追踪,分类项目百度飞浆的Notebook无法训练。

image.png


创建几个标签。

image.png

数据集上传,提供的数据集已经分好标签,非常容易借助于系统自动标注。

image.png首先点击“save and continue”,上传后才能使用自动标注

image.png

建议选择随机四张看标注结果。

image.png

点击edit all。

image.png

删除到只剩下一个标签

image.png

选中四个图片测试效果,由于每次导入都是一个类的标签,所以降低置信度即可。需要的只是追踪,并且对特定类标签。然后点击Auto label。

image.png

标注,使用AI辅助。直接关闭浏览器就可以。

每一轮标注完成后,会发邮件提醒。当前(2024年3月)是 Free Beta阶段,免费使用。

image.png

标注完成后收到邮件通知,点击review。

image.png

接受,然后加入,

image.png

这样数据集才会更新。

 

上述自动标注的原理,可以查看本链接:https://blog.roboflow.com/yolo-world-prompting-tips/

基于以上方案,可以无限快速拓展数据集。

 

导入完成,点击rebalance,重新配比例,符合训练框架要求。

image.png

改为7:3无测试集。

image.png


其他选项直接continue,后续creat。然后导出:

image.png

选择coco格式:

image.png

得到代码:https://app.roboflow.com/ds/idWpYZYX6e?key=6dUnJDONfV

4.1.2      训练

进入飞浆社区,飞桨AI Studio星河社区-人工智能学习与实训社区 (baidu.com)

参考该文档教程:

https://doc.weixin.qq.com/doc/w3_AeEAVwagAOc4L8kgTHcRAeB09lxvL?scode=AGEAZwfLABEAovuSS1AeEAVwagAOc

 

公开项目中搜索“ModelAssistant”。由于本项目使用图片超过一千张,因此使用了2算力点每小时的服务器。

逐步运行需要修改这个位置为下载代码。

image.png

同时修改分类数,%env NUM_CLASSES=4

需要注意每重启一次环境就要安装一次,部分库可能换个飞浆配置就存储失效要重新部署。

每个单元格依次运行后,从以下位置下载即可。

/home/aistudio/ModelAssistant/work_dirs/swift_yolo_tiny_1xb16_300e_coco/epoch_5_int8.tflite

代码片段解析

以下为模型训练部分。

num_classes为有多少类,需要分为几个写多少。

!python tools/train.py \

  configs/swift_yolo/swift_yolo_tiny_1xb16_300e_coco.py \

  --cfg-options \

    epochs=10 \

    num_classes=${NUM_CLASSES} \

    workers=1\

    imgsz=192,192 \

    data_root=${DATA_ROOT} \

    load_from=https://files.seeedstudio.com/sscma/model_zoo/detection/person/person_detection.pth

训练后验证模型。

!python tools/inference.py \

    configs/swift_yolo/swift_yolo_tiny_1xb16_300e_coco.py \

    "$(cat work_dirs/swift_yolo_tiny_1xb16_300e_coco/last_checkpoint)" \

    --dump work_dirs/swift_yolo_tiny_1xb16_300e_coco/last_checkpoint.pkl \

    --cfg-options \

        data_root=${DATA_ROOT} \

        num_classes=${NUM_CLASSES} \

        workers=1 \

        imgsz=192,192

 

接下来导出训练结果为可部署的文件。导出位置为/home/aistudio/ModelAssistant/work_dirs/swift_yolo_tiny_1xb16_300e_coco/epoch_5_int8.tflite 。

!python tools/export.py \

  configs/swift_yolo/swift_yolo_tiny_1xb16_300e_coco.py \

  $(cat work_dirs/swift_yolo_tiny_1xb16_300e_coco/last_checkpoint) \

  --cfg-options \

    data_root=${DATA_ROOT} \

    num_classes=${NUM_CLASSES} \

    imgsz=192,192

 

4.1.3      部署

使用该工具,SenseCraft AI (seeed-studio.github.io)

选择导出的epoch_5_int8.tflite 上传后部署,然后推理即可。

 

4.2       edge impulse与Arduino IDE方案

首先导入AI模型所需的库:

#include <Pet_Expression_inferencing.h>

#include "edge-impulse-sdk/dsp/image/image.hpp"

运行模型推理:

    // Run the classifier

    ei_impulse_result_t result = { 0 };

 

    EI_IMPULSE_ERROR err = run_classifier(&signal, &result, debug_nn);

    if (err != EI_IMPULSE_OK) {

        ei_printf("ERR: Failed to run classifier (%d)\n", err);

        return;

    }

 

    // print the predictions

    ei_printf("Predictions (DSP: %d ms., Classification: %d ms., Anomaly: %d ms.): \n",

                result.timing.dsp, result.timing.classification, result.timing.anomaly);

 

 

第5章                遇到的主要难题及解决方法

5.1       Robotflow与SenseCraft AI——基于AI辅助的数据标注

数据集预处理阶段,roboflow预处理过于繁琐,要求对每张图片标注,年后该平台上线了AI辅助标注的功能,实现了一千多张图片标注。

5.2       edge impulse与Arduino IDE方案

5.2.1      本部分序言与弃用原因

另外,本部分记录调试edge impulse方案。该部分编译过程可能存在报错,编译后可能存在无法运行的情况,比如摄像机无法连接。即使在通过后,具体识别效果也不够好,因为相当于预训练模型加入少数图像微调,很难通过调参等手段进一步优化。

本文认为,解决以上困难的可行途径为进一步更新、适配 edge impulse 平台,包括ESPNN等进一步适配。对用户,可以通过增加训练集的方案。当然,由于edge impulse采用的是少数训练集微调较大模型方案,因此,一些冷门的图像识别需求,不限于分类和目标检测,无法很好地基于通用图像模型完成识别,此时必须寻求其他TinyML方案。本项目作为一个“宠物表情检测”项目,在过去的竞赛以及开源项目相对冷门,基于以下方案的识别效果并不是很好,因此本文最终展示效果的方案,还是采用了4.1和5.1提到的Robotflow与SenseCraft AI方案。

 

 

本项目参考以下教程,形成了较为全面的模型部署技术路线:

https://www.hackster.io/mjrobot/tinyml-made-easy-image-classification-cb42ae

本部分参考如下项目的C代码:

https://github.com/Mjrovai/XIAO-ESP32S3-Sense

 

edge impulse网站教程:

https://studio.edgeimpulse.com/studio/profile/projects?autoredirect=1

 

5.2.2      硬件准备

内存卡应该格式化。


 image.png

5.2.3      数据集预处理

本文基于如下图像数据集:

https://drive.weixin.qq.com/s?k=AGEAZwfLABEKM9bBhVATkA4QaAAGk#/preview?fileId=i.1970325135517537.1688855925285177_f.6983006661lpd

同时,由于采用网络数据集精度有限,采用以下拍照程序,调用seed xiao拍照后形成数据集效果可能更好。

https://drive.weixin.qq.com/s?k=AGEAZwfLABEauo00pUATkA4QaAAGk

 

5.2.4      在线训练

前期对分类探索,确定了若干在线训练方案,都不尽人意。

最终使用该网站。

创建项目

image.png

点击 add existing data ,上传.

image.png


 

上传后

image.png

训练设置

image.png

设置图像灰度化

image.png

生成结果

image.png

使用 MobileNet V1 和 α=0.10 时(约 53.2K RAM 和 101K ROM),在另一个极端情况下将获得更小的占用空间。

 

当我们首次发布这个在 ESP32-CAM 上运行的项目时,我们采用了较低的可能性,这保证了推理延迟小,但精度不高。在第一次测试中,我们将保留这一模型设计(MobileNet V1 和 α=0.10)。

image.png

最终训练设定如下

image.png

训练结果

image.png


已知ESP32 片上8M PSRAM和8MB闪存,所以可以更换更好的模型

如选用MobileNetV2 96x96 0.35 进行二次训练。

 

 

接下来导出模型

 image.png


5.2.5      烧录完成

项目使用 467553 字节(13%)的程序存储空间。最大值为 3342336 字节。

 个全局变量使用 32300 个字节(9%)的动态内存,剩下 295380 个字节用于局部变量。最大值为 327680 字节。

image.png

image.png

 

 

第6章                未来的计划或建议

本文认为ESP开发板优质的物联网特性,以及官方给予的充分配套,可以联动旗下的智能家居,实现更多功能。

以手机为中控,借助于手机的算力,单片机作为端侧传感器,可以实现更多有关AI或图形运算等对配置要求更高的项目需求。

基于大模型API,可以实现基于该芯片的智能表盘,在该表盘实现通用人工智能文字问答、文生图、文生视频等若干AI应用。

最后,ESP32S3对应芯片具备一定的AI推理能力,满足部分边缘计算应用场景,是一款较好的开发板。

 

 

附件下载
ArduinoESP32S3_image.zip
包含Arduino路线源码以及训练使用Notebook
1epoch_5_int8.tflite
多种宠物的愤怒度检测模型,可以直接上传SenseCraft AI
4epoch_5_int8.tflite
多种宠物的情绪(4种)检测模型,可以直接上传SenseCraft AI
团队介绍
传统工科团队
团队成员
墨非沧海
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号