QR-Code Reading

In diesem Beispiel werden

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);

Ergebnis

QR-Code Reading 1:

Ähnliche Beispiele