|
import io |
|
import os |
|
import random |
|
import string |
|
import sys |
|
import torch |
|
from diffusers import StableDiffusionPipeline, DDIMScheduler |
|
import numpy as np |
|
import requests |
|
from PIL import Image |
|
from io import BytesIO |
|
import pydash as _ |
|
import boto3 |
|
import time |
|
import subprocess |
|
from GroundedSegmentAnything import installation |
|
|
|
S3_REGION = "fra1" |
|
S3_ACCESS_ID = "0RN7BZXS59HYSBD3VB79" |
|
S3_ACCESS_SECRET = "hfSPgBlWl5jsGHa2xuByVkSpancgVeA2CVQf2EMp" |
|
S3_ENDPOINT_URL = "https://s3.solarcom.ch" |
|
S3_BUCKET_NAME = "pissnelke" |
|
|
|
s3_session = boto3.session.Session() |
|
s3 = s3_session.client( |
|
service_name="s3", |
|
region_name=S3_REGION, |
|
aws_access_key_id=S3_ACCESS_ID, |
|
aws_secret_access_key=S3_ACCESS_SECRET, |
|
endpoint_url=S3_ENDPOINT_URL, |
|
) |
|
|
|
get_nude_function = None |
|
|
|
|
|
class EndpointHandler(): |
|
def __init__(self, path=""): |
|
|
|
os.environ['path'] = path |
|
print("running apt-get update && apt-get install ffmpeg libsm6 libxext6 -y") |
|
command = "apt-get update && apt-get install ffmpeg libsm6 libxext6 -y" |
|
process = subprocess.Popen( |
|
command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) |
|
stdout, stderr = process.communicate() |
|
print("ran apt-get update && apt-get install ffmpeg libsm6 libxext6 -y") |
|
print("path", path) |
|
global get_nude_function |
|
from main import get_nude |
|
get_nude_function = get_nude |
|
|
|
def get_pipe(self, loras, lora_weights): |
|
pipe = _.clone_deep(self.base_pipe) |
|
|
|
lora_names = _.map_(loras, lambda x: x.split(".")[0]) |
|
lora_weights = _.map_(lora_weights, lambda x: float(x)) |
|
|
|
if len(lora_weights) > 0 and len(lora_weights) == len(lora_names): |
|
pipe.set_adapters(lora_names, adapter_weights=lora_weights) |
|
|
|
return pipe |
|
|
|
def __call__(self, data): |
|
original_image_res = requests.get(data.get("original_link")) |
|
original_pil = Image.open(BytesIO(original_image_res.content)) |
|
|
|
replicate_api_key = data.get("replicate_api_key", "") |
|
|
|
with_small_tits = data.get("with_small_tits", False) |
|
|
|
with_big_tits = data.get("with_big_tits", False) |
|
|
|
nude_pils = get_nude_function(cfg_scale=data.get("cfg_scale"), generate_max_size=data.get("generate_max_size"), original_max_size=data.get( |
|
"original_max_size"), original_pil=original_pil, positive_prompt=data.get("positive_prompt"), steps=data.get("steps"), replicate_api_key=replicate_api_key, with_small_tits=with_small_tits, with_big_tits=with_big_tits) |
|
|
|
filenames = [] |
|
|
|
for image in nude_pils: |
|
byte_arr = io.BytesIO() |
|
image.save(byte_arr, format='PNG') |
|
byte_arr = byte_arr.getvalue() |
|
|
|
random_string = ''.join(random.choice( |
|
string.ascii_letters + string.digits) for i in range(20)) |
|
image_filename = random_string + ".jpeg" |
|
|
|
s3.put_object(Body=byte_arr, Bucket=S3_BUCKET_NAME, |
|
Key=image_filename) |
|
|
|
filenames.append(image_filename) |
|
|
|
return { |
|
"filenames": filenames |
|
} |
|
|