another library app using the camera and bar code scanning / jon crel
iPhoneアプリでバーコードスキャンをする必要があったので、いろいろ調べて実装したりしていたのですが、その経過でちょっとGitHubにコードを上げたりしたのでシェアしたいと思います。
バーコードスキャンを一から実装するというのはあり得ないので、ありもののライブラリを使うわけですが、調べてみるとそのライブラリはZXing(Zebra Crossing)とZBarの2つに絞られるようです。
対応しているバーコードのタイプは、それぞれの公式サイトを見る限りZXingの方が多いようですが、どちらもQR Code、EAN-8/13、UPC-A/E、Code39といった辺りには対応しています。
私はいまPhoneGapでHTML5を使いながら開発を進めているので、PhoneGapプラグインを探してみると、BarcodeScannerというプラグインがありました。
BarcodeScannerプラグインはZXingのライブラリを使っています(プラグインに内包されています)。
PhoneGapを使うメリットは、iOS、Android・・・とマルチデバイスのアプリをシングルコードで書けることだと思いますが、バーコードスキャンとなるとどうしてもバイナリのライブラリを含まないといけないので、OSに依存してしまいます。
ただ、BarcodeScannerプラグインはiOS、Android、WindowsPhoneといった複数のOSで同じプラグインが出ているので、マルチデバイス対応のメリットをスポイルしません。
というわけで、最初はこのプラグインを使って開発を進めていたのですが、どうもバーコードの認識率が悪い。QRやJAN(EAN)はそこそこ認識するのですが、Code39が相当厳しい。
仕方がないので、もう一方のライブラリであるZBarを使ったPhoneGapプラグインを探してみたのですが、どうも見当たらない。
いや、なくはないのですが、どうも組み込めない。
そこで、iOS向け限定ですが、ZBarを使うPhoneGapプラグインを書いてみました。
実際に認識させてみると、Code39も問題ない速度で認識します。
最低限のコードだけですが、GitHubに上げておきました。
ちなみに、いろいろと試してみると、バーコードスキャンの認識率はカメラの性能にかなり影響を受けることが分かりました。
iPhone5のカメラは800万画素なので問題なし。iPad 3rdやiPad miniも500万画素なのでこれも問題なし。しかし、iPad2やiPod touch 4thといったあたりはAFすらないレベルなのでまず認識できませんでした。