logo

手把手搭建AI看图写诗:Python+文心一言全流程指南

作者:rousong2025.09.19 14:22浏览量:59

简介:本文将通过完整代码示例,手把手教你用Python Flask框架结合文心一言API,实现一个可上传图片并生成诗歌的交互式网页应用,包含环境配置、API调用、前后端交互等全流程开发细节。

一、项目背景与技术选型

1.1 创意来源与市场需求

在AI技术普及的当下,图像识别自然语言处理的结合成为热门应用场景。本项目的核心价值在于通过视觉与文字的跨模态交互,为用户提供兼具趣味性与实用性的创作工具,尤其适合教育、文化创意等领域。

1.2 技术栈选择

  • 后端框架:Flask(轻量级Web框架,适合快速开发)
  • 前端技术:HTML5+CSS3+Bootstrap(响应式布局)
  • AI能力:文心一言API(提供高质量诗歌生成)
  • 辅助工具:Pillow(图片处理)、Requests(API调用)

1.3 系统架构设计

采用经典的三层架构:

  1. 表现层:用户上传图片的表单界面
  2. 业务逻辑层:图片处理与API调用
  3. 数据层:临时存储用户上传的图片

二、开发环境准备

2.1 基础环境配置

  1. # 创建虚拟环境(推荐)
  2. python -m venv venv
  3. source venv/bin/activate # Linux/Mac
  4. venv\Scripts\activate # Windows
  5. # 安装依赖包
  6. pip install flask pillow requests

2.2 文心一言API获取

  1. 登录文心一言开放平台
  2. 创建应用获取API Key
  3. 记录Access Token(有效期需注意)

2.3 项目目录结构

  1. ai_poetry/
  2. ├── static/ # 静态资源
  3. ├── css/
  4. └── js/
  5. ├── templates/ # HTML模板
  6. └── index.html
  7. ├── app.py # 主程序
  8. └── requirements.txt # 依赖文件

三、核心功能实现

3.1 Flask主程序开发

  1. from flask import Flask, render_template, request
  2. import requests
  3. import os
  4. from PIL import Image
  5. import base64
  6. app = Flask(__name__)
  7. app.config['UPLOAD_FOLDER'] = 'static/uploads'
  8. os.makedirs(app.config['UPLOAD_FOLDER'], exist_ok=True)
  9. # 文心一言API配置
  10. API_KEY = 'your_api_key'
  11. SECRET_KEY = 'your_secret_key'
  12. TOKEN_URL = 'https://aip.baidubce.com/oauth/2.0/token'
  13. POETRY_URL = 'https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/eb40_future'
  14. def get_access_token():
  15. params = {
  16. 'grant_type': 'client_credentials',
  17. 'client_id': API_KEY,
  18. 'client_secret': SECRET_KEY
  19. }
  20. response = requests.post(TOKEN_URL, params=params)
  21. return response.json().get('access_token')
  22. @app.route('/', methods=['GET', 'POST'])
  23. def index():
  24. poem = None
  25. if request.method == 'POST':
  26. # 处理图片上传
  27. file = request.files['image']
  28. if file:
  29. img_path = os.path.join(app.config['UPLOAD_FOLDER'], file.filename)
  30. file.save(img_path)
  31. # 调用文心一言API生成诗歌
  32. access_token = get_access_token()
  33. headers = {'Content-Type': 'application/json'}
  34. params = {
  35. 'access_token': access_token
  36. }
  37. # 图片转base64(示例简化,实际需处理)
  38. with open(img_path, 'rb') as f:
  39. img_base64 = base64.b64encode(f.read()).decode('utf-8')
  40. prompt = f"根据这张图片创作一首七言绝句:{img_base64[:50]}..." # 实际需完整处理
  41. data = {
  42. "messages": [
  43. {"role": "user", "content": prompt}
  44. ]
  45. }
  46. response = requests.post(
  47. POETRY_URL,
  48. params=params,
  49. headers=headers,
  50. json=data
  51. )
  52. poem = response.json().get('result', '未能生成诗歌,请重试')
  53. return render_template('index.html', poem=poem)
  54. if __name__ == '__main__':
  55. app.run(debug=True)

3.2 前端界面开发

  1. <!-- templates/index.html -->
  2. <!DOCTYPE html>
  3. <html>
  4. <head>
  5. <title>AI看图写诗</title>
  6. <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
  7. </head>
  8. <body>
  9. <div class="container mt-5">
  10. <h1 class="text-center">AI看图写诗</h1>
  11. <form method="POST" enctype="multipart/form-data">
  12. <div class="mb-3">
  13. <label for="image" class="form-label">上传图片</label>
  14. <input class="form-control" type="file" id="image" name="image" accept="image/*" required>
  15. </div>
  16. <button type="submit" class="btn btn-primary">生成诗歌</button>
  17. </form>
  18. {% if poem %}
  19. <div class="mt-5 p-4 border rounded bg-light">
  20. <h3>生成的诗歌:</h3>
  21. <pre>{{ poem }}</pre>
  22. </div>
  23. {% endif %}
  24. </div>
  25. </body>
  26. </html>

3.3 图片处理优化

实际开发中需要添加:

  1. 图片格式验证(仅允许jpg/png)
  2. 尺寸压缩(避免大图导致性能问题)
  3. 异常处理(文件过大、格式错误等)
  1. # 图片处理增强示例
  2. def process_image(file_path):
  3. try:
  4. img = Image.open(file_path)
  5. # 限制最大尺寸
  6. img.thumbnail((800, 800))
  7. # 转换为RGB模式(处理PNG透明通道)
  8. if img.mode != 'RGB':
  9. img = img.convert('RGB')
  10. # 保存处理后的图片
  11. new_path = file_path.replace('.', '_processed.')
  12. img.save(new_path)
  13. return new_path
  14. except Exception as e:
  15. print(f"图片处理错误: {e}")
  16. return None

四、API调用进阶技巧

4.1 请求参数优化

文心一言API支持多种参数配置:

  1. data = {
  2. "messages": [
  3. {"role": "user", "content": prompt}
  4. ],
  5. "temperature": 0.7, # 创造力参数(0-1)
  6. "top_p": 0.9, # 核心词概率
  7. "penalty_score": 1.2 # 重复惩罚
  8. }

4.2 错误处理机制

  1. def call_wenxin_api(prompt):
  2. access_token = get_access_token()
  3. if not access_token:
  4. return "API认证失败"
  5. try:
  6. response = requests.post(
  7. POETRY_URL,
  8. params={'access_token': access_token},
  9. json={"messages": [{"role": "user", "content": prompt}]},
  10. timeout=10
  11. )
  12. response.raise_for_status()
  13. return response.json().get('result', '生成结果为空')
  14. except requests.exceptions.RequestException as e:
  15. return f"API调用失败: {str(e)}"

五、部署与扩展建议

5.1 本地测试流程

  1. 启动服务:python app.py
  2. 访问 http://localhost:5000
  3. 测试图片上传功能

5.2 生产环境部署

推荐使用:

  • 云服务器:阿里云ECS/腾讯云CVM
  • 容器化:Docker部署(附Dockerfile示例)
    1. FROM python:3.9-slim
    2. WORKDIR /app
    3. COPY . .
    4. RUN pip install -r requirements.txt
    5. CMD ["gunicorn", "--bind", "0.0.0.0:8000", "app:app"]

5.3 功能扩展方向

  1. 多风格诗歌:增加”豪放派”、”婉约派”等选项
  2. 社交分享:集成微博/微信分享功能
  3. 历史记录:添加用户作品保存功能
  4. 移动适配:开发PWA渐进式Web应用

六、完整项目源码

点击获取GitHub完整项目(示例链接,实际使用时请替换)

项目包含:

  • 完整Flask应用代码
  • 前端模板文件
  • 部署配置说明
  • 测试用例集

七、常见问题解决方案

7.1 API调用频率限制

解决方案:

  1. 实现请求队列
  2. 添加重试机制(指数退避算法)
  3. 监控API使用量

7.2 图片处理异常

预防措施:

  1. 限制文件大小(前端+后端双重验证)
  2. 仅允许常见图片格式
  3. 使用try-catch捕获处理异常

7.3 跨域问题处理

开发时若需跨域访问,可在Flask中添加:

  1. from flask_cors import CORS
  2. app = Flask(__name__)
  3. CORS(app) # 允许所有跨域请求

本文通过完整的代码示例和详细的步骤说明,展示了如何使用Python和文心一言API构建一个功能完备的AI看图写诗应用。开发者可根据实际需求调整参数配置和界面设计,快速实现个性化部署。项目源码提供了良好的扩展基础,适合作为AI+Web应用的入门实践案例。

相关文章推荐

发表评论

活动