软件工程课程第一次作业

项目 内容
作业所属课程 https://edu.cnblogs.com/campus/fzu/2026-01SoftwareEngineeringandSoftwareEngineeringPractice
作业要求 https://edu.cnblogs.com/campus/fzu/2026-01SoftwareEngineeringandSoftwareEngineeringPractice/homework/16716
作业目标 完成huggingface-API的调用目标,并且搭建Github个人主页,梳理当前的技能树和技术偏好,规范博客园markdown的写作规范
学号 102402147

一、准备工作,注册GitHub和博客园账号

1.GitHub账号注册,ID为lickchime

image

2.博客园账号

账号已注册,昵称已经实名,编辑器为markdown

3.关注博客

已关注老师博客:https://home.cnblogs.com/u/zhaowuhuang
已关注助教博客:https://home.cnblogs.com/u/jsm-blog
https://home.cnblogs.com/u/prcy

二、huggingface-API的调用

1.huggingface账号注册

image

2.后端调用代码

from flask import Flask, render_template, request, jsonify
import os
import requests
import urllib3

urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

app = Flask(__name__)

# 通过环境变量提供令牌,避免把 Hugging Face 凭据提交到代码仓库。
HF_API_TOKEN = "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"
BASE_MODEL = "black-forest-labs/FLUX.1-schnell"
headers = {"Authorization": f"Bearer {HF_API_TOKEN}"}
API_URL = "https://router.huggingface.co/fal-ai/fal-ai/flux/schnell"
# 当前网络代理使用了本机签发证书;设置 HF_SSL_VERIFY=true 可恢复证书校验。
SSL_VERIFY = os.getenv("HF_SSL_VERIFY", "false").lower() in {"1", "true", "yes"}

@app.route('/')
def index():
    return render_template("index.html")

@app.route("/generate", methods=["POST"])
def generate_img():
    data = request.get_json()
    prompt = data.get("prompt", "")
    negative_prompt = data.get("neg_prompt", "")

    if not HF_API_TOKEN:
        return jsonify({"success": False, "msg": "未配置 HF_API_TOKEN,请先设置 Hugging Face 访问令牌。"}), 500
    if not prompt.strip():
        return jsonify({"success": False, "msg": "请输入正向提示词。"}), 400

    payload = {
        "prompt": prompt,
        "num_inference_steps": 4,
    }
    try:
        response = requests.post(
            API_URL,
            headers=headers,
            json=payload,
            timeout=120,
            verify=SSL_VERIFY,
        )
        if response.status_code == 200:
            import base64

            if response.headers.get("content-type", "").startswith("application/json"):
                result = response.json()
                image_url = result.get("images", [{}])[0].get("url")
                if not image_url:
                    return jsonify({"success": False, "msg": "Provider 返回结果中没有图片地址。"}), 502
                image_response = requests.get(
                    image_url,
                    timeout=120,
                    verify=SSL_VERIFY,
                )
                image_response.raise_for_status()
                img_bytes = image_response.content
            else:
                img_bytes = response.content

            img_base64 = base64.b64encode(img_bytes).decode("utf-8")
            return jsonify({"success": True, "image": img_base64})
        else:
            detail = response.text[:1000]
            return jsonify({"success": False, "msg": f"Hugging Face API 错误 {response.status_code}: {detail}"}), 502
    except Exception as e:
        return jsonify({"success": False, "msg": str(e)})

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

3.前端交互页面代码

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>AI图像生成</title>
    <style>
        body{max-width:800px;margin:30px auto;padding:0 20px;font-family:Microsoft YaHei;}
        textarea{width:100%;height:80px;margin:8px 0;padding:8px;box-sizing:border-box;}
        button{padding:10px 24px;background:#2563eb;color:#fff;border:none;border-radius:6px;cursor:pointer;font-size:16px;}
        #result{margin-top:20px;}
        img{max-width:100%;border:1px solid #ddd;}
    </style>
</head>
<body>
    <h2>Flux AI 图片生成</h2>
    <div>
        <label>正向提示词:</label>
        <textarea id="prompt" placeholder="例如:写实风景,晴天山脉,高清照片"></textarea>
    </div>
    <div>
        <label>反向提示词:</label>
        <textarea id="neg" placeholder="不想出现的内容,例如:模糊,低画质,畸形"></textarea>
    </div>
    <button onclick="runGenerate()">开始生成</button>
    <div id="result"></div>

    <script>
        async function runGenerate(){
            const prompt = document.getElementById("prompt").value;
            const neg = document.getElementById("neg").value;
            const resDiv = document.getElementById("result");
            resDiv.innerText = "正在请求AI生成,请稍等...";
            try{
                const resp = await fetch("/generate",{
                    method:"POST",
                    headers:{"Content-Type":"application/json"},
                    body:JSON.stringify({prompt:prompt,neg_prompt:neg})
                });
                const data = await resp.json();
                if(data.success){
                    resDiv.innerHTML = `<img src="data:image/jpeg;base64,${data.image}">`;
                }else{
                    resDiv.innerText = "失败:"+data.msg;
                }
            }catch(err){
                resDiv.innerText = "网络异常:"+err;
            }
        }
    </script>
</body>
</html>

4.API调用过程

image

5.调用Flux模型生成一张最贴近真实世界的图像

image

(1)设计思路

  • 主体与场景定义:明确画面主体、动作、环境与时间;开头使用 photorealistic photo 强制模型输出真实照片风格,避免生成插画、动漫画面。
  • 相机与摄影参数约束:DSLR, shallow depth of field,模拟单反相机拍摄,添加浅景深效果,营造生活摄影氛围感,区分 AI 绘画常见平面画风。

(2)修改过程

  • 一开始使用中文关键词,达不到想要的效果,换成英文就可以了
  • 细节参数需要不断调整

三、GitHub 个人主页搭建

我选择方案一:创建个人资料自述文件(Profile README)。
image
image

四、博客随笔

1. 技能树梳理与自我评估

已具备的专业知识与能力

  • 能力A:python基础——能编写简单程序、脚本
  • 能力B:c语言基础——能编写简答程序
  • 能力C:会markdown排版
    对哪些技术方向感兴趣
  • 网络爬虫
  • 数据处理与分析
    还欠缺哪些能力
  • 缺少独立完成单独项目的经验
  • 编程能力较弱
  • 对软件开发了解较少

2.当前累计代码数量及学期目标数量

  • 当前累计近1000行
  • 目标6000行

3.学期最期待学习的知识与收获

  • 期待学习软件设计与开发
  • 希望收获团队合作能力,为以后工作打下基础

4.AI生成的软件工程学习指南

以下由AI工具【豆包】生成:
软件工程学习指南

  1. 前置基础
    掌握一门编程语言、数据结构算法、数据库,了解操作系统与网络基础,能独立开发简单项目。
  2. 核心理论
    理解软件生命周期;熟悉瀑布、敏捷等开发模型;学会需求分析、UML 建模;掌握高内聚低耦合、SOLID 设计原则;分清单元 / 集成 / 系统各级测试;学会 Git 版本管理。
  3. 实战重点
    独立完成小型项目,完整产出需求文档、设计图、测试用例;尝试多人协作,模拟敏捷迭代,养成规范编码、写文档的习惯。
  4. 学习要点
    理论结合实践,软件工程重在流程、质量与团队协作,不只写代码。推荐《软件工程导论》,多用 Draw.io 绘图、Git 做版本控制。

我的分析

我认为豆包说的很不错,我确实应该要实战独立完成项目,不能太依靠团队,我需要先提升自己然后再加入团队合作当中,但也有不好的地方就是需要学习的内容太多,我可能一个学期无法完成。

五、作业总结与心得

  • 本次作业,我独立完成了GitHub账号的注册与信息填写,并且完成了huggingface-API的作业任务,我认为我学会了很多。

  • 心得:本次作业让我明白软件开发不只是单纯编写代码,更讲究规范流程、合理设计与团队协作。相较于单纯实现功能,软件工程更注重项目的完整性、可维护性与实用性,让我学会用系统化思维梳理开发流程,摒弃随性编码的习惯,真正做到规范化、工程化开发。

posted @ 2026-09-11 22:34  102402147郑宇嘉  阅读(11)  评论(0)    收藏  举报