笔者在部署edgeimpulse的模型在openmv上面是发现始终报错Expected a ndarray with dtype float

  在与chatgpt无效沟通以及在网上大量搜索都找不到资料后想到了这可能是固件版本问题,可笑的是一开始任何一个ai都建议并且帮我改代码但是openmv只有轻量化的numpy在ulab中这导致问题是越改越多,因为openmv是不支持完整的numpy的用不了类似astype这类函数

一开始ai点出了是我的固件版本太低其实这里是ai错了我的固件是最新的版本9月份的,不过IDE一开始烧录不进去会卡住先断开连接然后再点连接当出现板子时候再去连接上openmv选择重新刷新固件,这里我先给出查看摄像头版本的代码

import os
print(os.uname())

然后会输出你摄像头固件具体版本以及时间release和version

sysname='OpenMV4P-H7', nodename='OpenMV4P-H7', release='1.26.0', version='034e21a7 on 2025-09-02', machine='OPENMV4P with STM32H743')
OpenMV 23808f8; MicroPython 034e21a7; OPENMV4P with STM32H743

一、固件刷新

其实到这里可以想到1.26这个版本可能是先遣版本edge那边可能没更新官方适配导致的错误我们尝试回退一个版本到1.25这里试试,以下是通过IDE去更新固件教程其他方式可以搜索其他博客

1.先断开与openmv的连接然后点击左下角的连接按钮

2.选择你的主板型号,只有H7 PLUS可以训练模型好像,笔者这边就选择了自己的openmv型号plus,!!!千万不要选择错误,错误的固件刷入会导致摄像头全绿以及程序报错

3.这里是选择是否擦除你内部文件,我们刷固件直接点确认就好

4,这里断开连接后无效果点击取消进入DFU引导去刷新固件(笔者这里是没效果进入DFU了)

5.在此之前拿一根母对母的导线将openmv上面boot和rst这两个引脚相接起来然后点击确定

6.进入烧录程序后就好了,然后执行上面的代码再次查看版本号


查看版本号:release=1.25,6月份的版本

到这里笔者就没有报错Expected a ndarray with dtype float,但是又来了另一个错误'Failed to load "trained.tflite", did you copy the .tflite and labels.txt file onto the mass-storage device?

二、'Failed to load "trained.tflite", did you copy the .tflite and labels.txt file onto the mass-storage device?问题解决

其实到这里问题官方也有说明,不是什么文件损坏(被骗了),无非就两个

1.你传入的模型代码不正确(官方已经修复)

好像就是老版的tf模型输入在IDE4.不支持了要改成net,ml.Model

2.缓冲区出现问题,openmv内存不够(笔者遇到的)

我们只需要将这一段

net = ml.Model("trained.tflite", load_to_fb=uos.stat('trained.tflite')[6] > (gc.mem_free() - (64*1024)))

更改成这样子,把图像放到缓冲区就好了

net = ml.Model("/sdcard/trained.tflite", load_to_fb=True)

不出意外问题到这里应该就解决了

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐