软件构造大作业——儿童故事插图生成模块的设计与实现

软件构造大作业——儿童故事插图生成模块的设计与实现

一、模块背景与功能定位

在儿童故事管理平台中,故事文本生成完成后,若仅以文字形式呈现,难以满足儿童用户的阅读体验需求。因此,本模块在已有故事生成服务的基础上,引入 AI 文生图能力,实现根据故事内容自动生成插图,并将插图结果与故事数据进行关联存储与展示。

本模块作为独立服务存在,与故事生成模块解耦,仅依赖 Story 数据模型提供的故事信息。


二、整体架构与流程设计

插图生成模块的整体处理流程如下:

  1. 根据 story_id 查询故事标题或正文
  2. 构造文生图提示词
  3. 调用文生图 API 生成图片
  4. 将图片保存至服务器本地目录
  5. 将图片路径与 story_id 关联写入数据库

三、数据库表结构设计

为支持一篇故事对应多张插图,设计独立的插图表:

CREATE TABLE story_image (
    id INT PRIMARY KEY AUTO_INCREMENT,
    story_id INT NOT NULL,
    image_url VARCHAR(255) NOT NULL,
    create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (story_id) REFERENCES story(id)
);

该表仅负责插图资源的存储与关联,不存储图片本身。


四、故事信息获取实现

在生成插图前,需要从数据库中获取故事信息:

def get_story_by_id(db_conn, story_id: int):
    sql = "SELECT title, content FROM story WHERE id = %s"
    cursor = db_conn.cursor(dictionary=True)
    cursor.execute(sql, (story_id,))
    return cursor.fetchone()

此方法仅返回生成插图所需的必要字段,避免多余数据加载。


五、文生图 API 调用实现

以下示例展示了插图生成服务的完整实现流程(以伪 API 为例):

import requests

def call_image_api(prompt: str) -> bytes:
    payload = {
        "prompt": prompt,
        "size": "512x512"
    }
    response = requests.post(
        "https://api.example.com/generate-image",
        json=payload,
        timeout=60
    )
    response.raise_for_status()
    return response.content

通过统一封装 API 调用逻辑,方便后续更换模型服务。


六、图片文件存储实现

import os
import uuid

IMAGE_DIR = "static/img"

def save_image(image_bytes: bytes) -> str:
    if not os.path.exists(IMAGE_DIR):
        os.makedirs(IMAGE_DIR)

    filename = f"{uuid.uuid4().hex}.png"
    file_path = os.path.join(IMAGE_DIR, filename)

    with open(file_path, "wb") as f:
        f.write(image_bytes)

    return f"img/{filename}"

该方法返回统一的相对路径,供数据库和前端使用。


七、插图数据写入数据库

def save_story_image(db_conn, story_id: int, image_url: str):
    sql = """
    INSERT INTO story_image (story_id, image_url)
    VALUES (%s, %s)
    """
    cursor = db_conn.cursor()
    cursor.execute(sql, (story_id, image_url))
    db_conn.commit()

八、小结

本模块实现了从故事内容获取、插图生成、文件存储到数据库关联的完整流程,为儿童故事平台提供了视觉增强能力,并保持了良好的模块解耦结构。

posted @ 2025-12-14 17:04  元始天尊123  阅读(2)  评论(0)    收藏  举报