#!/usr/bin/env python3 """ 照片评分建议生成器 为照片评分结果提供具体的改进建议 """ class PhotoAdviceGenerator: """照片建议生成器类""" def __init__(self): self.quality_advice_db = self._init_quality_advice() self.aesthetic_advice_db = self._init_aesthetic_advice() self.technical_advice_db = self._init_technical_advice() def _init_quality_advice(self): """初始化质量改进建议数据库""" return { 'clarity': { 'low': [ "使用三脚架或稳定设备减少抖动", "提高快门速度避免运动模糊", "使用自动对焦确保主体清晰", "清洁镜头避免污渍影响", "在光线充足的环境下拍摄" ], 'medium': [ "微调对焦点确保主体清晰", "使用更高的分辨率设置", "避免过度压缩图像", "后期适当锐化处理" ], 'high': [ "清晰度优秀,继续保持", "可尝试更高难度的拍摄场景" ] }, 'brightness': { 'low': [ "增加曝光补偿", "使用闪光灯或补光设备", "选择光线更好的拍摄时间", "提高ISO感光度(注意噪点)", "使用反光板补光" ], 'medium': [ "微调曝光参数", "使用HDR模式拍摄", "注意高光和阴影的平衡", "后期调整亮度曲线" ], 'high': [ "亮度适中,曝光准确", "可尝试创意光影效果" ] }, 'contrast': { 'low': [ "增加画面明暗对比", "选择色彩对比强烈的场景", "使用侧光或逆光增强立体感", "后期调整对比度参数" ], 'medium': [ "适当增强局部对比", "注意高光不过曝,阴影不死黑", "使用曲线工具精细调整" ], 'high': [ "对比度良好,层次分明", "可尝试高对比风格创作" ] }, 'color_balance': { 'low': [ "校正白平衡设置", "使用灰卡进行色彩校准", "避免混合光源造成的色偏", "后期校正色彩平衡" ], 'medium': [ "微调色温和色调", "注意肤色还原自然", "统一画面色彩风格" ], 'high': [ "色彩平衡优秀,还原准确", "可尝试创意色彩风格" ] } } def _init_aesthetic_advice(self): """初始化美学改进建议数据库""" return { 'composition': { 'basic': [ "学习三分法则构图", "注意主体在画面中的位置", "避免主体过于居中", "利用引导线增强画面深度" ], 'intermediate': [ "尝试对称或不对称构图", "利用前景增强层次感", "注意画面元素的平衡", "创造视觉焦点" ], 'advanced': [ "构图优秀,可尝试更复杂构图", "探索极简或复杂构图风格", "注重画面节奏和韵律" ] }, 'lighting': { 'basic': [ "选择黄金时刻拍摄(日出日落)", "避免正午强光直射", "学习使用自然光", "注意光影方向和质量" ], 'intermediate': [ "尝试侧光或逆光效果", "利用阴影创造氛围", "控制光比避免过曝或欠曝", "学习使用人造光源" ], 'advanced': [ "光线运用娴熟,可尝试创意用光", "探索特殊光线条件拍摄", "注重光影的情感表达" ] }, 'subject': { 'basic': [ "明确拍摄主体", "简化背景突出主体", "注意主体与环境的互动", "选择有故事性的主体" ], 'intermediate': [ "注重主体的表情和姿态", "创造主体与环境的关系", "捕捉决定性瞬间", "注重主体的个性表达" ], 'advanced': [ "主体表现力强,可尝试更深层次表达", "探索抽象或概念性主体", "注重主体的象征意义" ] } } def _init_technical_advice(self): """初始化技术改进建议数据库""" return { 'camera_settings': [ "学习曝光三角关系(光圈、快门、ISO)", "根据场景选择合适的拍摄模式", "掌握对焦技巧确保主体清晰", "合理使用白平衡设置" ], 'post_processing': [ "学习基本的后期调整技巧", "掌握色彩校正和调整", "学习锐化和降噪处理", "尝试创意滤镜效果" ], 'equipment': [ "根据需求选择合适的镜头", "考虑使用三脚架提高稳定性", "投资质量好的存储设备", "定期清洁和维护设备" ], 'shooting_techniques': [ "练习稳定的持机姿势", "学习不同的拍摄角度", "掌握连拍和定时拍摄", "尝试慢门或高速摄影" ] } def generate_quality_advice(self, quality_scores): """生成质量改进建议""" advice = { 'overall': [], 'specific': {}, 'priority': [] } # 总体建议 overall_score = sum(quality_scores.values()) / len(quality_scores) if overall_score >= 90: advice['overall'].append("照片质量优秀,继续保持高水平拍摄") elif overall_score >= 80: advice['overall'].append("照片质量良好,有进一步提升空间") elif overall_score >= 60: advice['overall'].append("照片质量一般,需要重点改进") else: advice['overall'].append("照片质量较差,建议系统学习摄影基础") # 具体维度建议 for dimension, score in quality_scores.items(): if dimension in self.quality_advice_db: level = self._get_score_level(score) dimension_advice = self.quality_advice_db[dimension].get(level, []) advice['specific'][dimension] = dimension_advice # 添加优先级建议 if score < 70: advice['priority'].append(f"优先改进{dimension}(当前{score}分)") return advice def generate_aesthetic_advice(self, aesthetic_score, composition_analysis): """生成美学改进建议""" advice = { 'general': [], 'composition': [], 'lighting': [], 'subject': [], 'creative': [] } # 总体美学建议 if aesthetic_score >= 90: advice['general'].append("美学表现优秀,具备专业水准") advice['creative'].append("可尝试更具挑战性的创意拍摄") elif aesthetic_score >= 80: advice['general'].append("美学表现良好,细节有待提升") advice['creative'].append("尝试不同的构图和用光方式") elif aesthetic_score >= 60: advice['general'].append("美学表现一般,需要系统学习") advice['creative'].append("从基础构图和用光开始练习") else: advice['general'].append("美学表现较差,建议学习摄影美学基础") # 构图建议 comp_level = self._get_aesthetic_level(aesthetic_score) advice['composition'] = self.aesthetic_advice_db['composition'].get(comp_level, []) # 用光建议 light_level = self._get_aesthetic_level(aesthetic_score) advice['lighting'] = self.aesthetic_advice_db['lighting'].get(light_level, []) # 主体建议 subject_level = self._get_aesthetic_level(aesthetic_score) advice['subject'] = self.aesthetic_advice_db['subject'].get(subject_level, []) return advice def generate_technical_advice(self, photo_type='general'): """生成技术改进建议""" advice = { 'camera_settings': self.technical_advice_db['camera_settings'], 'post_processing': self.technical_advice_db['post_processing'], 'equipment': self.technical_advice_db['equipment'], 'shooting_techniques': self.technical_advice_db['shooting_techniques'] } # 根据照片类型调整建议 if photo_type == 'portrait': advice['camera_settings'].extend([ "使用大光圈虚化背景", "注意对焦在眼睛上", "使用柔光设备美化肤色" ]) elif photo_type == 'landscape': advice['camera_settings'].extend([ "使用小光圈获得大景深", "使用三脚架确保稳定性", "利用滤镜控制光线" ]) elif photo_type == 'macro': advice['camera_settings'].extend([ "使用微距镜头或近摄环", "注意景深控制", "使用环形闪光灯补光" ]) return advice def generate_personalized_advice(self, quality_scores, aesthetic_score, photo_content): """生成个性化综合建议""" personalized = { 'quick_wins': [], 'long_term_improvements': [], 'learning_resources': [], 'practice_exercises': [] } # 快速改进建议 low_score_dimensions = [dim for dim, score in quality_scores.items() if score < 70] if low_score_dimensions: personalized['quick_wins'].append(f"重点改进:{', '.join(low_score_dimensions)}") # 长期改进建议 if aesthetic_score < 80: personalized['long_term_improvements'].append("系统学习摄影构图和用光") # 学习资源推荐 personalized['learning_resources'].extend([ "推荐书籍:《摄影构图学》、《美国纽约摄影学院教材》", "在线课程:B站摄影教程、摄影之友", "实践平台:参加摄影比赛、加入摄影社群" ]) # 练习建议 personalized['practice_exercises'].extend([ "每日拍摄练习:同一主题不同角度", "技术练习:曝光、对焦、白平衡", "创意练习:尝试不同风格和主题" ]) return personalized def _get_score_level(self, score): """根据分数获取等级""" if score >= 85: return 'high' elif score >= 70: return 'medium' else: return 'low' def _get_aesthetic_level(self, score): """根据美学分数获取等级""" if score >= 85: return 'advanced' elif score >= 70: return 'intermediate' else: return 'basic' def get_quality_improvement_advice(quality_scores): """获取质量改进建议""" try: advisor = PhotoAdviceGenerator() return advisor.generate_quality_advice(quality_scores) except Exception as e: return {'error': f"生成建议失败: {str(e)}"} def get_aesthetic_improvement_advice(aesthetic_score, composition_analysis=None): """获取美学改进建议""" try: advisor = PhotoAdviceGenerator() return advisor.generate_aesthetic_advice(aesthetic_score, composition_analysis) except Exception as e: return {'error': f"生成建议失败: {str(e)}"} def get_technical_advice(photo_type='general'): """获取技术改进建议""" try: advisor = PhotoAdviceGenerator() return advisor.generate_technical_advice(photo_type) except Exception as e: return {'error': f"生成建议失败: {str(e)}"} def get_personalized_advice(quality_scores, aesthetic_score, photo_content): """获取个性化综合建议""" try: advisor = PhotoAdviceGenerator() return advisor.generate_personalized_advice(quality_scores, aesthetic_score, photo_content) except Exception as e: return {'error': f"生成建议失败: {str(e)}"}