8.2 浏览器采集素材


8.2 浏览器采集素材

本节摘要:流水线的大部分环节都在本机或 API 上,唯独素材检索发生在"别人的网站"里:找参考图、找空镜、找贴图,人工做就是无休止的搜索、翻页、下载、记录来源。本节把采集包装成一个契约化技能:输入是素材需求单(用途、关键词、尺寸、数量、许可要求),输出是素材文件加来源登记表。方法上取道 video-use(browser-use 官方视频线,社区口径约 29k 星)的思路:Agent 把"找一张雨夜街景参考图"翻译成浏览器动作序列——打开站点、搜索、按尺寸筛选、下载、登记。本节同样用最大篇幅讲授权与可追溯:许可字段不明的一律不用;最后给出采集结果的自动验收与人工抽查比例。浏览器自动化的系统方法在《浏览器智能体实战》中展开,本章只取采集这一个应用面。

学习目标

  • 把素材需求写成结构化的需求单,而不是一句话闲聊式描述。
  • 按 video-use 思路把采集任务拆成可验收的浏览器动作序列。
  • 为每个采集产物登记来源、许可与抓取时间,做到可追溯。
  • 说清"许可不明一律不用"的纪律与商用标记的用途。
  • 对采集结果跑自动验收并按比例人工抽查。

一、素材需求从分镜表来

采集不是漫无目的地囤图,需求从分镜表逐镜头推导:画面描述里有"雨夜霓虹街道",参考图位就需要雨夜街景;有空镜镜头,就登记一段实拍空镜需求。人工采集的瓶颈不在找,而在"找、筛、存、记"四件事的循环:一轮搜索平均只能筛出两三张能用的,来源不记,三个月后要确认商用授权时无从查起。

采集技能在流水线中的位置 分镜表(第 02 章) ──▶ 素材需求单 ──▶ 浏览器采集技能 ──▶ 素材 + 来源登记 │ │ 用途/关键词/尺寸/数量 第 09 章生成时的参考图 │ 许可不明 ──▶ 一律弃用 ​

二、video-use 思路:把检索交给浏览器 Agent

video-use 是 browser-use 项目的官方视频线(社区口径约 29k 星,以官方文档为准),核心思路是把视频制作中的素材获取环节交给浏览器智能体:任务给到自然语言描述,智能体把它翻译成浏览器动作序列——输入关键词、翻结果页、按尺寸或许可筛选、下载、保存。落到工程上,成功率的诀窍是任务拆小:不要求一次对话完成"找到九张图并整理好",而是"一个关键词找三张、每个站点一轮、下载后立即登记"。

人工采集 浏览器 Agent 采集
关键词靠临场发挥 需求单里的关键词提前推敲
筛选标准在脑子里 尺寸、许可写成可判定条件
下载后文件夹堆放 命名规范与目录在契约里固定
来源靠记忆或事后补 下载即登记,抓取时间自动记录

需要划界的是:浏览器自动化的完整方法——会话管理、选择器策略、反爬应对、失败恢复——是《浏览器智能体实战》一书的主题。本章只把它当作一个"技能实现细节",重点放在技能的契约面:给什么、拿什么、怎样算合规。

三、采集技能的契约

输入是素材需求单,输出是素材文件加来源登记表,两者都在契约里写死:

# material_request.json —— 素材需求单(采集技能的输入) { "purpose": "S03 雨夜街景空镜的构图参考", "keywords": ["rain street night", "neon reflection wet road"], "min_size": [1024, 1024], "count": 3, "license_need": "可商用,允许改编与二次创作", "out_dir": "assets/ref/S03" } ​
# provenance.json —— 来源登记表(采集技能的输出清单之一) [ {"file": "ref_S03_rain_street_01.jpg", "source_site": "示例图库站", "url": "https://example.com/photos/12345", "license": "CC0", "commercial_ok": true, "attribution_required": false, "fetched_at": "2026-10-16T09:30:00", "size": [1920, 1280]} ] ​

命名规范在契约中固定:用途前缀加镜头号加描述加序号。来源登记表是采集技能的"输出清单",与素材文件同等重要——没有登记表的素材视同不存在。

四、授权与可追溯:一条硬纪律

采集技能最容易翻车的不是找不到图,而是找到的图不能用。三条纪律:

其一,许可不明一律不用。登记表里 license 字段为空、为"不明"、或站点条款读不懂的,直接弃用,不进入 assets 目录。其二,商用与署名双标记。commercial_ok 与 attribution_required 独立于 license 字符串存在,发布侧(第 11.1 节)按这两个标记决定素材能否进商用交付、片尾是否需要署名。其三,尊重站点条款。各站点的服务条款、抓取限制与登录要求差异很大且随时变化,以各站点现行条款为准;需要登录或付费墙的内容,走官方授权渠道而不是绕过。

提示:许可核验的最终责任在人。登记表记录的是采集时的判断依据(URL、许可标注、抓取时间),便于事后复核,不等于法律结论。

五、采集结果的验收

采集技能的验收条件与其他技能同构:文件存在、非零字节、分辨率达标、登记字段齐全。

# check_assets.py —— 采集素材验收:分辨率达标且来源记录齐全 import json, os, subprocess MIN_W, MIN_H = 1024, 1024 def probe_size(path): cmd = ["ffprobe", "-v", "error", "-select_streams", "v:0", "-show_entries", "stream=width,height", "-of", "json", path] info = json.loads(subprocess.run(cmd, capture_output=True, text=True).stdout) stream = info["streams"][0] return stream["width"], stream["height"] def main(asset_dir="assets/ref", prov="build/provenance.json"): records = {r["file"]: r for r in json.load(open(prov, encoding="utf-8"))} problems = [] names = sorted(os.listdir(asset_dir)) for name in names: width, height = probe_size(os.path.join(asset_dir, name)) if width < MIN_W or height < MIN_H: problems.append(f"{name}: {width}x{height} 低于 {MIN_W}x{MIN_H}") record = records.get(name) if not record or record.get("license") in ("", "不明", None): problems.append(f"{name}: 来源或许可记录缺失或不明确") for name in records: if name not in names: problems.append(f"{name}: 登记表有但文件缺失") print("\n".join(problems) or f"{len(names)} 个素材全部通过") raise SystemExit(1 if problems else 0) if __name__ == "__main__": main() ​

自动验收之上保留人工抽查:每批素材按两成左右比例点开核对"图对不对题"——机器测得出尺寸,测不出"这张图根本不是雨夜"。抽查发现的语义偏差,反馈回需求单的关键词修正,形成采集质量的迭代回路。

本节要点回顾

  • 素材需求从分镜表逐镜头推导,写成结构化需求单再动手。
  • video-use 思路:自然语言任务拆成小步浏览器动作,成功率靠拆小。
  • 采集技能输出双产物:素材文件加来源登记表,缺一即验收失败。
  • 硬纪律:许可不明一律不用;商用与署名双标记供发布侧消费。
  • 自动验收测尺寸与登记,人工抽查测"图对不对题"。

单个技能都能跑通了,接下来把它们连成长龙。几十个镜头乘以七八个阶段的长流水线,中途必然出错——下一节解决长任务的半途而废:状态持久化、按镜头粒度重跑、失败隔离与校验和清单。

作者与出处
原作者:灏天文库
整理人: 灏天文库整理
本站整理收录,版权归原作者/开源协议所有;欢迎通过原文链接访问源仓库。
发布者: 作者: 灏天文库 转发
评论区 (0)
U