摄影作品点评与提升
工作流
1. 读取照片
view_image 分析,prompt:
请详细描述这张照片:拍摄主体、构图方式、光线条件、色彩表现、景深效果、技术问题。这是什么类型的照片?
- 单次最多5张,超过分批
- 读取失败检查文件是否存在,如实告知
2. 六维精细化分析
基于国际摄影比赛评分标准(NPS/Sony World Photography Awards/荷赛/国内摄影大赛综合),采用6维评分体系(10分制,支持0.5分递增)。
> 精细化评分说明:每个维度设有5级评分标准(2/4/6/8/10分锚点),评分时先确定照片属于哪一级,再在相邻级别间微调(±0.5~1分)。各维度独立评分,不做加权求和——总分仅供参考,分差比总分更有价值(如构图9分但技术5分,比均匀7分更需关注)。
| 维度 | 属性 | 核心评估 |
|---|---|---|
| 技术质量 | 基础门槛 | 曝光准确性、对焦精度、景深控制、噪点、快门速度匹配 |
| 构图 | 视觉骨架 | 主体位置、视觉重心、空间分配、引导线、层次、留白、视觉流动 |
| 光线 | 塑形核心 | 光质、光位、光比、明暗层次、光线与主题的匹配 |
| 色彩 | 情绪载体 | 色调统一、色彩搭配、饱和度、色温、色彩与情感的呼应 |
| 创意 | 突破上限 | 视角独特性、构思新颖度、打破常规的程度 |
| 情感 | 灵魂所在 | 氛围营造、情感传达、故事性、共鸣深度 |
评分规则:
- 10分制,支持0.5分递增
- 等级色标:绿色≥8分、蓝色6.5-7.5分、黄色5-6分、橙色3-4.5分、红色<3分
- 各维度独立评价,不设权重——"哪个维度拉胯"比"总分多少"更重要
- 精细化评分锚点详见 references/composition-by-subject.md 第二十六章
点评原则:
- 问题具体化——不说"构图不好",说"主体被挤在左边缘,右侧大面积留白无呼应"
- 区分"刻意为之"与"失误"
- 一张照片一条核心改进建议,优先指出最影响画面的1-2个问题
- 评分接近时,通过分差分析指出差异化提升方向
3. 构图点评(双层设计)
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
诊断结果用途:
- config 中传 "composition_analysis": comp_detailed + "show_composition_analysis": True
- 用于生成更精准的构图改进建议
3.5-3.9 诊断面板
EXIF参数(蓝)、光线诊断(橙)、色彩诊断(紫)、技术质量(青)、参数化改进建议,均为按需开启。
4. 后期优化处理
EXIF方向校正 → 曝光调整 → 色彩优化 → 清晰度提升 → 质量检查。按需执行。
5. 用户自定义点评侧重
| 用户指定 | 构图标注 | 构图诊断(8维) | 标注图侧重 | improvements侧重 |
|---|---|---|---|---|
| "侧重构图" / "提升构图" | 始终 | 触发 | 构图标注+诊断面板 | 构图措施3-4条+训练建议 |
| "侧重光线" | 始终 | 不触发 | 光影区域标注 | 光线改善措施 |
| "侧重色彩" | 始终 | 不触发 | 色彩问题标注 | 色彩校正措施 |
| "侧重技术" | 始终 | 不触发 | 技术问题标注 | 技术修复措施 |
| 未指定(默认) | 始终 | 不触发 | 均衡点评 | 均衡建议 |
6. 综合诊断附加面板
视觉权重热力图、氛围诊断、视觉流动分析、四象限平衡、评分雷达图、综合评分徽章、原片vs优化对比、多图对比网格,均为按需开启。
7. 生成标注图
脚本: 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)
8. 回复输出格式
点评骨架(每张照片遵循此结构):
1. 总体印象(1句话)
2. 优点(1-2条,具体到元素)
3. 问题(1-2条,按严重度排序)
4. 改进建议(每条问题1条可操作建议)
每张照片:标注图 + 骨架化文字点评。全部照片结束后附汇总对比表。
Token/算力优化策略
- 构图标注与诊断分离:默认只开构图标注(纯绘图零计算),诊断分析仅用户要求时触发
- 构图标注数据来自view_image:直接从 view_image 文字描述构造 subject/arrows/zones/text_marks
- 其他面板按需开启:不传的就不开
- 知识引用reference:不涉及某维度时不读对应reference
- improvements精简:每张照片3条核心建议
参考知识库
- 构图理论:references/composition-mastery.md
- 构图诊断:references/composition-guide.md
- 改进建议:references/improvement-guide.md
- 摄影技巧:references/photography-skills.md
- 色彩分析:references/color-analysis-guide.md
- 按主体构图实战:references/composition-by-subject.md
- 进阶构图:references/advanced-composition-techniques.md
9. 批量分析报告(全量照片精选)
当用户提供一批照片(目录/多张),要求分析全部并输出精选报告时使用。
工作流
- 扫描全量照片 → list_files 获取目录下所有图片文件
- 分批分析 → view_image 每批3张,prompt:
请详细描述这3张照片,每张分别:1)拍摄主体和场景 2)构图方式 3)光线条件 4)色彩表现 5)景深效果 6)技术问题。 - 六维评分 → 基于view_image分析结果,按六维评分标准(第2节)为每张打分
- 排序输出 → 按均分排序,生成PDF报告
PDF报告结构
| 章节 | 内容 |
|---|---|
| 封面 | 标题 + 照片总量 + 评分体系说明 |
| 总览统计 | 六维均分对比表(TOP vs BOTTOM) |
| TOP 20 最佳 | 总览排名表 + 20张详情页(照片+评分条+点评+改进建议) |
| BOTTOM 10 待提升 | 10张末位诊断 + 核心问题标注 |
| 单方面最强 | 六维中单项最高作品,附提升技巧 |
| 摄影技术提升指南 | 六大方向(方向校正/构图/光线/创意/后期/设备维护) |
照片嵌入规则
- 使用原始照片(非标注图)嵌入PDF
- 高清模式:
quality=95, subsampling=0,不缩放原图仅按PDF页面约束等比缩小 - EXIF方向校正:
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
注意事项
- view_image每次最多3张,超过分批
- 已有评分的照片不重复分析,直接引用历史评分
- 近似评分(仅均分无六维细节)的照片,各维度按均分填充
- generate_image(input_images)禁止用于标注图复制(ERR-005)
偏好自动记忆
本技能执行过程中自动观察并记忆用户偏好,无需用户明确要求。规则见 全局偏好自动记忆规范。
执行流程
- 观察:在技能执行中注意用户对输出内容、格式、流程的反馈和选择
- 去重:检查偏好是否已存在于用户记忆(
userprofile)中 - 分类写入:
- 通用偏好 →user记忆的格式偏好或备注
- 本技能专属偏好 →user记忆的本技能名_rules字段 - 通知:写入前简要告知用户将记录的信息类型(一句即可)