|
from importlib import import_module |
|
from types import ModuleType |
|
from typing import Dict, Any |
|
from pydantic import BaseModel as PydanticBaseModel, Field |
|
from PIL import Image |
|
import io |
|
|
|
|
|
def get_pipeline_class(pipeline_name: str) -> ModuleType: |
|
try: |
|
module = import_module(f"pipelines.{pipeline_name}") |
|
except ModuleNotFoundError: |
|
raise ValueError(f"Pipeline {pipeline_name} module not found") |
|
|
|
pipeline_class = getattr(module, "Pipeline", None) |
|
|
|
if pipeline_class is None: |
|
raise ValueError(f"'Pipeline' class not found in module '{pipeline_name}'.") |
|
|
|
return pipeline_class |
|
|
|
|
|
def bytes_to_pil(image_bytes: bytes) -> Image.Image: |
|
image = Image.open(io.BytesIO(image_bytes)) |
|
return image |
|
|
|
|
|
def pil_to_frame(image: Image.Image) -> bytes: |
|
frame_data = io.BytesIO() |
|
image.save(frame_data, format="JPEG") |
|
frame_data = frame_data.getvalue() |
|
return ( |
|
b"--frame\r\n" |
|
+ b"Content-Type: image/jpeg\r\n" |
|
+ f"Content-Length: {len(frame_data)}\r\n\r\n".encode() |
|
+ frame_data |
|
+ b"\r\n" |
|
) |
|
|
|
|
|
def is_firefox(user_agent: str) -> bool: |
|
return "Firefox" in user_agent |
|
|