BIION-D Docs

Esempi

Esempi pratici per creare pipeline e Action Plan.

Questa pagina raccoglie esempi pratici, dall’inizio alla fine, per creare e utilizzare pipeline e Action Plan in BIION-D.

Esempio 1: pipeline base per il rilevamento anomalie

Una pipeline base acquisisce un’immagine e la analizza con un modello di rilevamento anomalie.

Scenario

Hai una telecamera (IDS), una luce e un modello di rilevamento anomalie (MyModel). Vuoi controllare la presenza di difetti superficiali sui prodotti.

Struttura della pipeline

Procedura

Crea il workspace

Apri la pagina Workspace, seleziona Create e assegna il nome “Surface Inspection”.

Crea l’Action Plan

Seleziona la scheda + per creare un nuovo Action Plan. Scegli il modello Anomaly detection oppure parti da Empty e assegna il nome “My_ActionPlan”.

Configura la pipeline

Apri l’Action Plan e passa alla modalità Edit. Aggiungi un modulo Light nel Blocco 0, un modulo Camera nel Blocco 1 selezionando IDS e un modulo Anomaly Detection nel Blocco 2. Seleziona MyModel come modello e Camera_0.frame come immagine di input.

Raccolta dati

Apri la pagina Run, passa alla modalità Acquisition ed esegui ripetutamente la pipeline per raccogliere immagini di training. Le immagini vengono salvate nel dataset di MyModel.

Inferenza

Dopo aver addestrato il modello, passa alla modalità Inference nella pagina Run. Ogni esecuzione restituisce un risultato di conformità: Good, Uncertain o Defected.

Esempio 2: pipeline multicamera con illuminazione

Una pipeline controlla le luci e acquisisce immagini da due telecamere diverse.

Scenario

Hai due telecamere (IDS e 4103822175), una luce e due modelli di inferenza (MyModel per il rilevamento anomalie e MyObjModel per il rilevamento oggetti). Vuoi illuminare il prodotto, acquisire due immagini ed eseguire entrambi i modelli.

Struttura della pipeline

Le due telecamere si trovano nello stesso blocco, il Blocco 1, quindi acquisiscono simultaneamente. È consentito perché usano label di telecamera diverse. Anche i due moduli di inferenza si trovano nello stesso blocco, il Blocco 2, e vengono eseguiti in parallelo.

Esempio 3: pipeline con integrazione PLC

Una pipeline legge un identificativo dal PLC, ispeziona il prodotto e scrive il risultato nel PLC.

Scenario

Il PLC espone un nodo PartID e un nodo InspectionResult. Vuoi leggere l’identificativo prima dell’ispezione e riscrivere il risultato di conformità.

Struttura della pipeline

Esempio 4: script personalizzato con notifica webhook

Una pipeline usa uno script Python per il post-processing e un webhook per notificare un sistema esterno.

Scenario

Dopo il rilevamento anomalie, vuoi applicare una logica personalizzata, combinare il punteggio dell’anomalia con un valore PLC e inviare il risultato finale a un sistema MES.

Struttura della pipeline

Esempio di script Python

# Legge i risultati dei moduli precedenti
score = Data.get("anomaly_0.pred_score")
part_id = Data.get("opcua_reader_0.value")

# Logica personalizzata
if score < 0.3:
    quality_grade = "A"
    compliance = 0
elif score < 0.6:
    quality_grade = "B"
    compliance = 1
else:
    quality_grade = "C"
    compliance = 2

# Esporta i risultati per i moduli successivi e la cronologia
Data.export("quality_grade", quality_grade)
Data.export("part_id", part_id)
Data.set_compliance(compliance)

print(f"Part {part_id}: Grade {quality_grade} (score: {score:.3f})")

Esempio 5: Action Plan con più pipeline

Un Action Plan contiene due pipeline separate che controllano aspetti diversi dello stesso prodotto.

Scenario

Ispezioni un prodotto da due prospettive: un controllo della superficie e un controllo dimensionale. Ogni controllo ha la propria telecamera e il proprio modello. Il risultato complessivo è la conformità peggiore tra le due pipeline.

Struttura dell’Action Plan

Flusso di esecuzione

Attiva l’Action Plan

Nella pagina Workspace, seleziona ⋯ → Activate sulla scheda My_ActionPlan.

Esegui le pipeline

Nella pagina Run, ogni pipeline mostra il proprio pulsante Run. Esegui le pipeline una alla volta:

  1. Seleziona Run su My_Pipeline_1.
  2. Seleziona Run su My_Pipeline_2.

Aggregazione

Quando entrambe le pipeline sono completate, il sistema aggrega i risultati. La conformità complessiva è il valore peggiore tra le due pipeline, secondo la logica BAD_UNC_GOOD.

Revisione

Il risultato aggregato viene mostrato nella pagina Run e può essere consultato anche nella pagina Cronologia.

Esempio 6: rilevamento oggetti, crop e rilevamento anomalie

Una pipeline rileva un oggetto, ritaglia l’immagine attorno all’oggetto tramite un Plugin e analizza la regione ritagliata con il rilevamento anomalie.

Scenario

Hai una telecamera (IDS) e una luce. Poiché ogni prodotto può trovarsi in una posizione diversa nel frame, vuoi rilevarlo, isolare la regione e controllare la superficie.

Struttura della pipeline

Flusso di lavoro

Blocco 0: illuminazione

Il modulo Light attiva la luce per garantire un’illuminazione uniforme prima dell’acquisizione.

Blocco 1: acquisizione

Il modulo Camera acquisisce un’immagine completa da IDS e la salva come Camera_0.frame nel registro dati.

Blocco 2: rilevamento oggetti

Il modulo ObjectDetection esegue MyObjModel su Camera_0.frame. Classi, confidence e bounding box vengono salvati in ObjectDetection_0.detected.

Blocco 3: crop tramite Plugin

Il modulo PythonScript, visualizzato nell’interfaccia come Plugin, legge i rilevamenti e l’immagine originale. Ritaglia il primo oggetto rilevato ed esporta PythonScript_0.cropped_frame per il blocco successivo.

Blocco 4: rilevamento anomalie sull’immagine ritagliata

Il modulo AnomalyDetection riceve PythonScript_0.cropped_frame ed esegue MyModel. Il modello analizza la superficie senza il rumore dello sfondo.

Esempio di script Python

import cv2
import numpy as np

# Recupera immagine originale e rilevamenti
frame = Data.get("Camera_0.frame")
detections = Data.get("ObjectDetection_0.detected")

# Usa il bounding box del primo oggetto rilevato
if detections:
    box = detections[0]["box"]
    x1, y1 = int(box["x1"]), int(box["y1"])
    x2, y2 = int(box["x3"]), int(box["y3"])

    cropped = frame[y1:y2, x1:x2]
    Data.export("cropped_frame", cropped)
    print(f"Cropped region: ({x1},{y1}) -> ({x2},{y2}), shape: {cropped.shape}")
else:
    Data.export("cropped_frame", frame)
    print("No object detected, using full frame as fallback")

La tecnica consiste nel concatenare Object Detection → Plugin → Anomaly Detection. Il Plugin legge il risultato del rilevamento, ritaglia l’immagine originale ed esporta il risultato per il modello anomalie.

Riepilogo dei pattern comuni

Pattern Quando usarlo
Light → Camera → Inferencer Ispezione standard con illuminazione controllata
OpcuaReader → Camera → Inferencer → OpcuaWriter Ciclo di ispezione integrato con PLC
Camera → Inferencer → Plugin Post-processing personalizzato dopo l’inferenza
Camera → Inferencer → Webhook Notifica dei risultati a sistemi esterni
Più telecamere nello stesso blocco Acquisizione simultanea da più angolazioni
Più inferencer nello stesso blocco Analisi AI parallela su immagini diverse
Camera → Object Detection → Plugin → Anomaly Detection Localizzazione di un oggetto e analisi della regione ritagliata

Suggerimenti

Suggerimento 1: l’ordine dei blocchi è importante. Inserisci sempre le luci prima delle telecamere e le telecamere prima degli inferencer. I dati devono fluire dai produttori ai consumatori.

Suggerimento 2: prova entrambe le modalità. Acquisition raccoglie immagini del dataset, mentre Inference produce risultati di ispezione.

Suggerimento 3: mantieni le pipeline focalizzate. Se due controlli sono indipendenti, valuta due pipeline separate nello stesso Action Plan.