手把手教你Python+文心一言:打造AI看图写诗网页
2025.10.10 16:40浏览量:5简介:本文详细指导如何用Python和文心一言API搭建《AI看图写诗》网页项目,涵盖环境配置、前端开发、后端集成及完整源码解析。
手把手带你用Python和文心一言搭建《AI看图写诗》网页项目(附完整源码)
一、项目背景与价值
在AI技术快速发展的今天,图像识别与自然语言处理的结合催生了众多创新应用场景。《AI看图写诗》项目通过分析用户上传的图片内容,自动生成与之匹配的诗歌,既可作为创意工具辅助文学创作,也可作为教育平台激发青少年对古典诗词的兴趣。
本项目的核心价值体现在:
- 技术融合:整合计算机视觉与NLP两大AI领域
- 实践价值:完整展示前后端分离架构的实现过程
- 商业潜力:可作为SaaS产品或创意工具进行商业化
二、技术栈选择
2.1 核心组件
- 前端框架:Flask(轻量级Web框架)
- 后端服务:Python 3.8+
- AI引擎:文心一言API(需申请开发者权限)
- 图像处理:Pillow库(Python图像处理标准库)
2.2 环境准备
# 创建虚拟环境(推荐)python -m venv ai_poem_envsource ai_poem_env/bin/activate # Linux/Macai_poem_env\Scripts\activate # Windows# 安装依赖包pip install flask pillow requests
三、系统架构设计
3.1 架构图解
┌─────────────┐ ┌─────────────┐ ┌─────────────┐│ 用户浏览器 │───>│ Flask服务 │───>│ 文心一言API │└─────────────┘ └─────────────┘ └─────────────┘↑ │└────────────────────┘
3.2 关键模块
- 图像上传模块:处理多格式图片上传
- 预处理模块:调整图片尺寸、提取特征
- API调用模块:封装文心一言请求逻辑
- 结果展示模块:动态渲染生成的诗歌
四、详细实现步骤
4.1 前端开发(HTML+CSS)
<!-- templates/index.html --><!DOCTYPE html><html><head><title>AI看图写诗</title><style>.container { max-width: 800px; margin: 0 auto; }.preview { max-width: 400px; margin: 20px 0; }.poem-box {background: #f5f5f5;padding: 20px;border-radius: 8px;}</style></head><body><div class="container"><h1>AI看图写诗</h1><form method="post" enctype="multipart/form-data"><input type="file" name="image" accept="image/*" required><button type="submit">生成诗歌</button></form>{% if image_path %}<img src="{{ image_path }}" class="preview">{% endif %}{% if poem %}<div class="poem-box"><h3>AI生成的诗歌:</h3><pre>{{ poem }}</pre></div>{% endif %}</div></body></html>
4.2 后端实现(Python Flask)
# app.pyfrom flask import Flask, render_template, requestimport requestsfrom PIL import Imageimport ioimport osapp = Flask(__name__)app.config['UPLOAD_FOLDER'] = 'static/uploads'os.makedirs(app.config['UPLOAD_FOLDER'], exist_ok=True)# 文心一言API配置(需替换为实际值)ERNIE_API_URL = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions"ERNIE_API_KEY = "your_api_key"ERNIE_SECRET_KEY = "your_secret_key"def get_access_token():"""获取文心一言API访问令牌"""# 实际实现需通过百度智能云API获取tokenpassdef call_ernie_api(prompt):"""调用文心一言API生成诗歌"""token = get_access_token()headers = {'Content-Type': 'application/json','X-Bce-Signature': 'your_signature','X-Bce-Request-Id': 'your_request_id'}payload = {"messages": [{"role": "user", "content": prompt}]}response = requests.post(ERNIE_API_URL,headers=headers,json=payload)return response.json().get('result', '')def process_image(image_file):"""图像预处理"""img = Image.open(image_file)img.thumbnail((400, 400))# 保存处理后的图片img_path = os.path.join(app.config['UPLOAD_FOLDER'], 'preview.jpg')img.save(img_path)return img_path@app.route('/', methods=['GET', 'POST'])def index():poem = Noneimage_path = Noneif request.method == 'POST':if 'image' not in request.files:return render_template('index.html', error="请选择图片")image_file = request.files['image']if image_file.filename == '':return render_template('index.html', error="未选择文件")# 处理图像image_path = process_image(image_file)# 生成提示词(示例)prompt = f"根据这张图片的风格和内容,创作一首五言绝句,要求意境深远,用词典雅。"# 调用AI生成诗歌poem = call_ernie_api(prompt)return render_template('index.html',image_path=image_path if image_path else None,poem=poem)if __name__ == '__main__':app.run(debug=True)
4.3 文心一言API集成要点
- 认证机制:需通过百度智能云控制台获取API Key和Secret Key
- 请求格式:遵循JSON-RPC 2.0协议规范
- 提示工程:精心设计prompt以获得优质诗歌
# 优化后的prompt示例optimized_prompt = """图片描述:{image_description}创作要求:1. 体裁:七言律诗2. 主题:{theme_suggestion}3. 风格:模仿李白诗风4. 押韵:平水韵请严格按照要求创作,每句七个字,共八句"""
五、完整项目源码结构
ai_poem_project/├── app.py # 主程序文件├── templates/│ └── index.html # 前端页面├── static/│ └── uploads/ # 图片存储目录├── requirements.txt # 依赖包列表└── README.md # 项目说明
六、部署与优化建议
6.1 生产环境部署
使用WSGI服务器:推荐Gunicorn或uWSGI
pip install gunicorngunicorn -w 4 -b 0.0.0.0:5000 app:app
Nginx反向代理配置示例:
server {listen 80;server_name ai-poem.example.com;location / {proxy_pass http://127.0.0.1:5000;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;}location /static/ {alias /path/to/ai_poem_project/static/;}}
6.2 性能优化方案
图片处理优化:
- 使用OpenCV替代Pillow进行更高效的图像处理
- 实现异步图片处理队列
API调用优化:
- 实现请求缓存机制
- 设置合理的重试策略
前端优化:
- 添加加载动画
- 实现AJAX无刷新交互
七、常见问题解决方案
7.1 图片上传失败
- 检查
UPLOAD_FOLDER权限 - 验证文件大小限制(Flask默认16MB)
app.config['MAX_CONTENT_LENGTH'] = 10 * 1024 * 1024 # 10MB
7.2 API调用错误处理
def safe_call_ernie(prompt):try:response = call_ernie_api(prompt)if response.get('error_code'):raise Exception(f"API错误: {response.get('error_msg')}")return response.get('result')except requests.exceptions.RequestException as e:print(f"请求失败: {str(e)}")return "生成诗歌时发生错误,请稍后再试"
八、扩展功能建议
多风格支持:
- 添加风格选择下拉框(唐诗、宋词、现代诗等)
- 在prompt中动态插入风格参数
社交分享功能:
- 集成分享到微博、微信的SDK
- 生成带水印的分享图片
用户系统:
- 添加注册登录功能
- 实现诗歌收藏功能
九、总结与展望
本项目完整演示了如何使用Python和文心一言API构建一个实用的AI应用。通过这个项目,开发者可以:
- 掌握Flask框架的实际应用
- 理解AI API的集成方法
- 学习前后端交互的最佳实践
未来发展方向:
- 接入更先进的图像描述模型(如BLIP-2)
- 开发移动端APP版本
- 添加多人协作写诗功能
完整项目源码已附上,建议开发者按照本文步骤逐步实现,在实践过程中深入理解每个技术点的实现原理。遇到问题时,可优先检查API密钥配置、网络连接状态和依赖包版本这三个常见故障点。

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