convert numpy array data matrix code to text

216 Views Asked by At

Let's assume i have a numpy array like

[[1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0]
 [1 0 1 1 0 1 0 1 0 1 0 0 0 0 1 1]
 [1 0 1 1 0 1 1 0 1 0 1 0 1 0 1 0]
 [1 1 0 1 0 1 1 1 0 1 0 1 0 1 1 1]
 [1 0 0 1 0 0 0 1 1 1 0 1 0 0 0 0]
 [1 0 1 1 0 1 0 1 0 1 1 0 0 0 1 1]
 [1 0 0 1 1 0 0 1 1 0 1 0 1 0 0 0]
 [1 1 1 1 0 1 1 1 1 0 1 1 0 0 1 1]
 [1 1 1 1 0 0 0 1 1 0 0 1 0 1 1 0]
 [1 1 0 1 0 1 1 1 1 1 1 0 1 0 0 1]
 [1 0 1 1 0 0 1 1 1 0 1 1 0 1 0 0]
 [1 0 0 1 1 0 0 0 1 0 0 0 1 1 0 1]
 [1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0]
 [1 0 1 1 0 0 0 0 1 1 0 1 1 1 0 1]
 [1 0 1 1 0 1 0 0 0 1 1 1 1 0 1 0]
 [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1]]

Which is basically an already deciphered data matrix code from custom code...how can I easily convert this to text?

I tried using the pylibdmtx library but this failed:

from pylibdmtx.pylibdmtx import decode, encode

decode((myarray.tobytes(), 16, 16))

I can obviously use matplotlib save it using imshow to file. Read it in as an image and use the decode function on the image, but since i already have the 16x16 decoded part i want to be efficient. Is there an easy python implementation available for this?

1

There are 1 best solutions below

0
On

I solved it. The problem was this: A: pylibdmtx decode function needs a boundary around the code of atleast 2 empty rows. B: it needs atleast two pixels per value so you need to upscale your numpy array like: 1 1 1 1 instead of just 1

C: you need a value of 255 instead of 1 and you need to make sure the data type is set uint8