软件工程第一次作业

软件工程第一次个人作业

这个作业属于哪个课程 202601 软件工程
这个作业要求在哪里 软件工程第一次个人作业
这个作业的目标 完成课程相关账号注册配置;完成 HuggingFace API 调用并实现简单前端交互;搭建 GitHub 个人主页;明确本课程学习提升目标
学号 102410405

一、准备工作

按照作业要求完成以下账号注册与配置:

  1. GitHub 账号:注册 GitHub 账号,创建与用户名同名的公开仓库,编辑 README.md 搭建个人 Profile 主页。

  2. 博客园账号:开通博客园技术博客,完善个人资料,加入软件工程班级圈子「202601 软件工程」;关注任课老师吴越钟,以及助教张明圣、王奇蕊。

  3. Hugging Face 账号:注册 Hugging Face 账号,进入 Settings → Access Tokens 创建具备读取权限的 API Token,用于调用推理 API。


二、HuggingFace API 调用与交互式图像生成

2.1 模型选择说明

本次作业使用的模型为 XLabs-AI/flux-RealismLora。需要注意的是,RealismLora 是 LoRA 权重,不是完整可直接调用的端到端模型,它是给基础 Flux 模型追加写实效果的 LoRA,Hugging Face Inference API 不能直接单独调用 LoRA。

因此本次作业采用的方案为通过 HuggingFace Inference API 调用 XLabs-AI/flux-realism-lora-dev,配合 Python FastAPI 后端 + HTML 前端实现交互式图像生成。

2.2 HuggingFace 账号注册与 API Key 创建

  1. 打开 HuggingFace 官网(https://huggingface.co/),点击右上角 Sign Up,用邮箱注册账号并完成邮箱验证,登录账号。

  2. 访问模型页面 https://huggingface.co/XLabs-AI/flux-realism-lora-dev ,阅读许可协议并点击 Accept 同意。

  3. 右上角头像 → Settings→ 左侧菜单找到 Access Tokens→ 点击 Create a new token 创建令牌。
    68da4f9c14f53e0ee3aa774da26bcedb

2.3 核心代码说明

完整代码已保存在项目目录(main.pyindex.html),以下简要说明关键实现:

后端(main.py)

  • 使用 FastAPI 搭建本地服务器,监听 8000 端口,配置 CORS 中间件解决前端跨域问题。

  • 提供 /api/generate_image 接口,接收前端传来的 prompt(正向提示词)和 negative_prompt(负面提示词)。

  • Token 通过环境变量 HF_TOKEN 读取,避免硬编码泄露。

  • 携带 Token 向 api-inference.huggingface.co 发起 POST 请求,推理参数设置为 num_inference_steps=28guidance_scale=3.5

  • 将模型返回的图片二进制流转为 Base64 回传前端;对 403(未接受模型许可)、503(模型冷启动)等错误做统一封装,给前端友好提示。

前端(index.html)

  • 原生 HTML + CSS + JavaScript 实现,包含正向提示词输入框、负面提示词输入框、「开始生成图片」按钮、状态提示文字和图片展示区。

  • 点击按钮后通过 fetch 向本地后端 http://127.0.0.1:8000/api/generate_image 发送 POST 请求。

  • 生成过程中显示 Loading 状态;成功后将返回的 Base64 图片渲染到页面;出错时显示具体错误信息(如权限不足、冷启动等待等)。

2.4 提示词设计思路与修改过程

本次生成以「海边日落人像」为主题,目标是产出贴近真实世界照片的写实图像,而非动漫或插画风格。

正向提示词核心要素:

维度 关键词 作用
媒介指定 realistic photograph 告诉模型生成照片,不是绘画
主体描述 a young woman 明确主体对象
场景环境 standing on the beach at sunset 海边日落场景
视角约束 facing the camera, front view, looking directly at the camera 强制正面朝向镜头
光影氛围 natural sunlight, real scene 自然日光,真实场景
细节强化 realistic face, clear facial features 真实面部,清晰五官

负面提示词核心要素:

维度 关键词 作用
风格排除 cartoon, anime, illustration, painting, drawing 排除动漫、插画、绘画风格
视角排除 side view, back view, turned away, face obscured 排除侧面、背面、脸部遮挡
质量排除 blurry face, deformed face, ugly, low resolution 排除模糊、畸形、低画质

修改迭代过程:

版本 1(初始简单提示词):

a woman on beach

flux-realismlora_photograph-girl-on-beach-natural

  • 问题:过于笼统,模型无法确定年龄、视角、光线、风格等关键信息。输出偏向插画,人物五官模糊,没有真实照片质感,且可能出现侧面或背面。

版本 2(增加摄影关键词与约束):

realistic photograph, a young woman standing on the beach at sunset, natural light

flux-realismlora_8k-photograph-raw-photo

  • 改善:明确了摄影风格(realistic photograph)、场景(海边日落)和光线(自然光),真实感有所提升。

  • 问题:偶尔还是产出二次元或绘画风格,面部细节不够清晰,且依旧可能出现侧面或背面。

版本 3(最终版,增加负面提示词过滤):

正向提示词:

realistic photograph, a young woman standing on the beach at sunset, facing the camera, front view, looking directly at the camera, natural sunlight, real scene, realistic face, clear facial features

负面提示词:

cartoon, anime, illustration, painting, drawing, side view, back view, turned away, face obscured, blurry face, deformed face, ugly, low resolution
  • 效果:通过正面提示词明确主体、场景、视角、光线和细节要求,通过负面提示词有效过滤动漫、手绘、侧面 / 背面、脸部遮挡、畸形五官等不良输出,最终生成了高真实感的海边日落正面人像照片,皮肤纹理自然,金色日落光线柔和,人物正视镜头,五官清晰。

生成的图片:

flux-realismlora_realistic-photograph-a-young

2.5 前端交互页面截图

截图 1:输入提示词待生成的页面

image

截图 2:调用成功,页面渲染出 Flux 生成的写实图片

728ed39bf590f14fcee939fba11aa92f

2.6 调用体验与心得

  1. 模型冷启动是常见坑:第一次访问模型时,HuggingFace 会返回 503(模型正在加载),需要等待几十秒后重试。

  2. 权限坑必须注意:即使 Token 正确,如果没有在模型页面点击 Accept 同意许可协议,API 会直接返回 403 拒绝访问。必须先去模型页面接受协议。

  3. 提示词对生成效果影响巨大:只写主体对象(如 a woman),模型很容易生成绘画风格或随机视角。必须加上摄影类关键词(realistic photograph)、视角约束(facing the camera)、细节描述(clear facial features),同时用负面提示词排除插画、动漫、侧面等不良输出,才能贴近真实照片。

  4. API 超时时间要足够长:Flux 图像生成计算量大,一次推理可能需要 20~60 秒,请求超时时间必须设置足够长(代码中设置为 120 秒),否则会因超时而请求失败。


三、GitHub 个人主页搭建

3.1 方案选择

作业提供了两种方案:

  • 方案一:创建与用户名同名的公开仓库,编辑 README.md 作为个人 Profile 主页。

  • 方案二:使用 GitHub Pages 搭建独立个人网站。

我选择了方案一,原因是:目前个人项目和经历还在积累阶段,用 README Profile 就能满足展示需求,不需要额外花时间配置 GitHub Pages 的主题、域名和部署流程;而且纯 Markdown 维护简单,后续有新作品直接更新 README 即可。

3.2 主页截图

3f5bdfafd96cec6118412f2676529214

我的GitHub主页地址:https://github.com/wiyiti


四、随笔

我的软件工程课程随笔(包含技能树与自我评估、代码量现状与目标、课程期待、AI 生成学习指南及分析)已发布在博客园:

👉 软件工程课程随笔:我的技能树、自我评估与学习期待


五、随笔后台编辑截图

image


六、总结

本次软件工程第一次个人作业,我主要完成了以下几方面的工作:

  1. 账号注册与环境配置:完成了 GitHub、博客园、HuggingFace 三个平台的账号注册与基础配置,开通了博客园博客并加入班级圈子,获取了 HuggingFace API Token,为后续课程实践搭建好了基础环境。

  2. HuggingFace API 调用与前端交互:理解了 LoRA 权重与完整推理模型的区别,选用封装好的 flux-realism-lora-dev 模型,通过 Python FastAPI 搭建后端代理服务,配合原生 HTML 前端实现了提示词输入、点击生成、图片渲染的完整交互流程,同时掌握了结构化正向提示词与负面提示词的设计方法。

  3. GitHub 个人主页搭建:创建了与用户名同名的公开仓库,通过编辑 README.md 搭建了个人 Profile 主页,梳理了个人介绍、技术栈和发展方向。

  4. 个人技能梳理与学习规划:通过撰写课程随笔,系统梳理了当前的技能树与技术偏好,明确了已具备的能力、感兴趣的方向和欠缺的能力,制定了本学期的代码量目标与学习计划,并借助 DeepSeek 生成的学习指南进行了合理性分析。


bye~👋🏻👋🏻

posted @ 2026-09-09 22:28  yitt  阅读(18)  评论(0)    收藏  举报