43 lines
1.2 KiB
Python
43 lines
1.2 KiB
Python
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
|