软件工程第一次作业
软件工程第一次个人作业
| 这个作业属于哪个课程 | 202601 软件工程 |
|---|---|
| 这个作业要求在哪里 | 软件工程第一次个人作业 |
| 这个作业的目标 | 完成课程相关账号注册配置;完成 HuggingFace API 调用并实现简单前端交互;搭建 GitHub 个人主页;明确本课程学习提升目标 |
| 学号 | 102410405 |
一、准备工作
按照作业要求完成以下账号注册与配置:
-
GitHub 账号:注册 GitHub 账号,创建与用户名同名的公开仓库,编辑
README.md搭建个人 Profile 主页。 -
博客园账号:开通博客园技术博客,完善个人资料,加入软件工程班级圈子「202601 软件工程」;关注任课老师吴越钟,以及助教张明圣、王奇蕊。
-
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 创建
-
打开 HuggingFace 官网(https://huggingface.co/),点击右上角 Sign Up,用邮箱注册账号并完成邮箱验证,登录账号。
-
访问模型页面 https://huggingface.co/XLabs-AI/flux-realism-lora-dev ,阅读许可协议并点击 Accept 同意。
-
右上角头像 → Settings→ 左侧菜单找到 Access Tokens→ 点击 Create a new token 创建令牌。
![68da4f9c14f53e0ee3aa774da26bcedb]()
2.3 核心代码说明
完整代码已保存在项目目录(main.py 和 index.html),以下简要说明关键实现:
后端(main.py):
-
使用 FastAPI 搭建本地服务器,监听 8000 端口,配置 CORS 中间件解决前端跨域问题。
-
提供
/api/generate_image接口,接收前端传来的prompt(正向提示词)和negative_prompt(负面提示词)。 -
Token 通过环境变量
HF_TOKEN读取,避免硬编码泄露。 -
携带 Token 向
api-inference.huggingface.co发起 POST 请求,推理参数设置为num_inference_steps=28、guidance_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
- 问题:过于笼统,模型无法确定年龄、视角、光线、风格等关键信息。输出偏向插画,人物五官模糊,没有真实照片质感,且可能出现侧面或背面。
版本 2(增加摄影关键词与约束):
realistic photograph, a young woman standing on the beach at sunset, natural light
-
改善:明确了摄影风格(
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
- 效果:通过正面提示词明确主体、场景、视角、光线和细节要求,通过负面提示词有效过滤动漫、手绘、侧面 / 背面、脸部遮挡、畸形五官等不良输出,最终生成了高真实感的海边日落正面人像照片,皮肤纹理自然,金色日落光线柔和,人物正视镜头,五官清晰。
生成的图片:
2.5 前端交互页面截图
截图 1:输入提示词待生成的页面
截图 2:调用成功,页面渲染出 Flux 生成的写实图片
2.6 调用体验与心得
-
模型冷启动是常见坑:第一次访问模型时,HuggingFace 会返回 503(模型正在加载),需要等待几十秒后重试。
-
权限坑必须注意:即使 Token 正确,如果没有在模型页面点击 Accept 同意许可协议,API 会直接返回 403 拒绝访问。必须先去模型页面接受协议。
-
提示词对生成效果影响巨大:只写主体对象(如
a woman),模型很容易生成绘画风格或随机视角。必须加上摄影类关键词(realistic photograph)、视角约束(facing the camera)、细节描述(clear facial features),同时用负面提示词排除插画、动漫、侧面等不良输出,才能贴近真实照片。 -
API 超时时间要足够长:Flux 图像生成计算量大,一次推理可能需要 20~60 秒,请求超时时间必须设置足够长(代码中设置为 120 秒),否则会因超时而请求失败。
三、GitHub 个人主页搭建
3.1 方案选择
作业提供了两种方案:
-
方案一:创建与用户名同名的公开仓库,编辑
README.md作为个人 Profile 主页。 -
方案二:使用 GitHub Pages 搭建独立个人网站。
我选择了方案一,原因是:目前个人项目和经历还在积累阶段,用 README Profile 就能满足展示需求,不需要额外花时间配置 GitHub Pages 的主题、域名和部署流程;而且纯 Markdown 维护简单,后续有新作品直接更新 README 即可。
3.2 主页截图
我的GitHub主页地址:https://github.com/wiyiti
四、随笔
我的软件工程课程随笔(包含技能树与自我评估、代码量现状与目标、课程期待、AI 生成学习指南及分析)已发布在博客园:
五、随笔后台编辑截图
六、总结
本次软件工程第一次个人作业,我主要完成了以下几方面的工作:
-
账号注册与环境配置:完成了 GitHub、博客园、HuggingFace 三个平台的账号注册与基础配置,开通了博客园博客并加入班级圈子,获取了 HuggingFace API Token,为后续课程实践搭建好了基础环境。
-
HuggingFace API 调用与前端交互:理解了 LoRA 权重与完整推理模型的区别,选用封装好的
flux-realism-lora-dev模型,通过 Python FastAPI 搭建后端代理服务,配合原生 HTML 前端实现了提示词输入、点击生成、图片渲染的完整交互流程,同时掌握了结构化正向提示词与负面提示词的设计方法。 -
GitHub 个人主页搭建:创建了与用户名同名的公开仓库,通过编辑
README.md搭建了个人 Profile 主页,梳理了个人介绍、技术栈和发展方向。 -
个人技能梳理与学习规划:通过撰写课程随笔,系统梳理了当前的技能树与技术偏好,明确了已具备的能力、感兴趣的方向和欠缺的能力,制定了本学期的代码量目标与学习计划,并借助 DeepSeek 生成的学习指南进行了合理性分析。
bye~👋🏻👋🏻









浙公网安备 33010602011771号