手把手教你用Python+文心一言:AI看图写诗网页实战指南
2025.09.19 13:32浏览量:2简介:本文将详细介绍如何使用Python和文心一言API搭建一个完整的《AI看图写诗》网页应用,包含前端界面设计、后端逻辑实现和完整项目源码。
手把手教你用Python+文心一言:AI看图写诗网页实战指南
一、项目概述与技术选型
在当今AI技术飞速发展的背景下,将图像识别与自然语言生成技术结合,开发一个能够”看图写诗”的智能应用,不仅能展示AI的创造力,还能为用户提供独特的文学体验。本项目采用Python作为后端开发语言,结合Flask框架构建Web服务,前端使用HTML/CSS/JavaScript实现交互界面,核心功能通过调用文心一言API实现图像理解与诗歌生成。
技术选型依据:
- Python:拥有丰富的AI生态库(如OpenCV用于图像处理),且语法简洁易学
- Flask:轻量级Web框架,适合快速开发中小型应用
- 文心一言API:提供强大的自然语言处理能力,支持多模态交互
- 前端三件套:实现响应式设计,兼容多终端访问
二、开发环境准备
2.1 系统要求
- Python 3.7+
- 现代浏览器(Chrome/Firefox/Edge)
- 文心一言API访问权限
2.2 依赖安装
pip install flask requests opencv-python pillow
2.3 API密钥配置
在项目根目录创建.env文件,添加以下内容:
ERNIE_API_KEY=your_api_key_hereERNIE_SECRET_KEY=your_secret_key_here
三、核心功能实现
3.1 图像处理模块
使用OpenCV实现基础图像处理:
import cv2import numpy as npfrom PIL import Imageimport iodef preprocess_image(file_stream):"""图像预处理:调整大小、格式转换"""try:# 使用Pillow读取文件流img = Image.open(file_stream)# 转换为RGB模式if img.mode != 'RGB':img = img.convert('RGB')# 调整大小(保持宽高比)img.thumbnail((800, 800))# 转换为字节流img_byte_arr = io.BytesIO()img.save(img_byte_arr, format='JPEG')img_byte_arr.seek(0)return img_byte_arrexcept Exception as e:print(f"图像处理错误: {e}")return None
3.2 文心一言API集成
import requestsimport base64import jsonfrom dotenv import load_dotenvimport osload_dotenv()class ErnieBot:def __init__(self):self.api_key = os.getenv('ERNIE_API_KEY')self.secret_key = os.getenv('ERNIE_SECRET_KEY')self.access_token = self._get_access_token()def _get_access_token(self):"""获取API访问令牌"""auth_url = "https://aip.baidubce.com/oauth/2.0/token"params = {"grant_type": "client_credentials","client_id": self.api_key,"client_secret": self.secret_key}response = requests.post(auth_url, params=params)return response.json().get("access_token")def generate_poem(self, image_base64, prompt="根据这张图片创作一首古诗"):"""调用文心一言生成诗歌"""api_url = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions"headers = {'Content-Type': 'application/json'}data = {"messages": [{"role": "user","content": f"{prompt}\n图片描述:{self._describe_image(image_base64)}"}]}params = {"access_token": self.access_token}response = requests.post(api_url, headers=headers, params=params, json=data)return response.json().get("result", "")def _describe_image(self, image_base64):"""简单图像描述(实际项目可接入图像描述API)"""# 这里简化处理,实际应调用图像理解APIreturn "一幅美丽的自然风景图"
3.3 Flask后端实现
from flask import Flask, request, jsonify, render_templateimport base64from io import BytesIOfrom ernie_bot import ErnieBotapp = Flask(__name__)ernie = ErnieBot()@app.route('/')def index():return render_template('index.html')@app.route('/generate', methods=['POST'])def generate_poem():if 'file' not in request.files:return jsonify({"error": "未上传文件"}), 400file = request.files['file']if file.filename == '':return jsonify({"error": "未选择文件"}), 400# 图像预处理img_byte_arr = preprocess_image(file.stream)if not img_byte_arr:return jsonify({"error": "图像处理失败"}), 500# 转换为base64img_base64 = base64.b64encode(img_byte_arr.getvalue()).decode('utf-8')# 调用AI生成诗歌poem = ernie.generate_poem(img_base64)return jsonify({"poem": poem,"image_url": f"data:image/jpeg;base64,{img_base64}"})def preprocess_image(file_stream):# 复用前面的图像处理函数pass # 实际实现见前文if __name__ == '__main__':app.run(debug=True)
四、前端界面设计
4.1 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"><style>.container { max-width: 900px; }.result-box { min-height: 200px; border: 1px dashed #ccc; padding: 15px; }.preview-img { max-width: 100%; max-height: 300px; }</style></head><body><div class="container mt-5"><h1 class="text-center mb-4">AI看图写诗</h1><div class="card mb-4"><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" accept="image/*" required></div><button type="submit" class="btn btn-primary">生成诗歌</button></form></div></div><div class="row mt-4"><div class="col-md-6"><h3>图片预览</h3><div id="imagePreview" class="text-center"><p>请上传图片</p></div></div><div class="col-md-6"><h3>AI生成的诗歌</h3><div id="poemResult" class="result-box"><p>诗歌将显示在这里...</p></div></div></div></div><script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script><script>document.getElementById('uploadForm').addEventListener('submit', async function(e) {e.preventDefault();const formData = new FormData();const fileInput = document.getElementById('imageUpload');formData.append('file', fileInput.files[0]);try {const response = await fetch('/generate', {method: 'POST',body: formData});const data = await response.json();if (data.error) {alert(data.error);return;}// 显示图片const imgPreview = document.getElementById('imagePreview');imgPreview.innerHTML = `<img src="${data.image_url}" class="preview-img img-thumbnail">`;// 显示诗歌const poemResult = document.getElementById('poemResult');poemResult.innerHTML = `<pre>${data.poem}</pre>`;} catch (error) {console.error('Error:', error);alert('生成诗歌时出错');}});// 实时预览document.getElementById('imageUpload').addEventListener('change', function(e) {const file = e.target.files[0];if (!file) return;const reader = new FileReader();reader.onload = function(event) {const imgPreview = document.getElementById('imagePreview');imgPreview.innerHTML = `<img src="${event.target.result}" class="preview-img img-thumbnail">`;};reader.readAsDataURL(file);});</script></body></html>
五、项目部署与优化
5.1 部署方案
- 本地开发:直接运行
app.py进行测试 - 生产部署:
- 使用Gunicorn作为WSGI服务器:
gunicorn -w 4 -b 0.0.0.0:5000 app:app - 配合Nginx反向代理
- 推荐使用Docker容器化部署
- 使用Gunicorn作为WSGI服务器:
5.2 性能优化
- API调用优化:
- 实现Token缓存机制,避免频繁获取
- 添加重试逻辑处理网络波动
- 图像处理优化:
- 限制上传图片大小
- 使用异步处理长任务
- 前端优化:
- 添加加载动画
- 实现响应式图片加载
5.3 完整项目源码结构
ai-poem-generator/├── app.py # Flask主应用├── ernie_bot.py # 文心一言API封装├── templates/│ └── index.html # 前端页面├── static/│ └── style.css # 自定义样式(可选)├── .env # 环境变量配置└── requirements.txt # 依赖列表
六、扩展功能建议
多风格诗歌生成:
- 扩展API调用参数,支持不同诗歌体裁(五言、七言、现代诗)
- 添加风格选择下拉框
社交分享功能:
- 集成社交平台分享API
- 生成带水印的诗歌图片
用户系统:
- 添加用户注册/登录
- 实现诗歌收藏功能
移动端适配:
- 开发配套微信小程序
- 实现PWA渐进式Web应用
七、常见问题解决方案
API调用失败:
- 检查密钥配置是否正确
- 查看API文档确认参数格式
- 检查网络连接是否正常
图像处理错误:
- 验证上传文件是否为有效图片
- 检查图片大小是否超过限制
- 确保安装了正确的图像处理库
跨域问题:
- 开发时在Flask中添加CORS支持:
from flask_cors import CORSapp = Flask(__name__)CORS(app)
- 开发时在Flask中添加CORS支持:
八、总结与展望
本项目通过Python与文心一言API的结合,成功实现了一个功能完整的AI看图写诗应用。开发者不仅掌握了多模态AI应用的基本开发流程,还深入理解了API集成、前后端交互等关键技术点。未来,随着AI技术的不断进步,此类应用将在教育、文化创意等领域发挥更大价值。
完整项目源码下载:[GitHub链接](实际部署时替换为真实链接)
通过这个实战项目,读者可以:
- 快速掌握Python Web开发基础
- 理解AI API的集成方法
- 获得完整的项目开发经验
- 拓展出更多创意应用场景
建议开发者在此基础上继续优化,如添加更多AI功能模块,或开发移动端应用,创造更大的商业价值和社会价值。

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