spML commited on
Commit
f516bd0
verified
1 Parent(s): 2931d21

Upload 4 files

Browse files
Files changed (4) hide show
  1. .gitattributes +2 -35
  2. README.md +26 -6
  3. app.py +67 -0
  4. requirements.txt +8 -0
.gitattributes CHANGED
@@ -1,35 +1,2 @@
1
- *.7z filter=lfs diff=lfs merge=lfs -text
2
- *.arrow filter=lfs diff=lfs merge=lfs -text
3
- *.bin filter=lfs diff=lfs merge=lfs -text
4
- *.bz2 filter=lfs diff=lfs merge=lfs -text
5
- *.ckpt filter=lfs diff=lfs merge=lfs -text
6
- *.ftz filter=lfs diff=lfs merge=lfs -text
7
- *.gz filter=lfs diff=lfs merge=lfs -text
8
- *.h5 filter=lfs diff=lfs merge=lfs -text
9
- *.joblib filter=lfs diff=lfs merge=lfs -text
10
- *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
- *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
- *.model filter=lfs diff=lfs merge=lfs -text
13
- *.msgpack filter=lfs diff=lfs merge=lfs -text
14
- *.npy filter=lfs diff=lfs merge=lfs -text
15
- *.npz filter=lfs diff=lfs merge=lfs -text
16
- *.onnx filter=lfs diff=lfs merge=lfs -text
17
- *.ot filter=lfs diff=lfs merge=lfs -text
18
- *.parquet filter=lfs diff=lfs merge=lfs -text
19
- *.pb filter=lfs diff=lfs merge=lfs -text
20
- *.pickle filter=lfs diff=lfs merge=lfs -text
21
- *.pkl filter=lfs diff=lfs merge=lfs -text
22
- *.pt filter=lfs diff=lfs merge=lfs -text
23
- *.pth filter=lfs diff=lfs merge=lfs -text
24
- *.rar filter=lfs diff=lfs merge=lfs -text
25
- *.safetensors filter=lfs diff=lfs merge=lfs -text
26
- saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
- *.tar.* filter=lfs diff=lfs merge=lfs -text
28
- *.tar filter=lfs diff=lfs merge=lfs -text
29
- *.tflite filter=lfs diff=lfs merge=lfs -text
30
- *.tgz filter=lfs diff=lfs merge=lfs -text
31
- *.wasm filter=lfs diff=lfs merge=lfs -text
32
- *.xz filter=lfs diff=lfs merge=lfs -text
33
- *.zip filter=lfs diff=lfs merge=lfs -text
34
- *.zst filter=lfs diff=lfs merge=lfs -text
35
- *tfevents* filter=lfs diff=lfs merge=lfs -text
 
1
+
2
+ * text=auto eol=lf
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
README.md CHANGED
@@ -1,12 +1,32 @@
 
1
  ---
2
- title: Vision Classifier
3
- emoji: 馃
4
- colorFrom: gray
5
- colorTo: purple
6
  sdk: gradio
7
- sdk_version: 5.47.2
8
  app_file: app.py
9
  pinned: false
 
10
  ---
11
 
12
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
  ---
3
+ title: Simple Vision Classifier (ViT)
4
+ emoji: 馃惣
5
+ colorFrom: green
6
+ colorTo: blue
7
  sdk: gradio
8
+ sdk_version: 4
9
  app_file: app.py
10
  pinned: false
11
+ python_version: 3.10
12
  ---
13
 
14
+ # 馃惣 Simple Image Classifier (ViT)
15
+
16
+ Este Space demuestra un **clasificador de im谩genes** con modelos del Hub (ViT/DeiT/ResNet) usando `transformers` + `gradio`.
17
+
18
+ ## 馃殌 C贸mo usarlo (local)
19
+
20
+ ```bash
21
+ pip install -r requirements.txt
22
+ python app.py
23
+ ```
24
+
25
+ ## 馃敡 Cambiar el modelo
26
+ En la UI hay un desplegable con modelos populares:
27
+
28
+ - `google/vit-base-patch16-224`
29
+ - `facebook/deit-base-patch16-224`
30
+ - `microsoft/resnet-50`
31
+
32
+ Puedes a帽adir m谩s en `MODEL_OPTIONS` dentro de `app.py`.
app.py ADDED
@@ -0,0 +1,67 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ import gradio as gr
3
+ from PIL import Image
4
+ from transformers import pipeline
5
+ import torch
6
+
7
+ DESCRIPTION = """
8
+ # 馃惣 Simple Image Classifier (ViT)
9
+ Sube una imagen y el modelo devuelve las **probabilidades top鈥慿** de las clases.
10
+ Puedes elegir distintos modelos del Hub (cargados autom谩ticamente).
11
+ """
12
+
13
+ DEFAULT_MODEL = "google/vit-base-patch16-224"
14
+ MODEL_OPTIONS = [
15
+ "google/vit-base-patch16-224",
16
+ "facebook/deit-base-patch16-224",
17
+ "microsoft/resnet-50",
18
+ ]
19
+
20
+ # Cache del pipeline para no recargar al cambiar par谩metros que no sean el modelo
21
+ _pipes = {}
22
+
23
+ def get_pipe(model_id: str):
24
+ if model_id not in _pipes:
25
+ # device map sencillo: usa GPU si est谩 disponible
26
+ device = 0 if torch.cuda.is_available() else -1
27
+ _pipes[model_id] = pipeline(
28
+ task="image-classification",
29
+ model=model_id,
30
+ device=device
31
+ )
32
+ return _pipes[model_id]
33
+
34
+ def classify(image: Image.Image, model_id: str, top_k: int):
35
+ if image is None:
36
+ return []
37
+ pipe = get_pipe(model_id)
38
+ # Asegurar modo RGB
39
+ image = image.convert("RGB")
40
+ preds = pipe(image, top_k=top_k)
41
+ # Normalizamos a una tabla [(label, score)]
42
+ rows = [(p["label"], float(p["score"])) for p in preds]
43
+ return rows
44
+
45
+ with gr.Blocks() as demo:
46
+ gr.Markdown(DESCRIPTION)
47
+ with gr.Row():
48
+ with gr.Column(scale=2):
49
+ image = gr.Image(type="pil", label="Imagen de entrada")
50
+ with gr.Row():
51
+ model_id = gr.Dropdown(
52
+ choices=MODEL_OPTIONS,
53
+ value=DEFAULT_MODEL,
54
+ label="Modelo"
55
+ )
56
+ top_k = gr.Slider(1, 10, value=5, step=1, label="Top鈥慘")
57
+ btn = gr.Button("Clasificar")
58
+ with gr.Column(scale=1):
59
+ output = gr.Dataframe(
60
+ headers=["label", "score"],
61
+ datatype=["str", "number"],
62
+ label="Resultados"
63
+ )
64
+ btn.click(fn=classify, inputs=[image, model_id, top_k], outputs=output)
65
+
66
+ if __name__ == "__main__":
67
+ demo.launch()
requirements.txt ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+
2
+ gradio
3
+ transformers
4
+ torch
5
+ timm
6
+ Pillow
7
+ accelerate
8
+ huggingface_hub