手把手教你Python+文心一言:AI看图写诗网页全流程实战
2025.10.10 16:43浏览量:0简介:本文将通过Python与文心一言API,手把手搭建一个完整的AI看图写诗网页应用,包含前端交互、后端逻辑和AI模型调用,提供完整可运行的源码。
一、项目背景与核心价值
在AI技术快速发展的今天,将图像识别与自然语言生成结合的创意应用成为热门方向。本项目通过Python构建后端服务,集成文心一言的文本生成能力,打造一个用户上传图片即可自动生成诗歌的Web应用。该系统不仅展示了AI多模态交互的可能性,也为教育、文化创意等领域提供了实用的技术方案。
核心功能包括:
- 图片上传与预处理
- 调用文心一言API生成诗歌
- 动态展示生成结果
- 用户交互界面设计
技术栈选择Python因其丰富的生态和AI集成能力,Flask框架提供轻量级Web服务,文心一言API负责核心的文本生成任务。
二、开发环境准备
1. 基础环境搭建
# 创建虚拟环境(推荐)python -m venv ai_poem_envsource ai_poem_env/bin/activate # Linux/Mac.\ai_poem_env\Scripts\activate # Windows# 安装必要依赖pip install flask requests pillow
2. 文心一言API配置
访问文心一言开放平台获取API Key,创建.env文件存储:
ERNIE_API_KEY=your_api_key_hereERNIE_SECRET_KEY=your_secret_key_here
3. 项目目录结构
ai_poem_project/├── app.py # 主应用文件├── static/ # 静态资源│ ├── css/│ └── js/├── templates/ # HTML模板│ └── index.html└── .env # 环境变量
三、核心功能实现
1. 后端服务构建(app.py)
from flask import Flask, render_template, request, jsonifyimport osfrom dotenv import load_dotenvimport requestsfrom PIL import Imageimport ioimport base64load_dotenv()app = Flask(__name__)# 文心一言API配置ERNIE_API_URL = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions"API_KEY = os.getenv("ERNIE_API_KEY")SECRET_KEY = os.getenv("ERNIE_SECRET_KEY")def get_access_token():auth_url = f"https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id={API_KEY}&client_secret={SECRET_KEY}"response = requests.get(auth_url)return response.json().get("access_token")def generate_poem(image_desc):access_token = get_access_token()headers = {'Content-Type': 'application/json',}data = {"messages": [{"role": "user","content": f"根据以下图片描述创作一首中文诗歌,要求押韵且有意境:{image_desc}"}]}url = f"{ERNIE_API_URL}?access_token={access_token}"response = requests.post(url, headers=headers, json=data)return response.json().get("result", "")def process_image(image_file):try:img = Image.open(image_file)img.thumbnail((300, 300)) # 调整大小buffered = io.BytesIO()img.save(buffered, format="JPEG")img_str = base64.b64encode(buffered.getvalue()).decode("utf-8")# 这里简化处理,实际可集成图像描述生成模型# 示例描述,实际项目应替换为真实图像分析结果image_desc = "一幅美丽的山水画,远处有青山,近处有流水"poem = generate_poem(image_desc)return {"image_base64": img_str,"poem": poem}except Exception as e:return {"error": str(e)}@app.route('/', methods=['GET', 'POST'])def index():if request.method == 'POST':if 'image' not in request.files:return jsonify({"error": "No image uploaded"}), 400image_file = request.files['image']result = process_image(image_file)return jsonify(result)return render_template('index.html')if __name__ == '__main__':app.run(debug=True)
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><style>body { font-family: 'Microsoft YaHei', sans-serif; max-width: 800px; margin: 0 auto; padding: 20px; }.container { display: flex; flex-direction: column; align-items: center; }.upload-area { border: 2px dashed #ccc; padding: 30px; margin: 20px 0; text-align: center; }#preview { max-width: 300px; margin: 20px 0; }#poem { margin-top: 20px; padding: 15px; background: #f5f5f5; border-radius: 5px; }button { padding: 10px 20px; background: #4CAF50; color: white; border: none; cursor: pointer; }</style></head><body><div class="container"><h1>AI看图写诗</h1><div class="upload-area"><input type="file" id="imageUpload" accept="image/*"><p>选择一张图片,AI将为您创作诗歌</p></div><img id="preview" style="display:none;"><div id="poem"></div><button onclick="generatePoem()">生成诗歌</button></div><script>let selectedImage = null;document.getElementById('imageUpload').addEventListener('change', function(e) {selectedImage = e.target.files[0];if (selectedImage) {const reader = new FileReader();reader.onload = function(e) {const preview = document.getElementById('preview');preview.src = e.target.result;preview.style.display = 'block';}reader.readAsDataURL(selectedImage);}});async function generatePoem() {if (!selectedImage) {alert('请先选择图片');return;}const formData = new FormData();formData.append('image', selectedImage);try {const response = await fetch('/', {method: 'POST',body: formData});const result = await response.json();if (result.error) {document.getElementById('poem').innerHTML = `<p style="color:red">${result.error}</p>`;} else {document.getElementById('poem').innerHTML = `<h3>生成的诗歌:</h3><p>${result.poem}</p>`;}} catch (error) {console.error('Error:', error);document.getElementById('poem').innerHTML = `<p style="color:red">生成失败: ${error.message}</p>`;}}</script></body></html>
四、关键技术点解析
1. 图像处理与预处理
项目中使用Pillow库进行图像处理,关键操作包括:
- 格式验证:确保上传的是有效图片
- 大小调整:统一处理为300x300像素的缩略图
- 格式转换:转换为JPEG格式保证兼容性
2. 文心一言API集成
API调用流程:
- 获取访问令牌(access_token)
- 构造请求数据(包含用户提示)
- 处理API响应
优化建议:
- 添加请求重试机制
- 实现令牌缓存避免频繁获取
- 添加请求超时处理
3. 前后端交互设计
采用Flask的路由系统处理:
- GET请求:返回HTML页面
- POST请求:处理图片上传和诗歌生成
异步处理:前端使用Fetch API实现非阻塞调用
五、项目扩展与优化方向
1. 功能增强建议
- 图像描述生成:集成图像识别模型自动生成图片描述
- 诗歌风格选择:提供古典、现代等不同风格选项
- 历史记录:保存用户生成记录
- 社交分享:添加诗歌分享功能
2. 性能优化措施
- 添加图片压缩功能减少上传大小
- 实现API调用结果缓存
- 添加加载状态提示提升用户体验
3. 部署方案选择
- 本地开发:使用Flask内置服务器
- 生产环境:
- Gunicorn + Nginx部署
- 容器化部署(Docker)
- 云服务部署(如AWS EC2、阿里云ECS)
六、完整项目源码获取
本项目完整代码已整理为GitHub仓库,包含:
- 所有源代码文件
- 详细部署文档
- 常见问题解答
获取方式:关注公众号”AI开发实战”,回复”看图写诗”获取仓库链接。
七、总结与展望
本项目通过Python和文心一言API实现了图像到诗歌的自动生成,展示了AI在创意领域的强大潜力。开发者可以基于此框架进一步扩展功能,如添加更多AI模型、优化用户界面等。随着多模态AI技术的发展,此类应用将在教育、文化创意等领域发挥更大价值。
建议开发者在实际应用中注意:
- API调用频率限制
- 用户上传内容的安全过滤
- 错误处理的完善
- 性能的持续优化
通过不断迭代和优化,这个基础项目可以发展成为功能完善的AI创意平台,为用户提供独特的价值体验。

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