直接回答
图像预处理可能同时产生同一张照片的多种表示:编码源文件、解码位图或相机平面、缩放工作图、颜色转换缓冲、模型张量、界面预览副本以及结果/历史缩略图。有效的内存测试要记录每种表示何时创建、由谁拥有以及何时释放。项目内存事实卡提醒,输入张量和分配器行为也会增加运行时内存;Cove Photo 事实说明可见文字结果结构化保存,但没有给出通用图像内存需求。不能从源文件大小或模型下载大小推断峰值 RAM。 使用带版本的图片夹具,记录原始尺寸、格式、方向、目标尺寸、解码配置、裁剪/缩放方式、颜色格式、张量形状和应用构建。压缩文件字节数与实际解码分配量可能差别很大;Android Bitmap API 提供 allocation-byte count,CameraX 分析能提供 CPU 可访问图像缓冲区,其格式、分辨率依赖配置的用例。请求的分辨率可能不同于实际输出。应记录观察到的尺寸和缓冲元数据,不要假设相机返回请求大小。 建立分阶段时间线:获取源文件、开始解码、解码完成、缩放/颜色转换、创建张量、移交推理、显示结果、保存历史和清理。使用有名称的工具在一致检查点测量应用/进程内存,并记录活跃副本及其所有者 ID。帧副本泄漏不同于推理中有意保留的张量;UI 预览不同于临时工作缓冲。取消或异常后,要释放所有不再使用的所有者。关闭相机代理不能代替释放应用自有位图或张量。 用不同输入尺寸和失败边界测试,不发布设备阈值。加入小图、大图、旋转方向、异常长宽比、解码拒绝、转换时取消、推理失败和页面退出。固定制品与任务,每次只改变一个尺寸或预处理选项。内存上升时,判断来自解码位图、颜色副本、张量、UI 状态还是 native 分配;若没有与生命周期时间线关联,单看 profiler 曲线可能无法确定所有权。 结论限定在准确设备、构建、任务和内存指标。不能凭一台手机声称最低 RAM、支持图像尺寸范围或峰值预估。公开夹具与生产日志不要含私人照片;合成图像或获准且脱敏样本足以复现。有效结果应是所有权图和测量路径,展示哪些副本同时存在及释放位置;若 native runtime 内部张量分配不可观察,也要明确标未知。 比较图像数据大小时,先说明讨论的是压缩文件字节、解码像素还是模型输入尺寸。图像提供方可能返回经过处理的图像,UI 预览也可能持有另一份副本。分析前要核对所有权边界:CameraX 代理由 CameraX 管理,应用复制数据由应用所有者管理,runtime tensor 则由推理 API 管理。不能从一个对象已关闭推断其他数据自动释放。若界面缓存预览,还要记录缓存数量及清除时机,并在页面退出后验证。 对外解释只描述被验证的流程,例如某项配置下解码和变换阶段观察到的指标,而不是声称某款手机永不 OOM 或支持任意高分辨率。没有完整设备原始记录,不给最低内存建议。数据需注明图片格式、目标尺寸、颜色空间、预处理版本、制品和运行时;以后替换图片库或缩放策略时,应重新测量。
缩略图正常,但全尺寸照片让 OCR 内存上升
Android 图片功能会导入照片、旋转、缩放后送入本地模型,界面还保留预览。团队观察到内存增加,却无法确定是重复位图、张量、UI 预览还是 native runtime。
决策
为预处理阶段和所有权加测量点,每次只变一个输入尺寸,固定运行时和模型任务并追踪副本清理。
预期结果
团队能找到哪些应用自有表示同时存活、哪些 native 分配仍不可观察,而不会发布 RAM 阈值。
需要收集的证据
只有将以下证据与同一模型文件和测试运行关联起来,结论才可复核:
- MEMORY-01:输入张量和分配器行为都会影响内存,不能从文件大小推断峰值。
- COVE-OCR-01:Cove Photo 将可见文本作为结构化结果保存,但事实卡没有给出通用图像内存要求。
设备兼容结论须绑定具体设备、系统、模型、运行时、后端和工作负载,不能靠参数量推测。
实施流程
- 描述源图与模型输入契约. 记录编码格式、尺寸、方向、颜色配置、请求缩放/裁剪、实际解码尺寸、输出颜色格式、张量形状和夹具 ID。不能用压缩文件长度估算解码内存。
- 绘制副本与所有权图. 列出源字节、相机平面或解码位图、变换工作图、张量、预览、缓存缩略图和历史表示。为每项指定所有者和释放点,区分 UI 保留状态与临时数据。
- 在预处理检查点测量. 在解码前、解码后、变换后、张量移交时、推理中、显示结果后和清理后采集一致进程指标。记录工具、单位及 native 内存可见性限制。
- 注入格式和生命周期失败. 测试旋转、异常比例、解码失败、取消、导航、模型错误和重复采集。确认成功/失败路径都释放应用所有位图和张量,不重复关闭 CameraX 管理缓冲。
- 比较受控图片变体. 固定模型、运行时、提示和设备状态,每次只变一个尺寸或预处理选项。保存全部结果并分类共存副本,不从单条轨迹推导通用兼容或内存承诺。
让每个阶段的状态都可观察。失败信息应指出阶段、模型、运行时和恢复动作,同时避免记录用户私密内容。
验收标准
- 压缩源文件长度、解码分配、变换副本、张量、UI 预览和 runtime 内存分别命名。
- 每个应用所有表示均有所有者和释放条件,并在成功、失败与取消时验证。
- 内存发现注明工具/指标、阶段、制品、设备、输入尺寸及预处理版本。
- 没有设备原始证据时,不推导最低 RAM、普遍最大图像尺寸或设备兼容。
决策对照表
| 维度 | 选择或证据 | 解读方式 |
|---|---|---|
| 压缩图片大小 | 源文件占用字节 | 用于描述存储/传输;压缩率使它不能代表解码像素。 |
| 应用预处理占用 | 逐阶段记录解码图、复制、预览和张量 | 配合生命周期所有权,可以找出同时存活的应用缓冲。 |
| 进程整体峰值 | 固定任务期间的 profiler/系统指标 | 包含 runtime 和其他分配;只有定义了指标与阶段才有解释意义。 |
需要避免的失败模式
- 用压缩图片文件大小估算解码后 RAM。
- 把 ImageProxy、应用位图副本、模型张量和 UI 预览统称为模型内存。
还要避免静默回退、版本未固定、缺少取消处理,以及把不同配置的结果混在一起下结论。失败运行也应与成功记录一并保存。
最小复现记录
| 层级 | 记录内容 |
|---|---|
| 设备 | 厂商、型号、芯片、内存档位、操作系统版本 |
| 软件 | 应用版本和 Git 提交号 |
| 模型 | 系列、变体、版本、格式、文件长度、摘要、量化方式 |
| 运行时 | 名称、版本、请求后端及实际后端证据 |
| 工作负载 | 样例版本、输入摘要、提示词摘要、输出策略 |
| 结果 | 完成、失败、取消、回退及保护隐私的诊断信息 |
发布检查表
- ☐ 主要搜索问题已回答,且没有未经支持的数字。
- ☐ 所有模型文件和运行时版本均已固定。
- ☐ 代表性任务和失败处理策略均有说明。
- ☐ 生命周期、取消、清理和回退均已测试。
- ☐ 用户内容与网络边界均有说明。
- ☐ 结论只适用于被记录的配置。
- ☐ 新增测试结果时链接到原始方法或证据。
来源与相关证据
中文部署与排错专题见。奇连 AI 端侧专题。
常见问题
JPEG 文件大小能预测本地 OCR 内存吗?
不能。解码尺寸、像素格式、缩放副本、张量、预览和 runtime 缓冲都会影响内存。要测实际预处理流程并说明指标;压缩字节不等于解码像素。
关闭 ImageProxy 会一并释放缩放位图吗?
不会。CameraX 管理代理;应用创建的位图或张量有独立所有者和清理路径。应逐项测试这些表示,并确认各自释放时点及页面退出后的清理。
一张大照片测试能确定最大支持分辨率吗?
不能。它只对应一项制品、预处理路径、设备和任务。支持边界需有针对所列配置的重复原始证据和失败标准,包括多种输入来源。