今天小编给大家带来的是矽递科技和硬禾学堂联合举办的寒假在家练活动的第三个项目,基于XIAO ESP32S3 sense的宠物猫检测项目,该项目使用XIAO ESP32S3 sense作为主要硬件,在Robo Flow平台上处理XIAO摄像头抓拍的数据,处理好的数据经过AI Studio平台训练输出模型,通过SenseCraft 平台上传模型至硬件从而实现项目功能。
材料清单
硬件:
- Seeed Studio XIAO ESP32S3 Sense
软件:
- Arduino IDE
- roboFlow
- AI Studio
- SenseCraft
项目技术要点分析
基于XIAO ESP32 S3开发板的宠物猫视觉识别检测项目,旨在利用深度学习技术和嵌入式系统,实现对宠物猫行为和特征的实时监控和分析。本项目要求包括硬件设备、软件算法、功能模块和性能指标。
在硬件设备方面,项目需要以XIAO ESP32 S3开发板为主控,配备摄像头模块采集宠物猫咪的图像数据。摄像模块需要具有高清晰度和宽广的视野,以保证对宠物猫的全方位观察。通过摄像头模块采集的视频流,实时检测宠物猫的行为和特征,对监控数据进行分析和统计。
在软件算法方面,项目需要建立基于深度学习技术的宠物猫视觉识别模型。识别算法还需要具备一定程度的鲁棒性,能够准确识别不同光照条件、不同背景下宠物猫的行为。预先训练的深度学习模型用于识别猫,从而实时监控家中是否有猫。
完成的功能和性能
使用XIAO ESP32 S3开发板,通过OV2640摄像头的控制,通过预训练的深度学习模型对猫进行识别,从而实现对家里是否有猫的即时监控。当检测到猫时,会发送光信号并闪烁 LED。
性能如下:
1、实时性:系统需要对摄像头采集的视频流进行实时处理,确保对宠物猫的行为进行及时的监控和反馈。
2、准确度:视觉识别算法需要具有较高的精度,能准确识别宠物猫的特征。
3、稳定性:系统需要运行稳定,长期连续监测宠物猫,无碰撞或异常情况。
4、可扩展性:系统需要具有一定的可扩展性,以方便后续功能和性能的升级和扩展。
实施思路
1.使用Arduino IDE软件和图像采集程序,将猫咪的照片拍摄到数据集中,以便后续制作。
2、使用机器人流平台上传猫咪照片进行图像数据标注的标签分类,下载数据文件,导出预处理数据。
- 使用AI Studio平台的ModelAssistant项目对模型进行训练。
4、将自定义模型上传至Sense Craft平台,连接开发板,启动猫目标检测识别。
制作过程
- 流程图
2.组装 XIAO ESP32 S3
- 在Arduino IDE上运行图像捕获程序
初始化开发板后
if(camera_sign && sd_sign){
String command;
// Read incoming commands from serial monitor
while (Serial.available()) {
char c = Serial.read();
if ((c != '\n') && (c != '\r')) {
command.concat(c);
} else if (c == '\n') {
commandRecv = true;
command.toLowerCase();
}
} //If command = "capture", take a picture and save it to the SD card
if (commandRecv && command == "capture") {
commandRecv = false;
Serial.println("\nPicture Capture Command is sent"); char filename[32];
sprintf(filename, "/image%d.jpg", imageCount);
photo_save(filename);
Serial.printf("Saved picture:%s\n", filename); Serial.println("");
imageCount++;
}
}
使用camera\_sign和sd\_sign作为条件,确定相机和SD卡是否已成功初始化。接下来,读取串口接收命令,并在收到“捕获”命令时拍摄照片并将其保存到 SD 卡。
接下来,将图片保存在SD卡上。
// 保存图片到SD卡
void photo_save(const char * 文件名) {
// 拍摄照片
camera_fb_t *fb = esp_camera_fb_get();
if (!fb) {
Serial.println("获取相机帧缓冲区失败");
return;
}
// 保存照片到文件
writeFile(SD, 文件名, fb->buf, fb->len);
// 释放图像缓冲区
esp_camera_fb_return(fb);
Serial.println("照片已保存到文件");
}
使用的 writeFile() 函数如下:
// SD card write file
void writeFile(fs::FS &fs, const char * path, uint8_t * data, size_t len){
Serial.printf("Writing file: %s\n", path); File file = fs.open(path, FILE_WRITE);
if(!file){
Serial.println("Failed to open file for writing");
return; }
if(file.write(data, len) == len){
Serial.println("File written");
} else {
Serial.println("Write failed"); }
file.close();
}
4.将收集到的猫咪照片上传至Robo Flow平台。
5.共注释了1000张猫咪照片。
6.将最终的预处理数据集转换为COCO格式进行导出。
使用AI Studio平台训练模型,引入ModelAssistant项目。
!git clone https://github.com/Seeed-Studio/ModelAssistant.git %cd ModelAssistant
8.导入要训练的数据集。
%env DATA_ROOT="https://universe.roboflow.com/ds/aliqVGka4t?key=JibV8Iog4S"
%env NUM_CLASSES=1
9.训练 Swift-YOLO 微型模型。
!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
10.将模型上传到 SenseCraft 平台
遇到的主要问题
1、第一次训练模型识别准确率低
当模型第一次训练时,使用的数据集太小,只有200张图片,训练好的模型可以很容易地将人或其他物体识别为猫。当模型进行重新训练时,使用更大的数据集,训练时间更长,最终提高了训练模型的识别精度。
2.引脚无法控制。使用 SenseCraft 运行模型时,只能执行一次 LED 灯操作,无法添加其他代码或引脚。
3、运行过程中,芯片严重发热。
4、摄像机帧率低,只有十帧,无法保持高帧率的识别。
6 对未来计划的建议
该项目已成功实现了猫目标识别和检测功能,并可发送光信号报警,初步达到了预期目标,但通过增加更多外设
要实现功能扩展和延伸
1、使用OV2640摄像头分辨率有限,添加更高像素的摄像头可以使识别更清晰。
2、通过添加一些外围设备,驱动一些电机,就可以实现智能家居的应用。
3、更换频率更高的芯片,可以提高帧率。
在不更换硬件的情况下可以升级的地方:
1、使用较大的数据集来训练模型,训练的照片越多,最终模型的识别效果越好。
2.可以添加更多标签来识别更多类型的宠物。
3.联网后,连接一些应用程序进行远程控制。
4、使用蓝牙连接部分设备。