import streamlit as st from transformers import pipeline from PIL import Image import pandas as pd from huggingface_hub import login MIN_ACEPTABLE_SCORE = 0.1 MAX_N_LABELS = 3 import os HF_TOKEN = os.environ.get("HF_TOKEN") if HF_TOKEN: login(token=HF_TOKEN) TRANSLATIONS = { "en-uk": { "title": "Image Classification - Compare All Models", "description": "🧪 Run **all** Hugging Face image classification models on a single image and compare results in an interactive table.", "upload": "Upload Image", "run_button": "Run All Models", "results": "Results", "download": "Download CSV", "columns": { "Model": "Model", "Category": "Category", "Label 1": "Label 1", "Score 1": "Score 1", "Label 2": "Label 2", "Score 2": "Score 2", "Label 3": "Label 3", "Score 3": "Score 3", }, "lang_name": "English" }, "pt-pt": { "title": "Classificação de Imagens - Compara Todos os Modelos", "description": "🧪 Executa **todos os modelos** de classificação de imagens do Hugging Face numa só imagem e compara os resultados numa tabela interativa.", "upload": "Carregar Imagem", "run_button": "Executar Todos os Modelos", "results": "Resultados", "download": "Descarregar CSV", "columns": { "Model": "Modelo", "Category": "Categoria", "Label 1": "Label 1", "Score 1": "Score 1", "Label 2": "Label 2", "Score 2": "Score 2", "Label 3": "Label 3", "Score 3": "Score 3", }, "lang_name": "Português (PT)" }, "pt-br": { "title": "Classificação de Imagens - Compare Todos os Modelos", "description": "🧪 Execute **todos os modelos** de classificação de imagens do Hugging Face em uma única imagem e compare os resultados em uma tabela interativa.", "upload": "Carregar Imagem", "run_button": "Executar Todos os Modelos", "results": "Resultados", "download": "Baixar CSV", "columns": { "Model": "Modelo", "Category": "Categoria", "Label 1": "Label 1", "Score 1": "Score 1", "Label 2": "Label 2", "Score 2": "Score 2", "Label 3": "Label 3", "Score 3": "Score 3", }, "lang_name": "Português (BR)" }, "zh-cn": { "title": "图像分类 - 比较所有模型", "description": "🧪 在单张图像上运行**所有**Hugging Face图像分类模型,并在交互式表格中比较结果。", "upload": "上传图片", "run_button": "运行所有模型", "results": "结果", "download": "下载CSV", "columns": { "Model": "模型", "Category": "类别", "Label 1": "标签1", "Score 1": "分数1", "Label 2": "标签2", "Score 2": "分数2", "Label 3": "标签3", "Score 3": "分数3", }, "lang_name": "中文" }, "hi": { "title": "छवि वर्गीकरण - सभी मॉडल की तुलना करें", "description": "🧪 एक ही छवि पर **सभी** Hugging Face छवि वर्गीकरण मॉडल चलाएं और परिणामों की एक इंटरैक्टिव टेबल में तुलना करें।", "upload": "छवि अपलोड करें", "run_button": "सभी मॉडल चलाएं", "results": "परिणाम", "download": "CSV डाउनलोड करें", "columns": { "Model": "मॉडल", "Category": "श्रेणी", "Label 1": "लेबल 1", "Score 1": "स्कोर 1", "Label 2": "लेबल 2", "Score 2": "स्कोर 2", "Label 3": "लेबल 3", "Score 3": "स्कोर 3", }, "lang_name": "हिन्दी" }, "es": { "title": "Clasificación de Imágenes - Compara Todos los Modelos", "description": "🧪 Ejecuta **todos** los modelos de clasificación de imágenes de Hugging Face en una sola imagen y compara los resultados en una tabla interactiva.", "upload": "Subir Imagen", "run_button": "Ejecutar Todos los Modelos", "results": "Resultados", "download": "Descargar CSV", "columns": { "Model": "Modelo", "Category": "Categoría", "Label 1": "Etiqueta 1", "Score 1": "Puntuación 1", "Label 2": "Etiqueta 2", "Score 2": "Puntuación 2", "Label 3": "Etiqueta 3", "Score 3": "Puntuación 3", }, "lang_name": "Español" }, "ar": { "title": "تصنيف الصور - قارن جميع النماذج", "description": "🧪 شغّل **جميع** نماذج تصنيف صور Hugging Face على صورة واحدة وقارن النتائج في جدول تفاعلي.", "upload": "تحميل صورة", "run_button": "تشغيل جميع النماذج", "results": "النتائج", "download": "تحميل CSV", "columns": { "Model": "النموذج", "Category": "الفئة", "Label 1": "التسمية 1", "Score 1": "النتيجة 1", "Label 2": "التسمية 2", "Score 2": "النتيجة 2", "Label 3": "التسمية 3", "Score 3": "النتيجة 3", }, "lang_name": "العربية" }, "fr": { "title": "Classification d'Images - Comparer Tous les Modèles", "description": "🧪 Exécutez **tous** les modèles de classification d'images Hugging Face sur une seule image et comparez les résultats dans un tableau interactif.", "upload": "Télécharger une Image", "run_button": "Exécuter Tous les Modèles", "results": "Résultats", "download": "Télécharger CSV", "columns": { "Model": "Modèle", "Category": "Catégorie", "Label 1": "Étiquette 1", "Score 1": "Score 1", "Label 2": "Étiquette 2", "Score 2": "Score 2", "Label 3": "Étiquette 3", "Score 3": "Score 3", }, "lang_name": "Français" }, "bn": { "title": "ছবি শ্রেণীবিভাগ - সব মডেল তুলনা করুন", "description": "🧪 একটি একক ছবিতে **সমস্ত** Hugging Face ছবি শ্রেণীবিভাগ মডেল চালান এবং একটি ইন্টারেক্টিভ টেবিলে ফলাফল তুলনা করুন।", "upload": "ছবি আপলোড করুন", "run_button": "সব মডেল চালান", "results": "ফলাফল", "download": "CSV ডাউনলোড করুন", "columns": { "Model": "মডেল", "Category": "বিভাগ", "Label 1": "লেবেল 1", "Score 1": "স্কোর 1", "Label 2": "লেবেল 2", "Score 2": "স্কোর 2", "Label 3": "লেবেল 3", "Score 3": "স্কোর 3", }, "lang_name": "বাংলা" }, "ru": { "title": "Классификация изображений - Сравните все модели", "description": "🧪 Запустите **все** модели классификации изображений Hugging Face на одном изображении и сравните результаты в интерактивной таблице.", "upload": "Загрузить изображение", "run_button": "Запустить все модели", "results": "Результаты", "download": "Скачать CSV", "columns": { "Model": "Модель", "Category": "Категория", "Label 1": "Метка 1", "Score 1": "Оценка 1", "Label 2": "Метка 2", "Score 2": "Оценка 2", "Label 3": "Метка 3", "Score 3": "Оценка 3", }, "lang_name": "Русский" }, "id": { "title": "Klasifikasi Gambar - Bandingkan Semua Model", "description": "🧪 Jalankan **semua** model klasifikasi gambar Hugging Face pada satu gambar dan bandingkan hasilnya dalam tabel interaktif.", "upload": "Unggah Gambar", "run_button": "Jalankan Semua Model", "results": "Hasil", "download": "Unduh CSV", "columns": { "Model": "Model", "Category": "Kategori", "Label 1": "Label 1", "Score 1": "Skor 1", "Label 2": "Label 2", "Score 2": "Skor 2", "Label 3": "Label 3", "Score 3": "Skor 3", }, "lang_name": "Bahasa Indonesia" }, "de": { "title": "Bildklassifizierung - Alle Modelle vergleichen", "description": "🧪 Führen Sie **alle** Hugging Face Bildklassifizierungsmodelle auf einem einzigen Bild aus und vergleichen Sie die Ergebnisse in einer interaktiven Tabelle.", "upload": "Bild hochladen", "run_button": "Alle Modelle ausführen", "results": "Ergebnisse", "download": "CSV herunterladen", "columns": { "Model": "Modell", "Category": "Kategorie", "Label 1": "Label 1", "Score 1": "Bewertung 1", "Label 2": "Label 2", "Score 2": "Bewertung 2", "Label 3": "Label 3", "Score 3": "Bewertung 3", }, "lang_name": "Deutsch" }, "nl": { "title": "Afbeeldingsclassificatie - Vergelijk Alle Modellen", "description": "🧪 Voer **alle** Hugging Face-afbeeldingsclassificatiemodellen uit op één enkele afbeelding en vergelijk de resultaten in een interactieve tabel.", "upload": "Afbeelding uploaden", "run_button": "Alle modellen uitvoeren", "results": "Resultaten", "download": "CSV downloaden", "columns": { "Model": "Model", "Category": "Categorie", "Label 1": "Label 1", "Score 1": "Score 1", "Label 2": "Label 2", "Score 2": "Score 2", "Label 3": "Label 3", "Score 3": "Score 3", }, "lang_name": "Nederlands" }, "it": { "title": "Classificazione Immagini - Confronta Tutti i Modelli", "description": "🧪 Esegui **tutti** i modelli di classificazione immagini Hugging Face su una singola immagine e confronta i risultati in una tabella interattiva.", "upload": "Carica Immagine", "run_button": "Esegui Tutti i Modelli", "results": "Risultati", "download": "Scarica CSV", "columns": { "Model": "Modello", "Category": "Categoria", "Label 1": "Etichetta 1", "Score 1": "Punteggio 1", "Label 2": "Etichetta 2", "Score 2": "Punteggio 2", "Label 3": "Etichetta 3", "Score 3": "Punteggio 3", }, "lang_name": "Italiano" }, "pl": { "title": "Klasyfikacja Obrazów - Porównaj Wszystkie Modele", "description": "🧪 Uruchom **wszystkie** modele klasyfikacji obrazów Hugging Face na jednym obrazie i porównaj wyniki w tabeli interaktywnej.", "upload": "Prześlij obraz", "run_button": "Uruchom wszystkie modele", "results": "Wyniki", "download": "Pobierz CSV", "columns": { "Model": "Model", "Category": "Kategoria", "Label 1": "Etykieta 1", "Score 1": "Wynik 1", "Label 2": "Etykieta 2", "Score 2": "Wynik 2", "Label 3": "Etykieta 3", "Score 3": "Wynik 3", }, "lang_name": "Polski" }, "ro": { "title": "Clasificarea Imaginilor - Compară Toate Modelele", "description": "🧪 Rulează **toate** modelele de clasificare a imaginilor Hugging Face pe o singură imagine și compară rezultatele într-un tabel interactiv.", "upload": "Încărcați imaginea", "run_button": "Rulează toate modelele", "results": "Rezultate", "download": "Descarcă CSV", "columns": { "Model": "Model", "Category": "Categorie", "Label 1": "Etichetă 1", "Score 1": "Scor 1", "Label 2": "Etichetă 2", "Score 2": "Scor 2", "Label 3": "Etichetă 3", "Score 3": "Scor 3", }, "lang_name": "Română" }, "hu": { "title": "Képbesorolás - Összes Modell Összehasonlítása", "description": "🧪 Futtassa **összes** Hugging Face képosztályozási modellt egyetlen képen, és hasonlítsa össze az eredményeket egy interaktív táblázatban.", "upload": "Kép feltöltése", "run_button": "Összes modell futtatása", "results": "Eredmények", "download": "CSV letöltése", "columns": { "Model": "Modell", "Category": "Kategoria", "Label 1": "Címke 1", "Score 1": "Pontszám 1", "Label 2": "Címke 2", "Score 2": "Pontszám 2", "Label 3": "Címke 3", "Score 3": "Pontszám 3", }, "lang_name": "Magyar" }, "cs": { "title": "Klasifikace obrázků - Porovnejte všechny modely", "description": "🧪 Spusťte **všechny** modely klasifikace obrázků Hugging Face na jednom obrázku a porovnejte výsledky v interaktivní tabulce.", "upload": "Nahrát obrázek", "run_button": "Spustit všechny modely", "results": "Výsledky", "download": "Stáhnout CSV", "columns": { "Model": "Model", "Category": "Kategorie", "Label 1": "Štítek 1", "Score 1": "Skóre 1", "Label 2": "Štítek 2", "Score 2": "Skóre 2", "Label 3": "Štítek 3", "Score 3": "Skóre 3", }, "lang_name": "Čeština" }, "sk": { "title": "Klasifikácia obrázkov - Porovnajte všetky modely", "description": "🧪 Spustite **všetky** modely klasifikácie obrázkov Hugging Face na jednom obrázku a porovnajte výsledky v interaktívnej tabuľke.", "upload": "Nahrať obrázok", "run_button": "Spustiť všetky modely", "results": "Výsledky", "download": "Stiahnuť CSV", "columns": { "Model": "Model", "Category": "Kategória", "Label 1": "Štítok 1", "Score 1": "Skóre 1", "Label 2": "Štítok 2", "Score 2": "Skóre 2", "Label 3": "Štítok 3", "Score 3": "Skóre 3", }, "lang_name": "Slovenčina" }, "sl": { "title": "Klasifikacija slik - Primerjajte vse modele", "description": "🧪 Zaženite **vse** modele klasifikacije slik Hugging Face na eni sliki in primerjajte rezultate v interaktivni tabeli.", "upload": "Naloži sliko", "run_button": "Zaženi vse modele", "results": "Rezultati", "download": "Prenesi CSV", "columns": { "Model": "Model", "Category": "Kategorije", "Label 1": "Oznaka 1", "Score 1": "Točke 1", "Label 2": "Oznaka 2", "Score 2": "Točke 2", "Label 3": "Oznaka 3", "Score 3": "Točke 3", }, "lang_name": "Slovenščina" }, "da": { "title": "Billedklassifikation - Sammenlign Alle Modeller", "description": "🧪 Kør **alle** Hugging Face billedklassifikationsmodeller på et enkelt billede og sammenlign resultaterne i en interaktiv tabel.", "upload": "Upload billede", "run_button": "Kør alle modeller", "results": "Resultater", "download": "Download CSV", "columns": { "Model": "Model", "Category": "Kategori", "Label 1": "Etiket 1", "Score 1": "Point 1", "Label 2": "Etiket 2", "Score 2": "Point 2", "Label 3": "Etiket 3", "Score 3": "Point 3", }, "lang_name": "Dansk" }, "sv": { "title": "Bildklassificering - Jämför Alla Modeller", "description": "🧪 Kör **alla** Hugging Face bildklassificeringsmodeller på en enda bild och jämför resultaten i en interaktiv tabell.", "upload": "Ladda upp bild", "run_button": "Kör alla modeller", "results": "Resultat", "download": "Ladda ner CSV", "columns": { "Model": "Modell", "Category": "Kategori", "Label 1": "Etikett 1", "Score 1": "Poäng 1", "Label 2": "Etikett 2", "Score 2": "Poäng 2", "Label 3": "Etikett 3", "Score 3": "Poäng 3", }, "lang_name": "Svenska" }, "fi": { "title": "Kuvaluokittelu - Vertaa Kaikkia Malleja", "description": "🧪 Suorita **kaikki** Hugging Face -kuvaluokittelumallit yhdellä kuvalla ja vertaa tuloksia vuorovaikutteisessa taulukossa.", "upload": "Lataa kuva", "run_button": "Suorita kaikki mallit", "results": "Tulokset", "download": "Lataa CSV", "columns": { "Model": "Malli", "Category": "Luokka", "Label 1": "Tunniste 1", "Score 1": "Pisteet 1", "Label 2": "Tunniste 2", "Score 2": "Pisteet 2", "Label 3": "Tunniste 3", "Score 3": "Pisteet 3", }, "lang_name": "Suomi" }, "el": { "title": "Ταξινόμηση Εικόνων - Σύγκριση Όλων των Μοντέλων", "description": "🧪 Εκτελέστε **όλα** τα μοντέλα ταξινόμησης εικόνων του Hugging Face σε μία εικόνα και συγκρίνετε τα αποτελέσματα σε έναν διαδραστικό πίνακα.", "upload": "Μεταφόρτωση εικόνας", "run_button": "Εκτέλεση όλων των μοντέλων", "results": "Αποτελέσματα", "download": "Λήψη CSV", "columns": { "Model": "Μοντέλο", "Category": "Κατηγορία", "Label 1": "Ετικέτα 1", "Score 1": "Βαθμολογία 1", "Label 2": "Ετικέτα 2", "Score 2": "Βαθμολογία 2", "Label 3": "Ετικέτα 3", "Score 3": "Βαθμολογία 3", }, "lang_name": "Ελληνικά" }, "bg": { "title": "Класификация на изображения - Сравнете всички модели", "description": "🧪 Стартирайте **всички** модели за класификация на изображения от Hugging Face на едно изображение и сравнете резултатите в интерактивна таблица.", "upload": "Качете изображение", "run_button": "Стартирайте всички модели", "results": "Резултати", "download": "Изтеглете CSV", "columns": { "Model": "Модел", "Category": "Категория", "Label 1": "Етикет 1", "Score 1": "Резултат 1", "Label 2": "Етикет 2", "Score 2": "Резултат 2", "Label 3": "Етикет 3", "Score 3": "Резултат 3", }, "lang_name": "Български" }, "lv": { "title": "Attēlu klasifikācija - Salīdziniet visus modeļus", "description": "🧪 Palaidiet **visus** Hugging Face attēlu klasifikācijas modeļus uz viena attēla un salīdziniet rezultātus interaktīvā tabulā.", "upload": "Augšupielādēt attēlu", "run_button": "Palaist visus modeļus", "results": "Rezultāti", "download": "Lejupielādēt CSV", "columns": { "Model": "Modelis", "Category": "Kategorijas", "Label 1": "Etiķete 1", "Score 1": "Rezultāts 1", "Label 2": "Etiķete 2", "Score 2": "Rezultāts 2", "Label 3": "Etiķete 3", "Score 3": "Rezultāts 3", }, "lang_name": "Latviešu" }, "lt": { "title": "Vaizdų klasifikavimas - Palyginkite visus modelius", "description": "🧪 Paleiskite **visus** Hugging Face vaizdų klasifikavimo modelius vienoje nuotraukoje ir palyginkite rezultatus interaktyvioje lentelėje.", "upload": "Įkelti vaizdą", "run_button": "Paleisti visus modelius", "results": "Rezultatai", "download": "Atsisiųsti CSV", "columns": { "Model": "Modelis", "Category": "Kategorijos", "Label 1": "Etiketė 1", "Score 1": "Rezultatas 1", "Label 2": "Etiketė 2", "Score 2": "Rezultatas 2", "Label 3": "Etiketė 3", "Score 3": "Rezultatas 3", }, "lang_name": "Lietuvių" }, "et": { "title": "Pildiklassifikatsioon - Võrdle kõiki mudeleid", "description": "🧪 Käivitage **kõik** Hugging Face pildiklassifikatsiooni mudelid ühel pildil ja võrrelge tulemusi interaktiivses tabelis.", "upload": "Laadi pilt üles", "run_button": "Käivita kõik mudelid", "results": "Tulemused", "download": "Laadi CSV alla", "columns": { "Model": "Mudel", "Category": "Kategooria", "Label 1": "Silt 1", "Score 1": "Skoor 1", "Label 2": "Silt 2", "Score 2": "Skoor 2", "Label 3": "Silt 3", "Score 3": "Skoor 3", }, "lang_name": "Eesti" }, "ga": { "title": "Rangú Imagacha - Déan Comparáid idir na Samhlaithe go léir", "description": "🧪 Rith **gach** samhail rangaithe imeagacha Hugging Face ar aon íomhá amháin agus déan comparáid ar thorthaí i dtábla idirghníomhach.", "upload": "Uaslódáil Íomhá", "run_button": "Rith gach Samhail", "results": "Torthaí", "download": "Íosluchtaigh CSV", "columns": { "Model": "Samhail", "Category": "Catagóir", "Label 1": "Lipéad 1", "Score 1": "Scór 1", "Label 2": "Lipéad 2", "Score 2": "Scór 2", "Label 3": "Lipéad 3", "Score 3": "Scór 3", }, "lang_name": "Gaeilge" }, "mt": { "title": "Klassifikazzjoni tal-Immaġnijiet - Qabbel il-Mudelli kollha", "description": "🧪 ŻRuns **il-mudelli kollha** ta' klassifikazzjoni tal-immaġnijiet ta' Hugging Face fuq immaġni waħda u qabbel ir-rizultati f'tabella interattiva.", "upload": "Upload Image", "run_button": "Run All Models", "results": "Risultati", "download": "Download CSV", "columns": { "Model": "Mudell", "Category": "Kategoriji", "Label 1": "Tikketta 1", "Score 1": "Punteġġ 1", "Label 2": "Tikketta 2", "Score 2": "Punteġġ 2", "Label 3": "Tikketta 3", "Score 3": "Punteġġ 3", }, "lang_name": "Malti" }, "hr": { "title": "Klasifikacija slika - Usporedite sve modele", "description": "🧪 Pokrenite **sve** modele klasifikacije slika Hugging Face na jednoj slici i usporedite rezultate u interaktivnoj tablici.", "upload": "Prenesi sliku", "run_button": "Pokreni sve modele", "results": "Rezultati", "download": "Preuzmi CSV", "columns": { "Model": "Model", "Category": "Kategorije", "Label 1": "Oznaka 1", "Score 1": "Rezultat 1", "Label 2": "Oznaka 2", "Score 2": "Rezultat 2", "Label 3": "Oznaka 3", "Score 3": "Rezultat 3", }, "lang_name": "Hrvatski" }, } lang = st.selectbox("Language / Idioma", list(TRANSLATIONS.keys()), format_func=lambda x: TRANSLATIONS[x]["lang_name"]) t = TRANSLATIONS[lang] MODELS = [ ("google/vit-base-patch16-224", "General Image Classification"), ("microsoft/resnet-50", "General Image Classification"), ("microsoft/resnet-18", "General Image Classification"), ("microsoft/resnet-34", "General Image Classification"), ("microsoft/resnet-101", "General Image Classification"), ("microsoft/swin-tiny-patch4-window7-224", "General Image Classification"), ("microsoft/swinv2-base-patch4-window16-256", "General Image Classification"), ("facebook/convnext-large-224", "General Image Classification"), ("facebook/convnext-base-224-22k-1k", "General Image Classification"), ("facebook/convnext-tiny-224", "General Image Classification"), ("timm/resnet50.a1_in1k", "General Image Classification"), ("timm/tf_efficientnetv2_s.in21k", "General Image Classification"), ("timm/convnext_tiny.fb_in22k", "General Image Classification"), ("google/vit-base-patch16-224-in21k", "General Image Classification"), ("facebook/deit-base-distilled-patch16-224", "General Image Classification"), ("WinKawaks/vit-tiny-patch16-224", "General Image Classification"), ("nateraw/vit-age-classifier", "Age Classification"), ("Falconsai/nsfw_image_detection", "NSFW Detection"), ("carbon225/vit-base-patch16-224-hentai", "NSFW Detection"), ("cafeai/cafe_aesthetic", "Aesthetic/Art Classification"), ("trpakov/vit-face-expression", "Face/Emotion Classification"), ("RickyIG/emotion_face_image_classification", "Face/Emotion Classification"), ("rizvandwiki/gender-classification", "Face/Emotion Classification"), ("Ateeqq/ai-vs-human-image-detector", "AI vs Human Detection"), ("umm-maybe/AI-image-detector", "AI vs Human Detection"), ("DunnBC22/vit-base-patch16-224-in21k_Human_Activity_Recognition", "Human Activity Recognition"), ("andupets/real-estate-image-classification", "Real Estate"), ("lamnt2008/car_brands_classification", "Car Classification"), ("docling-project/DocumentFigureClassifier-v2.5", "Document Classification"), ("timm/efficientnet_b0.ra_in1k", "EfficientNet"), ("timm/mobilenetv3_large_100.ra_in1k", "EfficientNet"), ("timm/mobilenetv3_small_100.lamb_in1k", "EfficientNet"), ] def classify(image, model_name): classifier = pipeline("image-classification", model=model_name) result = classifier(image) return result def format_results(results): formatted = [] for r in results[:MAX_N_LABELS]: if r['score'] >= MIN_ACEPTABLE_SCORE: formatted.append({ "label": r['label'], "score": f"{r['score']:.2%}" }) while len(formatted) < 3: formatted.append({"label": "-", "score": "-"}) return formatted def main(): st.title(t["title"]) st.markdown(t["description"]) bmc_link = "https://www.buymeacoffee.com/nuno.tome" image_url = "https://i.giphy.com/RETzc1mj7HpZPuNf3e.webp" image_link_markdown = f"[![Buy Me a Coffee]({image_url})]({bmc_link})" st.markdown(image_link_markdown, unsafe_allow_html=True) input_image = st.file_uploader(t["upload"]) if input_image is not None: image_to_classify = Image.open(input_image) st.image(image_to_classify, caption="Uploaded Image", use_column_width=True) if st.button(t["run_button"], type="primary"): results_data = [] progress_bar = st.progress(0) status_text = st.empty() for i, (model_name, category) in enumerate(MODELS): status_text.text(f"Running model {i+1}/{len(MODELS)}: {model_name}") try: classification_result = classify(image_to_classify, model_name) formatted = format_results(classification_result) results_data.append({ "Model": model_name, "Category": category, "Label 1": formatted[0]["label"], "Score 1": formatted[0]["score"], "Label 2": formatted[1]["label"], "Score 2": formatted[1]["score"], "Label 3": formatted[2]["label"], "Score 3": formatted[2]["score"], }) except Exception as e: results_data.append({ "Model": model_name, "Category": category, "Label 1": f"Error: {str(e)[:50]}", "Score 1": "-", "Label 2": "-", "Score 2": "-", "Label 3": "-", "Score 3": "-", }) progress_bar.progress((i + 1) / len(MODELS)) status_text.text("Done!") if results_data: df = pd.DataFrame(results_data) df = df.rename(columns=t["columns"]) st.subheader(f"{t['results']} ({len(results_data)} models)") st.markdown(""" """, unsafe_allow_html=True) st.dataframe( df, use_container_width=True, hide_index=True, column_config={ t["columns"]["Model"]: st.column_config.TextColumn(t["columns"]["Model"], width="medium"), t["columns"]["Category"]: st.column_config.TextColumn(t["columns"]["Category"], width="small"), t["columns"]["Label 1"]: st.column_config.TextColumn(t["columns"]["Label 1"], width="medium"), t["columns"]["Score 1"]: st.column_config.TextColumn(t["columns"]["Score 1"], width="small"), t["columns"]["Label 2"]: st.column_config.TextColumn(t["columns"]["Label 2"], width="medium"), t["columns"]["Score 2"]: st.column_config.TextColumn(t["columns"]["Score 2"], width="small"), t["columns"]["Label 3"]: st.column_config.TextColumn(t["columns"]["Label 3"], width="medium"), t["columns"]["Score 3"]: st.column_config.TextColumn(t["columns"]["Score 3"], width="small"), } ) csv = df.to_csv(index=False).encode('utf-8') st.download_button( t["download"], csv, "classification_results.csv", "text/csv", key='download-csv' ) if __name__ == "__main__": main()