api调用

云端图像生成模型调用作业报告

基于 Hugging Face Inference Providers API 接入 flux-RealismLora

一、任务概述

本作业实现一个基于 Hugging Face Inference Providers(fal-ai) 云端 API 的图像生成服务,调用

  • 模型:XLabs-AI/flux-RealismLora(照片级写实 LoRA,搭配基础模型 black-forest-labs/FLUX.1-dev
  • 服务商:fal-ai(由 Hugging Face 账户统一结算)
  • 目标:通过 API 调用方式在本地服务中按提示词生成最接近真实世界的写实图像。

采用API 调用,无需本地 GPU、无需下载模型权重,前端输入提示词 → 后端调用 HF API → 返回图片。


二、API 调用成功记录

在本地 Flask 服务中成功发起调用并返回图片,服务器记录如下(HTTP 200):

[SUCCESS] 2026-09-10 13:33:09 | POST http://127.0.0.1:5000/generate
| model=XLabs-AI/flux-RealismLora via fal-ai | HTTP 200
| prompt=A candid snapshot of an elderly Indian street food vendor stirring
a large steel pot of steaming chai over a wood fire in the late afternoon,
smoke drifting, his weathered hands and worn apron in clear view,
small-town busy market street softly blurred behind him,
warm golden sunlight, subtle film grain

浏览器访问 http://127.0.0.1:5000/log 可直接查看该成功记录。


三、前端页面与最终生成图像

image

  • 前端地址:http://127.0.0.1:5000/(输入提示词,点击“生成图片”)
  • 后端返回图片,浏览器直接显示最终生成图像。

fc7a71d3c3c0e26f5ca83f0bbf567567


四、核心代码

1. 后端调用代码 app.py

# -*- coding: utf-8 -*-
import os
from datetime import datetime

from dotenv import load_dotenv
from flask import Flask, request, send_file, render_template_string
from huggingface_hub import InferenceClient

load_dotenv()

app = Flask(__name__)

# 初始化一次,之后所有请求复用同一个客户端
client = InferenceClient(
    provider="fal-ai",
    api_key=os.environ["HF_TOKEN"],
)

# 提示词默认增强为“写实照片”风格
DEFAULT_STYLE = (
    "realistic photograph, natural lighting, "
    "detailed skin texture, 35mm photography, high detail"
)

@app.route("/generate")
def generate():
    prompt = request.args.get("prompt", "").strip()
    if not prompt:
        return "请提供 prompt 参数", 400

    full_prompt = f"{prompt}, {DEFAULT_STYLE}"

    # ===== 核心:API 调用 =====
    image = client.text_to_image(
        full_prompt,
        model="XLabs-AI/flux-RealismLora",
    )

    import io
    buf = io.BytesIO()
    image.save(buf, format="PNG")
    buf.seek(0)

    # 记录一条“API 调用成功”记录
    with open("api_call_log.txt", "a", encoding="utf-8") as f:
        f.write(
            f"[SUCCESS] {datetime.now().strftime('%Y-%m-%d %H:%M:%S')} | "
            f"model=XLabs-AI/flux-RealismLora via fal-ai | HTTP 200 | prompt={prompt}\n"
        )
    return send_file(buf, mimetype="image/png", download_name="result.png")

2. 依赖 requirements.txt

huggingface_hub
pillow
flask
python-dotenv

3. 配置 .env

HF_TOKEN=hf_****(自填自己的 Token,勿提交 Git)

五、API 调用的操作步骤

  1. 创建 Token:在 Hugging Face Settings → Access Tokens → New token,选 Fine-grained,勾选 Inference > Make calls to Inference Providers,复制 hf_...
  2. 写配置:将 Token 填入项目 .envHF_TOKEN
  3. 安装依赖
    cd c:\Users\沈文驰\Desktop\新建文件夹
    python -m pip install -r requirements.txt
    
  4. 启动服务
    python app.py
    
    (日志显示 Running on http://127.0.0.1:5000
  5. 访问前端:浏览器打开 http://127.0.0.1:5000,输入提示词,点击“生成图片”。
  6. 查看成功记录:服务终端出现 GET /generate?prompt=... HTTP/1.1" 200,同时项目目录生成 api_call_log.txt;也可访问 http://127.0.0.1:5000/log 查看。

调用链路:

前端输入提示词  →  本地 Flask 后端  →  Hugging Face InferenceClient(provider=fal-ai)
                →  fal-ai 云端推理  →  返回 PNG 图片  →  浏览器显示

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

1. 设计目标

作业要求“生成最贴近真实世界的图像”,因此提示词不追求炫技,而是还原 真实抓拍的瞬间感,规避 AI 常见的“摆拍感 / 过度精致 / 人物皮肤过于完美”等穿帮点。

2. 设计思路拆解(最终版提示词)

A candid snapshot of an elderly Indian street food vendor stirring
a large steel pot of steaming chai over a wood fire in the late afternoon,
smoke drifting, his weathered hands and worn apron in clear view,
small-town busy market street softly blurred behind him,
warm golden sunlight, subtle film grain
关键词 作用
candid snapshot 生活抓拍感,避免摆拍
elderly street food vendor 有岁月感的人物,天然写实
steaming chai / wood fire / smoke 生活细节,增加真实氛围
weathered hands / worn apron 局部特写,凸显真实肌理
market street softly blurred 浅景深、背景虚化,似随手街拍
warm golden sunlight 自然光线,暖色调
subtle film grain 轻微胶片颗粒,增强相片质感

(后端还会自动追加 realistic photograph, natural lighting, detailed skin texture, 35mm photography, high detail 风格后缀。)

3. 修改过程(两版对比)

第 1 版(最终采用):街拍场景 —— 赌“生活瞬间感”

  • 偏重场景叙事与光影,最不容易像 AI 生成。

第 2 版(备选方案):人物特写 —— 赌“皮肤肌理”

A close-up portrait of a middle-aged Mediterranean woman with sun-weathered
skin, light freckles and a few stray hairs, standing on a cobblestone street
in soft overcast light, shallow depth of field, gaze slightly off-camera,
no makeup, natural skin texture visible
  • 该版优点是直接聚焦皮肤细节(freckles / stray hairs / no makeup);但特写对“真实感”更挑剔,因此作为备用。

取舍结论:考虑到仅有的生成次数资源有限,优先选择“生活瞬间感 + 局部特写 + 自然光影”的组合,规避大远景与多人复杂场景,最终获得满意的写实结果。


七、API 调用体验与心得总结

  1. API 调用门槛低、免 GPU:无需在本地安装 CUDA / 下载数 GB 模型,huggingface_hub 一行 client.text_to_image() 即完成调用,适合快速原型与课程作业。
  2. 计费与额度:未配置 Custom Provider Key 时,费用统一由 Hugging Face 账户结算,免费账户有月赠额度;调用一次即产生一条 HTTP 200 记录,便于核对成本。费用与额度以所使用服务商当前配置为准。
  3. 写实类 Prompt 的关键:真实感主要来自“生活抓拍场景 + 皮肤等局部肌理 + 自然光影 + 轻微噪点”,而不是堆砌华丽辞藻。善用“非完美”细节(皱纹、碎发、虚化背景)能显著降低 AI 感。
  4. 工程要点
    • Token 属敏感信息,置于 .env,不能提交到 Git / 聊天 / 前端。
    • 客户端在进程内复用一次,避免每次请求重复建连。
    • 用日志/记录文件固化“调用成功”证据,便于作业展示与排查。
  5. 不足与改进空间:当前为单机 Flask 开发服务器,不适合生产;若需高并发可改用 Gunicorn 等 WSGI,或限制请求频率以避免额度超支。

我的github主页

image

posted @ 2026-09-10 13:59  Otonash1  阅读(6)  评论(0)    收藏  举报