看图识画 · 像素级图像视觉分析(pixel-image-vision)
让纯文本模型看懂图片。一个入口、两层能力:像素级分析引擎(必须/零 key)+ 本地小视觉模型语义兜底(可选/自动探测)。调用方无需关心底层用哪个。
什么时候用 / 与内置能力的边界
| 场景 | 用什么 |
|---|---|
| 用户传图问"画面什么状态/黑不黑/冻结没" | 本 skill 像素引擎 |
| 用户传图问"主色调、各色占比、哪种颜色最多" | 本 skill 像素引擎 |
| 用户传图问"哪个按钮被选中 / 高亮 / UI 布局" | 本 skill 像素引擎 + 语义兜底 |
| 用户传图问"图中某个颜色物体在哪 / 有没有红点" | 本 skill 像素引擎 --task findcolor |
| 用户传图要"看懂内容并据此回答/操作" | 本 skill 先像素→再语义兜底 |
| 用户要提取图中文字(纯 OCR) | 专门的 OCR 技能,本 skill 不做 |
| 用户要生成/编辑图片 | 图片生成技能,本 skill 不做 |
说明:WorkBuddy 这类主模型常是纯文本(qwen2.5/DeepSeek),自己看不了像素。 本 skill 提供"眼睛":先跑像素分析拿到结构化画面事实,再视情况用本地小视觉模型补语义。
两层能力(核心卖点)
| 层 | 引擎 | 触发 | 依赖 |
|---|---|---|---|
| 必选 | scripts/vision_analyzer.py(像素分析) | 任何图 | python3 + pillow/opencv/numpy,零 key |
| 可选 | scripts/vision_semantic.py(语义兜底) | 需"看懂内容"时 | 本机 Ollama 有 minicpm-v/llava 等视觉模型 |
- 像素层永远可用,不依赖任何外部服务或大模型,毫秒~秒级返回
- 语义层自动探测:本机有 Ollama 视觉模型就用它,探测不到则明确告知"仅像素可用",不报错
和市面识图技能的区别(差异化)
SkillHub 现有 image-vision / image-understanding / glm-v-model / ghost-eye / vision-helper 等识图技能分两类,都有硬伤:
- 纯提示词型(如 image-vision):只教 Agent 用宿主不存在的视觉能力,在纯文本模型环境无效;
- 云端 VLM 型(如 ghost-eye 用硅基流动、glm-v-model 用智谱、image-understanding 用 GLM-4.6V、 vision-analyzer 用 Kimi):强制用户自带云端 API key,或本地拉几 GB 大模型。
本 skill 自带像素级分析引擎,把"黑屏/颜色占比/选中态/对象定位/复杂度"这些高频需求用 纯像素算法直接算出来,任何图片零 key、零预装即可得到结构化画面事实;语义理解只在探测到 本机已装的小视觉模型时才启用。这就是最大的差异化。
用法
所有脚本在 scripts/ 目录,用系统 python3(须已装 pillow/opencv-python/numpy)执行。
cd scripts/
# ① 一键全量分析(推荐先跑这个,拿到画面状态+主色+复杂度+高亮总览)
python vision_analyzer.py <图片路径>
# ② 只看主色占比(画面主色调各占百分之几)
python vision_analyzer.py <图> --task colors
# ③ 黑屏/白屏/暗画面 检测
python vision_analyzer.py <图> --task blackscreen
# ④ 是否冻结/卡死(亮度方差判定,需配合连续帧更准)
python vision_analyzer.py <图> --task frozen
# ⑤ 找指定颜色对象的位置(返回中心/包围盒/占比)
python vision_analyzer.py <图> --task findcolor --color "#FF0000" --tolerance 15
# ⑥ 高亮/选中态 UI 区域检测
python vision_analyzer.py <图> --task ui-selected
# ⑦ 画面复杂度(边缘密度)
python vision_analyzer.py <图> --task edges
# ⑧ 机器可读 JSON
python vision_analyzer.py <图> --task json
# ── 语义兜底(可选,探测本地 Ollama 视觉模型)──
python vision_semantic.py <图> --list # 看本机有哪些视觉模型
python vision_semantic.py <图> # 默认:描述画面内容
python vision_semantic.py <图> "这是什么游戏,人物在哪" # 自定义提问
图片传本地路径即可;若是远程 URL 先下载到本地再分析。图片过大时会自动下采样, 不影响颜色/状态/定位这类宏观判断。Windows 下请用系统 python3(本技能脚本依赖 opencv-python,若默认 python 没装,先
pip install pillow opencv-python numpy)。
推荐的调用流程(Agent 如何组织一次"看图")
- 拿到图片路径/已下载好本地
- 先跑
vision_analyzer.py <图>全量分析 → 得到画面状态、主色、复杂度、高亮区 - 若任务需要"看懂内容/识别对象/回答关于画面的问题",再跑
vision_semantic.py <图> "<你的问题>"- 若它提示"无可用视觉模型",就用像素分析结果回答用户"只能做像素级分析"
- 把像素事实 + 语义描述(如有)整合,用主模型语言组织给用户的回答
实现要点 / 已知边界
- 像素层全量
vision_analyzer.py <图>输出:尺寸 / 画面状态(黑屏·白屏·暗·灰度·正常) / 亮度·纯黑白占比·彩色占比 / 冻结提示 / 复杂度 / top 主色(名称+占比+条形) / 高亮区坐标 - 主色聚类用 OpenCV kmeans(下采样到 ~96px 提速),颜色命名走 HSV 色相,能给出"暗蓝""亮橙""淡绿"等
- 黑屏阈值:纯黑像素 >92% 判黑屏;纯白 >85% 判白屏;彩色占比 <4% 判灰度/低饱和
--task frozen单帧只能给亮度方差提示,严格"是否卡死"需传两张不同时刻截图对比,可用--task findcolor+ 固定参照点两次跑做前后一致性判断- 语义兜底用 Ollama HTTP
/api/generate+ base64 图,不依赖 ollama python 库;仅需本机ollama pull minicpm-v(~5GB)即可启用,数据不出本机 - 纯色/极少内容图 kmeans 可能输出占比很接近的多簇,属正常;视觉上可合并近似主色
微信扫一扫