手把手搭建AI看图写诗:Python+文心一言全流程指南
2025.09.19 14:22浏览量:59简介:本文将通过完整代码示例,手把手教你用Python Flask框架结合文心一言API,实现一个可上传图片并生成诗歌的交互式网页应用,包含环境配置、API调用、前后端交互等全流程开发细节。
一、项目背景与技术选型
1.1 创意来源与市场需求
在AI技术普及的当下,图像识别与自然语言处理的结合成为热门应用场景。本项目的核心价值在于通过视觉与文字的跨模态交互,为用户提供兼具趣味性与实用性的创作工具,尤其适合教育、文化创意等领域。
1.2 技术栈选择
- 后端框架:Flask(轻量级Web框架,适合快速开发)
- 前端技术:HTML5+CSS3+Bootstrap(响应式布局)
- AI能力:文心一言API(提供高质量诗歌生成)
- 辅助工具:Pillow(图片处理)、Requests(API调用)
1.3 系统架构设计
采用经典的三层架构:
- 表现层:用户上传图片的表单界面
- 业务逻辑层:图片处理与API调用
- 数据层:临时存储用户上传的图片
二、开发环境准备
2.1 基础环境配置
# 创建虚拟环境(推荐)python -m venv venvsource venv/bin/activate # Linux/Macvenv\Scripts\activate # Windows# 安装依赖包pip install flask pillow requests
2.2 文心一言API获取
- 登录文心一言开放平台
- 创建应用获取API Key
- 记录Access Token(有效期需注意)
2.3 项目目录结构
ai_poetry/├── static/ # 静态资源│ ├── css/│ └── js/├── templates/ # HTML模板│ └── index.html├── app.py # 主程序└── requirements.txt # 依赖文件
三、核心功能实现
3.1 Flask主程序开发
from flask import Flask, render_template, requestimport requestsimport osfrom PIL import Imageimport base64app = Flask(__name__)app.config['UPLOAD_FOLDER'] = 'static/uploads'os.makedirs(app.config['UPLOAD_FOLDER'], exist_ok=True)# 文心一言API配置API_KEY = 'your_api_key'SECRET_KEY = 'your_secret_key'TOKEN_URL = 'https://aip.baidubce.com/oauth/2.0/token'POETRY_URL = 'https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/eb40_future'def get_access_token():params = {'grant_type': 'client_credentials','client_id': API_KEY,'client_secret': SECRET_KEY}response = requests.post(TOKEN_URL, params=params)return response.json().get('access_token')@app.route('/', methods=['GET', 'POST'])def index():poem = Noneif request.method == 'POST':# 处理图片上传file = request.files['image']if file:img_path = os.path.join(app.config['UPLOAD_FOLDER'], file.filename)file.save(img_path)# 调用文心一言API生成诗歌access_token = get_access_token()headers = {'Content-Type': 'application/json'}params = {'access_token': access_token}# 图片转base64(示例简化,实际需处理)with open(img_path, 'rb') as f:img_base64 = base64.b64encode(f.read()).decode('utf-8')prompt = f"根据这张图片创作一首七言绝句:{img_base64[:50]}..." # 实际需完整处理data = {"messages": [{"role": "user", "content": prompt}]}response = requests.post(POETRY_URL,params=params,headers=headers,json=data)poem = response.json().get('result', '未能生成诗歌,请重试')return render_template('index.html', poem=poem)if __name__ == '__main__':app.run(debug=True)
3.2 前端界面开发
<!-- templates/index.html --><!DOCTYPE html><html><head><title>AI看图写诗</title><link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet"></head><body><div class="container mt-5"><h1 class="text-center">AI看图写诗</h1><form method="POST" enctype="multipart/form-data"><div class="mb-3"><label for="image" class="form-label">上传图片</label><input class="form-control" type="file" id="image" name="image" accept="image/*" required></div><button type="submit" class="btn btn-primary">生成诗歌</button></form>{% if poem %}<div class="mt-5 p-4 border rounded bg-light"><h3>生成的诗歌:</h3><pre>{{ poem }}</pre></div>{% endif %}</div></body></html>
3.3 图片处理优化
实际开发中需要添加:
- 图片格式验证(仅允许jpg/png)
- 尺寸压缩(避免大图导致性能问题)
- 异常处理(文件过大、格式错误等)
# 图片处理增强示例def process_image(file_path):try:img = Image.open(file_path)# 限制最大尺寸img.thumbnail((800, 800))# 转换为RGB模式(处理PNG透明通道)if img.mode != 'RGB':img = img.convert('RGB')# 保存处理后的图片new_path = file_path.replace('.', '_processed.')img.save(new_path)return new_pathexcept Exception as e:print(f"图片处理错误: {e}")return None
四、API调用进阶技巧
4.1 请求参数优化
文心一言API支持多种参数配置:
data = {"messages": [{"role": "user", "content": prompt}],"temperature": 0.7, # 创造力参数(0-1)"top_p": 0.9, # 核心词概率"penalty_score": 1.2 # 重复惩罚}
4.2 错误处理机制
def call_wenxin_api(prompt):access_token = get_access_token()if not access_token:return "API认证失败"try:response = requests.post(POETRY_URL,params={'access_token': access_token},json={"messages": [{"role": "user", "content": prompt}]},timeout=10)response.raise_for_status()return response.json().get('result', '生成结果为空')except requests.exceptions.RequestException as e:return f"API调用失败: {str(e)}"
五、部署与扩展建议
5.1 本地测试流程
- 启动服务:
python app.py - 访问
http://localhost:5000 - 测试图片上传功能
5.2 生产环境部署
推荐使用:
- 云服务器:阿里云ECS/腾讯云CVM
- 容器化:Docker部署(附Dockerfile示例)
FROM python:3.9-slimWORKDIR /appCOPY . .RUN pip install -r requirements.txtCMD ["gunicorn", "--bind", "0.0.0.0:8000", "app:app"]
5.3 功能扩展方向
- 多风格诗歌:增加”豪放派”、”婉约派”等选项
- 社交分享:集成微博/微信分享功能
- 历史记录:添加用户作品保存功能
- 移动适配:开发PWA渐进式Web应用
六、完整项目源码
点击获取GitHub完整项目(示例链接,实际使用时请替换)
项目包含:
- 完整Flask应用代码
- 前端模板文件
- 部署配置说明
- 测试用例集
七、常见问题解决方案
7.1 API调用频率限制
解决方案:
- 实现请求队列
- 添加重试机制(指数退避算法)
- 监控API使用量
7.2 图片处理异常
预防措施:
- 限制文件大小(前端+后端双重验证)
- 仅允许常见图片格式
- 使用try-catch捕获处理异常
7.3 跨域问题处理
开发时若需跨域访问,可在Flask中添加:
from flask_cors import CORSapp = Flask(__name__)CORS(app) # 允许所有跨域请求
本文通过完整的代码示例和详细的步骤说明,展示了如何使用Python和文心一言API构建一个功能完备的AI看图写诗应用。开发者可根据实际需求调整参数配置和界面设计,快速实现个性化部署。项目源码提供了良好的扩展基础,适合作为AI+Web应用的入门实践案例。

发表评论
登录后可评论,请前往 登录 或 注册