import gradio as gr from PIL import Image, ImageDraw, ImageFont from io import BytesIO import boto3 aws_access_key_id='ASIATKZWHQXRSXHN7GJX' aws_secret_access_key='ValLFfUJHu/Tb9ygGlzlNn29Dv0333EZSJjOkh4A' aws_session_token='IQoJb3JpZ2luX2VjEP7//////////wEaCXVzLXdlc3QtMiJGMEQCIHUn9y9RpIvkjEfwdOelaLHM/xdySN/18vIpME7kubHDAiANeoeHqulNlqTJbq1MyJRTbAcc7hdo7c7WIZwg+wrTfiqvAghHEAAaDDIyOTM1NzYxODY1OSIMp8Rm1KUmI0jQ6Ft9KowCH+QpjftlWQzdjQMp2SFysiMSD7VECr3YzGFd4gPueUilMO2S4VpNPRLSyMXu/yKLDQ3CPzAL4CpJ7VE9JMKRK3uO6wZJhjx5C2QipIQnnsfgM8CRyEt8KvICNtAJSYMYGOJzd5LcVJT1ma+vbgNQa+ZqpHs8VZWzPWRxtKf2qs09A9y1qCg1c1hy0wIhlf4Nz5JJrTlO0EGgOaB92vidOc3j8yy19gn1tkcrrzbFFv5J/W6Rgsiq+k1QWSRD7uK6wUbMoYjm6lyf4LjDyIiVBlxGUNOl9jXk+YSRYJojTDiUKO7/aIJLjHA5tnzehEW+81oixhAdd/fnjjsSGoDU7tDqemThf0M/lnYoZDDDmuC3BjqeAeqEwOs+3jQN1KRiChGC+Ge67JKWNBNk7qfEYjwmfYCgLsuY2cBYDF5b5QRWh0XpyT4rm2382bEUXuEKVmPFDNac6zpFeXxsWvWpC+9vpFn4QA2HH80JEb1Wd3lqkYmZd74fd4yB4wR06cLejc+rDNZhKbSAMfF0QB5VufgQ8N/FH54MIo3VJCUG11YPNd/qC7ghrj5JSHv+9bVLJlP1' BUCKET_NAME = "ioc1980" nom_arxiu = 'imatge.jpg' s3 = boto3.client( 's3', aws_access_key_id=aws_access_key_id, aws_secret_access_key=aws_secret_access_key, aws_session_token=aws_session_token, region_name='us-east-1' ) rekognition = boto3.client( 'rekognition', aws_access_key_id=aws_access_key_id, aws_secret_access_key=aws_secret_access_key, aws_session_token=aws_session_token, region_name='us-east-1' ) def analitzar_imatge(imatge): # Pujar la imatge a S3 s3.upload_file(imatge, BUCKET_NAME, nom_arxiu) # Analitzar la imatge amb Rekognition response = rekognition.detect_faces( Image={ 'S3Object':{ 'Bucket':BUCKET_NAME, 'Name':nom_arxiu } }, Attributes=['ALL']) # Descarrega la imatge per dibuixar image_file = s3.get_object(Bucket=BUCKET_NAME, Key=nom_arxiu) image_bytes = image_file['Body'].read() image = Image.open(BytesIO(image_bytes)) # Crear un objecte ImageDraw draw = ImageDraw.Draw(image) # Processar els resultats i dibuixar les capses resultats = [] for i, face in enumerate(response['FaceDetails'], 1): # Obtenir informació de cada cara resultats.append(f"\nCara {i}:") resultats.append(f" Edat: {face['AgeRange']['Low']}-{face['AgeRange']['High']} anys") resultats.append(f" Gènere: {face['Gender']['Value']}") resultats.append(f" Emoció: {max(face['Emotions'], key=lambda x: x['Confidence'])['Type']}") # Obtenir les coordenades de la caixa delimitadora bounding_box = face["BoundingBox"] left = int(bounding_box["Left"] * image.width) top = int(bounding_box["Top"] * image.height) width = int(bounding_box["Width"] * image.width) height = int(bounding_box["Height"] * image.height) # Dibuixar el quadre delimitador i l'etiqueta draw.rectangle([left, top, left + width, top + height], outline="red", width=2) draw.text((left, top - 25), f"Cara {i}", fill="red") # Eliminar la imatge de S3 després de l'anàlisi s3.delete_object(Bucket=BUCKET_NAME, Key=nom_arxiu) return "\n".join(resultats) if resultats else "No s'han detectat cares a la imatge.", image # Crear la interfície amb Gradio Blocks with gr.Blocks() as demo: gr.Markdown("# Anàlisi de cares amb Amazon Rekognition") # Definim un bloc de columna per al layout de la interfície with gr.Row(): with gr.Column(): imatge_input = gr.Image(type='filepath', label="Puja una imatge") with gr.Column(): resultats_text = gr.Textbox(label="Resultats") # Imatge de sortida amb capses dibuixades imatge_output = gr.Image(label="Imatge processada") # Defineix què passa automàticament quan l'usuari puja una imatge imatge_input.change(fn=analitzar_imatge, inputs=imatge_input, outputs=[resultats_text, imatge_output]) # Executar l'aplicació demo.launch()