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:
- Seleziona Run su
My_Pipeline_1. - 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.