プログラミングノート

一からものを作ることが好きなエンジニアの開発ブログです。

iPhoneでバーコードを解析するにはどうするか

1次元バーコードを解析して、その場でAmazonのレビューとか引っ張ってこれると便利そうだとか思い、ここ数日色々試していたのですが、結構ムズイということが判明。現在詰まってるところなのですが、とりあえずメモとしてまとめておきます。

ZXing

携帯端末の開発に特化した1D/2D対応のライブラリです。Javaのライブラリですが、C/C++/C#に一部ポーティングされています。


iPhoneのサンプルコードも付属しているのですが、残念ながら2Dバーコードしか対応していなかったので目的を果たせず。QRコードリーダーを作るならこれで十分そうです。


ZXing

ZBar bar code reader

探し始めて一番情報が多かったのがこのライブラリ。C/C++で開発されているマルチプラットフォームなライブラリです。1Dのみ対応しているようで、これをターゲットに絞りました。(プロジェクト名称が「zebra ⇒ zbar」に変更されているので古い情報がよく引っかかります)


ZBar

Macで試す

どんな感じで使えるのか、ZBar bar code reader辺りを参考に、色々オプションを無効にしてインストール。ここはすんなり終了。

$ zbarimg barcord.jpg
EAN-13:0525500751509
scanned 1 barcode symbols from 1 images in 0.17 seconds

という感じでバーコード画像を指定するとデコードしてくれます。画像パスの部分にはURLを指定しても大丈夫でした。WEBカメラなどの入力にも対応しているようなので、PC版のアプリを作るならこれで十分使えそうです。

iPhoneで試す

libzebra を使って Objective-C でバーコードを読み取るというエントリーを参考に進めたのですが、やはり実機ビルドでエラー。


同じようなことで詰まっている人は多いもので、iPhone Programming Tips: building Unix softwareによると、iPhoneのARMアーキテクチャ用にクロスコンパイルが必要とのこと。


やり方が分からなかったのですが、iPhone cross compilationに全て記載されていたので何とか実機確認まで到達。ZBarを使った解析方法はHOWTO: Scan images using the API辺りが参考になりました。

でもiPhone3Gでは..

カメラでバーコードを撮影、ZBarで解析するところまで実装できたのですが、iPhone3Gはカメラがオートフォーカスではないのでどうしても画像が不鮮明になり、上手く解析できませんでした(WEBから撮ってきた鮮明な画像は解析できた)。3GSはオートフォーカスらしいので上手く行くのかもしれません。


で、これではリリースしても使い物にならないなー、どうしよーというところで停滞中です。Barcode recognition辺りを参考に画像解析処理を加えれば行けるかもしれませんが、ちょっとしんどそう。こんなライブラリあるけどどう?みたいな情報ありましたら教えて頂けると助かります。


ちなみに、ここら辺をビジネスにしている会社もありました。