KI-basierte Bildverarbeitung
In diesem Beispiel wird demonstriert, wie Sie:
- Mit TwinCAT Vision Bilddaten von der lokalen Festplatte laden und in der SPS verfügbar machen.
- Bilder mit der TwinCAT Vision Bibliothek vorverarbeiten.
- Mit dem FB_MlSvrPrediction eine Session auf dem lokal installierten TwinCAT Machine Learning Server starten und ein KI-Modell (Klassifikationsmodell) laden.
- Die Inferenz auf dem TwinCAT Machine Learning Server ausführen.
- Das Ergebnis in der SPS weiterverwenden.
Download und Übersicht der Dateien
Das Projekt können Sie hier herunterladen: AI_based_Vision
- In dem ZIP befindet sich ein tnzip, welches Sie im TwinCAT XAE über
File > Open > Open Solution from Archive… öffnen können. - Im Ordner models befinden sich eine ONNX sowie die bereits erstellen JSON und PlcOpenXml.
- Im Ordner dataset befinden sich Beispielbilder, welche verarbeitet werden sollen.
Voraussetzungen
Installieren Sie folgende Workloads:
- TwinCAT Standard
- TF3820 | TwinCAT Machine Learning Server
- TF3830 | TwinCAT Machine Learning Server Client
- TF7xxx | TwinCAT 3 Vision
Einrichtung des Projekts
- Öffnen Sie das tnzip und speichern Sie Ihr Projekt.
- Richten Sie die FileSpource ein:
- Selektieren Sie im System Manager das Tree Item
Vision > FileSource > ImageSource - Fügen Sie die Bilder aus dem Ordner models hinzu.
- Setzen Sie die Cycle Time der ImageSource auf 100 ms.
- Benennen Sie die FullPath zur Modell-JSON in Zeile 9 der MAIN. Die ONNX muss im selben Ordner liegen.
- Stellen Sie sicher, dass alle Softwarelizenzen zumindest in der 7-Tage-Testlizenz verfügbar sind:
- TC1200 TwinCAT PLC
- TF3820 TwinCAT Machine Learning Server
- TF7100 TwinCAT Vision Base
Optional: Anpassung der TwinCAT-Vision-Version
Das Beispiel wurde mit der Version 5.6.5.0 erstellt. Wenn Sie eine andere Version nutzen möchten, wählen Sie unter TcCOM Objects > Project Objects manuell die Version aus, die Sie installiert haben und nutzen möchten. Wählen Sie dazu die Version für die entsprechenden Objekte zunächst aus. Mit Rechtsklick auf die OTCID-Spalte öffnet sich ein Kontextmenü. Wählen Sie hier „Reload TMI/TMC Description(s) with changed version“. Siehe dazu auch Dokumentation TwinCAT Vision.
Sollten Sie die Version 5.6.5.0 nicht installiert haben und die Einstellung der aktuell verwendeten Version manuell nicht verändern, bekommen Sie eine Fehlermeldung „Error loading Repository driver“.
Es wird automatisch die neueste auf dem System verfügbare SPS-Bibliotheksversion genutzt.
Ausführen des Projekts
Starten Sie die Anwendung mit Activate Configuration auf Ihrem Zielsystem. Wenn alle Punkte korrekt eingerichtet sind, sollte der eState
nach kurzer Zeit auf eInference
stehen und die Variable sLabel
das Ergebnis der aktuellen Inferenz anzeigen.
Sollte ein Fehler aufgetreten sein, steht der eState
auf Error. Sie können dann die Instanz fbMlSvr aufklappen und den Error Code auslesen. Nutzen Sie die Tabelle der Error Codes, um das Problem einzugrenzen.
Ausschnitte aus dem SPS-Programm
Deklaration
In der Deklaration sind die wesentlichen Punkte, die den Umgang mit dem TwinCAT Machine Learning Server betreffen, die Eingangs- und Ausgangsdatentypen des KI-Modells sowie die Instanz der Clients zum Machine Learning Server.
stModelInput : ST_lemon_modelInput; //model input datatype, imported via PlcOpenXml
stModelOutput : ST_lemon_modelOutput; //model output datatype, imported via PlcOpenXml
fbMlSvr : FB_MlSvrPrediction(); // Instance of Client to TcMlServer
Die Datentypen sind bereits über die PlcOpenXml (siehe Ordner models) in das TwinCAT-Projekt eingelesen. Die Beschreibung finden Sie im Ordner DUTs.
Konfiguration der Session
In diesem Beispiel eröffnet der Client im State E_State.eMlSvrConfiguration eine Session auf dem TwinCAT Maschine Learning Server. Dabei wird spezifiziert, auf welchem System der Server erreichbar ist, welches Modell in der Session geladen und auf welcher Hardware das Modell ausgeführt werden soll.
fbMlSvr.stPredictionParameter.sMlModelFilePath := 'C:\models\lemon_model.json'; // fullpath to model
fbMlSvr.stPredictionParameter.sMlSvrNetId := '127.0.0.1.1.1'; // Server on local system
fbMlSVr.stPredictionParameter.eExecutionProvider := E_EXECUTIONPROVIDER.CPU; // CPU execution
// Submit configuration request to the TcMlServer
// Provide a generous nTimeout, as the configuration can take a substantial amount of time
IF fbMlSvr.Configure(nTimeout := 1000, nPriority:=0) THEN
IF fbMlSvr.nErrorCode <> 0 THEN
// If nErrorCode -1 is encountered, increase nTimeout
eState := E_State.eError;
ELSE
eState := E_State.eImageAcquisition;
END_IF
END_IF
Der Aufruf der Methode Configure()
sendet die Anfrage zur Eröffnung einer Session an den Server ab. Der Aufruf ist asynchron zur SPS-Task und wird mit einem TRUE
quittiert, wenn die Einrichtung der Session erfolgreich abgeschlossen ist.
Ausführen des Modells
Im State E_State.eInference
wird der Predict
-Aufruf an den Machine Learning Server gesendet. Auch dieser Aufruf ist asynchron zur SPS-Task. Die Methode liefert ein TRUE zurück, wenn das Ergebnis vorliegt.
In diesem Beispiel wird vor dem Inferenz-Aufruf das Bild vom Typ ITcVnImage
mit der Funktion F_VN_ExportImage
in den Modelleingangsdatentyp kopiert.
F_VN_ExportImage(ipTensorImage, ADR(stModelInput.in_input1), nImageSize, hrVision);
// Submission of the asynchronous inference request to the TcMlServer
IF fbMlSvr.Predict(pDataIn := ADR(stModelInput),
nDataInSize := SIZEOF(stModelInput),
pDataOut := ADR(stModelOutput),
nDataOutSize := SIZEOF(stModelOutput),
nTimeout := 100,
nPriority := 0) THEN
IF fbMlSvr.nErrorCode <> 0 AND NOT fbMlSvr.bConfigured THEN
// If nErrorCode -1 is encountered, increase nTimeout
eState := E_State.eError;
ELSE
// Postprocessing of the inference results
F_Softmax(stModelOutput.out_367);
nPredictedClass := F_ArgMax(stModelOutput.out_367);
Das Ergebnis der Inferenz kann nach erfolgreicher Fehlerprüfung verwendet werden.