K210(1)解决一些新上手出现的问题

K210(1)解决一些新上手出现的问题

  • 几个好用的网站
  • 问题1:AttributeError: 'image' object has no attribute 'xxxx'
  • 问题2:ERR. NO_ MEM: memory not enough
    • 上策: 扩大内存
    • 下策:减小固件
    • 其他方法

几个好用的网站

openmv官方给出了它的包,可以在文档中找到
sipeed官网给出的操作手册
MaixPy 精简版入门教程(AI视觉向)

问题1:AttributeError: ‘image’ object has no attribute ‘xxxx’

这个错误出现的原因是没有下载固件到开发板上
打开flash_gui,添加固件,(下载链接)这个固件版本不能太低
K210(1)解决一些新上手出现的问题_第1张图片
烧录地址默认为 0x00000 即可。选择开发板和串口 COM,串口选择自己开发板对应的串口。

K210(1)解决一些新上手出现的问题_第2张图片
然后下载固件,完成,就不会报错啦
K210(1)解决一些新上手出现的问题_第3张图片

问题2:ERR. NO_ MEM: memory not enough

超出内存空间了,这个时候有两种解决方式

上策: 扩大内存

在 MaixPy 中, 目前使用了两种内存管理, 一种是 GC(垃圾回收), 另一种是系统堆内存, 两者同时存在。

k210 比如有 6MiB 通用内存, 需要用到内存的有固件(K210 是一次性将所有代码加载到内存的),一些功能所需比如摄像头缓冲区等,还有存放模型, 另外有 2MiB 给 KPU 专用的内存(如果使用 KPU 的话)

因为GC要扫描内存, 如果除了程序占用的内存,剩下的都给GC,那每次扫描需要耗费大量时间,所以分成了两中内存。 堆内存由 C层面的代码控制,主要用于图片内存, AI内存, LCD 内存, 以及模型加载到内存等

GC 内存的总大小是可以设置的, 所以,根据具体的使用情况可以适当修改GC内存大小, 比如:

  1. 为了加载更大的模型,可以把 GC内存设置小一点
  2. 如果分配新的变量提示内存不足, 可以适当将GC内存设置大一点即可
  3. 如果都不够了, 就要考虑缩减固件大小,或者优化代码了

设置GC内存大小示例:

from Maix import utils
import machine

print(utils.gc_heap_size())

utils.gc_heap_size(7 * 1024 * 1024) # 7MiB
machine.reset() # 注意修改后需要重启生效

查看内存分配情况:

import gc

print(gc.mem_free() / 1024) # stack mem

import Maix

print(Maix.utils.heap_free() / 1024) # heap mem

下策:减小固件

重新下载一个精简版固件,
DIY一个小固件,压缩固件体积,通过裁减功能来减少内存占用,这个在前面固件升级部分有说明,使用在线编译定制固件,或者自己本机编译,方法见这里

其他方法

  1. 减少内存的使用,比如全局变量,不使用了尽量删除(通过del 变量名),删除之后还可以手动回收 GC 内存(通过gc.collect())。图片分辨率也可以尽量不要用太大(一般QVGA)

  2. 如果模型太大,可以使用kpu.load_flash()函数来加载模型(只支持kmodel):这会在需要模型时实时从flash读取内容,这样就可以装载大模型了,效率会低一点,帧率会有所降低(原理有兴趣可以见另一篇文章K210 从flash实时加载大模型)。使用方法见这里,注意,模型需要先用脚本转一下大小端,别漏了!!

  3. 如果你在操作 image时或者lcd画图时遇到这个问题,可以合理利用lcd的display(img, oft=(x,y))的oft参数来实现在lcd指定区域画图,而不是画整副图。

你可能感兴趣的:(图像,单片机,嵌入式硬件)