logo

手把手教你用Python+文心一言:零基础搭建AI看图写诗系统

作者:rousong2025.10.10 16:40浏览量:2

简介:本文详细介绍如何使用Python Flask框架与文心一言API搭建AI看图写诗网页应用,包含完整源码、环境配置步骤及技术实现原理,适合开发者快速上手AI+Web项目开发。

一、项目背景与核心价值

在AI技术快速发展的今天,将图像识别与自然语言生成结合的创意应用备受关注。本项目通过Python构建Web界面,集成文心一言的文本生成能力,实现用户上传图片后自动生成对应诗歌的功能。该系统不仅展示了多模态AI的应用场景,更可作为教育工具、文化创意产品或技术演示案例。

1.1 技术选型依据

  • Python Flask:轻量级Web框架,适合快速开发原型系统
  • 文心一言API:提供高质量的中文诗歌生成能力
  • HTML5+Bootstrap:实现响应式前端界面
  • Base64编码:简化图片传输处理

1.2 典型应用场景

  • 文旅行业:为景点照片自动生成诗词
  • 教育领域:辅助语文教学的创意写作
  • 社交平台:增加图片分享的趣味性
  • 技术展示:AI多模态交互演示

二、完整开发环境配置指南

2.1 基础环境准备

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

2.2 文心一言API配置

  1. 登录百度智能云平台
  2. 创建应用获取API Key和Secret Key
  3. 在项目目录创建.env文件:
    1. ERNIE_API_KEY=your_api_key
    2. ERNIE_SECRET_KEY=your_secret_key

三、核心功能实现详解

3.1 后端服务架构

  1. from flask import Flask, render_template, request, jsonify
  2. import requests
  3. import base64
  4. import os
  5. from dotenv import load_dotenv
  6. load_dotenv()
  7. app = Flask(__name__)
  8. def get_access_token():
  9. """获取文心一言API访问令牌"""
  10. url = "https://aip.baidubce.com/oauth/2.0/token"
  11. params = {
  12. "grant_type": "client_credentials",
  13. "client_id": os.getenv("ERNIE_API_KEY"),
  14. "client_secret": os.getenv("ERNIE_SECRET_KEY")
  15. }
  16. response = requests.post(url, params=params)
  17. return response.json().get("access_token")
  18. @app.route('/')
  19. def index():
  20. return render_template('index.html')
  21. @app.route('/generate_poem', methods=['POST'])
  22. def generate_poem():
  23. # 获取图片并转换为Base64
  24. image_file = request.files['image']
  25. image_bytes = image_file.read()
  26. image_base64 = base64.b64encode(image_bytes).decode('utf-8')
  27. # 调用文心一言API(简化版)
  28. access_token = get_access_token()
  29. poem_api_url = f"https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions?access_token={access_token}"
  30. prompt = f"根据以下图片内容生成一首五言绝句:{image_base64[:200]}..." # 实际需处理完整图片
  31. headers = {'Content-Type': 'application/json'}
  32. data = {
  33. "messages": [{"role": "user", "content": prompt}]
  34. }
  35. response = requests.post(poem_api_url, headers=headers, json=data)
  36. poem = response.json().get("result", "未能生成诗歌,请重试")
  37. return jsonify({"poem": poem})

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. <div class="card mt-4">
  12. <div class="card-body">
  13. <form id="poemForm">
  14. <div class="mb-3">
  15. <label for="imageUpload" class="form-label">上传图片</label>
  16. <input class="form-control" type="file" id="imageUpload" accept="image/*">
  17. </div>
  18. <button type="submit" class="btn btn-primary">生成诗歌</button>
  19. </form>
  20. <div id="result" class="mt-4 p-3 border" style="display:none;">
  21. <h5>生成的诗歌:</h5>
  22. <pre id="poemText"></pre>
  23. </div>
  24. </div>
  25. </div>
  26. </div>
  27. <script>
  28. document.getElementById('poemForm').addEventListener('submit', async (e) => {
  29. e.preventDefault();
  30. const formData = new FormData();
  31. formData.append('image', document.getElementById('imageUpload').files[0]);
  32. const response = await fetch('/generate_poem', {
  33. method: 'POST',
  34. body: formData
  35. });
  36. const result = await response.json();
  37. document.getElementById('poemText').textContent = result.poem;
  38. document.getElementById('result').style.display = 'block';
  39. });
  40. </script>
  41. </body>
  42. </html>

四、关键技术点解析

4.1 图片处理优化

  • 实际应用中需添加图片压缩:
    ```python
    from PIL import Image
    import io

def compress_image(image_bytes, max_size=512):
img = Image.open(io.BytesIO(image_bytes))
img.thumbnail((max_size, max_size))
buffered = io.BytesIO()
img.save(buffered, format=”JPEG”, quality=85)
return buffered.getvalue()

  1. ## 4.2 API调用最佳实践
  2. 1. 实现令牌缓存机制
  3. 2. 添加重试逻辑处理网络异常
  4. 3. 设置合理的请求超时时间
  5. ## 4.3 诗歌生成提示词设计
  6. 有效提示词应包含:
  7. - 诗歌类型(五言/七言)
  8. - 主题关键词提取
  9. - 风格要求(古典/现代)
  10. - 韵律要求(平仄/押韵)
  11. # 五、项目部署与扩展建议
  12. ## 5.1 生产环境部署
  13. ```bash
  14. # 使用Gunicorn部署
  15. pip install gunicorn
  16. gunicorn -w 4 -b 0.0.0.0:5000 app:app
  17. # Nginx配置示例
  18. server {
  19. listen 80;
  20. server_name yourdomain.com;
  21. location / {
  22. proxy_pass http://127.0.0.1:5000;
  23. proxy_set_header Host $host;
  24. }
  25. }

5.2 功能扩展方向

  1. 多风格诗歌生成(唐诗/宋词/现代诗)
  2. 图片主题识别增强
  3. 用户收藏与分享功能
  4. 批量图片处理
  5. 诗歌质量评估体系

六、完整项目源码获取

项目完整代码已托管至GitHub,包含:

  • 所有Python后端代码
  • HTML/CSS/JS前端文件
  • 依赖管理文件
  • 部署配置示例

访问地址:[GitHub项目链接](示例链接,实际使用时替换)

七、常见问题解决方案

7.1 API调用失败处理

  1. 检查网络连接
  2. 验证API Key有效性
  3. 查看错误码对照表:
    • 400: 参数错误
    • 401: 认证失败
    • 429: 请求频率过高

7.2 图片处理异常

  1. 限制文件类型(仅允许jpg/png)
  2. 添加文件大小限制(建议<5MB)
  3. 实现错误图片检测

7.3 诗歌质量优化

  1. 调整提示词结构
  2. 尝试多次生成取优
  3. 添加后处理(韵律修正)

八、技术演进方向

  1. 集成更先进的图像描述模型(如BLIP-2)
  2. 采用流式响应提升用户体验
  3. 实现个性化诗歌生成(用户风格学习)
  4. 添加多语言支持

本项目的完整实现展示了如何将先进的AI能力转化为实用的Web应用。开发者可以通过修改提示词工程、调整模型参数或扩展前端功能,快速打造出具有特色的AI创意产品。实际部署时建议添加用户认证、使用量统计和日志监控等企业级功能。

相关文章推荐

发表评论

活动