0

I'm trying to use pylibdmtx to decode data matrix code from image and faced with problem of getting raw data string containing full set of symbols.

I'm using this code:

import cv2
from pylibdmtx import pylibdmtx

if __name__ == '__main__':
    image = cv2.imread("image path", cv2.IMREAD_UNCHANGED);
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    ret,thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)

    msg = pylibdmtx.decode(thresh)
    print(msg)

And getting this result: b'0104607009780924215XstxH93zPte'

But data matrix should contain this: (FNC1)0104607009780924215XstxH(FNC1)93zPte

(FNC1) is not printable symbol, and it equal to ASCII<232>.

According libdmtx change log, library should support FNC1. Maybe problem in Python wrapper or some missing initialization steps.

I know about this and this posts, but still have problem.

Test image: dm code sample

Could you please give any advise or recommend other libraries? Thanks in advance.

Tupteq
  • 2,986
  • 1
  • 21
  • 30

1 Answers1

0
import zxing

def decode_datamatrix(image_path):
    # Create a reader
    reader = zxing.BarCodeReader()

    # Read the barcode and store to data variable
    barcode = reader.decode(image_path, "utf-8")
    data=barcode.raw

    # Print out content of the code
    print(data)

    i = 0
    for s in data:
        i+=1
        if s==chr(29):
            print(f"{i}. character in data is a GS/FNC1 character.")


# Call the function with your image
decode_datamatrix("datamatrix.png")

Picture how the output looks like: DataMatrix Data

You can also use repr to print the characters out as "\x1d"

print(repr(data))
bjallamo
  • 11
  • 3