Skip to main content

Barcode and QR code scanning SDK for Python

Project description

Python Extension: Barcode and QR Code SDK

This project provides a CPython binding to the Dynamsoft C/C++ Barcode Reader SDK v9.x. It demonstrates how to build a Python 1D/2D barcode SDK package for Windows, Linux and macOS from scratch. Beyond desktop PCs, it's also compatible with embedded and IoT devices such as Raspberry Pi and Jetson Nano. You are free to customize the Python API for Dynamsoft Barcode Reader to suit your specific needs.

Note: This project is an unofficial, community-maintained Python wrapper for the Dynamsoft Barcode SDK. For those seeking the most reliable and fully-supported solution, Dynamsoft offers an official Python package. Visit the Dynamsoft Capture Vision Bundle page on PyPI for more details.

About Dynamsoft Capture Vision Bundle

Comparison Table

Feature Unofficial Wrapper (Community) Official Dynamsoft Python Barcode SDK
Support Community-driven, best effort Official support from Dynamsoft
Documentation README only Comprehensive Online Documentation
API Coverage Limited Full API coverage
Feature Updates May lag behind the official SDK First to receive new features
Compatibility Limited testing across environments Thoroughly tested across all supported environments
OS Support Windows, Linux, macOS Windows, Linux, macOS

Supported Python Edition

  • Python 3.x

Installation of Dependencies

To show UI, you need to install the OpenCV package:

pip install opencv-python

Command-line Usage

$ scanbarcode <file-name> -l <license-key>

# Show the image with OpenCV
$ scanbarcode <file-name> -u 1 -l <license-key>

python barcode QR code scanner

How to Build the Python Barcode and QR Code Extension

  • Create a source distribution:

    python setup.py sdist
    
  • setuptools:

    python setup_setuptools.py build
    python setup_setuptools.py develop # Copy libraries to barcodeQrSDK folder
    
  • scikit-build:

    python setup.py build
    python setup.py develop # Copy libraries to barcodeQrSDK folder
    
  • Build wheel:

    pip wheel . --verbose
    # Or
    python setup_setuptools.py bdist_wheel
    # Or
    python setup.py bdist_wheel
    

Quick Start

  • Console App

    import barcodeQrSDK
    
    # set license
    barcodeQrSDK.initLicense("LICENSE-KEY")
    
    reader = barcodeQrSDK.createInstance()
    
    results, elapsed_time = reader.decodeFile("IMAGE-FILE")
    for result in results:
        print(result.format)
        print(result.text)
        print(result.x1)
        print(result.y1)
        print(result.x2)
        print(result.y2)
        print(result.x3)
        print(result.y3)
        print(result.x4)
        print(result.y4)
    
  • Video App

    import barcodeQrSDK
    import numpy as np
    import cv2
    import json
    
    g_results = None
    
    def callback(results, elapsed_time):
        global g_results
        g_results = (results, elapsed_time)
    
    def run():
        # set license
        barcodeQrSDK.initLicense("LICENSE-KEY")
    
        # initialize barcode scanner
        scanner = barcodeQrSDK.createInstance()
        params = scanner.getParameters()
        # Convert string to JSON object
        json_obj = json.loads(params)
        # json_obj['ImageParameter']['ExpectedBarcodesCount'] = 999
        params = json.dumps(json_obj)
        ret = scanner.setParameters(params)
        
        scanner.addAsyncListener(callback)
    
        cap = cv2.VideoCapture(0)
        while True:
            ret, image = cap.read()
            if image is not None:
                scanner.decodeMatAsync(image)
                
            if g_results != None:
                print('Elapsed time: ' + str(g_results[1]) + 'ms')
                cv2.putText(image, 'Elapsed time: ' + str(g_results[1]) + 'ms', (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2)
                for result in g_results[0]:
                    x1 = result.x1
                    y1 = result.y1
                    x2 = result.x2
                    y2 = result.y2
                    x3 = result.x3
                    y3 = result.y3
                    x4 = result.x4
                    y4 = result.y4
                    
                    cv2.drawContours(image, [np.int0([(x1, y1), (x2, y2), (x3, y3), (x4, y4)])], 0, (0, 255, 0), 2)
                    cv2.putText(image, result.text, (x1, y1), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)
    
            cv2.imshow('Barcode QR Code Scanner', image)
            ch = cv2.waitKey(1)
            if ch == 27:
                break
        
        scanner.clearAsyncListener()
    
    if __name__ == '__main__':
        run()
    

    Python barcode and QR code scanner

Methods

  • barcodeQrSDK.initLicense('YOUR-LICENSE-KEY'): Set the global license key for the barcode SDK.

    barcodeQrSDK.initLicense("LICENSE-KEY")
    
  • barcodeQrSDK.createInstance(): Create a new barcode reader instance.

    reader = barcodeQrSDK.createInstance()
    
  • decodeFile(filename): Decode barcodes and QR codes from an image file.

    results, elapsed_time = reader.decodeFile("IMAGE-FILE")
    
  • decodeMat(Mat image): Decode barcodes and QR codes from an OpenCV Mat.

    image = cv2.imread("IMAGE-FILE")
    results = reader.decodeMat(image)
    for result in results:
        print(result.format)
        print(result.text)
        print(result.x1)
        print(result.y1)
        print(result.x2)
        print(result.y2)
        print(result.x3)
        print(result.y3)
        print(result.x4)
        print(result.y4)
    
  • getParameters(): Retrieve the current SDK parameters as a JSON string.

    params = reader.getParameters()
    
  • setParameters(JSON string): Set barcode SDK parameters using a JSON string.

    import json
    json_obj = json.loads(params)
    json_obj['ImageParameter']['DPMCodeReadingModes'][0]['Mode'] = 'DPMCRM_GENERAL'
    json_obj['ImageParameter']['LocalizationModes'][0]['Mode'] = 'LM_STATISTICS_MARKS'
    params = json.dumps(json_obj)
    ret = reader.setParameters(params)
    
  • addAsyncListener(callback function): Register a Python function to receive barcode results asynchronously.

  • decodeMatAsync(<opencv mat data>): Asynchronously decode barcodes and QR codes from an OpenCV Mat.

    def callback(results, elapsed_time):
        print(results)
                                                        
    import cv2
    image = cv2.imread("IMAGE-FILE")
    reader.addAsyncListener(callback)
    reader.decodeMatAsync(image)
    sleep(1)
    
  • clearAsyncListener(): Stop the asynchronous listener and clear the registered callback.

  • decodeBytes(bytes, width, height, stride, imageformat): Decode barcodes from a raw image byte array.

    import cv2
    image = cv2.imread("IMAGE-FILE")
    results, elapsed_time = scanner.decodeBytes(image.tobytes(), image.shape[1], image.shape[0], image.strides[0], barcodeQrSDK.ImagePixelFormat.IPF_BGR_888)
    
  • decodeBytesAsync: Asynchronously decode image byte arrays.

    def callback(results, elapsed_time):
        print(results)
                                                        
    import cv2
    image = cv2.imread("IMAGE-FILE")
    imagebytes = image.tobytes()
    scanner.decodeBytesAsync(image.tobytes(), image.shape[1], image.shape[0], image.strides[0], barcodeQrSDK.ImagePixelFormat.IPF_BGR_888)
    sleep(1)
    

Supported Barcode Symbologies

  • Linear Barcodes (1D)

    • Code 39 (including Code 39 Extended)
    • Code 93
    • Code 128
    • Codabar
    • Interleaved 2 of 5
    • EAN-8
    • EAN-13
    • UPC-A
    • UPC-E
    • Industrial 2 of 5
  • 2D Barcodes:

    • QR Code (including Micro QR Code)
    • Data Matrix
    • PDF417 (including Micro PDF417)
    • Aztec Code
    • MaxiCode (mode 2-5)
  • Patch Code

  • GS1 Composite Code

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

barcode_qr_code_sdk-9.6.40.2.tar.gz (60.9 MB view details)

Uploaded Source

Built Distributions

barcode_qr_code_sdk-9.6.40.2-cp39-cp39-win_amd64.whl (10.7 MB view details)

Uploaded CPython 3.9 Windows x86-64

barcode_qr_code_sdk-9.6.40.2-cp39-cp39-manylinux_2_24_x86_64.whl (11.7 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.24+ x86-64

barcode_qr_code_sdk-9.6.40.2-cp39-cp39-manylinux_2_24_aarch64.whl (10.9 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.24+ ARM64

File details

Details for the file barcode_qr_code_sdk-9.6.40.2.tar.gz.

File metadata

File hashes

Hashes for barcode_qr_code_sdk-9.6.40.2.tar.gz
Algorithm Hash digest
SHA256 2694500ff9d3d01156ceca44b1c8d3a71e9cfa766ca3ed0733b62d449076de7d
MD5 f1c1cbe906db1af2b3eb4247e5a71287
BLAKE2b-256 054fab4130a91b35ca80b6822a2b64780d3cbd1367e19d22763d6361de8d4313

See more details on using hashes here.

File details

Details for the file barcode_qr_code_sdk-9.6.40.2-cp39-cp39-win_amd64.whl.

File metadata

File hashes

Hashes for barcode_qr_code_sdk-9.6.40.2-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 4eedc434a9d2d8b647b30b33dd08b2f5fe3f5551116242ac1e39843ccc38eb64
MD5 257651632d58fc1f648a98b5aaf47abe
BLAKE2b-256 448eaa1104dd0b3ef96e2c88070099da350a676042a3e138b7a9d5c1fc07a131

See more details on using hashes here.

File details

Details for the file barcode_qr_code_sdk-9.6.40.2-cp39-cp39-manylinux_2_24_x86_64.whl.

File metadata

File hashes

Hashes for barcode_qr_code_sdk-9.6.40.2-cp39-cp39-manylinux_2_24_x86_64.whl
Algorithm Hash digest
SHA256 14035ca27069accd6ae0aaae970b2d4c1ed0eb3531d538b361711fdefbfecb1f
MD5 2e9ae991c92091be43d3532d210e4f88
BLAKE2b-256 a9a05c5a98fab1c5605dc737eb80b6f90d84c78173154b9d3bf702c7785a0c9c

See more details on using hashes here.

File details

Details for the file barcode_qr_code_sdk-9.6.40.2-cp39-cp39-manylinux_2_24_aarch64.whl.

File metadata

File hashes

Hashes for barcode_qr_code_sdk-9.6.40.2-cp39-cp39-manylinux_2_24_aarch64.whl
Algorithm Hash digest
SHA256 885125ffaf2563bfa11433083ceba81a5d7eacf593e483f112a2a9546f1f0f4e
MD5 9f13443df38ab0dac4a8d4f9aba2b8bd
BLAKE2b-256 16c882ca6aa5e2b5e51fc3ea4855943015da6b78303d38d139b973fdc3efaeae

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page