软件工程课程第一次作业
| 这个作业属于哪个课程 | H202601软件工程与软件工程实践 |
|---|---|
| 这个作业要求在哪里 | 软件工程课程第一次个人作业 |
| 这个作业的目标 | 通过 Hugging Face API、GitHub 个人主页建设和博客园随笔实践,了解软件工程开发过程,提高 AI 工具使用、项目开发和软件工程实践能力。 |
| 学号 | 102402111 |
一、Hugging Face API 图片生成
本次实验使用 Hugging Face 提供的 API 调用 XLabs-AI/flux-RealismLora 模型,实现 AI 写实图片生成,并使用 Flask 搭建简单的前后端交互页面。
整个系统的基本流程为:
输入提示词
↓
前端发送请求
↓
Flask 后端接收
↓
调用 Hugging Face API
↓
生成图片
↓
保存图片
↓
前端显示生成结果
1. API 调用
首先在 Hugging Face 完成账号注册并获取 Access Token。我使用 .env 文件保存 Token。
HF_TOKEN=自己的Hugging Face Token
后端使用 huggingface_hub 中的 InferenceClient 调用模型:
from huggingface_hub import InferenceClient
from dotenv import load_dotenv
import os
load_dotenv()
HF_TOKEN = os.getenv("HF_TOKEN")
client = InferenceClient(
provider="fal-ai",
api_key=HF_TOKEN
)
MODEL_ID = "XLabs-AI/flux-RealismLora"
调用模型生成图片:
image = client.text_to_image(
prompt=prompt,
model=MODEL_ID
)
生成图片后保存到 Flask 的静态文件目录:
filename = f"{uuid.uuid4().hex}.png"
save_path = os.path.join(GENERATED_DIR, filename)
image.save(save_path)
2. 前后端交互
前端通过 JavaScript 的 fetch() 方法向 Flask 后端发送请求:
const response = await fetch("/generate", {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify({
prompt: prompt
})
});
const data = await response.json();
if (data.success) {
resultImage.src =
data.image_url + "?t=" + new Date().getTime();
}
后端接收 Prompt 后调用 Hugging Face API,并将生成的图片保存下来,再将图片地址返回给前端。
这样就实现了:
用户输入 Prompt → Flask 后端 → Hugging Face API → 生成图片 → 前端展示
3. 图片生成提示词
最开始测试时,我使用了比较简单的提示词:
A woman.
图片生成结果截图:
最终使用的提示词为:
A beautiful young woman standing on a city street at night, photorealistic, realistic skin texture, cinematic lighting, professional photography, shallow depth of field, highly detailed
图片生成结果截图:
通过对 Prompt 进行修改,我发现更加具体的提示词能够对图片的主体、场景、光照和整体风格进行更加明确的描述,生成结果也更加符合预期。
前端运行效果截图:
在 API 调用过程中,我曾经遇到过 402 Payment Required 错误。开始时我检查了代码和 Token,确认 Token 的读取方式没有问题。随后进一步检查了调用的模型名称和 Provider,发现之前的调用方式与当前 Hugging Face Inference Providers 的配置不完全匹配。经过查询和调整,我将模型设置为 XLabs-AI/flux-RealismLora,并在 InferenceClient 中指定 provider="fal-ai",同时使用正确的 API Token 进行调用。修改后重新运行 Flask 后端并测试图片生成,API 可以正常返回生成结果。通过这次排查,我认识到调用第三方 AI API 时,除了检查程序代码,还需要同时关注模型是否可用、Provider 配置、Token 权限以及账户服务状态等问题。
二、GitHub 个人主页建设
为了展示自己的学习情况、技术能力和课程实践,我创建并完善了 GitHub 个人主页。
个人主页主要包括以下内容:
- 个人基本介绍
- 兴趣方向
- 掌握的编程语言和技术
- 课程学习与项目实践
- 技术能力与自我评价
- 当前感兴趣的技术方向
- 未来两年的学习规划
目前我学习过 C 语言、数据结构、Python、数据库、大数据、机器学习等相关课程,也完成过一些课程实验和项目实践。
在技术方向上,我比较感兴趣的是 Python、人工智能、大数据、Web 开发以及软件工程。通过本课程的学习,我希望能够把之前学习过的不同技术结合起来,提高自己独立完成完整项目的能力。
GitHub 个人主页截图:
通过建设 GitHub 个人主页,我对自己的学习经历和技术能力进行了重新整理。相比单纯保存代码,个人主页能够更加直观地展示自己的学习成果,同时也可以帮助自己发现知识体系中的不足。
三、博客园随笔与个人学习规划
我的技术技能树
我的技术技能树
│
┌────────────────┼────────────────┐
│ │ │
编程基础 数据技术 AI方向
│ │ │
C语言/Python SQL/Hive/Hadoop 机器学习
数据结构 HDFS/Spark AI API
算法基础 数据处理 图像生成
│ │ │
└────────────────┼────────────────┘
│
软件工程实践
│
GitHub / Flask / API
目前我已经学习过 C 语言、Python、数据结构、算法、数据库、大数据以及机器学习等相关知识,也开始接触 Flask、GitHub 和 AI API 调用。
从技能树可以看出,我目前接触的技术方向比较多,但也存在一些不足。例如部分知识掌握得还不够深入,不同技术之间缺少系统整合,完整的软件项目开发经验也比较少。
以前完成课程实验时,我更加关注程序能否运行以及实验结果是否正确,而对于需求分析、系统设计、代码规范、版本管理、软件测试和项目维护等软件工程能力掌握得还不够。
因此,我希望通过本课程把之前学习的各种技术逐渐联系起来,提高自己独立完成完整项目的能力。
代码量与课程目标
目前我的代码主要来自平时的课程实验和项目实践,大概已经写了4000行代码,但是完整项目的代码相对较少。
课程结束后,我希望将代码行数增加到8000行-10000行,更重要的是提高代码的规范性、完整性和可维护性,能够从需求分析开始,独立完成一个相对完整的软件项目。
我希望自己能够逐渐完成:
需求分析
↓
系统设计
↓
代码编写
↓
Git 版本管理
↓
软件测试
↓
项目完善
最期待学习的内容
本课程中我最期待学习的是软件开发流程、需求分析、系统设计、Git 版本控制、软件测试以及完整的项目实践。
希望能够通过这门课程逐渐从“完成课程实验”过渡到“能够独立完成一个完整的软件项目”。
AI分阶段学习指南
为了更加明确自己的学习方向,我使用 DeepSeek 根据自己的实际学习情况制定了一份软件工程学习指南。
结合目前已经学习过 C 语言、数据结构、Python、数据库、大数据和机器学习等课程的基础,我目前比较欠缺的是将这些知识应用到完整软件项目中的能力。
因此,我计划通过开发一个“校园失物招领系统”进行实践。
第一阶段:软件工程基础
学习软件生命周期、需求分析、系统设计、编码、测试和维护等基本知识,同时掌握 Git、GitHub、Markdown 等常用开发工具,了解完整软件开发流程。
实践:分析校园失物招领系统的基本需求,确定系统需要实现的主要功能,并创建 GitHub 仓库。
第二阶段:需求分析与系统设计
重点学习如何分析用户需求、划分系统功能、设计数据库和系统结构,能够完成基本的需求分析和系统设计。。
实践:设计失物发布、拾物发布、信息搜索和信息管理等功能,并确定前端、后端和数据库之间的关系。
第三阶段:项目开发
结合已经学习过的 Python 和数据库知识,学习 Flask、前后端交互和数据库连接等内容,具备完成小型软件项目的能力。
实践:使用 Flask、HTML、CSS 和 JavaScript 开发校园失物招领系统,实现信息发布、查询和管理等主要功能。
第四阶段:测试与优化
学习软件测试、异常处理、Bug 定位和代码优化等内容,提高程序的稳定性和可维护性。
实践:测试信息发布、搜索和删除等功能,并针对错误输入和异常情况进行修改和优化。
第五阶段:独立完成项目
综合前面学习的知识,尝试独立完成一个完整的软件项目。
实践:独立完成校园失物招领系统,将代码、README、项目截图和相关文档整理并上传到 GitHub。
我认为这份学习指南整体比较合理,能够根据我目前的学习基础和不足制定学习计划,按照基础学习、需求分析、项目开发、测试优化到独立完成项目的顺序逐步提高难度。尤其是将“校园失物招领系统”作为实践项目,可以把 Python、数据库、Flask、GitHub 等已经学习过的知识结合起来。通过这份学习指南,我对今后的学习方向更加明确,也认识到自己不仅要学习理论知识,还需要通过完整项目提高实际开发和解决问题的能力。
总结
通过本次作业,我完成了 Hugging Face API 图片生成、GitHub 个人主页建设以及个人技能和学习规划的整理。
其中,Hugging Face API 实验让我体验了 AI 模型与 Web 应用结合的过程;GitHub 个人主页建设让我更加系统地整理了自己的学习成果;AI 学习指南则帮助我重新认识了自己的技术基础和目前存在的不足。
通过这次实践,我认识到软件工程不仅仅是编写代码,还包括需求分析、系统设计、版本管理、软件测试和项目维护等多个方面。今后的学习中,我希望能够减少只完成零散实验的情况,多进行完整项目实践,逐渐提高自己的软件工程实践能力。
附录
附录:博客编辑过程截图


浙公网安备 33010602011771号