#!/usr/bin/env python3 """ DeepSeek照片建议生成器 使用DeepSeek大模型为照片评分结果生成具体、个性化的改进建议 """ import os import json import requests from dotenv import load_dotenv # 加载环境变量 load_dotenv() class DeepSeekPhotoAdvisor: """DeepSeek照片建议生成器类""" def __init__(self): """初始化DeepSeek客户端""" self.api_key = os.getenv('DEEPSEEK_API_KEY') if not self.api_key: raise Exception("DeepSeek API密钥未配置,请在.env文件中设置DEEPSEEK_API_KEY") self.base_url = "https://api.deepseek.com/v1/chat/completions" def generate_quality_advice(self, quality_scores, photo_description=""): """ 生成照片质量改进建议 Args: quality_scores: 质量评分字典,包含各维度分数 photo_description: 照片内容描述 Returns: dict: 包含详细建议的字典 """ try: # 构建提示词 prompt = self._build_quality_advice_prompt(quality_scores, photo_description) # 调用DeepSeek API response = self._call_deepseek_api(prompt) # 解析响应 advice_data = self._parse_advice_response(response) return advice_data except Exception as e: # 如果API调用失败,返回备用建议 return self._generate_fallback_quality_advice(quality_scores) def generate_aesthetic_advice(self, aesthetic_scores, photo_description=""): """ 生成照片美学改进建议 Args: aesthetic_scores: 美学评分字典 photo_description: 照片内容描述 Returns: dict: 包含详细美学建议的字典 """ try: prompt = self._build_aesthetic_advice_prompt(aesthetic_scores, photo_description) response = self._call_deepseek_api(prompt) advice_data = self._parse_advice_response(response) return advice_data except Exception as e: return self._generate_fallback_aesthetic_advice(aesthetic_scores) def generate_comprehensive_advice(self, quality_scores, aesthetic_scores, photo_description): """ 生成综合改进建议 Args: quality_scores: 质量评分 aesthetic_scores: 美学评分 photo_description: 照片描述 Returns: dict: 综合建议 """ try: prompt = self._build_comprehensive_prompt(quality_scores, aesthetic_scores, photo_description) response = self._call_deepseek_api(prompt) advice_data = self._parse_advice_response(response) return advice_data except Exception as e: return self._generate_fallback_comprehensive_advice(quality_scores, aesthetic_scores) def _build_quality_advice_prompt(self, quality_scores, photo_description): """构建质量建议提示词""" prompt = f""" 你是一名专业的摄影指导专家,请根据以下照片质量评分结果,为摄影师提供具体、可操作的改进建议。 照片描述:{photo_description if photo_description else "未提供具体描述"} 质量评分结果: {json.dumps(quality_scores, indent=2, ensure_ascii=False)} 请按照以下结构提供建议: 1. 总体评价:简要总结照片质量状况 2. 优势分析:指出表现较好的方面 3. 改进重点:按优先级列出需要改进的维度 4. 具体建议:为每个需要改进的维度提供3-5条具体、可操作的建议 5. 学习资源:推荐相关学习内容 请用JSON格式返回,结构如下: {{ "overall_evaluation": "总体评价", "strengths": ["优势1", "优势2"], "priority_improvements": ["优先级1", "优先级2"], "specific_advice": {{ "维度名称": ["建议1", "建议2", "建议3"] }}, "learning_resources": ["资源1", "资源2"] }} 请确保建议具体、实用,适合摄影爱好者理解。 """ return prompt.strip() def _build_aesthetic_advice_prompt(self, aesthetic_scores, photo_description): """构建美学建议提示词""" prompt = f""" 你是一名专业的摄影美学指导专家,请根据以下照片美学评分结果,为摄影师提供具体的美学改进建议。 照片描述:{photo_description if photo_description else "未提供具体描述"} 美学评分结果: {json.dumps(aesthetic_scores, indent=2, ensure_ascii=False)} 请按照以下结构提供建议: 1. 美学评价:从艺术角度评价照片 2. 构图建议:针对构图提供具体改进方案 3. 色彩建议:针对色彩和谐度提供建议 4. 光线建议:针对光线运用提供指导 5. 创意提升:提供创意性建议 请用JSON格式返回,结构如下: {{ "aesthetic_evaluation": "美学评价", "composition_advice": ["构图建议1", "构图建议2"], "color_advice": ["色彩建议1", "色彩建议2"], "lighting_advice": ["光线建议1", "光线建议2"], "creative_suggestions": ["创意建议1", "创意建议2"] }} 请确保建议具有艺术性和实用性。 """ return prompt.strip() def _build_comprehensive_prompt(self, quality_scores, aesthetic_scores, photo_description): """构建综合建议提示词""" prompt = f""" 你是一名资深的摄影导师,请根据以下照片的全面评估结果,为摄影师提供综合性的改进建议和学习计划。 照片描述:{photo_description} 质量评分: {json.dumps(quality_scores, indent=2, ensure_ascii=False)} 美学评分: {json.dumps(aesthetic_scores, indent=2, ensure_ascii=False)} 请提供: 1. 综合评估:结合技术和艺术角度全面评价 2. 个性化学习计划:根据评分结果制定针对性学习路径 3. 短期目标:可立即实施的改进措施 4. 长期规划:提升摄影水平的长期建议 5. 练习建议:具体的拍摄练习方案 请用JSON格式返回,结构如下: {{ "comprehensive_evaluation": "综合评估", "learning_plan": {{ "short_term": ["短期目标1", "短期目标2"], "long_term": ["长期规划1", "长期规划2"] }}, "practice_suggestions": ["练习建议1", "练习建议2"], "immediate_actions": ["立即行动1", "立即行动2"] }} 请确保建议系统、实用,适合不同水平的摄影爱好者。 """ return prompt.strip() def _call_deepseek_api(self, prompt): """调用DeepSeek API""" headers = { 'Authorization': f'Bearer {self.api_key}', 'Content-Type': 'application/json' } data = { 'model': 'deepseek-chat', 'messages': [ { 'role': 'system', 'content': '你是一名专业的摄影指导专家,具有丰富的摄影教学经验和艺术审美能力。你擅长为不同水平的摄影爱好者提供具体、实用的改进建议。' }, { 'role': 'user', 'content': prompt } ], 'max_tokens': 1500, 'temperature': 0.7, 'top_p': 0.9 } response = requests.post(self.base_url, headers=headers, json=data, timeout=30) response.raise_for_status() return response.json() def _parse_advice_response(self, api_response): """解析API响应""" try: if 'choices' in api_response and len(api_response['choices']) > 0: content = api_response['choices'][0]['message']['content'].strip() # 尝试解析JSON格式的响应 try: # 提取JSON部分(可能包含在代码块中) if '```json' in content: json_str = content.split('```json')[1].split('```')[0].strip() elif '```' in content: json_str = content.split('```')[1].strip() else: json_str = content advice_data = json.loads(json_str) return advice_data except json.JSONDecodeError: # 如果不是JSON格式,返回原始文本 return {'raw_advice': content} else: raise Exception("API响应格式错误") except Exception as e: raise Exception(f"解析API响应失败: {str(e)}") def _generate_fallback_quality_advice(self, quality_scores): """生成备用质量建议""" return { "overall_evaluation": "基于评分结果生成的改进建议", "strengths": ["照片基础质量良好"], "priority_improvements": ["根据评分结果确定重点改进维度"], "specific_advice": { "通用建议": [ "建议使用三脚架提高稳定性", "注意光线条件,避免过暗或过亮", "后期适当调整对比度和色彩平衡" ] }, "learning_resources": ["推荐学习基础摄影知识和后期处理技巧"] } def _generate_fallback_aesthetic_advice(self, aesthetic_scores): """生成备用美学建议""" return { "aesthetic_evaluation": "照片具有基本的审美价值", "composition_advice": ["学习三分法则构图", "注意主体位置安排"], "color_advice": ["保持色彩和谐", "避免过度饱和"], "lighting_advice": ["选择合适的光线条件", "注意光影效果"], "creative_suggestions": ["尝试不同的拍摄角度", "探索创意构图方式"] } def _generate_fallback_comprehensive_advice(self, quality_scores, aesthetic_scores): """生成备用综合建议""" return { "comprehensive_evaluation": "照片整体表现良好,有提升空间", "learning_plan": { "short_term": ["重点改进技术基础", "练习基本构图技巧"], "long_term": ["系统学习摄影理论", "培养艺术审美能力"] }, "practice_suggestions": ["多拍多练", "分析优秀作品"], "immediate_actions": ["检查相机设置", "注意拍摄环境"] } # 便捷函数 def get_deepseek_quality_advice(quality_scores, photo_description=""): """获取DeepSeek质量建议(便捷函数)""" try: advisor = DeepSeekPhotoAdvisor() return advisor.generate_quality_advice(quality_scores, photo_description) except Exception as e: # 如果DeepSeek不可用,返回空建议 return {} def get_deepseek_aesthetic_advice(aesthetic_scores, photo_description=""): """获取DeepSeek美学建议(便捷函数)""" try: advisor = DeepSeekPhotoAdvisor() return advisor.generate_aesthetic_advice(aesthetic_scores, photo_description) except Exception as e: return {} def check_deepseek_config(): """检查DeepSeek配置状态""" try: api_key = os.getenv('DEEPSEEK_API_KEY') if api_key: return True, "DeepSeek照片建议生成器已配置" else: return False, "DeepSeek API密钥未配置,请在.env文件中设置DEEPSEEK_API_KEY" except Exception as e: return False, f"DeepSeek配置检查失败: {str(e)}"