|
|
from PIL import Image |
|
|
import numpy as np |
|
|
from typing import Tuple |
|
|
|
|
|
def preprocess_image(image: Image.Image, target_size: Tuple[int, int] = (512, 512)) -> Image.Image: |
|
|
"""Preprocess image for model inference""" |
|
|
|
|
|
if image.mode != 'RGB': |
|
|
image = image.convert('RGB') |
|
|
|
|
|
|
|
|
image.thumbnail(target_size, Image.LANCZOS) |
|
|
|
|
|
|
|
|
new_image = Image.new('RGB', target_size, (255, 255, 255)) |
|
|
paste_position = ((target_size[0] - image.width) // 2, |
|
|
(target_size[1] - image.height) // 2) |
|
|
new_image.paste(image, paste_position) |
|
|
|
|
|
return new_image |
|
|
|
|
|
def enhance_image_quality(image: Image.Image) -> Image.Image: |
|
|
"""Enhance image quality for better analysis""" |
|
|
import cv2 |
|
|
|
|
|
|
|
|
img_array = np.array(image) |
|
|
|
|
|
|
|
|
blurred = cv2.GaussianBlur(img_array, (3, 3), 0) |
|
|
|
|
|
|
|
|
enhanced = cv2.addWeighted(img_array, 1.5, blurred, -0.5, 0) |
|
|
|
|
|
return Image.fromarray(enhanced) |
|
|
|