(十一)ESP-VISION代码怎么组织、分发、更新?软件包管理完全指南

发布时间:2026/7/20 12:16:03

(十一)ESP-VISION代码怎么组织、分发、更新?软件包管理完全指南
ESP-VISION代码怎么组织、分发、更新软件包管理完全指南文章目录ESP-VISION代码怎么组织、分发、更新软件包管理完全指南一、写在前面你写的代码放在哪二、三种部署方式对比三、文件系统结构3.1 导入优先级3.2 SD卡路径四、软件包组织4.1 模块与软件包结构4.2 用mpremote管理文件4.3 用mpremote mip安装软件包五、冻结到固件5.1 开发板manifest5.2 冻结自定义包5.3 重新构建六、部署策略选择推荐组合七、package.json vs manifest.py八、一个产品部署模板参考链接总结与下篇预告一、写在前面你写的代码放在哪在桌面Python上你写代码、pip install依赖、跑起来从不关心代码放在哪。但ESP-VISION不一样——你的代码可能放在Flash里、SD卡里、甚至直接编译进固件里。放哪决定了启动速度、更新方式和内存占用。今天这篇文章把ESP-VISION的软件包管理讲透。二、三种部署方式对比开发阶段半成品产品发布你的Python代码部署方式/lib 下的 .py 文件可编辑易更新/lib 下的 .mpy 文件预编译加载快冻结到固件最快不可篡改属性/lib 下的 .py/lib 下的 .mpy冻结到固件存储位置可写文件系统可写文件系统固件Flash镜像导入行为导入时编译无需编译直接加载直接执行冻结字节码运行时RAM字节码对象占RAM字节码对象占RAM常量可保留在Flash更新方式替换文件或mpremote替换兼容的.mpy文件重新构建烧录固件主要用途开发频繁更新导入开销低可替换稳定产品依赖启动模块三、文件系统结构ESP-VISION将内部Flash文件系统挂载到/并将/lib加入sys.path/ # 内部Flash文件系统根目录 ├── boot.py # 启动脚本先于main.py执行 ├── main.py # 应用入口 ├── README.txt # 默认说明文件 ├── lib/ # 第三方库sys.path已包含 │ ├── my_vision/ # 你的视觉库 │ │ ├── __init__.py │ │ ├── pipeline.py │ │ └── transport.py │ └── asyncio/ # 冻结的asyncio ├── sdcard/ # SD卡需手动挂载 │ ├── models/ # AI模型文件 │ └── data/ # 数据文件 └── flash/ # Flash存储3.1 导入优先级当前目录 → 冻结模块(.frozen) → /lib重要同名文件系统软件包不能覆盖冻结软件包。如果你在/lib放了一个和冻结包同名的包导入的仍然是冻结版本。3.2 SD卡路径SD卡挂载到/sdcard但不会自动加入sys.pathimportsys sys.path.append(/sdcard/lib)frommy_vision.pipelineimportVisionPipeline四、软件包组织4.1 模块与软件包结构# 标准Python包结构my_vision/__init__.py pipeline.py transport.py# 导入frommy_vision.pipelineimportVisionPipeline pipelineVisionPipeline()4.2 用mpremote管理文件# 列出开发板上的文件mpremote connect /dev/ttyACM0ls/# 上传文件mpremote connect /dev/ttyACM0cpmy_script.py :/main.py# 上传整个目录mpremote connect /dev/ttyACM0cp-rmy_vision/ :/lib/my_vision/# 下载文件mpremote connect /dev/ttyACM0cp:/main.py ./backup_main.py# 删除文件mpremote connect /dev/ttyACM0rm/main.py4.3 用mpremote mip安装软件包# 安装MicroPython软件包到/libmpremote connect /dev/ttyACM0 mipinstall--target/libPACKAGE# 安装特定版本mpremote connect /dev/ttyACM0 mipinstall--target/libPACKAGEVERSION# 从package.json安装mpremote connect /dev/ttyACM0 mipinstall--target/lib ./package.json⚠️注意ESP-VISION默认固件不支持设备端mipimport mip会报ImportError。必须通过主机端mpremote安装。五、冻结到固件对于稳定的产品依赖和启动模块应该冻结到固件中5.1 开发板manifestESP-VISION将开发板manifest保存在boards/BOARD/manifest.py。5.2 冻结自定义包# 在boards/BOARD/manifest.py中添加package(my_vision,base_path$(ESP_VISION_ROOT)/boards/BOARD/packages,)文件夹结构boards/BOARD/packages/my_vision/ __init__.py pipeline.py transport.py5.3 重新构建# 修改manifest后需要重新配置和构建idf.py--boardBOARDreconfigure idf.py--boardBOARDbuild idf.py--boardBOARDflash六、部署策略选择频繁修改偶尔更新几乎不变代码更新频率/lib下的.py文件mpremote cp更新/lib下的.mpy文件预编译后替换冻结到固件跟随固件更新推荐组合代码类型部署方式理由启动模块(boot.py/main.py)冻结到固件稳定、启动快框架扩展(视觉库)冻结到固件稳定依赖产品脚本冻结到固件或/lib取决于更新频率配置文件/lib需要现场修改AI模型SD卡 / Flash体积大独立更新图像/视频资源SD卡体积大七、package.json vs manifest.py很多人搞混这两个文件文件用途阶段package.jsonmip安装时描述文件和依赖运行时/设备预配置manifest.py固件构建时嵌入模块构建时两者不能相互替代。package.json用于mipmanifest.py用于固件冻结。八、一个产品部署模板# boards/BOARD/manifest.py# 冻结产品核心模块# 框架依赖freeze($(MPY_DIR)/tools,opt3)# 自定义视觉库package(my_vision,base_path$(ESP_VISION_ROOT)/boards/BOARD/packages)# 产品启动脚本freeze($(ESP_VISION_ROOT)/boards/BOARD/packages/main.py)# 部署流程# 1. 构建固件包含冻结模块idf.py--boardESP32_P4X_EYE build# 2. 烧录固件idf.py--boardESP32_P4X_EYE-p/dev/ttyACM0 flash# 3. 上传配置文件mpremote connect /dev/ttyACM0cpconfig.json :/config.json# 4. 上传AI模型到SD卡# 手动拷贝到SD卡参考链接ESP-VISION 软件包与部署MicroPython 软件包管理MicroPython manifest文档总结与下篇预告软件包管理的核心决策频繁改的放/lib稳定依赖冻结到固件大文件放SD卡。别混淆package.json和manifest.py——前者给mip用后者给固件构建用。下篇是本系列的最后一篇——启动流程与架构全景。从按下复位键到你的main.py开始执行中间发生了什么ESP-VISION的分层架构又是怎么设计的一篇文章讲清楚。作者码农阿虎关键词软件包管理、mpremote、mip、固件冻结、manifest

相关新闻

别再死记 LVS!一文吃透 LVS 负载均衡:发展史、4 种工作模式 + 完整实操命令

别再死记 LVS!一文吃透 LVS 负载均衡:发展史、4 种工作模式 + 完整实操命令

2026/7/20 12:16:03

目录 LVS是什么? LVS发展史 特点优势是什么? LVS负载均衡四种工作模式 LVS-NAT LVS-DR(生产环境最常用) LVS-TUN LVS-FullNAT(内核2.6.28新增) 快速记忆特点(小口诀) LVS基…

三步搞定Qwen3.6-27B无审查AI模型:小白也能懂的完整部署指南

三步搞定Qwen3.6-27B无审查AI模型:小白也能懂的完整部署指南

2026/7/20 12:16:03

三步搞定Qwen3.6-27B无审查AI模型:小白也能懂的完整部署指南 【免费下载链接】Qwen3.6-27B-Uncensored-HauhauCS-Balanced 项目地址: https://ai.gitcode.com/hf_mirrors/HauhauCS/Qwen3.6-27B-Uncensored-HauhauCS-Balanced Qwen3.6-27B-Uncensored-Hauhau…

OpenCore Legacy Patcher完整教程:五步让老Mac焕发新生

OpenCore Legacy Patcher完整教程:五步让老Mac焕发新生

2026/7/20 12:06:02

OpenCore Legacy Patcher完整教程:五步让老Mac焕发新生 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher OpenCore Legacy Patcher是一款强大的开源…

Java开发规范详解:从命名风格到工程实践

Java开发规范详解:从命名风格到工程实践

2026/7/21 6:37:10

1. Java代码规范概述 在Java开发领域,代码规范就像城市交通规则一样重要。没有统一的规范,每个开发者都按照自己的习惯编写代码,最终会导致项目难以维护、团队协作效率低下。我见过太多因为不规范代码导致的惨痛案例:一个原本两周…

复杂表格解析工具评测与选型指南

复杂表格解析工具评测与选型指南

2026/7/21 6:37:10

1. 复杂表格解析工具的核心挑战在数据处理的日常工作中,表格解析是个看似简单实则暗藏玄机的技术活。特别是当面对合并单元格、嵌套表头、跨页表格这类复杂结构时,很多工具的表现往往差强人意。我曾参与过一个金融报表自动化项目,其中就遇到了…

基于VFNet的蚊虫智能识别技术解析与应用

基于VFNet的蚊虫智能识别技术解析与应用

2026/7/21 6:37:10

1. 项目背景与核心价值蚊虫种类识别在公共卫生领域具有重大意义。以伊蚊为例,作为登革热、寨卡病毒等疾病的主要传播媒介,准确识别其种类对疾病防控至关重要。传统的人工鉴定方法依赖显微镜观察形态特征,不仅效率低下,而且需要专业…

大模型轻量化与具身智能的技术融合与应用

大模型轻量化与具身智能的技术融合与应用

2026/7/21 6:37:10

1. 科技前沿动态全景解读:从大模型到具身智能的产业跃迁2026年开年,科技界迎来一波密集的创新浪潮。星动纪元完成10亿元B轮融资,OpenAI突然发布GPT-5.4系列轻量级模型,银河通用机器人宣布厦门生产基地投产,智元酷拓则展…

C++ WebSocket客户端开发:从协议原理到高性能行情接口实现

C++ WebSocket客户端开发:从协议原理到高性能行情接口实现

2026/7/21 6:37:10

1. 项目概述:为什么是C与WebSocket? 在金融科技、高频交易、在线游戏和物联网这些对实时性要求近乎苛刻的领域,数据流的延迟和吞吐量直接决定了系统的生死。当我们需要从服务器持续、低延迟地接收行情数据、游戏状态或传感器读数时&#xff0…

800V平台新能源汽车充电模块技术解析

800V平台新能源汽车充电模块技术解析

2026/7/21 6:27:09

1. 800V平台新能源汽车充电技术解析 800V高压平台正在成为新能源汽车发展的主流趋势。相比传统400V系统,800V平台能显著降低充电时间——在相同功率下,电流减半意味着导线截面积可以缩小,线缆重量减轻约50%。这不仅提升了整车能效&#xff0c…

微服务进阶:服务网格与Istio

微服务进阶:服务网格与Istio

2026/7/21 5:45:57

541|微服务进阶:服务网格与Istio 上篇文章我们聊了微服务的基本概念和拆分方法。 但微服务多了,问题也多了: 服务之间怎么通信? 怎么监控每个服务的调用链路? 熔断、限流、重试怎么做? 安全认证怎么统一? 以前这些都靠SDK库(比如Hystrix、Feign),每个服务都要集成…

零售超级终端全域协同:ShareKit 碰一碰商品流转业务落地案例

零售超级终端全域协同:ShareKit 碰一碰商品流转业务落地案例

2026/7/20 2:33:13

一、零售门店全域协同业务背景与行业痛点 1.1 门店超级终端设备矩阵(连锁便利店/商超标准配置) 自助收银Kiosk一体机:顾客结算、自助核销优惠券、商品素材预览;运营折叠平板:店长后台商品上新、图片录入、活动配置、…

噗叽短视频界面分析

噗叽短视频界面分析

2026/7/21 3:09:32

1 和小红书类似,可以采用类似判断方法------------其实他比小红书好判断,因为他没有图片,控件位置几乎是固定的,都不用判断------------2 因为他没有点赞按钮------------而且几乎所有控件位置都是完全一样的,所以我就…

GraphRAG Local + Ollama:微软知识图谱本地化

GraphRAG Local + Ollama:微软知识图谱本地化

2026/7/21 0:06:35

普通 RAG 有个老毛病:你问它「这堆文档整体在讲什么」,它答不上来。因为它只会把问题切成向量,去几十个文本块里捞最相似的几段拼给模型看。可「整体讲什么」这种问题,答案根本不在任何单独一段里——它散在全篇的联系里。 微软的…

AI 数据产品化思考:让分析能力变成可售卖的数据服务

AI 数据产品化思考:让分析能力变成可售卖的数据服务

2026/7/21 0:06:35

AI 数据产品化思考:让分析能力变成可售卖的数据服务 大家好,我是朱大喜。这周一直在复盘具体的项目和技术,最后一篇聊点不一样的东西——数据产品化。做了这么多年数据分析,我发现一个规律:能卖出去的从来不是"分…

基于人机协作的 AI 研发新体系架构:从 Harness 工程到 Loop 工程实践

基于人机协作的 AI 研发新体系架构:从 Harness 工程到 Loop 工程实践

2026/7/21 0:06:35

本文完整呈现了企业级 AI Coding 落地的核心方法论:从 Harness 工程的微观/宏观定义,到 Loop 工程的六大构建模块,再到基于 SDD(规范驱动开发)的工程化落地路径。干货较多,建议收藏细读。 我从 22 年开始就…