Devashishraghav's picture
Upload processor/zipper.py with huggingface_hub
e0609d6 verified
import cv2
import zipfile
import io
import numpy as np
from typing import List
def standardize_and_zip(images: List[tuple[str, np.ndarray]]) -> io.BytesIO:
"""
Takes a list of tuples (filename, image). Resizes images to standard size
(e.g., 600x800), encodes them as PNG/JPG, and zips them.
Returns an in-memory ZIP file stream.
"""
TARGET_LONG_SIDE = 1200
zip_buffer = io.BytesIO()
with zipfile.ZipFile(zip_buffer, "a", zipfile.ZIP_DEFLATED, False) as zip_file:
for idx, (filename, img) in enumerate(images):
h, w = img.shape[:2]
# Determine orientation to preserve aspect ratio
if w > h:
# Landscape
new_w = TARGET_LONG_SIDE
new_h = int(h * (TARGET_LONG_SIDE / w))
else:
# Portrait
new_h = TARGET_LONG_SIDE
new_w = int(w * (TARGET_LONG_SIDE / h))
resized = cv2.resize(img, (new_w, new_h), interpolation=cv2.INTER_CUBIC)
# Encode as PNG to preserve transparent background
success, buffer = cv2.imencode(".png", resized)
if success:
# Keep original name or rename
name_without_ext = filename.rsplit(".", 1)[0]
new_filename = f"{name_without_ext}_processed.png"
zip_file.writestr(new_filename, buffer.tobytes())
# Rewind buffer
zip_buffer.seek(0)
return zip_buffer