K210占用内存设定以及回收内存机制与方法

news2024/9/21 2:38:10

目录

占用内存设定

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

内存回收: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()函数可以维持当前使用内存的稳定,因为代码没保存,结果没截图,这里就不放出来了)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/715073.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot 项目 整合Redis

一、java连接单机redis&#x1f349; 1.创建一个普通的maven工程&#x1f95d; 2.引入依赖&#x1f95d; <dependencies><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>3.8.0</version&…

【Docker镜像部署】镜像方式部署登录服务验证码无法刷出问题

背景 auth服务本地部署&#xff0c;验证码正常显示。但是一旦镜像部署则会报错。 Dockerfile文件如下 FROM daocloud.io/library/java:8-jre-alpine MAINTAINER zzjs # 时区问题 RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime RUN echo Asia/Shanghai >/e…

第四章 数组

前言 学习方法 可以多看几遍视频把上课的代码&#xff0c;自己加加注释&#xff0c;在自己写之前&#xff0c;可以画一个流程图照着流程图把代码自己实现一遍 不要怀疑自己&#xff0c;不要遇到困难就觉得自己不行&#xff0c;遇到困难就解决困难&#xff0c;编程初学者都是…

php代码审计8之SSRF

文章目录 1、关注函数2、SSRF支持的协议2.1、http/https&#xff1a;2.2、file&#xff1a;2.3、dict&#xff1a;2.4、gopher&#xff1a;2.5、ftp/ftps&#xff1a;2.6、tftp&#xff1a;2.7、imap/imaps/pop3/smtp/smtps&#xff1a;2.8、telnet&#xff1a; 3、绕过3.1、读…

flask.send_file实现文件下载、文件传输和二进制流传输

文章目录 flask.send_file函数常用参数描述url直接下载文件flask.send_file文件传输本地文件传输二进制流传输 在使用flask框架时&#xff0c;我们有时需要向前端传输文件。或者需要用户访问一个url时直接下载文件。这时可以使用flask.send_file()函数来实现相关的操作。 flask…

HarmonyOS学习路之开发篇—设备管理(控制类小器件)

控制类小器件开发概述 基本概念 控制类小器件指的是设备上的LED灯和振动器。其中&#xff0c;LED灯主要用作指示&#xff08;如充电状态&#xff09;、闪烁功能&#xff08;如三色灯&#xff09;等&#xff1b;振动器主要用于闹钟、开关机振动、来电振动等场景。 运作机制 控…

Spring Boot 中的 @RefreshScope 注解是什么,原理,如何使用

Spring Boot 中的 RefreshScope 注解是什么&#xff0c;原理&#xff0c;如何使用 在 Spring Boot 中&#xff0c;RefreshScope 注解是一个非常有用的注解。它可以让 Spring Boot 应用程序在运行时重新加载配置。这意味着您可以在不停止和重新启动应用程序的情况下更改配置。在…

大宇无限:一家中国初创企业的出海之旅

如果一家中国企业想要拓展海外市场&#xff0c;那么应该如何开启自己的出海之旅&#xff1f; 大宇无限的出海之路 作为一家互联网科技领域的初创企业&#xff0c;大宇无限的出海之旅对那些想要拓展海外业务的中国企业来说&#xff0c;无疑有着极佳的学习价值和借鉴意义。 “大宇…

WebAssembly:让Istio变得更强大

1 Wasm为Envoy带来新的扩展性 Envoy是一个高性能、可编程的L3/L4和L7网络代理&#xff0c;许多服务网格和网关都采用Envoy作为数据面。 Envoy通过监听器&#xff08;Listener&#xff09;捕获网络数据包&#xff0c;根据数据包的内容匹配某个过滤器链&#xff08;Filter Chai…

工作方法 - 戒定慧

风动、旗动&#xff0c;以及两种冰球棍的摆法 戒。就是戒律&#xff0c;知道边界。 在一个公司的工作中&#xff0c;就是知道我们的核心目标&#xff0c;核心资源&#xff0c;核心用户都是什么。 不是什么热闹都去凑&#xff0c;没有资源去做的事情也去做&#xff0c;非核心用…

记录--多行标签超出展开折叠功能

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 前言 记录分享每一个日常开发项目中的实用小知识&#xff0c;不整那些虚头巴脑的框架理论与原理&#xff0c;之前分享过抽奖功能、签字功能等&#xff0c;有兴趣的可以看看本人以前的分享。  今天要分…

Squid代理服务器(传统代理、透明代理)

Squid代理服务器&#xff08;传统代理、透明代理&#xff09; 一、Squid代理服务器1、代理的工作机制2、代理的类型3、使用代理的好处 二、安装Squid服务2、修改 Squid 的配置文件3、Squid 的运行控制4、编写 Squid 服务脚本 三、构建传统代理服务器1、squid服务器2、web1的配置…

libevent实践02:读取标准输入的数据

对于libevent的知识一点不了解&#xff0c;通知编写测试代码&#xff0c;发现问题&#xff0c;解决问题&#xff0c;一步一步入门学习。 CMakeLists.txt文件&#xff1a; project(libevent_project) cmake_minimum_required(VERSION 3.8)message(STATUS "lkmao:CMAKE_SOU…

Redis高可用群集---搭建(主从、哨兵、Cluster)

目录 Redis 高可用集群Redis 主从复制Redis 哨兵模式Redis 集群模式 Redis 高可用集群 在web服务器中&#xff0c;高可用是指服务器可以正常访问的时间&#xff0c;衡量的标准是在多长时间内可以提供正常服务&#xff08;99.9%、99.99%、99.999%等等&#xff09;。 但是在Redi…

# YourKit Java Profiler 教程

YourKit Java Profiler 教程 文章目录 YourKit Java Profiler 教程本教程软件版本说明YourKitIntelliJ Idea 系统要求探查器体系结构探查器代理探查器用户界面 开始分析集成环境集成IntelliJ Idea 安装插件IntelliJ Idea分析 解决性能问题性能瓶颈优化内存使用内存泄漏垃圾分配…

数据结构 | 双向链表

一、数据结构定义 /* 链表结点 */ typedef int ListType; typedef struct node {ListType data; // 存放整型数据struct node* llink, * rlink; // 指向前驱和后继结点的指针 } *Node;/* 双向链表头结点 */ typedef struct headNode {struct node* head, * tail; // 指向双向链…

IP 扫描程序:轻松发现、扫描和跟踪 IP 空间

什么是 IP 扫描 IP 扫描是实时持续监控网络 IP 地址空间的过程。包括 ICMP ping 扫描和 SNMP 扫描在内的网络协议数量用于扫描网络中的 IP 地址。网络管理员依靠 IP 扫描程序轻松检查和管理 IP 地址空间。使用网络 IP 扫描程序进行 IP 扫描可查看 IP 地址空间利用率和性能。 …

C# 使用CefSharp控件 High DPI问题的解决

使用CefSharp控件&#xff0c;在部分高分辨率的电脑中&#xff08;显示缩放比例非100%&#xff0c;而是120%或者125%等&#xff09;会出现以下一些情况&#xff1a; 显示的页面中出现了黑边&#xff0c;且按钮定位也偏了&#xff0c;比如点击【图层】按钮&#xff0c;需要点击上…

selenium用法

一、请求库selenium selenium是一个自动化测试工具&#xff0c;而爬虫中使用它主要是为了解决requests无法直接执行JavaScript代码的问题。操作浏览器模拟人的行为。 下载浏览器驱动&#xff1a;以谷歌浏览器为例---->谷歌浏览器驱动&#xff08;版本号对应&#xff09; …