QRDの概要

はじめに

QRDライブラリはアプリケーションにQRコードのデコード機能を提供するライブラリです。
QRDライブラリは画像サイズが最大VGAサイズ、QRコードのバージョンは40までデコード可能です。
通常のAPIは、一度画像を渡されたら、成功・失敗にかかわらず、処理が完了するまで、APIのコール側に制御が戻りませんので注意してください。

QRデコードライブラリの基本仕様

本バージョンが対応しているQRコードの仕様は次の通りです。

QRコード仕様

QRコードバージョンバージョン1~40。
モデルモデル2のみ
モード数字モード:0~9(ASCIIコードの0x30~0x39)
英数字モード:0~9(ASCIIコードの0x30~0x39)、A~Z(ASCIIコードの0x41~0x5A)、半角スペース、$、%、*、+、-、.、/、:の記号(ASCIIコードの0x20,0x24,0x25,0x2A,0x2B,0x2D~0x2F,0x3A)
漢字モード:JIS X 0208に基づくShift-JIS漢字。
8ビットバイトモード:、JIS X 0201(ASCIIコード0x00~0xFF)に基づくデータ。英小文字a~z(ASCII値0x61~0x7A)はこのモードに含まれる。
混在モード:上記の4つを組み合わせたデータ。
連結モード:複数のQRコードにデータを分割。
FNC1モード及びECIモードには対応していません。
誤り訂正能力L,M,H,Q(推奨値はM)

上記の仕様は、認識対象の印刷条件(鮮明さ、紙質)や画像の撮影条件(明るさ、手ぶれ度合)によって変化いたします。

カラー印刷されたQRコードも認識可能ですが印刷状況等により読めない色もあります。

企画時の注意

本ライブラリを使用する際は、下記の点に注意してください。

3DS シリーズの画面から読み込む場合 1 セル当たり 2 ドット以上を推奨
GamePad の画面から読み込む場合 1 セル当たり 2 ドット以上を推奨
印刷した QR コードを読み込む場合 3DS シリーズのカメラで読み込む場合は、印刷サイズを 0.45mm/セル 以上にしてください。
WiiU の GamePad のカメラで読み込む場合は、印刷サイズを 0.50mm/セル 以上にしてください。
いずれのカメラで読み込む場合も、バージョンの最大値は下記に従ってください。
  • 誤り訂正レベル L :15
  • 誤り訂正レベル M :17
  • 誤り訂正レベル Q :21
  • 誤り訂正レベル H :25

推奨するカメラ設定値

CTRカメラライブラリで撮影した画像をQRDライブラリでデコードする場合の推奨設定値です。

解像度VGA
フレームレート15fps (初期値)
出力フォーマットYUV422
エフェクト処理なし
反転処理なし
撮影モード文字モード
ホワイトバランス自動
露光(蓄光時間)自動
シャープネス+5

なお、CTRのカメラライブラリにおいて、シャープネスを変更した後、撮影モードを変更すると、シャープネスの値が変わってしまいます。
上記推奨カメラ設定値を使用する場合は、先に撮影モードを文字モードに設定したあと、シャープネスの値を+5に設定してください。

ライブラリの使用方法

QRデコードの手順は、一般的には以下のようになります。

1. GetDecodeBufferSize()にデコード対象の画像の幅と高さの最大値を渡して、デコードに必要なバッファサイズを取得します。
2. アプリケーション側で取得したサイズの作業用バッファを確保し、そのアドレスをInitialize()に渡して、デコード処理の準備を行います。
3. ExecuteDecode()にてデコード処理を行います。
4. 処理の結果得られたデコード結果(DecodeData)の内容に従って適切な処理を行います。
5. デコード対象の画像がなく、デコード処理を行わない場合は、Finalize()でデコードの終了処理を行います。
6. アプリケーション側で、3で確保した作業用バッファを解放します。

QRコードは最大16個に分割してデータを格納することができます。QRDライブラリでもこの連結QRコードに対応しています。
対象としているQRコードが連結QRコードの場合、DecodeDataのtotalとindexに有効な値が設定されます。連結QRコードでない場合は、totalの値が「0」に設定されます。
また、同時にDecodeDataのparityには分割したときの元データ全体のパリティ情報が格納されます。アプリケーション側で連結するときに、totalとindexで連結順番を確認し、各QRコードのparity値が同じかどうかを比較することで、正しい分割QRコードかどうかを確認してください。

QRコードの分割方法は、元の全体のデータを論理的に適当に分割してQRコードのデータとして格納されます。このとき、全角文字(漢字やひらがな)が含まれている場合、漢字は2バイト単位で分割されます。 つまり、2バイト文字の途中では分割されません。

元の全体のQRデータをQRコードにした場合。「abcdefg日本」が格納されています。
これを4つのQRコードに分割した場合
ab cde fg 日本

アプリケーション側で連結するときは、連結する順番及びすべてのデータが正しい分割であることを確認したら、単純に結合するだけで元のデータになります。

QRコードには格納するデータのコンテンツタイプを設定する機能はありません。従ってQRコードをデコードするアプリケーション側にて、デコードして得られたデータのコンテンツタイプを判断する必要があります。
詳しくは、サンプルデモを参考にしてください。

CTRカメラ画像のデコードに関して

本ライブラリでのデコード可能な画像の画素数は、幅640dot、高さ480dot以下となっております。
CTRカメラで撮影した画像をデコードする場合、カメラのサイズは画像の質によりVGAサイズを推奨いたします。
カメラ画像をデコードする場合、VGAサイズでキャプチャした画像のデコード領域を指定してExecuteDecode()に渡すようにしてください。

その他

本ライブラリはスレッドセーフではありませんので、各APIを割り込みハンドラや異なるスレッドから呼び出した場合、正常に動作しない可能性があります。

履歴

2015/03/25
企画時の注意を追加
2010/06/16
誤記修正
2010/05/31
初版