目录

占用内存设定

原有多行注释一键改为单行注释方法

内存回收:GC模块文档与教程

减少内存占用方法

多行注释测试

结果

单行注释测试

结果 

畸变矫正测试

结果

 死循环拍照内存测试

结果


占用内存设定

  1. K210一次性将所有代码读取到内存。
  2. K210有6MiB通用内存,另外有2MiBKPU用内存,初始化时可以调整。

  3. 对于打“#”号的注释(单行注释),K210会丢弃,不会占用内存空间;对于打三个引号的注释(多行注释),则不然。
  4. 畸变校正/旋转矫正不会比不操作图像占用内存多(图像尺寸和分辨率不变)。
  5. 传统算法很吃内存。

原有多行注释一键改为单行注释方法

见此文章,gpt4写了个脚本。

gpt4将Python代码多行注释变为单行注释_树欲静而风不止慢一点吧的博客-CSDN博客

内存回收:GC模块文档与教程

官方给出的内存回收gc模块文档,其中有一些常用方法:

gc – 内存回收 - Sipeed Wiki

K210完全教程处理内存不足的步骤和示例(强烈推荐看这篇!!!):

K210 MaixPy 从入门到飞升--AI视觉篇--完全教程(以及一些小问题处理比如内存不足)-次世代BUG池 (neucrack.com)

gpt4写GC模块文档:

gpt4写Python“gc”模块文档,答使用del后变量是否被回收,Python3“gc”模块与Micropython里“gc”模块对比_树欲静而风不止慢一点吧的博客-CSDN博客

上文提到的交叉引用是啥:

python模块交叉引用_python 交叉引用_laomai的博客-CSDN博客

减少内存占用方法

  1. 变量用完就扔:使用del及时删除全局变量,并通过gc.collect()方法回收。
  2. 使用Maix.utils的gc_heap_size()方法增加堆内存。如果不用KPU,大胆设为7MiB。
  3. 把多行注释转换为单行注释。
  4. 修改固件(使用官网出的定制教程会出bug),或者使用官网提供的更小的固件(然而,官网没有只带openmv基本库的版本,只有openmv+kmodel+ide的版本)。

多行注释测试

import gc
print(gc.mem_free())
# _*_ coding: utf-8 _*_
"""
Created on 2023/6/11 11:24

@Author  : HPC2H2
@File    : main.py
@IDE     : MaixPy
"""
print(gc.mem_free())
# _*_ coding: utf-8 _*_
"""
Created on 2023/6/11 11:24

@Author  : HPC2H2
@File    : main.py
@IDE     : MaixPy
"""
print(gc.mem_free())

结果

单行注释测试

import gc
print(gc.mem_free())
## _*_ coding: utf-8 _*_
#"""
#Created on 2023/6/11 11:24

#@Author  : HPC2H2
#@File    : main.py
#@IDE     : MaixPy
#"""
print(gc.mem_free())
## _*_ coding: utf-8 _*_
#"""
#Created on 2023/6/11 11:24

#@Author  : HPC2H2
#@File    : main.py
#@IDE     : MaixPy
#"""
print(gc.mem_free())

结果 

畸变矫正测试

import sensor, image, time, lcd
from machine import UART,Timer
from Maix import GPIO, utils
from fpioa_manager import fm
import utime
import gc

lcd.init(freq=15000000) # lcd显示屏
sensor.reset() # 传感器
utils.gc_heap_size(0xF4240) # 增加内存堆大小

sensor.set_pixformat(sensor.GRAYSCALE) # Set pixel format to RGB565 (or GRAYSCALE)
sensor.set_framesize(sensor.QVGA)   # Set frame size to QVGA (320x240)
sensor.skip_frames(time = 2000) # Wait for settings take effect.

a = 0xff
b = 0xff

a = gc.mem_free()
img = sensor.snapshot().lens_corr(strength = 1.8, zoom = 1.0) # 拍摄图片经过畸变矫正
b = gc.mem_free()
print(a-b)
img = sensor.snapshot()
a = gc.mem_free()
print(b-a)

结果

 死循环拍照内存测试

import sensor, image, time, lcd
from machine import UART,Timer
from Maix import GPIO, utils
from fpioa_manager import fm
import utime
import gc

lcd.init(freq=15000000) # lcd显示屏
sensor.reset() # 传感器
utils.gc_heap_size(0xF4240) # 增加内存堆大小

sensor.set_pixformat(sensor.GRAYSCALE) # Set pixel format to RGB565 (or GRAYSCALE)
sensor.set_framesize(sensor.QVGA)   # Set frame size to QVGA (320x240)
sensor.skip_frames(time = 2000) # Wait for settings take effect.


while True:
    img = sensor.snapshot().lens_corr(strength = 1.8, zoom = 1.0) # 拍摄图片经过畸变矫正
    print(gc.mem_free())

结果

可用内存持续减少。

(使用del和gc.collect()函数可以维持当前使用内存的稳定,因为代码没保存,结果没截图,这里就不放出来了)

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐