samuellimabraz commited on
Commit
371a8c3
·
unverified ·
1 Parent(s): c4a6256

feat: Enhance Gradio interface with custom styling and improved layout for signature detection

Browse files
app.py CHANGED
@@ -49,7 +49,6 @@ class SignatureDetector:
49
  def __init__(self, model_path):
50
  self.model_path = model_path
51
  self.classes = ["signature"]
52
- self.color_palette = np.random.uniform(0, 255, size=(len(self.classes), 3))
53
  self.input_width = 640
54
  self.input_height = 640
55
 
@@ -78,6 +77,7 @@ class SignatureDetector:
78
 
79
  def draw_detections(self, img, box, score, class_id):
80
  x1, y1, w, h = box
 
81
  color = self.color_palette[class_id]
82
 
83
  cv2.rectangle(img, (int(x1), int(y1)), (int(x1 + w), int(y1 + h)), color, 2)
@@ -156,29 +156,95 @@ def create_gradio_interface():
156
  # Initialize the detector
157
  detector = SignatureDetector(MODEL_PATH)
158
 
159
- # Create Gradio interface
160
- iface = gr.Interface(
161
- fn=detector.detect,
162
- inputs=[
163
- gr.Image(label="Upload your Document", type="pil"),
164
- gr.Slider(minimum=0.0, maximum=1.0, value=0.2, step=0.05,
165
- label="Confidence Threshold",
166
- info="Adjust the minimum confidence score required for detection"),
167
- gr.Slider(minimum=0.0, maximum=1.0, value=0.5, step=0.05,
168
- label="IoU Threshold",
169
- info="Adjust the Intersection over Union threshold for NMS")
170
- ],
171
- outputs=gr.Image(label="Detection Results"),
172
- title="Signature Detector",
173
- description="Upload an image to detect signatures using YOLOv8. Use the sliders to adjust detection sensitivity.",
174
- examples=[
175
- ["assets/images/example_1.jpg", 0.2, 0.5],
176
- ["assets/images/example_2.jpg", 0.2, 0.5],
177
- ["assets/images/example_3.jpg", 0.2, 0.5],
178
- ["assets/images/example_4.jpg", 0.2, 0.5]
179
- ]
180
- )
181
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
182
  return iface
183
 
184
  if __name__ == "__main__":
 
49
  def __init__(self, model_path):
50
  self.model_path = model_path
51
  self.classes = ["signature"]
 
52
  self.input_width = 640
53
  self.input_height = 640
54
 
 
77
 
78
  def draw_detections(self, img, box, score, class_id):
79
  x1, y1, w, h = box
80
+ self.color_palette = np.random.uniform(0, 255, size=(len(self.classes), 3))
81
  color = self.color_palette[class_id]
82
 
83
  cv2.rectangle(img, (int(x1), int(y1)), (int(x1 + w), int(y1 + h)), color, 2)
 
156
  # Initialize the detector
157
  detector = SignatureDetector(MODEL_PATH)
158
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
159
 
160
+ css = """
161
+ .custom-button {
162
+ background-color: #b0ffb8 !important;
163
+ color: black !important;
164
+ }
165
+ .custom-button:hover {
166
+ background-color: #b0ffb8b3 !important;
167
+ }
168
+ """
169
+
170
+ with gr.Blocks(
171
+ theme = gr.themes.Soft(
172
+ primary_hue="indigo",
173
+ secondary_hue="gray",
174
+ neutral_hue="gray"
175
+ ),
176
+ css=css
177
+ ) as iface:
178
+ gr.Markdown(
179
+ """
180
+ <div style="display: flex; align-items: center;">
181
+ <img src="https://cdn.prod.website-files.com/65155fabb679475d43638cde/65396826ed65fb2d37f242cf_tech4humans.png" alt="logo" style="width: 50px; height: 50px; margin-right: 15px; vertical-align: middle;">
182
+ <span style="font-size: 24px; font-weight: bold;">Tech4Humans - Detector de Assinaturas</span>
183
+ </div>
184
+ """,
185
+ elem_id="header"
186
+ )
187
+
188
+
189
+ with gr.Row():
190
+ with gr.Column(): # Coluna para a imagem de entrada e controles
191
+ input_image = gr.Image(label="Faça o upload do seu documento", type="pil")
192
+
193
+ with gr.Row(): # Linha para os botões
194
+ clear_btn = gr.ClearButton([input_image], value="Limpar")
195
+ submit_btn = gr.Button("Detectar", elem_classes="custom-button")
196
+
197
+ confidence_threshold = gr.Slider(
198
+ minimum=0.0,
199
+ maximum=1.0,
200
+ value=0.2,
201
+ step=0.05,
202
+ label="Limiar de Confiança",
203
+ info="Ajuste a pontuação mínima de confiança necessária para detecção."
204
+ )
205
+ iou_threshold = gr.Slider(
206
+ minimum=0.0,
207
+ maximum=1.0,
208
+ value=0.5,
209
+ step=0.05,
210
+ label="Limiar de IoU",
211
+ info="Ajuste o limiar de Interseção sobre União para NMS."
212
+ )
213
+
214
+ output_image = gr.Image(label="Resultados da Detecção") # Em outra coluna
215
+
216
+ clear_btn.add(output_image)
217
+
218
+ gr.Examples(
219
+ examples=[
220
+ ["assets/images/example_1.jpg"],
221
+ ["assets/images/example_2.jpg"],
222
+ ["assets/images/example_3.jpg"],
223
+ ["assets/images/example_4.jpg"],
224
+ ["assets/images/example_5.jpg"],
225
+ ["assets/images/example_6.jpg"]
226
+ ],
227
+ inputs=input_image,
228
+ outputs=output_image,
229
+ fn=detector.detect,
230
+ label="Exemplos",
231
+ cache_examples=False
232
+ )
233
+
234
+
235
+ submit_btn.click(
236
+ fn=detector.detect,
237
+ inputs=[input_image, confidence_threshold, iou_threshold],
238
+ outputs=output_image,
239
+ )
240
+
241
+ gr.Markdown(
242
+ """
243
+ ---
244
+ **Desenvolvido por [Tech4Humans](https://www.tech4h.com.br/)** | **Modelo:** [YOLOv8s](https://huggingface.co/tech4humans/yolov8s-signature-detector) | **Datasets:** [Tobacco800](https://paperswithcode.com/dataset/tobacco-800), [signatures-xc8up](https://universe.roboflow.com/roboflow-100/signatures-xc8up)
245
+ """
246
+ )
247
+
248
  return iface
249
 
250
  if __name__ == "__main__":
assets/images/example_2.jpg CHANGED
assets/images/example_5.jpg ADDED
assets/images/example_6.jpg ADDED