Python 调用 Stabilityai API在本地生成图像

Python 调用 Stabilityai API在本地生成图像

摘要

本程序利用硅基流动目前的免费 stabilityai/stable-diffusion-2-1 模型API,生成图像并下载到本地,用户可以通过输入描述性提示词来获取相应的图像。使用Python编写,依赖于requests库进行HTTP请求,并使用os库处理文件系统操作。

功能

  1. 用户输入:程序提示用户输入描述图像的提示词,例如:‘an island near sea, with seagulls, moon
    shining over the sea, light house, boats int he background, fish
    flying over the sea’。输入提示词时,不要少了前后的单引号哦。
  2. API请求:使用用户输入的提示词构建请求负载,并向指定的API发送POST请求以生成图像。(代码中有)
  3. 响应处理:解析API的响应,提取生成的图像URL。
  4. 文件保存:将生成的图像下载并保存到本地文件系统,文件名基于用户输入的前10个字符命名。
  5. 目录管理:在保存图像之前,检查并创建必要的目录。
    代码结构

代码结构

以下是应用程序的主要代码结构:

# -*- coding: utf-8 -*-
import requests
import os

url = "https://api.siliconflow.cn/v1/images/generations"

# 提示用户输入描述图片的提示词
try:
    user_input = input("\n请输入描述图片的提示词,例如:'blue sky': ").strip()  # 用户输入需要引号
    user_prompt = "'{}'".format(user_input)  
except Exception as e:
    print("输入提示词时发生错误: {}".format(e))
    exit(1)  # 退出程序

payload = {
    "model": "deepseek-ai/Janus-Pro-7B",
    "prompt": user_prompt,  # 使用用户输入的提示词
    "seed": 4999999999
}
headers = {
    "Authorization": "Bearer <token>",  #<token> 替换成你在硅基流动里的 API-KEY, 文末有如何获得。
    "Content-Type": "application/json"
}

response = requests.request("POST", url, json=payload, headers=headers)

# 解析响应以获取图像URL
response_json = response.json()  # 使用 json() 方法解析响应
image_url = response_json['data'][0]['url']  # 从 data 数组中获取 URL

# 定义保存图像的本地文件名
local_filename = os.path.join("images", "{}.png".format(user_input[:10]))  # 使用用户输入的前10个字符命名

# 创建图像目录(如果不存在)
if not os.path.exists(os.path.dirname(local_filename)):
    os.makedirs(os.path.dirname(local_filename))

# 下载图像并保存到本地
with requests.get(image_url, stream=True) as img_response:
    img_response.raise_for_status()  # 检查请求错误
    with open(local_filename, 'wb') as f:
        for chunk in img_response.iter_content(chunk_size=8192):
            f.write(chunk)

print("Image saved to {local_filename}")

关键技术

HTTP请求:使用requests库简化HTTP请求的发送和响应处理。
JSON解析:通过response.json()方法轻松解析API返回的JSON数据。
文件操作:使用os库处理文件路径和目录创建,确保图像能够正确保存。
总结
本应用程序展示了如何通过API生成图像,并将其保存到本地。用户友好的输入提示和自动化的文件管理使得该应用程序易于使用,适合需要快速生成图像的场景。

代码下载

https://gitee.com/phpervip/py-stability-ai/

立即体验

现在就开始吧!

https://cloud.siliconflow.cn/i/7qQzHGZs

https://cloud.siliconflow.cn/i/7qQzHGZs

https://cloud.siliconflow.cn/i/7qQzHGZs

### 使用扩散模型生成图像的方法 扩散模型通过逐渐向数据添加噪声来学习其分布,之后再逆转这一过程以从纯噪声中生成新的样本。对于图像生成而言,在不改变扩散模型本身的情况下,可以通过训练一个分类器来指导生成特定类别的图像[^1]。 具体来说,为了生成指定类型的图像,先要准备一组带有标签的数据集用于训练分类器。该分类器能够识别不同种类的加噪图片。当想要利用已有的diffusion模型创建新图象时,则借助此分类器调整生成方向,使得最终产出符合预期目标的视觉效果。这种方式的优势在于无需针对每种可能的结果单独重训整个复杂的网络结构;相反,只需构建相对简单的辅助组件即可达成目的。 下面是一个简化版Python代码片段展示如何基于预训练好的稳定扩散(Stable Diffusion)框架调用API接口完成基本的图像合成操作: ```python import torch from diffusers import StableDiffusionPipeline, EulerAncestralDiscreteScheduler model_id = "stabilityai/stable-diffusion-2-base" scheduler = EulerAncestralDiscreteScheduler.from_pretrained(model_id, subfolder="scheduler") pipe = StableDiffusionPipeline.from_pretrained(model_id, scheduler=scheduler) prompt = "a photograph of an astronaut riding a horse" image = pipe(prompt).images[0] image.save("astronaut_rides_horse.png") # Save the generated image as PNG file. ``` 上述脚本首先加载了一个名为`stable-diffusion-2-base` 的预训练权重文件作为基础架构,并设置了调度算法(这里选择了欧拉祖先离散化)。接着定义了一条描述性的提示语句给定希望得到的画面主题——比如一位宇航员骑着马的照片。最后执行管道处理并将结果保存下来供后续查看或进一步编辑使用[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值