手把手教你用Python+文心一言搭建AI看图写诗网页
2025.09.19 14:22浏览量:1简介:零基础开发AI诗歌生成系统,完整源码+技术解析,快速构建图像到诗歌的智能创作平台
一、项目背景与技术选型
在AI技术快速发展的今天,图像识别与自然语言处理的结合催生了丰富的应用场景。本项目通过Python与文心一言API的深度整合,构建了一个用户上传图片即可自动生成对应诗歌的Web系统。技术栈包含:
- Flask框架:轻量级Web服务开发
- 文心一言API:提供高质量的诗歌生成能力
- HTML5/CSS3:响应式前端界面
- Bootstrap 5:快速构建美观的UI组件
- Pillow库:图像基础处理
项目核心价值在于展示AI在跨模态创作领域的实践,开发者可基于此框架扩展至故事生成、文案创作等场景。
二、环境准备与依赖安装
1. 系统环境要求
- Python 3.8+
- pip包管理工具
- 现代浏览器(Chrome/Firefox)
2. 依赖库安装
pip install flask requests pillow
建议使用虚拟环境管理依赖:
python -m venv poem_envsource poem_env/bin/activate # Linux/Macpoem_env\Scripts\activate # Windows
3. 文心一言API配置
- 登录文心一言开放平台
- 创建应用获取API Key和Secret
- 在项目根目录创建
.env文件:ERNIE_API_KEY=your_api_keyERNIE_SECRET_KEY=your_secret_key
三、核心功能实现
1. 后端服务架构
from flask import Flask, render_template, request, jsonifyimport requestsimport osfrom dotenv import load_dotenvfrom PIL import Imageimport ioload_dotenv()app = Flask(__name__)def get_access_token():url = "https://aip.baidubce.com/oauth/2.0/token"params = {"grant_type": "client_credentials","client_id": os.getenv("ERNIE_API_KEY"),"client_secret": os.getenv("ERNIE_SECRET_KEY")}response = requests.post(url, params=params)return response.json().get("access_token")@app.route('/')def index():return render_template('index.html')@app.route('/generate', methods=['POST'])def generate_poem():# 图像处理逻辑image_file = request.files['image']img = Image.open(image_file.stream)# 调用文心一言APIaccess_token = get_access_token()poem_api = f"https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions?access_token={access_token}"prompt = f"根据这张图片创作一首中文诗歌,要求五言绝句,包含以下元素:山水、季节特征"data = {"messages": [{"role": "user", "content": prompt}]}response = requests.post(poem_api, json=data)poem = response.json().get("result", "未能生成诗歌")return jsonify({"poem": poem})
2. 前端界面设计
templates/index.html核心代码:
<!DOCTYPE html><html lang="zh-CN"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><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 mb-4">AI看图写诗</h1><div class="card"><div class="card-body"><form id="uploadForm" enctype="multipart/form-data"><div class="mb-3"><label for="imageUpload" class="form-label">选择图片</label><input class="form-control" type="file" id="imageUpload" name="image" accept="image/*" required></div><button type="submit" class="btn btn-primary">生成诗歌</button></form><div id="result" class="mt-4 p-3 border rounded" style="display:none;"><h5>生成的诗歌:</h5><pre id="poemContent"></pre></div></div></div></div><script>document.getElementById('uploadForm').addEventListener('submit', async (e) => {e.preventDefault();const formData = new FormData(e.target);try {const response = await fetch('/generate', {method: 'POST',body: formData});const data = await response.json();document.getElementById('poemContent').textContent = data.poem;document.getElementById('result').style.display = 'block';} catch (error) {console.error('Error:', error);}});</script></body></html>
四、关键技术解析
1. 图像处理优化
建议添加以下图像预处理逻辑:
def preprocess_image(img):# 调整图像大小提高API处理效率img = img.resize((800, 600), Image.LANCZOS)# 转换为RGB模式(处理透明通道)if img.mode != 'RGB':img = img.convert('RGB')# 保存到内存缓冲区img_byte_arr = io.BytesIO()img.save(img_byte_arr, format='JPEG', quality=90)img_byte_arr.seek(0)return img_byte_arr
2. API调用优化策略
- 令牌缓存:避免频繁获取access_token
```python
from functools import lru_cache
@lru_cache(maxsize=1)
def get_cached_access_token():
return get_access_token()
2. **错误重试机制**:```pythondef call_ernie_api(prompt, max_retries=3):for _ in range(max_retries):try:access_token = get_cached_access_token()# ...API调用逻辑...return response.json()except Exception as e:if _ == max_retries - 1:raisetime.sleep(1) # 指数退避
五、部署与扩展建议
1. 生产环境部署
推荐使用Gunicorn + Nginx组合:
pip install gunicorngunicorn -w 4 -b 0.0.0.0:5000 app:app
Nginx配置示例:
server {listen 80;server_name your-domain.com;location / {proxy_pass http://127.0.0.1:5000;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;}client_max_body_size 10M; # 允许大文件上传}
2. 功能扩展方向
六、完整项目源码
GitHub完整项目仓库包含:
- 完整Flask应用代码
- 前端静态资源
- 部署配置文件
- 测试用例
- 详细文档说明
七、常见问题解决方案
API调用失败:
- 检查.env文件配置
- 确认账户是否有足够调用额度
- 查看文心一言API文档更新
图像上传问题:
- 确保Nginx配置了足够大的client_max_body_size
- 检查前端form的enctype属性
跨域问题:
- 在Flask中添加CORS支持:
from flask_cors import CORSCORS(app)
- 在Flask中添加CORS支持:
本项目的完整实现展示了如何将先进的AI能力转化为实用的Web应用,开发者可通过修改提示词模板和界面设计,快速适配到教育、文化创意等多个领域。建议持续关注文心一言API的更新,以获取更多创作维度支持。

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