QR-Code Reading
In diesem Beispiel werden
- über die Funktion F_VN_ReadQRCodeExp jeweils ein QR-Code pro Bild ausgelesen
- und die Ausführungszeit der Funktion über einen sogenannten Watchdog überwacht.
Erläuterung
Die Funktion F_VN_ReadQRCodeExp sucht nach QR-Codes im vorgegebenen Bild und liest diese aus. Dabei wird im Gegensatz zur Funktion F_VN_ReadQRCode zusätzlich die Kontur des gefundenen Codes zurückgegeben.
Wenn sich im Bild Bereiche befinden, die ähnlich wie Codes aussehen, oder wenn gar kein Code im Bild vorhanden ist, kann sich dies negativ auf die Ausführungszeit auswirken. Um Zykluszeitüberschreitungen zu verhindern, wird die Funktion F_VN_ReadQRCodeExp im Beispiel über mit Hilfe eines Watchdogs überwacht (siehe dazu das Beispiel Blob Detection mit Watchdog Überwachung).
Variablen
hr : HRESULT;
ipImageIn : ITcVnImage;
ipImageInDisp : ITcVnDisplayableImage;
ipImageRes : ITcVnImage;
ipImageResDisp : ITcVnDisplayableImage;
// QR Code
ipCodeDecodedList : ITcVnContainer;
ipCodeContourList : ITcVnContainer;
sCodeAsString : STRING(255);
// Watchdog
hrWD : HRESULT;
tStop : DINT := 20000;
tRest : DINT;
// Output
sText : STRING;
// Color
aColorRed : TcVnVector4_LREAL := [255, 0, 0];
Code
// Execute the QR Code Reading Function monitored by the Watchdog-Function
// ---------------------------------------------------------------
hrWD := F_VN_StartRelWatchdog(tStop, S_OK);
hr := F_VN_ReadQRCodeExp(
ipSrcImage := ipImageIn,
ipDecodedData := ipCodeDecodedList,
ipContours := ipCodeContourList,
nCodeNumber := 1,
eSearchStrategy := TCVN_CSS_ONLY_NOT_INVERTED + TCVN_CSS_ONLY_NOT_FLIPPED,
hrPrev := hr
);
hrWD := F_VN_StopWatchdog(hrWD, tRest => tRest);
// Check if the function was executed successfully
IF hr = S_OK THEN
// Export Code into String
hr := F_VN_ExportSubContainer_String(ipCodeDecodedList, 0, sCodeAsString, 255, hr);
// Write Code into Result Image
hr := F_VN_PutTextExp(sCodeAsString, ipImageRes, 50, 100, ETcVnFontType.TCVN_FT_HERSHEY_PLAIN, 5, aColorRed,3, TCVN_LT_4_CONNECTED, FALSE, hr);
// Draw Code Contour into Result Image
hr := F_VN_DrawContours(ipCodeContourList, 0, ipImageRes, aColorRed, 3, hr);
ELSE
// Write HRESULT into Result Image
sText := CONCAT('Returncode ', DINT_TO_STRING(hr));
hr := F_VN_PutTextExp(sText, ipImageRes, 50, 100, ETcVnFontType.TCVN_FT_HERSHEY_PLAIN, 5, aColorRed,3, TCVN_LT_4_CONNECTED, FALSE, hr);
END_IF
// Write Code Reading proceeded time into Result Image
sText := CONCAT(CONCAT('Time: ', DINT_TO_STRING(tStop - tRest)), 'us');
hr := F_VN_PutTextExp(sText, ipImageRes, 50, 200, ETcVnFontType.TCVN_FT_HERSHEY_PLAIN, 5, aColorRed,3, TCVN_LT_4_CONNECTED, FALSE, hr);