Barcode Scanning has become an essential tool across various industries, from retail and logistics to healthcare. On desktop platforms, it enables the quick capture and processing of information without manual data entry, saving time and reducing errors. In this tutorial, we will continue exploring the capabilities of the Dynamsoft Capture Vision SDK by building a Python barcode scanner for Windows, Linux, and macOS.
Dynamsoft Capture Vision Trial License: Obtain a 30-Day trial license key for the Dynamsoft Capture Vision SDK.
Python Packages: Install the required Python packages using the following commands:
pip install dynamsoft-capture-vision-bundle opencv-python
What are these packages for?
Since the Dynamsoft Capture Vision SDK is a unified framework integrated with various image processing tasks, we can easily switch between image processing modes by passing the PresetTemplate name to the capture() method.
The following code snippet shows the built-in PresetTemplate enumeration in the Dynamsoft Capture Vision SDK:
class EnumPresetTemplate(Enum): PT_DEFAULT = _DynamsoftCaptureVisionRouter.getPT_DEFAULT() PT_READ_BARCODES = _DynamsoftCaptureVisionRouter.getPT_READ_BARCODES() PT_RECOGNIZE_TEXT_LINES = _DynamsoftCaptureVisionRouter.getPT_RECOGNIZE_TEXT_LINES() PT_DETECT_DOCUMENT_BOUNDARIES = ( _DynamsoftCaptureVisionRouter.getPT_DETECT_DOCUMENT_BOUNDARIES() ) PT_DETECT_AND_NORMALIZE_DOCUMENT = ( _DynamsoftCaptureVisionRouter.getPT_DETECT_AND_NORMALIZE_DOCUMENT() ) PT_NORMALIZE_DOCUMENT = _DynamsoftCaptureVisionRouter.getPT_NORMALIZE_DOCUMENT() PT_READ_BARCODES_SPEED_FIRST = ( _DynamsoftCaptureVisionRouter.getPT_READ_BARCODES_SPEED_FIRST() ) PT_READ_BARCODES_READ_RATE_FIRST = ( _DynamsoftCaptureVisionRouter.getPT_READ_BARCODES_READ_RATE_FIRST() ) PT_READ_SINGLE_BARCODE = _DynamsoftCaptureVisionRouter.getPT_READ_SINGLE_BARCODE() PT_RECOGNIZE_NUMBERS = _DynamsoftCaptureVisionRouter.getPT_RECOGNIZE_NUMBERS() PT_RECOGNIZE_LETTERS = _DynamsoftCaptureVisionRouter.getPT_RECOGNIZE_LETTERS() PT_RECOGNIZE_NUMBERS_AND_LETTERS = ( _DynamsoftCaptureVisionRouter.getPT_RECOGNIZE_NUMBERS_AND_LETTERS() ) PT_RECOGNIZE_NUMBERS_AND_UPPERCASE_LETTERS = ( _DynamsoftCaptureVisionRouter.getPT_RECOGNIZE_NUMBERS_AND_UPPERCASE_LETTERS() ) PT_RECOGNIZE_UPPERCASE_LETTERS = ( _DynamsoftCaptureVisionRouter.getPT_RECOGNIZE_UPPERCASE_LETTERS() )
The PT_DEFAULT template supports multiple tasks, including document detection, MRZ recognition, and barcode detection. To optimize performance specifically for barcode detection, set the template to EnumPresetTemplate.PT_READ_BARCODES.value.
Referencing the previous document detection and MRZ recognition examples, the following code can be used to read barcodes from static images:
import sys from dynamsoft_capture_vision_bundle import * import os import cv2 import numpy as np from utils import * if __name__ == '__main__': print("**********************************************************") print("Welcome to Dynamsoft Capture Vision - Barcode Sample") print("**********************************************************") error_code, error_message = LicenseManager.init_license( "LICENSE-KEY") if error_code != EnumErrorCode.EC_OK and error_code != EnumErrorCode.EC_LICENSE_CACHE_USED: print("License initialization failed: ErrorCode:", error_code, ", ErrorString:", error_message) else: cvr_instance = CaptureVisionRouter() while (True): image_path = input( ">> Input your image full path:\n" ">> 'Enter' for sample image or 'Q'/'q' to quit\n" ).strip('\'"') if image_path.lower() == "q": sys.exit(0) if image_path == "": image_path = "../../../images/multi.png" if not os.path.exists(image_path): print("The image path does not exist.") continue result = cvr_instance.capture( image_path, EnumPresetTemplate.PT_READ_BARCODES.value) if result.get_error_code() != EnumErrorCode.EC_OK: print("Error:", result.get_error_code(), result.get_error_string()) else: cv_image = cv2.imread(image_path) items = result.get_items() print('Found {} barcodes.'.format(len(items))) for item in items: format_type = item.get_format() text = item.get_text() print("Barcode Format:", format_type) print("Barcode Text:", text) location = item.get_location() x1 = location.points[0].x y1 = location.points[0].y x2 = location.points[1].x y2 = location.points[1].y x3 = location.points[2].x y3 = location.points[2].y x4 = location.points[3].x y4 = location.points[3].y del location cv2.drawContours( cv_image, [np.intp([(x1, y1), (x2, y2), (x3, y3), (x4, y4)])], 0, (0, 255, 0), 2) cv2.putText(cv_image, text, (x1, y1 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 2) cv2.imshow( "Original Image with Detected Barcodes", cv_image) cv2.waitKey(0) cv2.destroyAllWindows() input("Press Enter to quit...")
Note: Replace the LICENSE-KEY with your valid license key.
Decoding multiple barcodes from a single image is a common use case in retail and logistics. The following image contains multiple barcodes of different formats:
When reading barcodes from an image file, we invoke the capture() method in the main thread. However, for processing real-time video streams from a webcam, a different approach is needed to avoid blocking the main thread. The Dynamsoft Capture Vision SDK provides a built-in mechanism for handling real-time video frames and processing them asynchronously on a native C worker thread. To implement this, extend the ImageSourceAdapter and CapturedResultReceiver classes to handle the image data and captured results, respectively, then call the start_capturing() method to begin processing the video stream.
pip install dynamsoft-capture-vision-bundle opencv-python
Explanation
https://github.com/yushulx/python-barcode-qrcode-sdk/tree/main/examples/official/10.x
The above is the detailed content of How to Build a Python Barcode Scanner for Windows, Linux, and macOS. For more information, please follow other related articles on the PHP Chinese website!