材料清单
硬件:Seeed Studio XIAO ESP32S3 Sense软件:Arduino IDEroboFlowAI StudioSenseCraft项目技术要点分析
基于XIAO ESP32 S3开发板的宠物猫视觉识别检测项目,旨在利用深度学习技术和嵌入式系统,实现对宠物猫行为和特征的实时监控和分析。本项目要求包括硬件设备、软件算法、功能模块和性能指标。
在硬件设备方面,项目需要以XIAO ESP32 S3开发板为主控,配备摄像头模块采集宠物猫咪的图像数据。摄像模块需要具有高清晰度和宽广的视野,以保证对宠物猫的全方位观察。通过摄像头模块采集的视频流,实时检测宠物猫的行为和特征,对监控数据进行分析和统计。
在软件算法方面,项目需要建立基于深度学习技术的宠物猫视觉识别模型。识别算法还需要具备一定程度的鲁棒性,能够准确识别不同光照条件、不同背景下宠物猫的行为。预先训练的深度学习模型用于识别猫,从而实时监控家中是否有猫。
完成的功能和性能
使用XIAO ESP32 S3开发板,通过OV2640摄像头的控制,通过预训练的深度学习模型对猫进行识别,从而实现对家里是否有猫的即时监控。当检测到猫时,会发送光信号并闪烁 LED。
1、实时性:系统需要对摄像头采集的视频流进行实时处理,确保对宠物猫的行为进行及时的监控和反馈。
2、准确度:视觉识别算法需要具有较高的精度,能准确识别宠物猫的特征。
3、稳定性:系统需要运行稳定,长期连续监测宠物猫,无碰撞或异常情况。
4、可扩展性:系统需要具有一定的可扩展性,以方便后续功能和性能的升级和扩展。
1.使用Arduino IDE软件和图像采集程序,将猫咪的照片拍摄到数据集中,以便后续制作。
2、使用机器人流平台上传猫咪照片进行图像数据标注的标签分类,下载数据文件,导出预处理数据。
4、将自定义模型上传至Sense Craft平台,连接开发板,启动猫目标检测识别。
制作过程
流程图
2.组装 XIAO ESP32 S3
初始化开发板后
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:%sn", 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: %sn", 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、使用蓝牙连接部分设备。