Melchor commited on
Commit
3c3372c
·
unverified ·
0 Parent(s):

Initialize hf-space

Browse files
Files changed (4) hide show
  1. .gitattributes +35 -0
  2. README.md +14 -0
  3. app.py +81 -0
  4. requirements.txt +2 -0
.gitattributes ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
README.md ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ title: Mlops Labs 1 3
3
+ emoji: 🦀
4
+ colorFrom: yellow
5
+ colorTo: red
6
+ sdk: gradio
7
+ sdk_version: 6.0.1
8
+ app_file: app.py
9
+ pinned: false
10
+ license: mit
11
+ short_description: code developed across Labs 1–3 of an MLOps course
12
+ ---
13
+
14
+ Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
app.py ADDED
@@ -0,0 +1,81 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import requests
3
+
4
+ # URL of the API created with FastAPI
5
+ API_URL = "https://mlops-lab2-frdj.onrender.com"
6
+
7
+ # Function to predict image class
8
+ def predict_image(image, class_names):
9
+ try:
10
+ # Save image to bytes
11
+ import io
12
+ from PIL import Image
13
+
14
+ img_byte_arr = io.BytesIO()
15
+ image.save(img_byte_arr, format='PNG')
16
+ img_byte_arr.seek(0)
17
+
18
+ # Prepare the request
19
+ files = {"file": ("image.png", img_byte_arr, "image/png")}
20
+ data = {"class_names": class_names}
21
+
22
+ response = requests.post(f"{API_URL}/predict", files=files, data=data, timeout=10)
23
+ response.raise_for_status()
24
+ result = response.json()
25
+ return result.get("predicted_class")
26
+ except requests.exceptions.HTTPError as e:
27
+ return f"Error: {response.json().get('detail', str(e))}"
28
+ except Exception as e:
29
+ return f"Error: {str(e)}"
30
+
31
+ # Function to resize image
32
+ def resize_image(image, width, height):
33
+ try:
34
+ import io
35
+
36
+ img_byte_arr = io.BytesIO()
37
+ image.save(img_byte_arr, format='PNG')
38
+ img_byte_arr.seek(0)
39
+
40
+ files = {"file": ("image.png", img_byte_arr, "image/png")}
41
+ data = {"width": int(width), "height": int(height)}
42
+
43
+ response = requests.post(f"{API_URL}/resize", files=files, data=data, timeout=10)
44
+ response.raise_for_status()
45
+ result = response.json()
46
+ return str(result.get("resized_dimensions"))
47
+ except requests.exceptions.HTTPError as e:
48
+ return f"Error: {response.json().get('detail', str(e))}"
49
+ except Exception as e:
50
+ return f"Error: {str(e)}"
51
+
52
+ # GUI created using Gradio with Tabs
53
+ with gr.Blocks() as iface:
54
+ gr.Markdown("# Image Classifier and Resizer")
55
+
56
+ with gr.Tab("Predict"):
57
+ with gr.Row():
58
+ img_input = gr.Image(type="pil", label="Upload Image")
59
+ class_input = gr.Textbox(
60
+ value="cardboard,paper,plastic,metal,trash,glass",
61
+ label="Class Names (comma-separated)"
62
+ )
63
+ predict_btn = gr.Button("Predict")
64
+ predict_output = gr.Textbox(label="Predicted Class")
65
+
66
+ predict_btn.click(predict_image, inputs=[img_input, class_input], outputs=predict_output)
67
+
68
+ with gr.Tab("Resize"):
69
+ with gr.Row():
70
+ img_resize = gr.Image(type="pil", label="Upload Image")
71
+ with gr.Row():
72
+ width_input = gr.Number(value=256, label="Width")
73
+ height_input = gr.Number(value=256, label="Height")
74
+ resize_btn = gr.Button("Resize")
75
+ resize_output = gr.Textbox(label="New Dimensions")
76
+
77
+ resize_btn.click(resize_image, inputs=[img_resize, width_input, height_input], outputs=resize_output)
78
+
79
+ # Launch the GUI
80
+ if __name__ == "__main__":
81
+ iface.launch()
requirements.txt ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ gradio>=3.40
2
+ requests>=2.30