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
- Get a 30-day FREE trial license to activate the SDK.
- Install the SDK via
pip install 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>
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()
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
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
File details
Details for the file barcode_qr_code_sdk-9.6.40.2.tar.gz
.
File metadata
- Download URL: barcode_qr_code_sdk-9.6.40.2.tar.gz
- Upload date:
- Size: 60.9 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.9.20
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2694500ff9d3d01156ceca44b1c8d3a71e9cfa766ca3ed0733b62d449076de7d |
|
MD5 | f1c1cbe906db1af2b3eb4247e5a71287 |
|
BLAKE2b-256 | 054fab4130a91b35ca80b6822a2b64780d3cbd1367e19d22763d6361de8d4313 |
File details
Details for the file barcode_qr_code_sdk-9.6.40.2-cp39-cp39-win_amd64.whl
.
File metadata
- Download URL: barcode_qr_code_sdk-9.6.40.2-cp39-cp39-win_amd64.whl
- Upload date:
- Size: 10.7 MB
- Tags: CPython 3.9, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.9.20
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4eedc434a9d2d8b647b30b33dd08b2f5fe3f5551116242ac1e39843ccc38eb64 |
|
MD5 | 257651632d58fc1f648a98b5aaf47abe |
|
BLAKE2b-256 | 448eaa1104dd0b3ef96e2c88070099da350a676042a3e138b7a9d5c1fc07a131 |
File details
Details for the file barcode_qr_code_sdk-9.6.40.2-cp39-cp39-manylinux_2_24_x86_64.whl
.
File metadata
- Download URL: barcode_qr_code_sdk-9.6.40.2-cp39-cp39-manylinux_2_24_x86_64.whl
- Upload date:
- Size: 11.7 MB
- Tags: CPython 3.9, manylinux: glibc 2.24+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.9.20
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 14035ca27069accd6ae0aaae970b2d4c1ed0eb3531d538b361711fdefbfecb1f |
|
MD5 | 2e9ae991c92091be43d3532d210e4f88 |
|
BLAKE2b-256 | a9a05c5a98fab1c5605dc737eb80b6f90d84c78173154b9d3bf702c7785a0c9c |
File details
Details for the file barcode_qr_code_sdk-9.6.40.2-cp39-cp39-manylinux_2_24_aarch64.whl
.
File metadata
- Download URL: barcode_qr_code_sdk-9.6.40.2-cp39-cp39-manylinux_2_24_aarch64.whl
- Upload date:
- Size: 10.9 MB
- Tags: CPython 3.9, manylinux: glibc 2.24+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.9.20
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 885125ffaf2563bfa11433083ceba81a5d7eacf593e483f112a2a9546f1f0f4e |
|
MD5 | 9f13443df38ab0dac4a8d4f9aba2b8bd |
|
BLAKE2b-256 | 16c882ca6aa5e2b5e51fc3ea4855943015da6b78303d38d139b973fdc3efaeae |