iPadで独自のQRコードリーダーを作る方法

PythonとOpenCVを使えばiPadで簡単に独自のQRコードを作ることができます。そのために利用するアプリはPytoです。Pytoの基本的な使い方は下記記事が参考になると思います。

Pytoの特徴の1つとしてOpenCVが扱えることにあります。OpenCVとはオープンソースで提供されているコンピュータービジョン(コンピューターが画像を認識する技術)のためのライブラリで、多くのシステム開発や研究開発などで利用されています。このOpenCVとPytoを使ってQRコードリーダーを作るのが今回のテーマです。

利用するライブラリ

今回利用するのは下記のライブラリです。

  • cv2 (OpenCVのライブラリ)
  • numpy(数値計算を行うためのライブラリ)

numpyを利用するにはPytoの料金表にある通り、Full版を購入する必要があるのでご注意ください。

PytoのFull版とLite版の違い

QRコードを作ってみる

用意したQRコードは下記です。

このQRコードをPytoで作ったアプリで読み取ると下記のようになります。QRコードを認識した部分が赤枠で囲まれ、読み取った文字が上に表示されているのが分かります。

クリックすると拡大します

ソースコード

下記が実際に動かしたソースコードです。40行そこそこで簡単に作れてしまいます。また、このソースコードはPytoに限ったものではないため、OpenCVとnumpy、それとカメラさえあれば他の環境でも動作すると思います。

import cv2
import sys
import numpy as np

font = cv2.FONT_HERSHEY_SIMPLEX
device = 0 # Back camera

cap = cv2.VideoCapture(device)
while cap.isOpened:
    try:
        ret, frame = cap.read()
        # 1フレーム目が読み取れないことがある
        if not ret:
            continue

        img_color= cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
        # QRCodeDetectorインスタンス生成
        qrd = cv2.QRCodeDetector()
    
        # QRコードデコード
        retval, decoded_info, points, straight_qrcode = qrd.detectAndDecodeMulti(img_color)
    
        if retval:
            points = points.astype(np.int)
    
            for dec_inf, point in zip(decoded_info, points):
                if dec_inf == '':
                    continue
    
                # QRコード座標取得
                x = point[0][0]
                y = point[0][1]
    
                # 認識したQRコードを枠で囲む
                img_color = cv2.polylines(img_color, [point], True, (255, 0, 0), 2, cv2.LINE_AA)
                # 読み取ったQRコードを文字列で表示
                img_color = cv2.putText(img_color, dec_inf, (x, y-6), font, .3, (0, 0, 255), 1, cv2.LINE_AA)
                print('data:', dec_inf)
        # 画面に表示する
        cv2.imshow('image', img_color)
    except:
        break

cap.release()

少し特徴的なのは12行目〜14行目のところです。なぜか1フレーム目は何も取得できないので、このチェックを入れてあげる必要があります。

最後に

iPadを使って簡単にQRコードリーダーが作れてしまいました。iPadやiPhoneだと標準のカメラアプリにQRコードリーダーがついているので、今回のサンプル程度ではあまり実用的と言えないかもしれません。もっと工夫して、QRコードを読み取った内容に応じて別の仕組みと連携するとかできると面白いのかもしれません。例えば、QRコードに日本語が含まれていると、声を出して読み上げてくれるアプリにするとか。アイデア次第で可能性は無限大です。

iPadでプログラミングを行いつつ、機能を拡張できるようになると楽しいですね。それでは、また。

Twitterでフォローしよう

Pickup
おすすめの記事