目录
占用内存设定
原有多行注释一键改为单行注释方法
内存回收:GC模块文档与教程
减少内存占用方法
多行注释测试
结果
单行注释测试
结果
畸变矫正测试
结果
死循环拍照内存测试
结果
占用内存设定
- K210一次性将所有代码读取到内存。
-
K210有6MiB通用内存,另外有2MiBKPU用内存,初始化时可以调整。
- 对于打“#”号的注释(单行注释),K210会丢弃,不会占用内存空间;对于打三个引号的注释(多行注释),则不然。
- 畸变校正/旋转矫正不会比不操作图像占用内存多(图像尺寸和分辨率不变)。
- 传统算法很吃内存。
原有多行注释一键改为单行注释方法
见此文章,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博客
减少内存占用方法
- 变量用完就扔:使用del及时删除全局变量,并通过gc.collect()方法回收。
- 使用Maix.utils的gc_heap_size()方法增加堆内存。如果不用KPU,大胆设为7MiB。
- 把多行注释转换为单行注释。
- 修改固件(使用官网出的定制教程会出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()函数可以维持当前使用内存的稳定,因为代码没保存,结果没截图,这里就不放出来了)