Spaces:
Sleeping
Sleeping
| # app.py — versão FINAL, FUNCIONAL e PRECISA | |
| from transformers import pipeline | |
| from PIL import Image | |
| import gradio as gr | |
| # ✅ Modelo real e disponível: CLIP | |
| classifier = pipeline("zero-shot-image-classification", model="openai/clip-vit-base-patch32") | |
| # Defina os rótulos em português (você controla!) | |
| candidate_labels = [ | |
| "uma foto de uma sala de estar", | |
| "uma foto de um quarto", | |
| "uma foto de uma cozinha", | |
| "uma foto de um banheiro", | |
| "uma foto de um escritório", | |
| "uma foto de uma sala de jantar", | |
| "uma foto de um corredor", | |
| "uma foto de um closet", | |
| "uma foto de uma garagem", | |
| "uma foto de uma varanda", | |
| ] | |
| # Mapeamento para nomes curtos em PT-BR | |
| label_map = { | |
| "uma foto de uma sala de estar": "Sala de estar", | |
| "uma foto de um quarto": "Quarto", | |
| "uma foto de uma cozinha": "Cozinha", | |
| "uma foto de um banheiro": "Banheiro", | |
| "uma foto de um escritório": "Escritório", | |
| "uma foto de uma sala de jantar": "Sala de jantar", | |
| "uma foto de um corredor": "Corredor", | |
| "uma foto de um closet": "Closet", | |
| "uma foto de uma garagem": "Garagem", | |
| "uma foto de uma varanda": "Varanda", | |
| } | |
| def classify_room(image): | |
| """Classifica o tipo de cômodo usando CLIP (zero-shot).""" | |
| if image is None: | |
| return "Nenhuma imagem fornecida", 0.0 | |
| # CLIP espera PIL Image | |
| results = classifier(image, candidate_labels=candidate_labels, multi_label=False) | |
| # Pega o top-1 | |
| top_result = results[0] | |
| label_en = top_result['label'] | |
| confidence = top_result['score'] | |
| label_pt = label_map.get(label_en, label_en) | |
| return label_pt, confidence | |
| # Interface Gradio | |
| demo = gr.Interface( | |
| fn=classify_room, | |
| inputs=gr.Image(type="pil", label="Envie uma foto do cômodo"), | |
| outputs=[ | |
| gr.Textbox(label="Tipo de Cômodo Detectado"), | |
| gr.Number(label="Confiança", precision=4) | |
| ], | |
| title="🔍 Detector de Cômodos com CLIP (Zero-Shot)", | |
| description="Precisão muito melhorada — compara sua imagem com descrições em português.", | |
| # examples=[ | |
| # ["https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/bedroom.jpg"], | |
| # ["https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/living_room.jpg"] | |
| # ] | |
| ) | |
| if __name__ == "__main__": | |
| demo.launch() |