手把手教你用Python+文心一言搭建AI看图写诗网页
2025.09.18 17:52浏览量:0简介:零基础实现AI图像生成诗歌,附完整Python源码与部署指南
摘要
本文将通过分步教程,详细讲解如何使用Python Flask框架结合文心一言API,构建一个交互式的《AI看图写诗》网页应用。项目涵盖前端页面设计、后端API调用、图像识别与诗歌生成的全流程,并提供完整的GitHub开源代码,帮助开发者快速掌握AI与Web开发结合的实践技巧。
一、项目背景与技术选型
在AI技术普及的今天,将图像识别与自然语言生成结合的应用场景日益丰富。本项目通过调用文心一言的文本生成能力,结合用户上传的图片,实现”看图写诗”的创意功能。技术栈选择如下:
- 前端:HTML5 + Bootstrap实现响应式页面
- 后端:Python Flask框架处理HTTP请求
- AI能力:文心一言API完成诗歌生成
- 部署:支持本地运行和云服务器部署
相较于传统方案,本项目的优势在于:
- 无需复杂机器学习模型,直接调用成熟API
- 轻量级Web框架降低开发门槛
- 完整的前后端分离架构便于扩展
二、开发环境准备
2.1 基础环境搭建
# 创建虚拟环境(推荐)
python -m venv ai_poem_env
source ai_poem_env/bin/activate # Linux/Mac
.\ai_poem_env\Scripts\activate # Windows
# 安装依赖包
pip install flask requests pillow
2.2 文心一言API配置
- 登录百度智能云平台
- 创建应用获取API Key和Secret Key
- 安装官方SDK(可选):
pip install baidu-aip
三、核心功能实现
3.1 后端服务开发
创建app.py
作为主程序文件:
from flask import Flask, request, jsonify, render_template
import requests
import base64
import os
app = Flask(__name__)
# 文心一言API配置(需替换为实际值)
ERNIE_API_URL = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions"
API_KEY = "your_api_key"
SECRET_KEY = "your_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")
@app.route('/')
def index():
return render_template('index.html')
@app.route('/generate_poem', methods=['POST'])
def generate_poem():
# 获取图片并转base64
image_file = request.files['image']
image_base64 = base64.b64encode(image_file.read()).decode('utf-8')
# 调用文心一言API(简化示例)
access_token = get_access_token()
headers = {
'Content-Type': 'application/json',
}
data = {
"messages": [
{
"role": "user",
"content": f"根据这张图片创作一首中文诗歌:{image_base64[:200]}..." # 实际需分步处理
}
]
}
response = requests.post(
f"{ERNIE_API_URL}?access_token={access_token}",
headers=headers,
json=data
)
return jsonify({"poem": response.json().get("result", "")})
if __name__ == '__main__':
app.run(debug=True)
3.2 前端页面设计
创建templates/index.html
文件:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<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>
<div class="row mt-4">
<div class="col-md-6">
<img id="preview" src="" class="img-fluid rounded" style="display:none;">
<input type="file" class="form-control mt-3" id="imageInput" accept="image/*">
<button class="btn btn-primary mt-3" onclick="uploadImage()">生成诗歌</button>
</div>
<div class="col-md-6">
<div class="card">
<div class="card-header">生成的诗歌</div>
<div class="card-body" id="poemResult">
<p class="card-text">等待图片上传...</p>
</div>
</div>
</div>
</div>
</div>
<script>
let imageBase64 = "";
document.getElementById('imageInput').addEventListener('change', function(e) {
const file = e.target.files[0];
if (file) {
const reader = new FileReader();
reader.onload = function(event) {
const img = document.getElementById('preview');
img.src = event.target.result;
img.style.display = 'block';
// 实际开发中应在此处将图片转为base64
};
reader.readAsDataURL(file);
}
});
function uploadImage() {
const fileInput = document.getElementById('imageInput');
if (fileInput.files.length === 0) {
alert('请先选择图片');
return;
}
const formData = new FormData();
formData.append('image', fileInput.files[0]);
fetch('/generate_poem', {
method: 'POST',
body: formData
})
.then(response => response.json())
.then(data => {
document.getElementById('poemResult').innerHTML =
`<p class="card-text">${data.poem}</p>`;
})
.catch(error => console.error('Error:', error));
}
</script>
</body>
</html>
四、关键技术点解析
4.1 图片处理优化
实际应用中需注意:
- 图片大小限制:建议前端压缩后再上传
- 格式转换:统一转为JPG格式减少体积
- 敏感内容过滤:添加NSFW检测机制
4.2 API调用优化
- 实现请求重试机制
- 添加缓存层减少重复调用
- 异步处理多张图片
4.3 诗歌生成策略
提示词工程:
def build_prompt(image_desc):
return f"""根据以下图片描述创作一首中文五言绝句:
{image_desc}
要求:
- 押平水韵
- 包含季节元素
- 意境悠远"""
结果后处理:
- 韵律检测与修正
- 意象优化
- 多版本生成
五、项目部署与扩展
5.1 本地运行测试
# 设置环境变量(Linux/Mac)
export FLASK_APP=app.py
export FLASK_ENV=development
flask run
# Windows
set FLASK_APP=app.py
set FLASK_ENV=development
flask run
5.2 云服务器部署
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;
}
client_max_body_size 10M;
}
使用Gunicorn运行:
pip install gunicorn
gunicorn -w 4 -b 0.0.0.0:5000 app:app
5.3 功能扩展方向
- 添加用户系统保存作品
- 实现诗歌朗诵功能
- 增加图片风格分类(山水/人物/建筑)
- 开发移动端APP
六、完整源码获取
项目完整代码已开源至GitHub:
https://github.com/yourusername/ai-image-poem
包含:
- 前后端完整代码
- 部署文档
- 测试用例
- 常见问题解答
七、常见问题解决方案
API调用失败:
- 检查密钥有效性
- 确认网络可访问百度API
- 查看错误码对照表
诗歌质量不佳:
- 优化提示词结构
- 增加生成参数(温度、长度等)
- 实现后处理算法
图片上传问题:
- 检查文件大小限制
- 验证MIME类型
- 添加进度提示
八、技术展望
随着多模态大模型的发展,未来可升级方向包括:
- 集成更先进的图像描述生成模型
- 实现诗歌与图片的深度语义匹配
- 添加用户反馈机制优化生成结果
- 支持更多诗歌体裁(词、曲等)
本项目为开发者提供了一个完整的AI+Web应用开发范本,通过实践可深入理解API调用、前后端交互等关键技术点。建议在此基础上进行二次开发,创造更多有价值的AI应用场景。
发表评论
登录后可评论,请前往 登录 或 注册