EAN-13 Barcode Reading
In diesem Beispiel werden
- über die Funktion F_VN_ReadBarcodeExp jeweils ein EAN13-Code pro Bild ausgelesen
- und die Ausführungszeit der Funktion über einen sogenannten Watchdog überwacht.
Erläuterung
- Die Funktionen F_VN_ReadBarcode / F_VN_ReadBarcodeExp können Barcodes verschiedener Typen im Bild suchen und auslesen. Zur Beschleunigung der Verarbeitungszeit kann der Barcode-Typ (
eBarcodeType
) vorgegeben werden. In diesem Beispiel ist dasTCVN_BT_EAN13
. Zusätzlich kann die Verarbeitungszeit über den sogenannten Watchdog überwacht werden. Zum Watchdog gibt es das vertiefende Beispiel Blob Detection mit Watchdog Überwachung. - Die Funktion F_VN_ReadBarcodeExp, die in diesem Beispiel verwendet wird, bietet im Vergleich zur F_VN_ReadBarcode zudem die Möglichkeit:
- zusätzlich zum Barcode-Typ auch die Suchrichtung (
eSearchDirection
) vorzugeben:
- bei TCVN_BSD_ANY wird zunächst in horizontaler Richtung und anschließend in vertikaler Richtung gesucht
- bei TCVN_BSD_HORIZONTAL wird nur in horizontaler Richtung gesucht
- bei TCVN_BSD_VERTICAL wird nur in vertikaler Richtung gesucht - den Codebereich zurückgegeben, in dem das Auslesen erfolgte.
Variablen
hr : HRESULT;
ipImageIn : ITcVnImage;
ipImageInDsply : ITcVnDisplayableImage;
ipImageRes : ITcVnImage;
ipImageResDsply : ITcVnDisplayableImage;
// Barcode
ipCodeDecodedList : ITcVnContainer;
ipCodeContourList : ITcVnContainer;
sCodeAsString : STRING(255);
eBarcodeSearchDirection : ETcVnBarcodeSearchDirection := TCVN_BSD_ANY;
eBarcodeType : ETcVnBarcodeType := TCVN_BT_EAN13;
// Watchdog
hrWD : HRESULT;
tStop : DINT := 50000;
tRest : DINT;
// Output
sText : STRING;
// Color
aColorRed : TcVnVector4_LREAL := [255, 0, 0];
Code
// Execute the Barcode Reading Function with EAN13 selected monitored by the Watchdog-Function
// ---------------------------------------------------------------
hrWD := F_VN_StartRelWatchdog(tStop, S_OK);
hr := F_VN_ReadBarcodeExp(
ipSrcImage := ipImageIn,
ipDecodedData := ipCodeDecodedList,
ipContours := ipCodeContourList,
eBarcodeType := eBarcodeType,
nCodeNumber := 1,
eSearchDirection := eBarcodeSearchDirection,
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);
Ergebnisse
Wenn als Suchrichtung TCVN_BSD_ANY ausgewählt ist, werden sowohl horizontale als auch vertikale EAN13-Codes erkannt. Beim Vergleich der Watchdog-Zeit wird aber ersichtlich, dass horizontale EAN13-Codes (erstes Bild) deutlich schneller erkannt werden als vertikale EAN13-Codes (zweites Bild), da zunächst in horizontaler Richtung nach Codes gesucht wird.
Wird hingegen die Suchrichtung auf TCVN_BSD_VERTICAL gesetzt, ist der vertikale EAN13 Code deutlich schneller erkannt (drittes Bild). Es erfolgt dann aber keine Suche nach den horizontalen Codes.