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,添加固件,(下载链接)这个固件版本不能太低
    gui
    烧录地址默认为 0x00000 即可。选择开发板和串口 COM,串口选择自己开发板对应的串口。

    2
    然后下载固件,完成,就不会报错啦

    问题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指定区域画图,而不是画整副图。

    物联沃分享整理
    物联沃-IOTWORD物联网 » K210(1)新手常见问题解决方法详解

    发表评论