Spaces:
Running
Running
| """This is an experimental pipeline used to test AI PC NPU and GPU""" | |
| from pathlib import Path | |
| from diffusers import EulerDiscreteScheduler,LCMScheduler | |
| from huggingface_hub import snapshot_download | |
| from PIL import Image | |
| from backend.openvino.stable_diffusion_engine import ( | |
| StableDiffusionEngineAdvanced, | |
| LatentConsistencyEngineAdvanced | |
| ) | |
| class OvHcStableDiffusion: | |
| "OpenVINO Heterogeneous compute Stablediffusion" | |
| def __init__( | |
| self, | |
| model_path, | |
| device: list = ["GPU", "NPU", "GPU", "GPU"], | |
| ): | |
| model_dir = Path(snapshot_download(model_path)) | |
| self.scheduler = EulerDiscreteScheduler( | |
| beta_start=0.00085, | |
| beta_end=0.012, | |
| beta_schedule="scaled_linear", | |
| ) | |
| self.ov_sd_pipleline = StableDiffusionEngineAdvanced( | |
| model=model_dir, | |
| device=device, | |
| ) | |
| def generate( | |
| self, | |
| prompt: str, | |
| neg_prompt: str, | |
| init_image: Image = None, | |
| strength: float = 1.0, | |
| ): | |
| image = self.ov_sd_pipleline( | |
| prompt=prompt, | |
| negative_prompt=neg_prompt, | |
| init_image=init_image, | |
| strength=strength, | |
| num_inference_steps=25, | |
| scheduler=self.scheduler, | |
| ) | |
| image_rgb = image[..., ::-1] | |
| return Image.fromarray(image_rgb) | |
| class OvHcLatentConsistency: | |
| """ | |
| OpenVINO Heterogeneous compute Latent consistency models | |
| For the current Intel Cor Ultra, the Text Encoder and Unet can run on NPU | |
| Supports following - Text to image , Image to image and image variations | |
| """ | |
| def __init__( | |
| self, | |
| model_path, | |
| device: list = ["NPU", "NPU", "GPU"], | |
| ): | |
| model_dir = Path(snapshot_download(model_path)) | |
| self.scheduler = LCMScheduler( | |
| beta_start=0.001, | |
| beta_end=0.01, | |
| ) | |
| self.ov_sd_pipleline = LatentConsistencyEngineAdvanced( | |
| model=model_dir, | |
| device=device, | |
| ) | |
| def generate( | |
| self, | |
| prompt: str, | |
| neg_prompt: str, | |
| init_image: Image = None, | |
| num_inference_steps=4, | |
| strength: float = 0.5, | |
| ): | |
| image = self.ov_sd_pipleline( | |
| prompt=prompt, | |
| init_image = init_image, | |
| strength = strength, | |
| num_inference_steps=num_inference_steps, | |
| scheduler=self.scheduler, | |
| seed=None, | |
| ) | |
| return image | |