软件工程课程第一次作业

这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzu/202601SofwareEngineering
这个作业要求在哪里 https://edu.cnblogs.com/campus/fzu/202601SofwareEngineering/homework/15712
这个作业的目标 huggingface-API的调用 、Github个人主页搭建、梳理当前的技能树,技术偏好,未来规划
学号 102401435

前期准备工作

一、Hugging Face API 的调用

1.1、项目结构

hf-flux-demo/
├─ app.py        # Flask后端
└─ index.html    # 网页前端

1.2、后端代码 app.py

from flask import Flask, request, jsonify
from flask_cors import CORS
import requests
import base64
import warnings
warnings.filterwarnings("ignore")

app = Flask(__name__)
CORS(app)


HF_TOKEN = ""
MODEL_URL = "https://api-inference.huggingface.co/models/black-forest-labs/FLUX.1-schnell"
headers = {"Authorization": f"Bearer {HF_TOKEN}"}

@app.route('/generate', methods=['POST'])
def generate_img():
    data = request.get_json()
    prompt = data.get("prompt", "")
    payload = {
        "inputs": prompt,
        "parameters": {
            "num_inference_steps": 28,
            "guidance_scale": 3.5
        }
    }
    print("正在调用HF API,提示词:", prompt)
    response = requests.post(MODEL_URL, headers=headers, json=payload, verify=False, timeout=60)
    print("HF返回状态码:", response.status_code)

    if response.status_code == 200:
        b64 = base64.b64encode(response.content).decode("utf-8")
        return jsonify({"img": b64})
    return jsonify({"error": response.text}), 500

if __name__ == '__main__':
    app.run(host="127.0.0.1", port=5000, debug=True)

1.3、前端代码 index.html

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>Flux-RealismLora写实图生成</title>
</head>
<body>
    <h1>Flux-RealismLora 写实图生成</h1>
    <textarea id="promptInput" style="width:95%;height:200px;">a cat</textarea>
    <br><br>
    <button onclick="generateImage()">生成图片</button>
    <p id="msg"></p>
    <img id="resultImg" style="max-width:800px;">

<script>
async function generateImage(){
    const prompt = document.getElementById("promptInput").value;
    const msgBox = document.getElementById("msg");
    const imgBox = document.getElementById("resultImg");
    msgBox.innerText = "正在请求...";
    imgBox.src = "";
    try{
        const res = await fetch("http://127.0.0.1:5000/generate",{
            method:"POST",
            headers:{"Content-Type":"application/json"},
            body:JSON.stringify({prompt:prompt})
        });
        const data = await res.json();
        if(data.img){
            imgBox.src = "data:image/jpeg;base64," + data.img;
            msgBox.innerText = "生成成功";
        }else{
            msgBox.innerText = "失败:"+JSON.stringify(data.error);
        }
    }catch(err){
        msgBox.innerText = "请求失败:"+err;
    }
}
</script>
</body>
</html>

1.4、环境部署 & 运行步骤

  1. 安装依赖
    打开 cmd,执行:
pip install flask flask-cors requests
  1. 获取 HuggingFace 密钥
  • 注册 HuggingFace 账号,进入 Settings → Access Tokens
  • 创建 token,权限勾选read,复制 token 替换代码内HF_TOKEN的值
  1. 启动后端服务
    cmd 进入项目文件夹,运行
python app.py

看到 Running on http://127.0.0.1:5000 代表后端启动成功

  1. 打开前端页面
    双击打开index.html,在文本框输入绘图提示词,点击【生成图片】

1.5、系统原理

  1. 前端:HTML 页面提供输入框与按钮,点击按钮后 JS 通过fetch向后端http://127.0.0.1:5000/generate发送 POST 请求,携带文本提示词。
  2. 后端 Flask 接收 POST 请求,提取提示词,构造请求体调用 HuggingFace 官方 FLUX.1-schnell 模型推理 API。
  3. HF 服务根据提示词生成图片,返回图片二进制数据。
  4. 后端将图片二进制转为 base64 字符串,返回给前端。
  5. 前端接收 base64 编码,解析并在页面展示图片。

1.6、提示词设计思路及图像

  1. 初始提示词:a cat

flux-realismlora_a-cat

效果:图像偏卡通,真实感弱。

问题:缺少摄影、画质、光影关键词,LoRA 写实效果没有激活。

  1. 迭代版本 1:photo of a cat, real world, 8k
    效果:真实度提升,但细节、景深不足。

flux-realismlora_photo-of-a-cat-real-world-8k

  1. 最终版本:photorealistic photo of a cat sitting on wooden windowsill, soft morning sunlight, shallow depth of field, shot on Sony A7M4, 8k, ultra detailed, natural skin texture, sharp focus

flux-realismlora_photorealistic-photo-of-a-cat

  • 正向关键词拆解
    • photorealistic:核心,触发 RealismLora 写实风格
    • 场景 + 光影:soft morning sunlight, shallow depth of field(浅景深,相机摄影效果)
    • 相机参数:Sony A7M4,增强真实照片质感
    • 画质:8k, ultra detailed, sharp focus

二、Github个人主页搭建
屏幕截图 2026-09-11 135507

三、博客园随笔

软件工程课程学习随笔

一、个人技能树梳理 & 自我评估

✅ 已具备专业知识与能力

  1. 掌握 C、C++ 基础语法,能够编写简单程序,熟悉变量、循环、条件语句、数组等基础编程逻辑。
  2. 掌握 Python 基础语法,能够编写简单程序。
  3. 会使用 Flask 搭建简易后端接口,接收前端发来的请求。
  4. 了解基础 HTML 和 JavaScript,能写简单网页,实现页面交互。
  5. 可以调用网络 API,进行简单的数据传输,能处理图片的 base64 编码。

🎯 感兴趣的技术方向

  1. 大模型 / 文生图 AI 应用开发:基于开源大模型 API 搭建 Web 应用,前端页面交互、后端中转调用 AI 模型。
  2. 前后端分离小型 Web 系统开发:独立完成完整项目,从页面、接口到数据流转。
  3. 软件项目工程化:版本管理、项目文档撰写、需求分析、测试流程(软件工程课程相关方向)。
  4. 底层计算机原理:计算机组成原理、底层数值运算、C/C++、嵌入式底层开发(长期感兴趣方向)。

❌ 目前欠缺的能力

  1. 工程化规范能力:缺少版本控制 Git(分支、提交、冲突处理);项目缺少单元测试,没有错误统一处理、日志规范;代码没有分层(控制器、服务层分离),所有逻辑堆在路由函数内。
  2. 项目架构能力:不会项目模块化拆分,缺少配置文件管理(密钥硬编码在代码,存在安全风险);不熟悉项目依赖管理(requirements.txt)。
  3. 前端进阶能力:只会原生 JS,不会 Vue/React 框架;没有样式美化、组件封装、状态管理。
  4. 软件设计能力:缺少 UML 用例图、时序图、类图绘制;不会做需求分析、系统设计、接口文档编写。
  5. 部署能力:仅能本地开发调试,不会将 Web 项目部署到服务器;不熟悉生产环境 WSGI 服务、容器 Docker。
  6. 测试能力:没有编写单元测试、接口自动化测试的经验;只会手动网页点击测试。

二、代码量统计与目标

  • 当前累计代码量:约 4000 行
  • 本学期课程结束目标代码量:累计 2000 行。包含:多个小型 Web Demo、配套测试代码、脚本程序,覆盖需求实现 + 简单单元测试。

三、课程期待学习内容与希望收获

最期待学习的知识

  1. 软件生命周期完整流程:需求分析、概要设计、详细设计、编码、测试、维护。
  2. 软件工程建模工具:UML 图(用例图、时序图、类图),学会用图形描述系统交互。
  3. 版本控制 Git:掌握提交、分支、合并,团队协同开发。
  4. 软件测试理论与实操:单元测试、集成测试,如何设计测试用例,发现程序缺陷。
  5. 项目文档规范:学会撰写项目需求文档、概要设计文档、用户手册。

希望获得的收获

  1. 建立工程化思维:不再只追求 “代码跑通就行”,学会规范开发,考虑健壮性、可维护性。
  2. 掌握团队协作开发方式,能和他人共同完成一个软件项目。
  3. 学会对软件项目进行拆解,把需求转化成可实现的模块与接口。
  4. 学会规范地撰写项目报告、设计文档,完成课程项目。

四、AI 生成《软件工程课程学习指南》+ 合理性分析

选用 AI 工具:DeepSeek
给 DeepSeek 提示词:生成一份软件工程课程学习指南,面向大学本科学生,简洁,覆盖学习阶段、重点知识点、练习方案、项目实践建议。

DeepSeek 生成的学习指南

软件工程课程学习指南

一、学习阶段规划

  1. 基础理论阶段(第 1-6 周)
    重点学习软件生命周期、软件开发模型(瀑布模型、增量模型、敏捷开发);理解需求工程,学习如何提取用户需求,区分需求的功能性与非功能性需求。
    学习任务:阅读教材,完成课后习题;练习简单需求描述案例分析。
  2. 软件设计阶段(第 7-10 周)
    学习 UML 建模:用例图、时序图、类图;学习模块化、高内聚低耦合的设计思想;学习接口设计。
    学习任务:针对小型项目绘制 UML 图;练习模块拆分。
  3. 编码与测试阶段(第 11-14 周)
    掌握版本控制 Git 基础;学习单元测试、集成测试,设计测试用例;理解软件缺陷。
    学习任务:用 Git 管理课程项目,为代码编写单元测试。
  4. 项目综合实践阶段(第 15-16 周)
    小组合作完成课程大作业,完整走完从需求分析、设计、编码、测试、撰写文档全流程。

二、核心知识点清单

  1. 软件开发模型:瀑布、增量、原型、敏捷
  2. 需求工程:需求获取、需求规格说明书
  3. UML 建模:用例图、时序图、类图
  4. 软件设计原则:高内聚低耦合、模块化
  5. 软件测试:测试分类、测试用例、缺陷管理
  6. 版本控制 Git 基础
  7. 软件项目文档撰写规范

三、配套练习方案

  1. 每周课后:整理知识点笔记,完成课后思考题。
  2. 每学完一个模块,使用小型 Demo 项目进行实践,将理论落地。
  3. 小组项目:2~4 人组队,分工完成课程项目,练习团队协作。

四、项目实践建议

优先选择小型 Web 应用、管理系统作为课程项目;项目不要追求复杂功能,优先保证完整软件工程流程(文档 + 设计 + 代码 + 测试),而不是复杂算法。

指南合理性与个人帮助分析

  1. 合理性分析
    • ✅ 合理部分:学习阶段划分贴合本科软件工程课程教学进度;知识点清单完全匹配课程核心内容;强调流程完整大于功能复杂,这点非常适合课程大作业,避免学生一味堆砌功能而忽略文档、UML 设计等软件工程核心。推荐小组项目、UML 绘图、Git 实践,和课程考核目标对齐。
    • ⚠️ 不足之处:指南没有给出学习难点的应对方案;缺少参考资料推荐;没有区分理论背诵和动手实践的时间分配;没有说明文档撰写的模板参考。
  2. 对个人的帮助
    • 帮助我建立课程学习的时间线,明确不同阶段学习重点。我之前更关注写代码,这份指南提醒我软件工程的核心是工程流程与文档、设计,而不只是程序实现。
    • 项目实践建议正好适配我正在做的 Web AI 图像生成 Demo,可以把这个 Demo 扩展成本课程的课程项目,补充需求文档、UML 图、测试用例,补齐我欠缺的工程化内容。
    • 让我清晰看到学习顺序:先理论与需求,再设计建模,然后编码测试,最后项目整合,方便规划本学期学习计划。

后台截图

屏幕截图 2026-09-11 175831

posted @ 2026-09-11 18:19  乔震宇  阅读(2)  评论(0)    收藏  举报