This project provides a Python-C++ binding for the Dynamsoft Label Recognizer v2.x, allowing developers to build MRZ (Machine Readable Zone) scanner applications on both Windows and Linux platforms using Python.
Note: This project is an unofficial, community-maintained Python wrapper for the Dynamsoft Label Recognizer 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.
pip install dynamsoft-capture-vision-bundle
.Feature | Unofficial Wrapper (Community) | Official Dynamsoft Capture Vision 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 | Windows, Linux, macOS |
Install the required dependencies:
pip install mrz opencv-python
scanmrz <file-name> -l <license-key>
Scan MRZ from a webcam:
scanmrz <file-name> -u 1 -l <license-key>
import mrzscanner
from mrz.checker.td1 import TD1CodeChecker
from mrz.checker.td2 import TD2CodeChecker
from mrz.checker.td3 import TD3CodeChecker
from mrz.checker.mrva import MRVACodeChecker
from mrz.checker.mrvb import MRVBCodeChecker
def check(lines):
try:
td1_check = TD1CodeChecker(lines)
if bool(td1_check):
return "TD1", td1_check.fields()
except Exception as err:
pass
try:
td2_check = TD2CodeChecker(lines)
if bool(td2_check):
return "TD2", td2_check.fields()
except Exception as err:
pass
try:
td3_check = TD3CodeChecker(lines)
if bool(td3_check):
return "TD3", td3_check.fields()
except Exception as err:
pass
try:
mrva_check = MRVACodeChecker(lines)
if bool(mrva_check):
return "MRVA", mrva_check.fields()
except Exception as err:
pass
try:
mrvb_check = MRVBCodeChecker(lines)
if bool(mrvb_check):
return "MRVB", mrvb_check.fields()
except Exception as err:
pass
return 'No valid MRZ information found'
# set license
mrzscanner.initLicense("LICENSE-KEY")
# initialize mrz scanner
scanner = mrzscanner.createInstance()
# load MRZ model
scanner.loadModel(mrzscanner.load_settings())
print('')
# decodeFile()
s = ""
results = scanner.decodeFile("images/1.png")
for result in results:
print(result.text)
s += result.text + '\n'
print('')
print(check(s[:-1]))
print('')
mrzscanner.initLicense('YOUR-LICENSE-KEY')
: Initialize the SDK with your license key.
mrzscanner.initLicense("LICENSE-KEY")
mrzscanner.createInstance()
: Create an instance of the MRZ scanner.
scanner = mrzscanner.createInstance()
scanner.loadModel(<model configuration file>)
: Load the MRZ model configuration.
scanner.loadModel(mrzscanner.load_settings())
decodeFile(<image file>)
: Recognize MRZ from an image file.
results = scanner.decodeFile(<image-file>)
for result in results:
print(result.text)
decodeMat(<opencv mat data>)
: Recognize MRZ from an OpenCV Mat.
import cv2
image = cv2.imread(<image-file>)
results = scanner.decodeMat(image)
for result in results:
print(result.text)
addAsyncListener(callback function)
: Register a callback function to receive MRZ recognition results asynchronously.
decodeMatAsync(<opencv mat data>)
: Recognize MRZ from OpenCV Mat asynchronously.
def callback(results):
s = ""
for result in results:
print(result.text)
s += result.text + '\n'
print('')
print(check(s[:-1]))
import cv2
image = cv2.imread(<image-file>)
scanner.addAsyncListener(callback)
for i in range (2):
scanner.decodeMatAsync(image)
sleep(1)
Create a source distribution:
python setup.py sdist
setuptools:
python setup.py build
python setup.py develop
Build wheel:
pip wheel . --verbose
# Or
python setup.py bdist_wheel