view_image 分析,prompt:
请详细描述这张照片:拍摄主体、构图方式、光线条件、色彩表现、景深效果、技术问题。这是什么类型的照片?
基于国际摄影比赛评分标准(NPS/Sony World Photography Awards/荷赛/国内摄影大赛综合),采用6维评分体系(10分制,支持0.5分递增)。
> 精细化评分说明:每个维度设有5级评分标准(2/4/6/8/10分锚点),评分时先确定照片属于哪一级,再在相邻级别间微调(±0.5~1分)。各维度独立评分,不做加权求和——总分仅供参考,分差比总分更有价值(如构图9分但技术5分,比均匀7分更需关注)。
| 维度 | 属性 | 核心评估 |
|------|------|----------|
| 技术质量 | 基础门槛 | 曝光准确性、对焦精度、景深控制、噪点、快门速度匹配 |
| 构图 | 视觉骨架 | 主体位置、视觉重心、空间分配、引导线、层次、留白、视觉流动 |
| 光线 | 塑形核心 | 光质、光位、光比、明暗层次、光线与主题的匹配 |
| 色彩 | 情绪载体 | 色调统一、色彩搭配、饱和度、色温、色彩与情感的呼应 |
| 创意 | 突破上限 | 视角独特性、构思新颖度、打破常规的程度 |
| 情感 | 灵魂所在 | 氛围营造、情感传达、故事性、共鸣深度 |
评分规则:
references/composition-by-subject.md 第二十六章
点评原则:
3A. 构图标注(默认始终开启,零计算消耗)
每次点评照片时,在标注图上叠加以下纯绘图元素(不触发任何 numpy 计算):
| 标记 | config 字段 | 说明 |
|------|-------------|------|
| 三分线网格 | "grid": "thirds" | 白色半透明井字线 |
| 三分点标记 | "label_marks" | 4个三分线交叉点金色小圆点 |
| 主体位置 | "subject" | 红色十字圆圈标记当前主体 |
| 箭头 | "arrows" | 从当前主体指向建议位置 |
| 问题区域框 | "zones" | 虚线框标注问题区域 |
| 文字标注 | "text_marks" | 具体构图问题描述(1-2条) |
构图标注所需的 subject、arrows、zones、text_marks 数据由 view_image 分析结果直接构造,不需要调用 auto_analyze_photo 或 analyze_composition_detailed。
构造规则:
subject:从 view_image 描述中判断主体位置(归一化坐标),如"人物在画面偏左"→ {"x": 0.25, "y": 0.5}
arrows:若主体不在三分点附近,画一条箭头指向最近的三分点
zones:若画面有明显的干扰区域(边缘杂物、前景过重),画虚线框
text_marks:1-2条核心构图问题描述
3B. 构图诊断分析(按需触发,计算密集)
触发条件(满足任一):
执行方式: 调用 analyze_composition_detailed(img, subject_pos) 执行8维度诊断。
8维度及权重:
| 维度 | 权重 | 检查内容 | 关键阈值 |
|------|------|----------|----------|
| 主体位置 | 25% | 是否在三分线/黄金分割点,边缘距离>15% | 精准在点=10分 |
| 负空间留白 | 15% | 视线方向前方空间≥2/3画面 | 有效负空间>50%=8分 |
| 视觉平衡 | 15% | 左右/上下视觉重量比0.8-1.2 | 比值偏差<10%=9分 |
| 纵深层次 | 12% | 前-中-远景层次分明(CV>0.25) | 3个深度信号=8分 |
| 地平线水平 | 10% | 偏差<1度,位置在上/下1/3线 | 在三分线上=9分 |
| 动态线条 | 10% | 主导角度30-60度,引导线指向主体 | 对角线+强度>12%=8分 |
| 简洁度 | 8% | 无关注释元素,边缘干净 | 杂乱度<12%=9分 |
| 画面比例 | 5% | 内容填充度40-70% | 在理想范围=7分 |
> 构图理论详见: references/composition-mastery.md
> 构图诊断维度详见: references/composition-guide.md
> 按拍摄主体的构图实战+点评骨架: references/composition-by-subject.md
诊断结果用途:
"composition_analysis": comp_detailed + "show_composition_analysis": True
EXIF参数(蓝)、光线诊断(橙)、色彩诊断(紫)、技术质量(青)、参数化改进建议,均为按需开启。
EXIF方向校正 → 曝光调整 → 色彩优化 → 清晰度提升 → 质量检查。按需执行。
| 用户指定 | 构图标注 | 构图诊断(8维) | 标注图侧重 | improvements侧重 |
|----------|:--------:|:------------:|:----------:|:----------------:|
| "侧重构图" / "提升构图" | 始终 | 触发 | 构图标注+诊断面板 | 构图措施3-4条+训练建议 |
| "侧重光线" | 始终 | 不触发 | 光影区域标注 | 光线改善措施 |
| "侧重色彩" | 始终 | 不触发 | 色彩问题标注 | 色彩校正措施 |
| "侧重技术" | 始终 | 不触发 | 技术问题标注 | 技术修复措施 |
| 未指定(默认) | 始终 | 不触发 | 均衡点评 | 均衡建议 |
视觉权重热力图、氛围诊断、视觉流动分析、四象限平衡、评分雷达图、综合评分徽章、原片vs优化对比、多图对比网格,均为按需开启。
脚本: scripts/annotate_photo.py(v3)
import sys, os
sys.path.insert(0, r"C:\Users\Maza\AppData\Roaming\WPS 灵犀\serverdir\skills\photo-critique\scripts")
from annotate_photo import annotate_photo
# 直接写入用户桌面(generate_image会破坏标注文字,禁止用于标注图!)
desktop = os.path.join(os.path.expanduser("~"), "Desktop")
out = os.path.join(desktop, "点评_照片名.jpg")
annotate_photo(input_path, out, config)
禁止用 generate_image(input_images) 复制标注图! generate_image 以 AI 重新生成图片,会替换/破坏中文标注文字。
config 字段: title(str), ratings(dict{维度:1-5}), comment(str), improvements(list[str]), subject(dict{x,y}), grid("thirds"), text_marks(list{text,pos,color,arrow_to?}), zones(list{rect,color}), show_score_badge(bool)
点评骨架(每张照片遵循此结构):
1. 总体印象(1句话)
2. 优点(1-2条,具体到元素)
3. 问题(1-2条,按严重度排序)
4. 改进建议(每条问题1条可操作建议)
每张照片:标注图 + 骨架化文字点评。全部照片结束后附汇总对比表。
当用户提供一批照片(目录/多张),要求分析全部并输出精选报告时使用。
```
请详细描述这3张照片,每张分别:1)拍摄主体和场景 2)构图方式 3)光线条件 4)色彩表现 5)景深效果 6)技术问题。
```
| 章节 | 内容 |
|------|------|
| 封面 | 标题 + 照片总量 + 评分体系说明 |
| 总览统计 | 六维均分对比表(TOP vs BOTTOM) |
| TOP 20 最佳 | 总览排名表 + 20张详情页(照片+评分条+点评+改进建议) |
| BOTTOM 10 待提升 | 10张末位诊断 + 核心问题标注 |
| 单方面最强 | 六维中单项最高作品,附提升技巧 |
| 摄影技术提升指南 | 六大方向(方向校正/构图/光线/创意/后期/设备维护) |
quality=95, subsampling=0,不缩放原图仅按PDF页面约束等比缩小
ImageOps.exif_transpose()
from reportlab.lib.pagesizes import A4
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
from PIL import Image as PILImage, ImageOps
pdfmetrics.registerFont(TTFont("SimHei", r"C:\Windows\Fonts\simhei.ttf"))
pdfmetrics.registerFont(TTFont("SimHeiBold", r"C:\Windows\Fonts\msyhbd.ttc", subfontIndex=0))
def resize_photo_hd(img_path, max_w, max_h, quality=95):
img = PILImage.open(img_path)
img = ImageOps.exif_transpose(img)
ratio = min(max_w / img.size[0], max_h / img.size[1])
if ratio < 1.0:
img = img.resize((int(img.size[0]*ratio), int(img.size[1]*ratio)), PILImage.LANCZOS)
buf = io.BytesIO()
img.save(buf, format="JPEG", quality=quality, subsampling=0)
buf.seek(0)
return buf, int(img.size[0]*ratio), int(img.size[1]*ratio)
PDF输出到桌面(reportlab无法写入workspace路径),文件名格式:摄影作品分析报告_N张_HD.pdf
本技能执行过程中自动观察并记忆用户偏好,无需用户明确要求。规则见 全局偏好自动记忆规范。
user profile)中
user 记忆的 格式偏好 或 备注
user 记忆的 本技能名_rules 字段
共 1 个版本