手把手搭建AI看图写诗:Python+文心一言实战指南
2025.09.26 19:27浏览量:0简介:本文将通过完整项目源码,手把手教你用Python和文心一言API搭建一个《AI看图写诗》网页应用,实现图片上传、AI解析图像内容并生成诗歌的功能。
一、项目背景与核心价值
在AI技术快速发展的今天,将图像识别与自然语言生成结合的应用场景日益丰富。本项目通过文心一言(ERNIE Bot)的API能力,结合Python的Web开发框架Flask,构建一个用户可上传图片、AI自动解析画面内容并生成对应诗歌的网页应用。该应用不仅能展示AI在多模态交互中的潜力,还可作为教育工具或创意辅助平台使用。
二、技术栈与工具准备
核心工具
- Python 3.8+:后端开发语言,需安装
flask
、requests
、pillow
等库。 - 文心一言API:百度提供的自然语言生成服务,需申请API Key(官方文档)。
- Flask框架:轻量级Web框架,用于快速搭建前后端交互逻辑。
- HTML/CSS/JavaScript:前端页面设计,实现图片上传与诗歌展示。
- Python 3.8+:后端开发语言,需安装
环境配置
pip install flask requests pillow
创建虚拟环境(推荐):
python -m venv ai_poem_env
source ai_poem_env/bin/activate # Linux/Mac
ai_poem_env\Scripts\activate # Windows
三、项目实现步骤
1. 文心一言API调用封装
首先,创建一个ernie_bot.py
文件,封装API请求逻辑:
import requests
import base64
import json
class ErnieBot:
def __init__(self, api_key, secret_key):
self.api_key = api_key
self.secret_key = secret_key
self.access_token = self._get_access_token()
def _get_access_token(self):
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(url, params=params)
return response.json().get("access_token")
def generate_poem(self, image_base64, prompt="根据图片内容生成一首五言绝句"):
url = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions_pro"
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(url, headers=headers, params=params, data=json.dumps(data))
return response.json().get("result", "")
def _describe_image(self, image_base64):
# 此处简化,实际可调用图像识别API获取描述
return "一幅山水画,有山有水有云" # 示例描述
2. Flask后端开发
创建app.py
作为主程序入口:
from flask import Flask, request, jsonify, render_template
from ernie_bot import ErnieBot
import base64
import os
app = Flask(__name__)
# 配置API密钥(实际开发中应从环境变量读取)
API_KEY = "your_api_key"
SECRET_KEY = "your_secret_key"
ernie = ErnieBot(API_KEY, SECRET_KEY)
@app.route("/")
def index():
return render_template("index.html")
@app.route("/generate", methods=["POST"])
def generate():
if "file" not in request.files:
return jsonify({"error": "No file uploaded"}), 400
file = request.files["file"]
if file.filename == "":
return jsonify({"error": "Empty filename"}), 400
# 读取图片并转为Base64
img_bytes = file.read()
img_base64 = base64.b64encode(img_bytes).decode("utf-8")
# 调用文心一言生成诗歌
poem = ernie.generate_poem(img_base64)
return jsonify({"poem": poem})
if __name__ == "__main__":
app.run(debug=True)
3. 前端页面设计
在templates/index.html
中实现图片上传与结果展示:
<!DOCTYPE html>
<html>
<head>
<title>AI看图写诗</title>
<style>
body { font-family: Arial, sans-serif; max-width: 800px; margin: 0 auto; padding: 20px; }
.container { display: flex; flex-direction: column; align-items: center; }
#result { margin-top: 20px; padding: 10px; border: 1px solid #ddd; min-height: 100px; }
</style>
</head>
<body>
<div class="container">
<h1>AI看图写诗</h1>
<input type="file" id="imageUpload" accept="image/*">
<button onclick="uploadImage()">生成诗歌</button>
<div id="result"></div>
</div>
<script>
async function uploadImage() {
const fileInput = document.getElementById("imageUpload");
const file = fileInput.files[0];
if (!file) {
alert("请选择图片");
return;
}
const formData = new FormData();
formData.append("file", file);
try {
const response = await fetch("/generate", {
method: "POST",
body: formData
});
const data = await response.json();
if (data.error) {
alert(data.error);
} else {
document.getElementById("result").innerHTML = `<h3>生成的诗歌:</h3><p>${data.poem}</p>`;
}
} catch (error) {
console.error("Error:", error);
}
}
</script>
</body>
</html>
四、关键优化与注意事项
API调用优化
- 缓存AccessToken:当前实现每次调用都重新获取Token,实际应缓存并定期刷新。
- 错误处理:添加重试机制与更详细的错误日志。
- 图像描述增强:可集成百度图像识别API(
image_classify
)获取更准确的画面描述。
性能与安全
- 文件大小限制:在Flask中配置
MAX_CONTENT_LENGTH
防止大文件攻击。 - API密钥保护:通过环境变量或配置文件存储密钥,避免硬编码。
- 异步处理:对于高并发场景,可使用Celery实现异步任务队列。
- 文件大小限制:在Flask中配置
扩展功能建议
- 诗歌风格选择:前端增加下拉菜单,让用户选择五言/七言、古风/现代等风格。
- 历史记录:将用户上传的图片与生成的诗歌存入数据库(如SQLite)。
- 社交分享:集成分享按钮,支持将诗歌生成图片并分享至社交平台。
五、完整项目源码与部署
项目结构
/ai_poem_project
├── app.py
├── ernie_bot.py
├── templates/
│ └── index.html
└── requirements.txt
部署方式
六、总结与展望
本项目通过Python与文心一言API的结合,展示了AI在多模态内容生成中的实际应用。开发者可基于此框架进一步扩展功能,如集成更多AI模型(Stable Diffusion生成配图)、开发移动端应用等。随着大语言模型与图像生成技术的进步,此类应用将在教育、艺术创作等领域发挥更大价值。
发表评论
登录后可评论,请前往 登录 或 注册