samuellimabraz commited on
Commit
ace7187
·
unverified ·
1 Parent(s): d2dcb1f

feat: suporte para processamento de pastas de imagens e OpenVinoRuntime

Browse files
Files changed (1) hide show
  1. app.py +62 -20
app.py CHANGED
@@ -1,21 +1,22 @@
1
- import cv2
2
- import numpy as np
3
- import pandas as pd
4
  import time
 
 
 
5
  import matplotlib.pyplot as plt
 
6
  import onnxruntime as ort
7
- from collections import deque
8
- import gradio as gr
9
- import os
10
- import sqlite3
11
- from datetime import datetime
12
  from huggingface_hub import hf_hub_download
 
13
 
14
  # Model info
15
  REPO_ID = "tech4humans/yolov8s-signature-detector"
16
- FILENAME = "tune/trial_10/weights/best.onnx"
17
  MODEL_DIR = "model"
18
  MODEL_PATH = os.path.join(MODEL_DIR, "model.onnx")
 
19
 
20
 
21
  def download_model():
@@ -55,7 +56,7 @@ def download_model():
55
 
56
 
57
  class MetricsStorage:
58
- def __init__(self, db_path="metrics.db"):
59
  self.db_path = db_path
60
  self.setup_database()
61
 
@@ -123,7 +124,7 @@ class SignatureDetector:
123
 
124
  # Initialize ONNX Runtime session
125
  self.session = ort.InferenceSession(
126
- MODEL_PATH, providers=["CPUExecutionProvider"]
127
  )
128
 
129
  self.metrics_storage = MetricsStorage()
@@ -421,6 +422,23 @@ def create_gradio_interface():
421
  line_fig,
422
  )
423
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
424
  with gr.Blocks(
425
  theme=gr.themes.Soft(
426
  primary_hue="indigo", secondary_hue="gray", neutral_hue="gray"
@@ -443,13 +461,29 @@ def create_gradio_interface():
443
  with gr.Row(equal_height=True, elem_classes="main-container"):
444
  # Coluna da esquerda para controles e informações
445
  with gr.Column(scale=1):
446
- input_image = gr.Image(
447
- label="Faça o upload do seu documento", type="pil"
448
- )
449
-
450
- with gr.Row():
451
- clear_btn = gr.ClearButton([input_image], value="Limpar")
452
- submit_btn = gr.Button("Detectar", elem_classes="custom-button")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
453
 
454
  with gr.Group():
455
  confidence_threshold = gr.Slider(
@@ -474,6 +508,7 @@ def create_gradio_interface():
474
 
475
  with gr.Accordion("Exemplos", open=True):
476
  gr.Examples(
 
477
  examples=[
478
  ["assets/images/example_{i}.jpg".format(i=i)]
479
  for i in range(
@@ -523,14 +558,21 @@ def create_gradio_interface():
523
  """
524
  )
525
 
526
- clear_btn.add([output_image])
 
527
 
528
- submit_btn.click(
529
  fn=process_image,
530
  inputs=[input_image, confidence_threshold, iou_threshold],
531
  outputs=[output_image, total_inferences, hist_plot, line_plot],
532
  )
533
 
 
 
 
 
 
 
534
  # Carregar métricas iniciais ao carregar a página
535
  iface.load(
536
  fn=detector.load_initial_metrics,
 
1
+ import os
2
+ import sqlite3
 
3
  import time
4
+
5
+ import cv2
6
+ import gradio as gr
7
  import matplotlib.pyplot as plt
8
+ import numpy as np
9
  import onnxruntime as ort
10
+ import pandas as pd
 
 
 
 
11
  from huggingface_hub import hf_hub_download
12
+ from PIL import Image
13
 
14
  # Model info
15
  REPO_ID = "tech4humans/yolov8s-signature-detector"
16
+ FILENAME = "yolov8s.onnx"
17
  MODEL_DIR = "model"
18
  MODEL_PATH = os.path.join(MODEL_DIR, "model.onnx")
19
+ DATABASE_PATH = os.path.join(os.getcwd(), "db", "metrics.db")
20
 
21
 
22
  def download_model():
 
56
 
57
 
58
  class MetricsStorage:
59
+ def __init__(self, db_path=DATABASE_PATH):
60
  self.db_path = db_path
61
  self.setup_database()
62
 
 
124
 
125
  # Initialize ONNX Runtime session
126
  self.session = ort.InferenceSession(
127
+ MODEL_PATH, providers=["OpenVINOExecutionProvider"]
128
  )
129
 
130
  self.metrics_storage = MetricsStorage()
 
422
  line_fig,
423
  )
424
 
425
+ def process_folder(files_path, conf_thres, iou_thres):
426
+ if not files_path:
427
+ return None, None, None, None
428
+
429
+ valid_extensions = [".jpg", ".jpeg", ".png"]
430
+ image_files = [
431
+ f for f in files_path if os.path.splitext(f.lower())[1] in valid_extensions
432
+ ]
433
+
434
+ if not image_files:
435
+ return None, None, None, None
436
+
437
+ for img_file in image_files:
438
+ image = Image.open(img_file)
439
+
440
+ yield process_image(image, conf_thres, iou_thres)
441
+
442
  with gr.Blocks(
443
  theme=gr.themes.Soft(
444
  primary_hue="indigo", secondary_hue="gray", neutral_hue="gray"
 
461
  with gr.Row(equal_height=True, elem_classes="main-container"):
462
  # Coluna da esquerda para controles e informações
463
  with gr.Column(scale=1):
464
+ with gr.Tab("Imagem Única"):
465
+ input_image = gr.Image(
466
+ label="Faça o upload do seu documento", type="pil"
467
+ )
468
+ with gr.Row():
469
+ clear_single_btn = gr.ClearButton([input_image], value="Limpar")
470
+ detect_single_btn = gr.Button(
471
+ "Detectar", elem_classes="custom-button"
472
+ )
473
+
474
+ with gr.Tab("Pasta de Imagens"):
475
+ input_folder = gr.File(
476
+ label="Faça o upload de uma pasta com imagens",
477
+ file_count="directory",
478
+ type="filepath",
479
+ )
480
+ with gr.Row():
481
+ clear_folder_btn = gr.ClearButton(
482
+ [input_folder], value="Limpar"
483
+ )
484
+ detect_folder_btn = gr.Button(
485
+ "Detectar", elem_classes="custom-button"
486
+ )
487
 
488
  with gr.Group():
489
  confidence_threshold = gr.Slider(
 
508
 
509
  with gr.Accordion("Exemplos", open=True):
510
  gr.Examples(
511
+ label="Exemplos de Imagens",
512
  examples=[
513
  ["assets/images/example_{i}.jpg".format(i=i)]
514
  for i in range(
 
558
  """
559
  )
560
 
561
+ clear_single_btn.add([output_image])
562
+ clear_folder_btn.add([output_image])
563
 
564
+ detect_single_btn.click(
565
  fn=process_image,
566
  inputs=[input_image, confidence_threshold, iou_threshold],
567
  outputs=[output_image, total_inferences, hist_plot, line_plot],
568
  )
569
 
570
+ detect_folder_btn.click(
571
+ fn=process_folder,
572
+ inputs=[input_folder, confidence_threshold, iou_threshold],
573
+ outputs=[output_image, total_inferences, hist_plot, line_plot],
574
+ )
575
+
576
  # Carregar métricas iniciais ao carregar a página
577
  iface.load(
578
  fn=detector.load_initial_metrics,