VR截图生成 · 房源 VR 截图净化与重构
0. 这个技能做什么
VR 截图进 → 干净的 3:4 房源效果图出。
解决的问题:VR 看房截图自带三层脏东西——App 外壳(状态栏 / 标题栏 / 底部经纪栏)、画面浮层(户型图浮层、VR 圆标、Ø 图标、房间标签、"如视Pro"水印)、以及生成模型额外加盖的平台水印。这些必须全部清掉,同时房子本身一根线都不能动,最后还要从竖长屏比例改成 3:4 可直接发布的比例。
四段流水线:
| 段 | 在哪做 | 干什么 | 产出目录 |
|---|---|---|---|
| ① 去 App 外壳 | 本地(Pillow) | 裁掉状态栏 / 标题栏 / 底部操作栏 | 01_clean/ |
| ② 净化 + 重构 | 图像生成模型 | 去浮层水印 VR 图标 + 3:4 扩图 + 软装随机重构 + 影调修复 | 02_gen/ |
| ③ 去平台水印 | 本地(Pillow) | 裁掉模型加盖的水印条 + 精确回正 3:4 | 3x4/ |
| ④ 样张确认 | 人工 | 先出 1 张,用户点头再批量 | — |
为什么第 ①③ 段必须在本地做:这两段是纯确定性的几何裁切,交给模型做会引入形变、边缘重绘、比例漂移。本地裁是像素级精确且零积分。
1. 什么时候用它
用户出现以下任一情形:
- 发来 VR 看房截图,要求"去水印 / 去 UI / 去界面 / 去浮层 / 去 VR 图标"
- 要求把竖长截图改成 3:4 竖版
- 要求"软装随机替换 / 床品窗帘灯具换新 / 随机加绿植地毯"
- 要求"高清修复 / 提亮通透 / 校正色彩 / 模拟手机原相机实拍"
- 要求产出"二手房美化效果图"用于房源发布
不适用:普通实拍照片的美化(没有 VR UI 要剥)、口播/视频类素材、需要真实还原现场供客户核验的合规用途(本技能会重构软装,不可用于"与实景一致"的承诺场景)。
2. 环境准备
脚本依赖 Pillow。先探测,缺了再装:
python -c "from PIL import Image; print('PIL OK', Image.__version__)" 2>&1
缺 Pillow 时装到一个隔离环境里,不要污染全局:
python -m venv <venv目录>
<venv目录>/Scripts/python.exe -m pip install --quiet Pillow # Windows
<venv目录>/bin/python -m pip install --quiet Pillow # macOS / Linux
后续所有脚本都用这个 venv 的 python 跑。
3. 第 0 步(最容易翻车):先找准"真原图"
这是本技能最大的坑,必须先做。
聊天软件(QQ / 微信)的图片目录里,同一张图通常存了多份:
| 文件名 | 实际是 | 说明 |
|---|---|---|
<hash>_0.jpg |
缩略图(常见只有 291×647 级) | 只有几十 KB,用来在聊天流里显示 |
<hash>_720.jpg |
真原图(常见 1280×2844 级) | 几百 KB 到几 MB |
处理前必须先逐个比对尺寸:
<venv>/python -c "
import os
from PIL import Image
SRC = r'<图片目录>'
IDS = ['<图1的hash>','<图2的hash>']
for fid in IDS:
for suf in ['_0.jpg','_720.jpg']:
p = os.path.join(SRC, fid+suf)
print(fid[:8], suf, Image.open(p).size if os.path.exists(p) else 'MISSING')
"
一律取尺寸更大的那个。 拿缩略图去生成,出来的图糊,白花积分。
如果用户是从别的渠道给的图(桌面、附件),跳过本步。
4. 第 ① 段:本地裁掉 App 外壳
4.1 先探再裁
不同机型 / 不同 App 版本的 UI 高度不一样,不要凭经验直接裁。先跑 probe 拿到亮度曲线,再用 preview 出带参考线的预览图,用 Read 看图目视确认裁切线位置。
# 1) 探测:输出候选裁切线的采样数据
<venv>/python scripts/deui.py probe "<图片目录>/<hash>_720.jpg"
# 2) 预览:在图上画出候选裁切线,缩略拼图
<venv>/python scripts/deui.py preview "<图片目录>" --out "<out>/_preview_lines.jpg"
# 3) Read 看图 → 确定 top-ratio / bottom-ratio
裁切线的判断标准:上边界落在「标题栏下沿」(状态栏、标题文字、返回箭头、ⓘ、分享图标全部在上方);下边界落在「底部操作栏上沿」("物品清单 / AI讲房 / VR带看"那排按钮、以及经纪头像姓名全部在下方)。
判读数据时按可靠度排序(这是踩过坑总结出来的顺序):
| 指标 | 可靠度 | 说明 |
|---|---|---|
| 边缘复杂度 | ★★★ | UI 栏是平面纯色 + 少量图标,整行近乎无纹理;实景行有噪点与渐变。优先看这一列。 |
| 亮度 / 暗像素占比 | ★★ | 底部深色遮罩的特征是「亮度骤降 + 暗像素占比逼近 100%」;但浅色标题栏与白墙会重叠,不能单独用。 |
| 高彩度占比 | ★ | 只对彩色实景有效。画面本身是白墙 / 灰调时,实景行彩度也是 0;反过来,底部深色遮罩是半透明的,木地板透过遮罩后彩度依然很高 —— 这一列两头都会骗人。 |
画面内的浮层不归本段管:右上角的「户型图 xx㎡」浮层、VR 圆标与 Ø 图标、「如视Pro」水印、"阳台"这类房间标签,都是画面内容的一部分,本地裁切不动它们(硬裁会切掉大面积画面)——它们统一交给第 ② 段由生成模型擦除。本段只负责剥掉 App 的外壳。
4.2 批量裁
<venv>/python scripts/deui.py crop "<图片目录>" \
--ids <hash1>,<hash2>,<hash3> \
--out "<工作目录>/output/vr_refine/01_clean" \
--top-ratio 0.108 --bottom-ratio 0.875
--top-ratio/--bottom-ratio是相对图片总高的比例,默认0.112 / 0.895(1280×2844 屏 + 如视 VR 看房界面的实测标定值,见references/02-踩坑与经验.md),换机型或 App 大版本更新必须重新 probe + preview 定线。- 这个默认值的含义:顶部
0.112= 状态栏 + 标题栏的下沿(约 319/2844px);底部0.895= 深色渐变遮罩的上沿(约 2545/2844px),已把 App 加的深色蒙层一并覆盖。 - 脚本会自动在同名多份文件里挑分辨率最大的(避开缩略图),并打印选择了哪一份、有几份备选。
- 输出为
clean_1.jpg、clean_2.jpg…(按--ids顺序编号),quality 96 无二次压缩损失。 - 想更省事也可以直接
--ids省略、传单个文件路径。
4.3 剪完必须目视验收
裁完生成一张缩略拼图,Read 看一遍,确认:状态栏没了、标题栏没了、底部经纪栏没了、画面主体(门框 / 窗洞 / 家具)没有被切到。切到主体就回调 bottom-ratio。
5. 第 ② 段:交给图像生成模型
用 ImageGen(见 references/01-提示词模板.md 拿完整提示词)。每张图一次调用,参数:
| 参数 | 取值 | 原因 |
|---|---|---|
image1 |
01_clean/clean_N.jpg |
喂已剥掉 UI 的图,模型少一个任务 |
input_fidelity |
high |
高保真模式,硬装才锁得住 |
quality |
high |
画质与锐度 |
size |
1152x1536 |
3:4 竖版,且给后续裁水印留出余量 |
output_dir |
<out>/02_gen |
生成原图单独存放,不覆盖中间产物 |
相似度权重按 0.55–0.7 表达(在提示词里写明"硬装 100% 保留、软装全部重构",这两个动作的权重配比正好压在这个区间)。权重过低会丢掉硬装、把房间改了;过高则软装换不动。
提示词模板见 references/01-提示词模板.md,含重构版(软装全换)与保真版(只去 UI + 提亮,不换软装)两套。
6. 第 ③ 段:本地裁掉平台水印 + 精确回正 3:4
图像生成模型输出的图,右下角会被平台强制加盖水印(实测占画面底部约 92px 高,含"AI生成"字样与 logo)。这层水印不去掉,图就不能用。
6.1 水印带高度:优先用标定值,不要迷信自动探测
平台水印的位置与高度是固定的(同一平台、同一批输出一致),所以直接用标定值 92px;自动探测只作复核。
# 复核(只报告,不改文件)
<venv>/python scripts/finalize.py detect "<out>/02_gen/<生成图>.png"
⚠ 这是本技能最容易翻车的一步。 自动探测靠"底部右侧出现成排高亮像素"判断,遇到亮画面(白床单、纱帘、白墙、浅色地毯)会把大面积高光误判成水印。实测同一批 3 张图,探测值分别是 151px / 0px / 284px,而真值都是 92px —— 最坏那张把成品画面切掉了近 10%,左右各损失 9.24%。
所以脚本内建了可信区间保护 40 ≤ 探测值 ≤ 130:
| 探测结果 | 脚本行为 |
|---|---|
| 落在 40–130 | 采用探测值 |
| 为 0(未探到) | 回退到标定值 92px(水印一定存在,探不到只能说明对比度低于阈值) |
| 超出 130 | 回退到标定值 92px(判定为亮画面高光误判) |
回退时会打印一行 [回退] ...改用平台水印标定值 92px。看到 [回退] 不用慌,那是设计行为;反过来,看不到回退、且探测值贴着区间边界(比如 128px)时才要警惕。
6.2 裁水印 + 回正 3:4
<venv>/python scripts/finalize.py run \
"<out>/02_gen/<生成图>.png" \
"<out>/3x4/成品_01_客厅_3x4.jpg" \
--wm-band 92 \
--width 1080 --height 1440
--wm-band 留空则走 6.1 的探测 + 回退逻辑。处理流程:先裁掉底部水印带 → 判断当前比例与目标 3:4 的关系 → 从左右两侧对称裁(或从上下对称裁)到精确 3:4 → LANCZOS 缩放到 1080×1440。
交付前必须复检(脚本化,很快):
from finalize import detect_watermark_band
band, info, trunc = detect_watermark_band(im, scan=60, min_cnt=12)
扫成品底部 60px,命中说明可能还有水印残留。但这条复检同样会误报亮画面 —— 报出结果后要放大裁一块底部图目视确认,别直接重跑。实测第 4 张报 84px 命中,放大看是床品与浅色地毯的高光,水印其实已清干净。
代价必须跟用户说清:从两侧对称裁会把左右边缘各切掉约 2.5–3%(通常是地板/墙面边缘,视觉上几乎不可见)。这是目前唯一能同时做到"彻底无水印 + 精确 3:4"的路径。
7. 铁律(12 条)
- 硬装 100% 锁定:墙体位置与厚度、门洞、窗户及窗台尺寸、木地板走向与拼缝方向、天花造型与吊顶层次、踢脚线、梁柱、门框形态 —— 全程固定,不得修改、变形、移位、改变房间轮廓比例。这是本技能的第一原则,比"好看"优先。
- 软装全部随机重构:沙发茶几、床品花色与铺法、窗帘纱帘样式布料、灯具造型、书柜与桌面陈设、靠枕、挂画 —— 不保留原样式。
- 每次随机、无固定模板:随机新增 1–3 处软装(绿植盆栽、桌面摆件、简约地毯、小件生活用品),位置与配色随机自然,避免模板感与堆砌感。同一套房跑两次,软装结果应当不同。
- 相似度权重 0.55–0.7:低于 0.55 硬装会漂,高于 0.7 软装换不动。
- 3:4 靠扩图补,不靠裁主体:原画面内容 100% 完整保留,不裁切不拉伸不变形;左右两侧自然扩展补全墙面与空间,扩展部分透视与原画面完全一致、材质与光影无缝衔接。
- 画面零文字:任何文字、数字、图标、水印、二维码、界面边框、按钮全部移除,且不留痕迹、不留色块。
- 影调要"像手机拍的":白平衡准确不偏黄不偏蓝,色调自然通透;光影柔和,消除数码感与高感噪点;不过度美颜、不过度调色、不加滤镜感、不产生塑料质感。
- 清洁但不改结构:清除零碎杂物、包装、纸张、地面脏点污渍、灯具浮尘;昏暗区域优化为自然采光。清洁动作不得顺手改掉硬装。
- 平台水印必裁:生成图底部的平台水印一律本地裁掉后回正 3:4,不得直接交付带水印的生成图。
- 先样张后批量:第一次处理一批图时,先跑 1 张给用户确认(软装重构幅度、色调质感、扩图效果),确认后再批量。图像生成按张计费,风格不合意重跑会叠加成本。
- 一次只处理用户本次给的图:不得把其他房源、历史批次的素材混进来,也不得复用上一批的生成结果。
- 不臆造原图没有的结构:模型不得凭空增加房间、开窗、加门、改层高。原图没有的硬装元素不许出现。
8. 目录约定
<工作目录>/output/vr_refine/
├── 01_clean/ 去 App 外壳后的原图(本地裁,零成本)
├── 02_gen/ 生成模型原始输出(含水印,留作复用)
├── _preview_lines.jpg 裁切线预览拼图(确认后删)
└── 3x4/ 最终交付
├── 样张_01_客厅_3x4.jpg
└── 02_书房_3x4.jpg ...
中间产物不要删:01_clean 是零成本可复用的底图,02_gen 留着方便调参重跑(重跑第 ③ 段不必再花积分)。
9. 交付与验收话术
交付时用 present_files 把最终 3:4 图给到用户,并主动说明三件事:
- 做到了什么 —— 用表格对齐用户的每一条要求(去水印/去 UI、硬装是否保留、3:4、软装重构、影调)。
- 技术事实 —— ① 用了全分辨率原图(不是缩略图);② 平台水印已裁,代价是左右各损失约 2.5–3%;③ 本次消耗的积分量级。
- 下一步选项 —— 「可以,继续」批量跑剩下几张 / 调参数重出这一张 / 出一版不换软装的保真版。
10. 参考资料
references/00-版本说明.md—— 本技能的定版规则、流程来源、与后续版本的系列位约定references/01-提示词模板.md—— 喂给图像生成模型的完整提示词(重构版 / 保真版两套,含填空位)references/02-踩坑与经验.md—— 缩略图坑、平台水印坑、机型 UI 比例、中文编码坑、成本控制
11. 脚本
scripts/deui.py—— 探 UI 边界 / 出裁切线预览 / 批量裁掉 App 外壳scripts/finalize.py—— 探测并裁掉平台水印 / 精确回正 3:4 / 缩放到目标尺寸
两个脚本都用 --help 可查全部参数,不依赖网络、不写死本机路径。