今回はカメラモジュールを使って、書籍などのバーコード(ISBN)を読み取るまでの手順を紹介します。
raspi-configの設定
raspi-configを起動して、インタフェースのカメラを有効にします。設定後、再起動が必要です。
ライブラリのインストール
今回は次のライブラリを利用します。
- OpenCV : 画像取得、簡易編集用
- ZBar : 画像からバーコードを読み取り
aptを使って必要なライブラリをインストールします。
sudo apt-get install libhdf5-dev libhdf5-serial-dev libhdf5-103 sudo apt-get install libqtgui4 libqtwebkit4 libqt4-test python3-pyqt5 sudo apt-get install libatlas-base-dev libjasper-dev sudo apt install libilmbase23 libopenexr23 sudo apt-get install zbar-tools libzbar-dev sudo pip3 install opencv-python
次にPythonライブラリをインストールします。
sudo pip3 install pyzbar
Pythonのコード
ではコードの解説です。まず、画像を常時解析するので、繰り返し処理にします。
import cv2 from pyzbar.pyzbar import decode cap = cv2.VideoCapture(0) while True: cap.release()
次にOpenCVライブラリを使って画像を取得します。OpenCVでグレースケール化した画像を取得します。今回のようにバーコードの読み取りであれば、カラー画像である必要はありません。解析も容易、高速になります。さらに画像が大きすぎると解析に失敗するので、画像を半分にしています。
以下は while True:
の中に記述します。
ret, frame = cap.read() img = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) height = img.shape[0] width = img.shape[1] image = cv2.resize(img , (int(width*0.5), int(height*0.5)))
取得した画像をZBarのdecodeを適用し、バーコードとして結果が返ってくるか判定します。読み取れていると data の中に結果が返ってきますので、それを出力します。
data = decode(image) if len(data) > 0: # 結果が返ってきた場合 print(data[0][0].decode('utf-8', 'ignore')) break
実行
では実際に実行してみます。カメラモジュールに書籍のバーコードを表示すると、ISBNが標準出力に返ってきました。
python3 camera.py 9784405102873
注意点
ISBNの解析はバーコードの大きさと、2つのバーコードが上下に並んでいるため、かなりシビアな認識でした。ちょうどいい距離感、位置を掴むには時間がかかるかも知れません。なお、QRコードは素早く、簡単に認識されます。
応用
このISBNを使ってAmazonのAPIを実行すれば、書籍のタイトルや価格、著者などの情報も取得できます。それらをデータベースに保存すれば、簡易的な蔵書管理にも使えるでしょう。
ISBN以外でも通常のバーコードやQRコードを解析できるようにするのは容易です。様々な利用法が考えられそうです。
まとめ
カメラモジュールは目の前の情報を取得するのに手軽で、プログラミングの力で画像を分析すれば役立つ情報が手に入ります。テキストで入力するのではなく、カメラにかざすだけで情報が取得できるようなIoTプロジェクトにぜひチャレンジしてみてください。
]]>