データマトリックス認識¶
二次元コードの一種であるデータマトリックスを認識し、デコード結果を表示するサンプルコードです。
import pyfie
import matplotlib.pyplot as plt
# PyFIE 関数が返すエラーコードに応じて例外を発生させる機能を有効化
pyfie.ctrl.enable_f_err_exception(True)
# 入力画像読み込み
hsrc = pyfie.imread("datamatrix_src.png")
# データマトリックスオブジェクト生成
hdm = pyfie.FHANDLE()
pyfie.fnFIE_dm_alloc_obj(hdm)
# 検出対象シンボルサイズを適宜設定
size_cells_min = 8
size_cells_max = 144
pyfie.fnFIE_dm_set_size_minmax(hdm, size_cells_min, size_cells_max)
# 検出対象シンボルセルサイズを適宜設定
width_cell_min = 3
width_cell_max = 48
pyfie.fnFIE_dm_set_cellwidth_minmax(hdm, width_cell_min, width_cell_max)
# デコード実行
pyfie.fnFIE_dm_execute(hdm, hsrc)
# デコード成功数とインデックス番号の参照
decoded_index = pyfie.INT.PTR()
num_decoded = pyfie.INT()
pyfie.fnFIE_dm_query_decoded(hdm, decoded_index, num_decoded)
# デコード成功数を表示
print("num decoded:", num_decoded)
# デコード結果へアクセス
for i in range(num_decoded):
# 中心座標取得
x = pyfie.DOUBLE()
y = pyfie.DOUBLE()
pyfie.fnFIE_dm_query_center(hdm, decoded_index[i], x, y)
# デコードメッセージ取得
message = pyfie.CHAR.PTR()
pyfie.fnFIE_dm_query_message(hdm, decoded_index[i], message, None)
# メッセージをPythonバイト列に変換
message_byte_str = message.value_as_bytes
# バイト文字列を通常の文字列にデコード。エンコーディングは ASCII
message_str = message_byte_str.decode("ascii")
# 座標とメッセージを表示
print("result #{}: position: ({:.2f}, {:.2f}), message: {}".format(
i, x, y, message_str
))
# 結果をプロットしてファイルに保存
hsrc.imshow()
pyfie.mpltools.plot_datamatrix_results(hdm)
plt.savefig("datamatrix_result.png")
処理結果例¶
$ python sample_datamatrix.py
num decoded: 1
result #0: position: (119.85, 122.48), message: FAST http://www.fast-corp.co.jp/
入力画像

結果画像
