タグ「qrコード」が付けられているエントリー

夏の自由研究をまだやっている件

| 夏の自由研究をまだやっている件

前回,頓挫しそうだったのでぼやいたら,アドバイスをいただいたので,それに従って追試をしてみた.

まず,そもそもQRコードは読めるのか論だが,qr.quel.jpqr-coder.comの両方で作成したものをそのままlibdecodeqrにかけてみたところ,問題なく読み込めた.素材として,使える.

090924_qrcode01.png

続いて,これを印刷して,ARToolKitベースのあれで読み取って,射影変換したQRコードをlibdecodeqrに食わせてみた.結果からいえば,失敗.が.理由は単純で,QRコードの周りに適切な余白をつけることで,デコードできました.

090924_qrcode02.png

おおむね良好.

ということで,今後プログラムに起こす(連続かつ自動で流れるように)べきこと.

  1. QRコードの四隅の座標を取得する
  2. ネガポジ反転する(てか二値化を反転させておけばいい?)
  3. 射影変換する
  4. 周りに余白をつける
  5. libdecodeqrにデコードさせる

うん.だいたいの道筋はできたし,できそうな気配を感じ取った.射影変換に苦労しなくて良かったのは,画像処理屋でない視点からして嬉しい.

夏の自由研究の話なんですが,結構やばいです.図で説明します.

090918_qr01.jpg

こはカメラから取り込んで,二値化処理をしたQRコードと思われる部分です.うまくとれます.これはok.

090918_qr02.jpg

これは二値化して切り取ったQRコード(傾いている)を射影変換したもの.コードはOpenCVです.うまくいってます.これもok.後は,これをQRコードとしてデコードすればよろしい.

090918_qr03.jpg

これがいただけない.射影変換したQRコードをネガポジ反転して,QRコードデコーダであるlibdecodeqrに放り込んだ様子.ステータスコード2009(16進数だよ!)はエラーコードによりますと,以下の通りです.

  • QR_IMAGEREADER_DECODED 0x2000
  • QR_CODEDATA_NOT_SUPPORT_ECI 0x0001
  • QR_CODEDATA_UNRECOVERABLE 0x0008

重傷じゃん!どうすっかなー?こんなにきれいに復元できても,サポート外とか・・・.んなバカなって話ですよ.特定のQRコードしか読めないのかしら??それとも,このQRコードが亜種なのか.QRコードデコーダを自力で書かなくてはならないのだろうか・・・.ボスケテ!

200909200947追記:
nitechの先生からコメント頂きました.P906iでデコードできないそうです.iPhone 3GSの場合,QRコードが悪いのかリーダが悪いのか特定できないくらいに性能が悪いので,旧ケータイのW53CAを使ってみた.結果としては「24」とデコードできました.うーん.これはこれで困る結果だ.どうしよう・・・.

090812_overview01.png

やろうとしていることは,上図のような感じです.QRコードをデコードした後はどうするのかという話は,また別.初音ミクでも表示させておけば良いんじゃないかと思っている.おそらくは,そこから先はOpenGLの出番かと.うーん.勉強するべき技術が多いぜ.

何故こんな流れになっているかと申しますと.最初はlibdecodeqr付属のwebcamサンプルを拡張していたんですが,いかんせん歪みに弱く,QRコードをかなり大きめに撮影する必要がありました.これは複数のQRコードを同時に読ませようとする目的からして,かなり厳しいです.なので,OpenCVで画像処理してやればいいんじゃね?という発想からきています.射影変換等で多少変になっても,RS符号によって誤り訂正しまくってくれることを期待しています.そうすると,今度はOpenCVに処理させるべきQRコードと思われる部分をどのようにして切り出すかという話になるので,それはARToolKitに押しつけた形です.要するには,自力でコードを書く量は最小限にして,既存技術を最大限に活かそうという考えです.目的の本質じゃないところで苦労したくないんです.

というわけで,こんな感じの流れで実装していますが,「はっ?ばかじゃねーの?そんなの××で一発じゃん?」とか「○○を使ってARToolKitで直接QRの領域切り出せよ」とか「△△なら傾いたQRコードでもデコードするし,みたいな?」なんていうご意見や情報等がありましたら,どしどしとお寄せいただきたいと思います.特に,AR業界や画像処理業界の方々からのご意見をお待ちしております.異分野コラボレーションだ!(いや,マジでなにかご意見下さいorz)

090812_ar01.jpg

今日の成果.あとは,選択された領域を切り取って,射影変換して,libdecodeqrに投げてみる.上手くいけば,上手くいくはず.ただ,残念なことに,QRコード同士が近すぎて誤認識が多いです.領域が正方形に近いかどうかというチェックも必要かしら?実際はこんなに詰まった状態では使わないから,無視でも良いかな?

capture_11082009_012108.jpg

赤枠はイメージです.マーカパターンはhiroを使っているので,パターンをシンボルで作り直せば,もうちょっとちゃんと認識するかと.

libdecodeqrでがんばって,複数(といっても2個)のQRコードを同時に認識させることはできた.理論上は何個でも認識するはずなのだが・・・.Webカメラで読み込んでいたり,QRコードは模様が細かかったり,歪み等の補正を何もしていなかったりと,いろいろな状況が重なり合って,2個が限界の上に,全く安定しない.これは困った.

というわけで,libdecodeqrでがんばるのもどうかと思ったので,ARToolKitとOpenCVとlibdecodeqrを組み合わせる方向でがんばってみようかと思う.

で.結局のところ,基本アイディアはQRコード上の初音ミクに戻るのだが,これはlibdecodeqrを使っていないようだし,座標変換してるみたい.座標変換で平面に持ち込めば,libdecodeqrで認識できると信じている.てか,libdecodeqrは読めないQRコードパターンが多いような気がする.特に,バージョンが高くなるとダメぽ.これはカメラの性能だろうか?

なんだか,気合いの入り具合が間違った方向に向いてきた・・・.まずいまずいまずい.もっとさらっと仕上げる予定だったのに!QRコード上の初音ミクのソースが公開されていないから,こんなに苦労するんだ!(責任転嫁)

諸事情で,QRコードを複数認識したい衝動に駆られた.で.libdecoreqrってのが便利らしいので,試してみた.現時点までで分かったこと.

  • OpenCVが予想以上に便利だった
  • libdecodeqrで複数QRコードを認識させるには,外側からのアプローチじゃダメそうなので,中身を弄らないとダメそうなことは理解した
  • QRコードの方がイメージしやすいと思ったんだけど,
  • あきらめてARToolKitで複数マーカ認識にした方が良いだろうか
  • 実はARToolKitはあまり得意じゃないです><;
  • ニコニコ技術部のソースファイル(もしくは考え方)がみたい・・・
  • 具体的にはQRコード上のミク

おなかすいた.

URL をなげるとグラフなどの図を画像として生成してくれる Google Chart API ですが、 新たに QRコードを生成してくれるオプションができました。

[を] Google Chart API で QRコードも生成してくれるようになった

早速,ブックマークレット化してみた.別に,ブックマークレット屋じゃないですけどぉー.

Google Chart APIで今見ているページをQRコードにしちゃうブックマークレット

どうぞご自由にお持ち帰って,ご自由にカスタマイズしてください.サイズ指定をしなくちゃいけない辺りが面倒くさくて,IT-TOP.BIZのAPIの方が楽だなぁ・・・.

関連:
Google Mobile Gateway - 4403 is written

なにかと利用する機会も多いかと思うので,紹介しておく.Google Mobile Gatewayというものが存在している.「それなんぞ?」と訊かれれば,「携帯非対応のページをGoogle解釈で携帯で表示できるようにするプロキシ」とでも答えることになるだろうか.

使い方は非常に簡単で,

http://www.google.co.jp/gwt/n?u=変換したいURL

とすればよい.変換したいURLは一応URLエンコードをした方がいいかと思いますが,&とか?とかが入ってなければ,そのままでも通ります.

例えば,こんなブックマークレットを準備したらどうだろうか?

GMGによる携帯対応化ブックマークレット 

ほら!簡単だねっ!さらにさらに,携帯電話ですぐにアクセスできるように,QRコードも作っちゃえばいいじゃないですか!

QRコード作成APIによる閲覧ページのQRコード化ブックマークレット

ですからね.それを一気にやってしまうなら,こんなブックマークレットを書いたらいいと思うんです.

GMGを通してQRコードまで出力しちゃうブックマークレット

enjoy!

参考:
clmemo@aka: Google Mobile Proxy
ふと今日は・・・・・・  W-ZERO3 Opera Mobile 用モバイル化ブックマークレット

プロフィール

e-m@il @ddress