jclyo1's picture
updates
bce1681
raw
history blame
3.57 kB
from fastapi import FastAPI
from fastapi.staticfiles import StaticFiles
from fastapi.responses import FileResponse
import platform
import subprocess
import logging
import urllib.request
import os
import json
import uuid
import torch
from diffusers import DiffusionPipeline, DPMSolverMultistepScheduler
print(f"Is CUDA available: {torch.cuda.is_available()}")
app = FastAPI()
@app.get("/generate")
def generate_image(prompt, inference_steps, model):
print(f"Is CUDA available: {torch.cuda.is_available()}")
#model_id = "CompVis/stable-diffusion-v1-4" #stabilityai/stable-diffusion-2-1
# Use the DPMSolverMultistepScheduler (DPM-Solver++) scheduler here instead
#pipe = StableDiffusionPipeline.from_pretrained(model_id, torch_dtype=torch.float16)
#pipe = StableDiffusionPipeline.from_pretrained(model_id)
#pipe.scheduler = DPMSolverMultistepScheduler.from_config(pipe.scheduler.config)
#pipe = pipe.to("cuda")
pipeline = DiffusionPipeline.from_pretrained(str(model))
#pipeline = pipeline.to("cuda")
generator = torch.Generator("cpu").manual_seed(0)
pipeline.scheduler = DPMSolverMultistepScheduler.from_config(pipeline.scheduler.config)
#image = pipeline(prompt, generator=generator).images[0]
image = pipeline(prompt, generator=generator, num_inference_steps=int(inference_steps)).images[0]
#prompt = "a photo of an astronaut riding a horse on mars"
#image = pipe(prompt, num_inference_steps=5).images[0]
#image = pipe(prompt).images[0]
filename = str(uuid.uuid4()) + ".jpg"
#print(f"after filename assignment")
image.save(filename)
print(filename)
#print(f"after save")
# Data to be written
assertion = {
"assertions": [
{
"label": "com.truepic.custom.ai",
"data": {
"model_name": model,
"model_version": "1.0",
"prompt": prompt
}
}
]
}
json_object = json.dumps(assertion, indent=4)
with open("assertion.json", "w") as outfile:
outfile.write(json_object)
subprocess.check_output(['./truepic-sign', 'sign', filename, '--profile', 'demo', '--assertions', 'assertion.json', '--output', (os.getcwd() + '/static/' + filename)])
return {"response": filename}
@app.get("/generate-picsum")
def generate_picsum(prompt):
local_filename, headers = urllib.request.urlretrieve(('https://picsum.photos/id/' + prompt + '/800/800'))
# Data to be written
assertion = {
"assertions": [
{
"label": "com.truepic.custom.ai",
"data": {
"model_name": "Picsum",
"model_version": "1.0",
"prompt": prompt
}
}
]
}
json_object = json.dumps(assertion, indent=4)
with open("assertion.json", "w") as outfile:
outfile.write(json_object)
subprocess.check_output(['./truepic-sign', 'sign', local_filename, '--profile', 'demo', '--assertions', 'assertion.json', '--output', (os.getcwd() + '/static/output.jpg')])
return {"response": "success"}
app.mount("/", StaticFiles(directory="static", html=True), name="static")
@app.get("/")
def index() -> FileResponse:
return FileResponse(path="/app/static/index.html", media_type="text/html")