Pythonでバーコード・QRコードを瞬時に読み取る!ZBar入門

フリーランスボード

20万件以上の案件から、副業に最適なリモート・週3〜の案件を一括検索できるプラットフォーム。プロフィール登録でAIスカウトが自動的にマッチング案件を提案。市場統計や単価相場、エージェントの口コミも無料で閲覧可能なため、本業を続けながら効率的に高単価の副業案件を探せます。フリーランスボード

ITプロパートナーズ

週2〜3日から働ける柔軟な案件が業界トップクラスの豊富さを誇るフリーランスエージェント。エンド直契約のため高単価で、週3日稼働でも十分な報酬を得られます。リモートや時間フレキシブルな案件も多数。スタートアップ・ベンチャー中心で、トレンド技術を使った魅力的な案件が揃っています。専属エージェントが案件紹介から契約交渉までサポート。利用企業2,000社以上の実績。ITプロパートナーズ

Midworks 10,000件以上の案件を保有し、週3日〜・フルリモートなど柔軟な働き方に対応。高単価案件が豊富で、報酬保障制度(60%)や保険料負担(50%)など正社員並みの手厚い福利厚生が特徴。通勤交通費(月3万円)、スキルアップ費用(月1万円)の支給に加え、リロクラブ・freeeが無料利用可能。非公開案件80%以上、支払いサイト20日で安心して稼働できます。Midworks

この記事では、PythonライブラリのZBarを使って、画像ファイルからバーコードQRコードを検出・読み取る方法を解説します。在庫管理、チケット認証、情報連携など、様々なシーンで活躍するバーコード・QRコードの読み取り機能をPythonで手軽に実装できます。


バーコード・QRコードとは?

バーコードは、白と黒の線の幅や間隔によって情報を表現する二次元コードの一種です。主に商品の識別や在庫管理に使われます。一方、QRコード(Quick Response Code)は、四角い格子状のパターンで情報を表現する二次元コードで、より多くの情報を格納でき、URLや連絡先などの情報を手軽に共有するのに広く利用されています。

なぜバーコード・QRコードを読み取るのか?

  • データ入力の効率化: 手動入力の手間を省き、入力ミスを減らします。

  • 情報連携の自動化: 商品情報、ウェブサイトへの誘導、イベント参加登録などをスムーズに行えます。

  • 在庫管理の効率化: 商品の入出荷や棚卸しを迅速かつ正確に行えます。


ZBarとは?

ZBarは、様々なバーコード・QRコードフォーマットを読み取ることができるオープンソースのライブラリです。Pythonから利用するには、pyzbarというPythonバインディングを使用します。ZBarは、画像から複数のバーコードを同時に検出・デコードできる強力な機能を持っています。

pyzbarのインストール方法

pyzbarを利用するには、まずZBar本体をシステムにインストールする必要があります(OSによって手順が異なります)。その後、pipを使ってpyzbarをインストールします。

Bash
 
pip install pyzbar Pillow

Pillowは画像処理に必要なライブラリです。


pyzbarを使ったバーコード・QRコード読み取りの基本

pyzbarを使って画像ファイルからバーコードやQRコードを読み取る基本的な手順を説明します。

画像ファイルからコードを読み取る

pyzbar.decode()関数にPIL (Pillow) で開いた画像オブジェクトを渡すだけで、画像内のコードを検出・デコードできます。

Python
 
from PIL import Image
from pyzbar.pyzbar import decode

# 読み込みたい画像ファイルのパス
image_path = "qrcode_example.png" # または "barcode_example.png"

# 画像を開く
img = Image.open(image_path)

# バーコード・QRコードをデコード
decoded_objects = decode(img)

# 検出されたコードの情報を表示
if decoded_objects:
    for obj in decoded_objects:
        print(f"データ: {obj.data.decode('utf-8')}")
        print(f"タイプ: {obj.type}")
        print(f"領域: {obj.rect}")
        print("-" * 20)
else:
    print("コードは検出されませんでした。")

上記のコードは、qrcode_example.png(またはbarcode_example.png)という画像ファイルからバーコードやQRコードを読み取り、そのデータ、タイプ、検出された領域を出力する例です。obj.dataはバイト列で返されるため、.decode('utf-8')で文字列に変換しています。


読み取り結果の活用

decode()関数は、検出された各コードについてDecodedオブジェクトのリストを返します。このオブジェクトには、コードのデータだけでなく、タイプ(例: ‘QRCODE’, ‘CODE128’など)や画像内での位置情報が含まれています。

特定のタイプのコードをフィルタリングする

複数のコードが画像内に存在する場合や、特定のタイプのコードのみを扱いたい場合に便利です。

Python
 
from PIL import Image
from pyzbar.pyzbar import decode, ZBarSymbol

image_path = "multiple_codes.png" 
img = Image.open(image_path)
decoded_objects = decode(img, symbols=[ZBarSymbol.QRCODE]) # QRコードのみを対象

if decoded_objects:
    for obj in decoded_objects:
        print(f"QRコードデータ: {obj.data.decode('utf-8')}")
        print("-" * 20)
else:
    print("QRコードは検出されませんでした。")

symbols引数にZBarSymbolから指定することで、読み取るコードのタイプを限定できます。


まとめ

ZBarとpyzbarを組み合わせることで、Pythonで画像ファイルからバーコードやQRコードを簡単に検出・読み取ることができます。これにより、データ入力の自動化や情報連携の効率化など、様々なアプリケーションの可能性が広がります。ぜひこの強力なライブラリを活用して、新しいシステム開発に挑戦してみてください!

「らくらくPython塾」が切り開く「呪文コーディング」とは?

■プロンプトだけでオリジナルアプリを開発・公開してみた!!

■AI時代の第一歩!「AI駆動開発コース」はじめました!

テックジム東京本校で先行開始。

■テックジム東京本校

「武田塾」のプログラミング版といえば「テックジム」。
講義動画なし、教科書なし。「進捗管理とコーチング」で効率学習。
より早く、より安く、しかも対面型のプログラミングスクールです。

<短期講習>5日で5万円の「Pythonミニキャンプ」開催中。

<月1開催>放送作家による映像ディレクター養成講座

<オンライン無料>ゼロから始めるPython爆速講座

フリーランスボード

20万件以上の案件から、副業に最適なリモート・週3〜の案件を一括検索できるプラットフォーム。プロフィール登録でAIスカウトが自動的にマッチング案件を提案。市場統計や単価相場、エージェントの口コミも無料で閲覧可能なため、本業を続けながら効率的に高単価の副業案件を探せます。フリーランスボード

ITプロパートナーズ

週2〜3日から働ける柔軟な案件が業界トップクラスの豊富さを誇るフリーランスエージェント。エンド直契約のため高単価で、週3日稼働でも十分な報酬を得られます。リモートや時間フレキシブルな案件も多数。スタートアップ・ベンチャー中心で、トレンド技術を使った魅力的な案件が揃っています。専属エージェントが案件紹介から契約交渉までサポート。利用企業2,000社以上の実績。ITプロパートナーズ

Midworks 10,000件以上の案件を保有し、週3日〜・フルリモートなど柔軟な働き方に対応。高単価案件が豊富で、報酬保障制度(60%)や保険料負担(50%)など正社員並みの手厚い福利厚生が特徴。通勤交通費(月3万円)、スキルアップ費用(月1万円)の支給に加え、リロクラブ・freeeが無料利用可能。非公開案件80%以上、支払いサイト20日で安心して稼働できます。Midworks