PythonでWebカメラからDataMatrixコードを読み取る方法を説明していきます。
サンプルコード
準備
サンプルコードの実行に必要なライブラリをインストールします。
OpenCv
pip install opencv-python
pylibdmtx
pip install pylibdmtx
Pillow
pip install Pillow
サンプルコード
読み取ったDataMatrixコードの内容を、ターミナル上に出力するコードです。

import sys
import tkinter
import cv2
from PIL import Image, ImageTk
from pylibdmtx.pylibdmtx import decode
root = tkinter.Tk()
root.title("DataMatrixコードをスキャンしてください。")
root.geometry("640x480")
CANVAS_X = 640
CANVAS_Y = 480
# Canvas作成
canvas = tkinter.Canvas(root, width=CANVAS_X, height=CANVAS_Y)
canvas.pack()
# VideoCaptureの引数にカメラ番号を入れる。
cap = cv2.VideoCapture(0)
def show_frame():
global CANVAS_X, CANVAS_Y
# カメラ映像取得
ret, frame = cap.read()
if not ret:
print('カメラから画像を取得できませんでした')
sys.exit()
# ImageTkフォーマットへ変換
image_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
image_pil = Image.fromarray(image_rgb)
image_tk = ImageTk.PhotoImage(image_pil)
canvas.image_tk = image_tk
# ImageTk カメラ映像配置
canvas.create_image(CANVAS_X / 2, CANVAS_Y / 2, image=image_tk)
# 画像からDataMatrixコードを読み取る
decoded_dmtx = decode(frame, 1)
# DataMatrixコードスキャン判定
if decoded_dmtx:
# スキャン結果出力後終了
str_dec_dmtx = decoded_dmtx[0][0].decode('utf-8', 'ignore')
print('スキャン結果: {}'.format(str_dec_dmtx))
sys.exit()
else:
# 10msごとにスキャン処理を実行
canvas.after(10, show_frame)
show_frame()
root.mainloop()