皆様こんにちは。今日はPCを使ってQRコードを使い何らかの処理をさせるというお話です。QRは様々なデータを埋め込めるのでそれをきっかけに何かの処理をするなどに使うと最適です。様々な便利処理を行うことができます。
Table of Contents(目次)
利用例
本の貸出用
本の貸出の際に、本にQRコードをつけておけば状態管理に便利です。
出退勤管理
出社、退社をQRコードに埋め込んだIDにより管理したりできます。
その他使用例
梱包・格納、ピッキング、棚卸、入荷検品、工程管理、偽造品対策、乗車管理、クーポン配信、調剤・処方せん、入場管理
詳細は以下より見れます。QRコードドットコム
PCで読む際の注意点(QRコードの読めるWebカメラ)
そのため近くのものにピントを合わせられる製品を選ぶ必要があります。それほど多くないので一点ご紹介いたします。
こちらの製品ですと120文字程度のデータをQR化し、2.2cmに印刷したものを読み取ることができることを確認済みです。文字数(データ量)によりQRの一つのデータのドットが小さくなるので文字数を詰め込むほど読み取りが難しくなる傾向があります。どの程度まで読み取れるかはテストしていないので詳細不明です。
アプリは何を使えばいい?
肝心のアプリですがネイティブコードで実行できるネイティブアプリですと速度が出る傾向がありますので、ネイティブアプリとしておすすめなのがZbar。Zbarはlinuxですとzbar-toolsでインストールできます。コマンドは以下です。(debian系)
sudo apt install zbar-tools
これでzbarimgとzbarcamの2つのメインコマンドが使えるようになります。
zbarimgは画像からQRコードを解析して読み取れるツールです。zbarcamは接続したウェブカメラから画像を取り出して読み取れるツールです。
個人的にはzbarcamをおすすめします。zbarcamはv4l2(video for linux 2)によりカメラ設定ができるようで(検証済み)v4l2-ctlで設定します。
接続されているカメラ情報
v4l2-ctl --list-devices
出力
USB Camera: USB Camera (usb-0000:03:00.4-1):
/dev/video0
/dev/video1
こうなりますがvideo10などたくさん表示される場合があります。この場合は(usb-0000:03:00.4-1):的なやつが表示されているデバイスの真下のデバイスが使えるデバイスである可能性が高いです。フォーマット確認コマンドなどを発行して使えるフォーマットがずらーとでてくれば使えるやつでしょう。
カメラの情報出力
v4l2-ctl -d /dev/video0 --all
カメラの使えるフォーマット&解像度
・フォーマットのみ
v4l2-ctl -d /dev/video0 --list-formats
・解像度付き
v4l2-ctl -d /dev/video0 --list-formats-ext
設定
v4l2-ctl -d /dev/video0 -v width=1280,height=720,pixelformat=0
このコマンドはpixelformatに–list-formatsで表示されたindexを指定します。この設定によりフレームレートなどがだいぶ変わります。ただし遅いマシンではzbarcam側で解析の速度が追いつかずフレームレートまででませんので要注意です。
v4l2-ctl -d /dev/video0 -p 30
フレームレートの設定です。
ホワイトバランスやシャープネスなどカメラで対応した設定の確認、設定
設定可能項目の確認
v4l2-ctl -d /dev/video0 -L
項目の状態確認
v4l2-ctl -d /dev/video0 -C (設定項目名)
設定は以下で行います。
v4l2-ctl -d /dev/video0 -c (設定項目名)=値
例
v4l2-ctl -d /dev/video0 -c brightness=255
zabarcamの起動
設定が終えたらzbarcamを起動して見ましょう。zbarcamはいくつかオプションがありますが、カメラを指定して起動すればデフォルトでテスト用には動きます。
コマンド
zbarcam /dev/video0
これでカメラの映像が出力されつつバーコード、QRコードの読み取りモードで開きます。バーコードなどが読めるかどうかテストしましょう。
本格起動
必要以外のコードを読まない設定にして起動することにより若干早くなるのでないかという推測の元、機能をオフにできる機能があるので使用してみました。体感はあんまり変わらないかな・・。ついでに画面もオフにしました。早くなると見越してのことです。一応設定しておきましょう。なおSSH経由での起動ではnodisplayをつけないとエラーが出ます。
zbarcam --nodisplay -Sdisable -Sqrcode.enable
system error: spawning input thread: Invalid argument (22)
SSH経由で実行した場合にはnodisplayをお忘れなくどうぞ。画面出力ができないためのエラーのようです。
他アプリで連携して処理
このアプリは標準出力に読み取ったデータを吐いてくれるので、連携することが可能です。私はperlが好きなのでperlでのやり方となりますが、他のスクリプト言語でも可能かと思います。
zbarcam --nodisplay -Sdisable -Sqrcode.enable | perl Renkei.pl
パイプで送ることにより連携できます。読み取りはループで読ましておきましょう。なおperlでは標準入力等が自動バッファリングされて直接処理されないのでバッファリングオフを行う必要があります。それが
$|=1;
です。
$|=1;
while (defined(my $line = <STDIN>)){
chomp($line);
#行いたい処理をここに書く。
print "$line¥n";
}
好きにコードを書いていってくださいまし。
QRコードやバーコード読み取りの専用端末も
本記事では未検証となりますが、読み取りの専用端末もあります。アマゾンで検索するといくつかでますのでご検討ください。なお4000円程度からあります
まとめ
いかがでしたでしょうか。QRコードを使えば業務や作業が楽になることもあります。間違いが減ったり効率化したりいいこともたくさんあるでしょう。今回の情報をシステムづくりに活かしていただければ幸いでございます。皆様よいPCライフをお送りくださいませ。でままたお会いしましょう