File size: 1,209 Bytes
c91fae7
 
 
 
 
 
 
c50a96c
c91fae7
efdf10a
c91fae7
 
 
 
 
 
 
c50a96c
c91fae7
d27b844
 
c91fae7
 
 
 
 
 
 
 
d27b844
c91fae7
6974862
c91fae7
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
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
from PIL import ImageOps

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 = ImageOps.exif_transpose(s3_object["pil"])
    key = s3_object["key"]
    image.save(f"{key}.jpg")
    cv2_img = cv2.imread(f"{key}.jpg")
    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
    os.remove(f"{key}.jpg")

  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()