import os import gradio as gr from services.aws_service import AwsService from dotenv import load_dotenv from image_crop import crop_faces import cv2 import numpy as np load_dotenv() def crop_photoshoot_images(photo_shoot_id): folder = "PhotoShoots/" + str(photo_shoot_id) + "/Inputs" files = AwsService.get_files_from_s3(os.environ.get('AWS_S3_BUCKET'), folder) for file in files: s3_object = AwsService.get_image_from_s3(os.environ.get('AWS_S3_BUCKET'), file['Key']) image = s3_object["pil"] key = s3_object["key"] cv2_img = np.array(image) cv2_img = cv2_img[:, :, ::-1].copy() faces = crop_faces(cv2_img) i = 1 for face in faces: filename = f'{key}-{i}.jpg' cv2.imwrite(filename, face) AwsService.send_image_to_s3(filename, os.environ.get('AWS_S3_BUCKET'), f'PhotoShoots/{photo_shoot_id}/Croppeds/{key}-{i}.jpg') os.remove(filename) i += 1 return {"message": f"{len(files)} images cropped successfully"} iface = gr.Interface( fn=crop_photoshoot_images, inputs=[gr.Textbox(lines=1, placeholder="Photo Shoot ID")], outputs=["text"] ) iface.launch()