PC上で利用できるQRコードリーダは、単独のアプリケーションではフリーのものもいくつかありますが、
実際としてそれだけでは現実の業務などには使用しにくいのが実態です。
そこで外部トリガーを拾うデバイスとしてUSB-IOを利用し、安価なWEBカメラと組み合わせて動作する
QRコードリーダを作成してみました。以前はsourceforgeにあったqrcode decodeライブラリを.netにポートして
利用していましたが、ラインセンス(GPL)の関係上公開が困難でした。(また誤読み取り問題もありました。)
しかしGoogle codeのzxingプロジェクトでのC#ポートがうまく動きそうになりましたので、こちらで試したところ
それなりに動きましたので公開します。
実際の業務で利用できるように、以下に2つのポイントでの実現を目指しました。
ひとつは、キーボード操作なく読み込みのトリガーをかけれることです。大量の読み込み作業を行う際にはいちいち
キーボードやマウスを操作するのでは効率が悪くなります。そこで、何らかの外部デバイスでトリガーを読み込む
ようにします。今回は両手がふさがってもトリガーをかけることができるフットスイッチを利用することとしました。
2つめは安価なことです。お金を払えば良いリーダーはたくさんありますので、ここでは安価さを求めてみます。
そのためにカメラは汎用のUSBカメラを利用しPC内でデコードすることによりコスト低減を目指しました。
以下に全体構想図を示します。
図1、全体構想図
今回外部デバイスのトリガー取得にはフットスイッチを利用する設計ですが、PC専用のUSBフットスイッチは
高機能ながら少々値段が高いのが問題です。そこで、必要な部分だけを自作することとしました。
フットスイッチは音楽用のYAMAHA FC5 (Amazonで\1,506.-)を購入しました。通常時接点ON、踏み込み時接点OFFの
仕様です。
写真1、YAMAHA FC5
これに汎用USB入出力デバイスである、USB-IOを組み合わせました。今回はテクノキット製USB-IOキット
(\1,500.-)を購入し、自分で組み立てました。回路図は以下の通りです。
図2、フットスイッチ部回路図
ポート0の0番がLOWの時QRコードの読み込み動作を行うようにしています。
USB-IOの制御用DLLはhttp://bake-san.com/usb001.htmにあるvbausbio.dllを利用しました。
C#へのラッパーはhttp://d.hatena.ne.jp/yaneurao/20041109を流用しました。
USBカメラの制御にはDirectShowの機能を利用しました。
参考にしたサイトは以下の通りです。
USBカメラをC#で使おう http://mobiquitous.com/programming/usbcamera.html
まちみのな.NET Framework 2.0 でキャプチャ http://tmp.junkbox.info/e24.html
(ここのクラスライブラリを流用させていただきました。)
USBカメラには手持ちのBuffalor BSW13K05Hを解像度480x320で使用しました。
QRコードデコードライブラリはGoogle code内のzxingプロジェクトのC#ポート成果物を利用しています。
やや読み取り精度が悪いですが、誤読み取り等は今のところ発生しておらず、実用レベルではあると思います。
ただしバージョン1の読み取りはwebにもある通り少し弱そうです。
【以前の記述(2009/5時点)】
最大の問題はQRコードのデコードライブラリです。残念ながらフリーで配布されているものがあまりありません。
今回は http://qrcode.sourceforge.jp/ で配布されているjava用のデコーダーをJ#を用い.netのライブラリ化して
利用しました。
しかし問題が少々あります...
ひとつは読み取り精度です。なぜか稀に正しく読み取れず、誤った結果を返すことがあります。
もうひとつはライセンスの問題です。このライブラリはGPLなため、これを利用したプログラムを再配布するためには
GPLを適用しなければなりません。私だけが書いたコードだけなら別にGPL化しても良いのですが、上記の流用コードまで
私の権限でGPLに出来るはずもなく、この点で手詰まりです。
上記2つについて、ただいま対応を思案中です。
このプログラムの実行にはUSBカメラ等のWebカメラまたはキャプチャデバイスが必要です。
とりあえず完成したのが以下のプログラムです。画面上に表示したQRコードをUSBカメラを介して読み込んでいます。
左の枠がリアルタイムの画像、右の枠がデコードしようとしている(した)画像です。
図3、画面スナップショット
スナップショットではわかりにくいですが、フットスイッチを押したタイミングでQRコードの情報を、
アクティブウインドウであるTeraPadの画面内に流し込んでします。
プログラム中には、正規表現検査と外部プログラムでの検査ができるようにしています。
設定画面
・末尾追加文字
デコードした文字列に追加する文字を指定します。特殊文字の記載は以下のページを参照ください。
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.sendkeys%28VS.80%29.aspx
・正規表現検査を有効にする
デコードした文字列に対して正規表現検査を行います。
・外部検査プログラムを有効にする
外部検査プログラムにデコード値を渡し、その戻り値で検査の判定を行います。
・音を鳴らす
チェックを入れると、デコード成功時・失敗時に音が鳴ります。
動作確認環境
・WindowsXP Pro SP3
・.net framework 2.0
・USBカメラ:Buffalor BSW13K05H
ダウンロード:SQR2_1_0_0.zip
関連費用
・フットスイッチ YAMAHA FC5 \1,506.-
・USB-IO \1,500.-
・抵抗 10KΩ×2 \20くらい。
・外箱、配線、ジャックなど \1,000くらい
USBカメラを除くとだいたい4,000円くらいかかりました。