🍌 Nano-Banana实操手册:导出JSON格式部件坐标数据用于下游系统解析
1. 为什么需要结构化坐标数据?
你有没有遇到过这样的场景:
一张精美的产品爆炸图生成出来了,部件排列整齐、标注清晰,但想把这张图里的每个零件位置信息——比如螺丝在左上角第3行第2列、主板居中偏下、散热片紧贴右侧边缘——自动提取出来,喂给MES系统做BOM校验,或者导入Unity做交互式拆装教学?
传统做法是人工用PS标点、Excel手填坐标,耗时易错。而Nano-Banana不只是“画得好看”,它从设计之初就为工程闭环留了出口:每张生成图背后,都有一份结构清晰、字段规范、可直接被程序读取的JSON坐标数据。
这不是附加功能,而是引擎内建的能力。本手册不讲怎么调参出图,只聚焦一件事:如何稳定、准确、批量地拿到可用的JSON坐标数据,并让它真正跑进你的下游系统里去。
2. Nano-Banana的底层逻辑:图像与坐标的强绑定
2.1 图像不是“画出来的”,而是“布局出来的”
很多文生图模型把提示词当咒语,靠黑箱扩散过程“猜”出画面。Nano-Banana不同——它的Turbo LoRA权重不是简单强化某种画风,而是学习了一套隐式的部件空间排布规则。
它把“Knolling平铺”理解为:
- 所有部件必须落在一个虚拟网格上(默认16×12单元格);
- 每个部件占据连续矩形区域(1×1、2×1、1×3等),不重叠、不留空;
- 坐标原点在图像左上角,单位为像素,且严格对齐到网格线;
- 部件名称、类别、层级关系全部编码进生成过程,而非后期OCR识别。
这意味着:坐标数据不是后处理提取的近似值,而是生成时就确定的真值(ground truth)。
你可以把它想象成一个“带坐标的矢量草图生成器”——图像是渲染结果,JSON才是原始设计稿。
2.2 JSON结构长什么样?(真实输出示例)
生成一张手机拆解图后,点击界面右上角「导出坐标」按钮,你会得到类似下面的JSON文件(已简化,仅保留核心字段):
{ "metadata": { "model_version": "nano-banana-v2.3", "lora_weight": 0.8, "cfg_scale": 7.5, "seed": 42198, "prompt": "exploded view of smartphone, front camera module, main PCB, battery, speaker, vibration motor, all labeled clearly, knolling style, white background" }, "image_info": { "width": 1024, "height": 768, "grid_rows": 12, "grid_cols": 16 }, "components": [ { "id": "comp_001", "name": "Front Camera Module", "category": "optical", "bbox": [128, 96, 256, 192], "grid_position": {"row_start": 1, "col_start": 2, "row_span": 2, "col_span": 3}, "label_position": [192, 224] }, { "id": "comp_002", "name": "Main PCB", "category": "electrical", "bbox": [384, 144, 512, 336], "grid_position": {"row_start": 2, "col_start": 5, "row_span": 4, "col_span": 4}, "label_position": [640, 320] }, { "id": "comp_003", "name": "Battery", "category": "power", "bbox": [128, 384, 384, 512], "grid_position": {"row_start": 6, "col_start": 2, "row_span": 3, "col_span": 5}, "label_position": [256, 544] } ] }关键字段说明:
bbox:[x_min, y_min, x_max, y_max]—— 标准OpenCV格式边界框,单位像素,可直接用于OpenCV绘图或YOLO训练;grid_position: 网格坐标系定位,适合做规则校验(如“所有部件必须占满整行”);label_position: 文字标签锚点,方便下游系统动态添加标注;category: 预定义分类(optical,electrical,mechanical,power,structural),支持按类过滤或着色。
注意:这个JSON不是靠OCR或CV模型“反推”出来的,而是生成过程中由LoRA权重驱动的布局引擎实时计算并写入的。所以精度是100%,没有容错率问题。
3. 三步实操:从生成图到可用JSON
3.1 第一步:确保使用官方推荐参数组合
虽然Nano-Banana支持宽范围参数调节,但只有官方推荐组合(LoRA=0.8, CFG=7.5)能保证JSON结构的完整性和字段可靠性。
为什么?
- LoRA权重低于0.6时,布局引擎“力度不足”,部分小部件可能被压缩进同一网格单元,导致
grid_position合并,components数组条目减少; - LoRA高于0.9时,过度强调风格,部件可能出现微位移(<5像素),
bbox虽仍有效,但grid_position会因四舍五入产生跳变; - CFG低于5.0时,提示词引导弱,部件名称可能与实际
name字段不一致(如生成图写“USB-C Port”,JSON却记为“Charging Port”); - CFG高于9.0时,布局过刚性,偶发部件被截断,
bbox超出图像边界(此时JSON中bbox值仍合法,但需下游做clip处理)。
正确做法:
- 在Quick Start界面,将LoRA Weight设为
0.8,CFG Scale设为7.5; - 生成前确认Prompt中明确写出部件名称(如用“main PCB”而非“circuit board”),名称将1:1映射到JSON的
name字段。
3.2 第二步:生成时启用“结构化输出模式”
Nano-Banana默认生成图+JSON双输出,但需手动开启结构化模式才能获得完整字段。操作路径:
- 输入Prompt后,点击右上角⚙「高级设置」;
- 勾选「启用结构化坐标输出」(默认关闭,避免冗余存储);
- 可选:勾选「校验网格完整性」(开启后,若检测到部件未填满网格或重叠,生成会失败并提示,适合产线级严控场景);
- 点击「生成」——此时不仅输出PNG,还会在同目录生成
output_components.json。
重要提醒:未勾选此选项时,JSON中
grid_position字段为空,仅保留bbox和基础信息。务必确认勾选!
3.3 第三步:验证与导出JSON
生成完成后,界面会显示:
- 左侧:生成的爆炸图(PNG);
- 右侧:结构化数据面板,以表格形式列出所有部件的
name、bbox、grid_position; - 底部:两个按钮:「复制JSON」(复制到剪贴板)、「下载JSON」(保存为文件)。
验证建议(30秒快速检查):
- 打开下载的JSON,搜索
"components",确认数组长度 ≥ 3(少于3个通常提示词太模糊); - 检查任意一项的
bbox:x_max > x_min且y_max > y_min(否则坐标异常); - 用Python快速校验(粘贴到本地脚本运行):
import json with open("output_components.json", "r") as f: data = json.load(f) # 检查必有字段 assert "components" in data, "缺少components字段" for i, comp in enumerate(data["components"]): assert "name" in comp and comp["name"].strip(), f"第{i+1}项缺少name" assert "bbox" in comp and len(comp["bbox"]) == 4, f"第{i+1}项bbox格式错误" print(" JSON结构验证通过,可安全接入下游系统")4. 下游系统对接实战:三个典型场景
4.1 场景一:导入MES系统做BOM自动比对
需求:工厂收到新机型图纸,需快速验证实物拆解是否与BOM一致。
对接方式:
- 将Nano-Banana生成的JSON作为“标准模板”存入MES数据库;
- 产线工人用手机拍摄实物拆解图,上传至MES;
- MES调用轻量CV服务(如ONNX Runtime部署的YOLOv8n),检测图中部件位置;
- 比对逻辑:不比像素级坐标,而比
grid_position的相对关系——例如“电池必须在PCB正下方,且列跨度相同”。
优势:
- 脱离高精度标定,普通手机拍摄即可;
- 比对速度<200ms/图,支持流水线实时质检。
4.2 场景二:驱动Unity 3D交互式拆装教学
需求:职校开发AR拆装课件,学生点击屏幕上的部件,3D模型对应部件高亮并弹出说明。
对接方式:
- 使用Unity的
JsonUtility.FromJson直接解析JSON; - 将
components数组转为C# List ; - 为每个部件创建UI Image,
RectTransform位置根据bbox按比例映射到Canvas(1024×768 → 1920×1080); - 点击事件绑定
name字段,触发3D模型对应部件的Shader高亮。
关键技巧:
label_position可直接作为TextMeshPro文本锚点,实现“点击部件→显示说明框”的精准定位;category字段用于分组控制(如点击所有electrical类部件,统一高亮)。
4.3 场景三:批量生成多语言说明书插图
需求:同一款产品,需生成中/英/日/德四版说明书,每版图片部件标签文字不同,但布局必须完全一致。
对接方式:
- 先用英文Prompt生成一次图+JSON(记录
seed=42198); - 复用该JSON,仅替换
components[].name字段为对应语言(如"Main PCB"→"主电路板"); - 调用Nano-Banana的「重绘标签」API(无需重新布局),传入原图+新JSON,返回新标签图。
效果:
- 四版图布局100%一致,仅文字变化,符合ISO说明书规范;
- 耗时仅为单次生成的1/5,无重复计算开销。
5. 常见问题与避坑指南
5.1 问题:JSON里grid_position的row_span为0,是什么原因?
原因:Prompt中使用了模糊描述,如“some small parts”、“several connectors”,导致布局引擎无法为这些部件分配确定网格。
解决:
- 替换为具体名称:“USB-C connector”, “SIM tray”, “microphone hole”;
- 或在Prompt末尾强制声明:“assign each part to exact grid cell, no merging”。
5.2 问题:下游系统读取JSON报错“Expecting property name enclosed in double quotes”
原因:Nano-Banana导出的JSON使用单引号(如'name': 'Battery'),而标准JSON要求双引号。
解决:
- 正确做法:使用「下载JSON」按钮,文件内为标准双引号;
- ❌ 错误做法:用「复制JSON」粘贴到代码里再手动改引号——易出错且破坏
name中的撇号(如CPU's heat sink)。
5.3 问题:想让JSON包含自定义字段(如物料编码、供应商),能加吗?
可以,但需提前配置:
- 在启动服务时,通过环境变量注入:
NANO_BANANA_CUSTOM_FIELDS='["material_code", "supplier"]'; - Prompt中需包含对应关键词:“material_code: M-SP-7892, supplier: Foxconn”;
- 生成JSON中
components每项将新增字段:"material_code": "M-SP-7892", "supplier": "Foxconn"。
提示:自定义字段值必须紧跟在冒号后、逗号前,且不含空格,否则解析失败。
6. 总结:让坐标数据真正流动起来
Nano-Banana的价值,从来不止于“生成一张好看的图”。
当你把output_components.json拖进Python脚本、导入Unity场景、或推送到MES队列的那一刻,它才真正完成了从视觉表达到工程数据的跃迁。
回顾本手册的核心实践要点:
- 参数守门:坚持LoRA=0.8 + CFG=7.5,这是JSON可靠性的基石;
- 模式开关:务必启用「结构化坐标输出」,否则JSON缺关键字段;
- 验证前置:用30秒脚本检查JSON结构,远胜于下游报错后排查;
- 场景驱动:不是“有了JSON能做什么”,而是“我要做什么,JSON该怎么配”。
下一步,你可以:
- 尝试用不同seed生成同一Prompt的5组JSON,观察
grid_position稳定性(你会发现99%情况下完全一致); - 把JSON喂给Pandas,用
df.groupby('category').size()统计各类型部件数量,自动生成《拆解复杂度报告》; - 或直接打开
output_components.json,用VS Code的JSON折叠功能,像看代码一样“阅读”这张图的骨架。
真正的智能,不在于画得多像,而在于画完之后,还能让机器读懂它。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。