手把手教你Python+文心一言:AI看图写诗网页实战
2025.09.19 13:32浏览量:0简介:本文将通过Python与文心一言API,手把手搭建一个《AI看图写诗》网页应用,完整代码附上,助你快速实现图像理解与诗歌生成的融合。
一、项目背景与核心价值
在AI技术快速发展的今天,图像理解与自然语言生成已成为两大核心能力。文心一言作为领先的生成式AI模型,具备强大的语义理解和文本生成能力。本项目通过Python搭建一个《AI看图写诗》网页应用,用户上传图片后,AI自动分析图像内容并生成对应诗歌,实现“所见即所诗”的创意体验。
核心价值:
- 技术融合:结合计算机视觉(图像分析)与自然语言生成(NLP)
- 应用场景:文化创意、教育娱乐、社交媒体内容生成
- 学习价值:掌握API调用、Web开发、异步处理等关键技术
二、技术栈与开发环境
1. 技术选型
- 后端:Python 3.8+ + Flask框架(轻量级Web开发)
- AI能力:文心一言API(文本生成)
- 前端:HTML5 + Bootstrap(响应式设计)
- 图像处理:Pillow库(基础图像操作)
2. 开发环境准备
# 创建虚拟环境(推荐)
python -m venv ai_poem_env
source ai_poem_env/bin/activate # Linux/Mac
# 或 ai_poem_env\Scripts\activate (Windows)
# 安装依赖
pip install flask pillow requests
3. 文心一言API配置
- 访问文心一言开放平台获取API Key
- 安装官方SDK(可选):
pip install qianwen-sdk
三、项目架构设计
1. 系统流程图
用户上传图片 → 后端接收 → 图像预处理 → 调用文心一言API生成诗歌 → 返回结果至前端
2. 关键组件
- Web接口:Flask处理HTTP请求
- 图像分析模块:提取颜色、场景等特征(简化版)
- AI调用模块:构造API请求参数
- 结果展示:前端页面渲染
四、核心代码实现
1. Flask应用初始化
from flask import Flask, render_template, request, jsonify
import requests
import os
from PIL import Image
import io
app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = 'uploads'
os.makedirs(app.config['UPLOAD_FOLDER'], exist_ok=True)
# 文心一言API配置(需替换为你的实际Key)
ERNIE_API_KEY = 'your_api_key_here'
ERNIE_ENDPOINT = 'https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions'
2. 图像处理函数
def preprocess_image(image_file):
"""基础图像预处理"""
try:
img = Image.open(image_file)
# 调整大小(可选)
img.thumbnail((800, 800))
# 转换为RGB模式
if img.mode != 'RGB':
img = img.convert('RGB')
return img
except Exception as e:
print(f"图像处理错误: {e}")
return None
3. 文心一言调用封装
def generate_poem(image_description):
"""调用文心一言API生成诗歌"""
headers = {
'Content-Type': 'application/json',
}
data = {
"messages": [
{
"role": "user",
"content": f"根据以下图片描述创作一首中文古诗,要求五言或七言,押韵:{image_description}"
}
]
}
try:
response = requests.post(
ERNIE_ENDPOINT,
headers=headers,
json=data,
params={'access_token': ERNIE_API_KEY}
)
result = response.json()
return result.get('result', '生成诗歌失败')
except Exception as e:
print(f"API调用错误: {e}")
return "服务暂时不可用"
4. 核心路由实现
@app.route('/', methods=['GET', 'POST'])
def index():
if request.method == 'POST':
# 处理文件上传
if 'image' not in request.files:
return jsonify({'error': '未选择图片'}), 400
file = request.files['image']
if file.filename == '':
return jsonify({'error': '未选择图片'}), 400
# 保存并处理图片
img_path = os.path.join(app.config['UPLOAD_FOLDER'], file.filename)
file.save(img_path)
img = preprocess_image(img_path)
# 简化版图像分析(实际项目可接入CV模型)
description = "一幅包含自然风景的图片,有山有水,色彩鲜明"
# 生成诗歌
poem = generate_poem(description)
return jsonify({
'poem': poem,
'original_description': description
})
return render_template('index.html')
五、前端实现要点
1. HTML模板(templates/index.html)
<!DOCTYPE html>
<html>
<head>
<title>AI看图写诗</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container mt-5">
<h1 class="text-center">AI看图写诗</h1>
<form id="uploadForm" enctype="multipart/form-data">
<div class="mb-3">
<label for="image" class="form-label">选择图片</label>
<input class="form-control" type="file" id="image" name="image" accept="image/*" required>
</div>
<button type="submit" class="btn btn-primary">生成诗歌</button>
</form>
<div id="result" class="mt-5" style="display:none;">
<h3>AI生成的诗歌:</h3>
<pre id="poemText" class="bg-light p-3 rounded"></pre>
<p><small>基于图像分析:<span id="imgDesc"></span></small></p>
</div>
</div>
<script>
document.getElementById('uploadForm').addEventListener('submit', async (e) => {
e.preventDefault();
const formData = new FormData();
formData.append('image', document.getElementById('image').files[0]);
try {
const response = await fetch('/', {
method: 'POST',
body: formData
});
const data = await response.json();
if (data.error) {
alert(data.error);
return;
}
document.getElementById('poemText').textContent = data.poem;
document.getElementById('imgDesc').textContent = data.original_description;
document.getElementById('result').style.display = 'block';
} catch (error) {
console.error('Error:', error);
alert('生成失败,请重试');
}
});
</script>
</body>
</html>
六、部署与优化建议
1. 本地测试运行
flask run --host=0.0.0.0 --port=5000
2. 生产环境优化
API调用优化:
图像分析增强:
- 接入预训练CV模型(如ResNet)提取高级特征
- 使用CLIP模型实现图文匹配
性能优化:
- 异步处理(Celery)
- 图片压缩上传
3. 安全考虑
- 文件上传限制(类型、大小)
- API Key保护(环境变量存储)
- 输入内容过滤(防XSS)
七、完整项目源码获取
本项目完整代码已整理至GitHub仓库:
GitHub链接(示例)
包含:
- 所有Python源码
- HTML模板文件
- 部署说明文档
- 测试用例
八、扩展功能建议
- 多风格诗歌:增加选项选择古诗/现代诗风格
- 社交分享:集成分享功能
- 历史记录:保存用户生成记录
- 移动端适配:优化移动设备体验
九、技术难点解析
1. 图像描述生成
实际项目中,简单的文字描述不足以表达图像内容。建议:
- 使用预训练模型提取特征
- 构建图像标签系统
- 实现多模态描述生成
2. API调用稳定性
处理API限流和错误:
import time
def safe_api_call(func, max_retries=3):
for i in range(max_retries):
try:
return func()
except Exception as e:
if i == max_retries - 1:
raise
time.sleep(2 ** i) # 指数退避
十、总结与展望
本项目通过Python和文心一言API实现了图像到诗歌的生成系统,展示了AI在创意领域的强大潜力。未来发展方向:
- 更精准的图像理解
- 多语言诗歌生成
- 个性化诗歌风格定制
完整项目代码已提供,建议开发者:
- 先在本地运行测试
- 逐步添加增强功能
- 参考官方文档优化API调用
(全文约3200字)
发表评论
登录后可评论,请前往 登录 或 注册