第 9 章 待ち受けアプリケーション
11.11 カメラ機能の呼び出し
11.11.3 コード認識
コード認識機能では、携帯電話に搭載されたカメラデバイスを使用して画像で表現されたデータ
(典型的にはバーコードなど)を取り込み、その内容を認識するための機能を提供します。コー ド認識機能は、com.nttdocomo.device.CodeReader クラスで提供されます。
現在のプロファイルでは、識別可能なコードのコード種別として以下を規定しています。
・ CodeReader.CODE_JAN13(JANコード標準タイプ)
・ CodeReader.CODE_JAN8(JANコード短縮タイプ)
・ CodeReader.CODE_OCR(テキスト認識)
・ CodeReader.CODE_QR(QRコード)
・ CodeReader.CODE_MICRO_QR(マイクロQRコード)
・ CodeReader.CODE_39(CODE-39コード)
・ CodeReader.CODE_NW7(NW-7コード)
ただし、どの機種でも認識可能なコードは
CODE_JAN13、CODE_JAN8、CODE_QRの3つです。【DoJa-4.1】
CODE_MICRO_QR、CODE_39、CODE_NW7は、DoJa-4.1プロファイル(902iS)以降、オプショナルのコード種 別として追加されました。
コード認識は以下の手順で行います。
1) CodeReaderオブジェクトの取得と設定 2) カメラデバイスによるコードの取り込みと認識 3) コード認識の結果取得
<CodeReaderオブジェクトの取得と設定>
CodeReaderオブジェクトを取得するには、CodeReaderクラスのstaticメソッドgetCodeReader()を呼 び出します。このメソッドの引数には、カメラ制御機能でも使用するカメラIDを指定します(複数のカメラ
Copyright Ⓒ 2008-2012 NTT DOCOMO, Inc. All Rights Reserved.
デバイスを搭載している機種では、コード認識に使用可能な解像度を持つデバイスがどれか1つに制限される 場合があります)。
コードの取り込みを行う前には、あらかじめCodeReaderオブジェクトに、これから取り込ませようとして いるコードのコード種別を設定する必要があります。コード種別の設定は、CodeReader.setCode()の引数 に、上述のコード種別を指定することで行います。携帯電話各機種で取り扱うことのできるコード種別は、
CodeReader.getAvailableCodes()メソッドで取得することができます。またメーカーによっては、コー ド種別にCodeReader.CODE_AUTOを指定することにより、コード種別の自動認識を行わせることができる ものがあります。
【DoJa-5.0】
DoJa-5.0プロファイル以降では、CodeReaderクラスでもCameraクラスと同様に、オプショナルとして
フォーカスモードを設定・取得する機能が追加されました。
<カメラデバイスによるコードの読み取りと認識>
カメラデバイスを起動してコードの読み取りと認識を行うには、CodeReader.read()メソッドを使用します。
このメソッドを呼び出すとiアプリはサスペンドし、カメラデバイスの起動が行われます。
ユーザーがカメラデバイスを操作し、撮影およびコード認識処理を行わせることで、撮影されたコードがデー タに変換されてCodeReaderオブジェクトに保持されます。ユーザーが操作をキャンセルしたり、コード認 識に失敗した場合は、コードのデータは保持されません。いずれの場合でも、ユーザーがカメラデバイスの操 作を終了させるとiアプリはレジュームし、アプリケーションプログラムに復帰します。
<コード認識の結果取得>
カメラデバイスによるコードの読み取り・認識に成功すると、アプリケーションプログラムはCodeReader オブジェクトからその結果を取得することができます。アプリケーションプログラムは、コード認識の結果と して以下の情報を参照することができます。
・ 認識したコードのコード種別(getResultCode()メソッド)
・ コード認識の結果得られたデータ(getString()メソッドまたはgetBytes()メソッド)
・ コード認識の結果得られたデータのデータ型(getResultType()メソッド)
データ型には以下の4種類があります。
・ 数字文字列(CodeReader.TYPE_NUMBER)
・ ASCII文字列(CodeReader.TYPE_ASCII)
・ 非ASCII文字列(CodeReader.TYPE_STRING)
・ バイナリ(CodeReader.TYPE_BINARY)
JANコードでは規格上の制限により数字文字列のみ取り扱うことができますが、QRコードでは非ASCII文字 を含む文字列やバイナリデータも取り扱うことができます。
コード認識機能は、DoJa-3.0 プロファイルでiアプリオプション API として規定されました。そ
の後 DoJa-3.5 プロファイルにてiアプリ基本 API に取り入れられています。
注意事項:
● 非活性化状態の待ち受けアプリケーションからは、CodeReader.read()メソッドを呼び出すことはでき ません。
Copyright Ⓒ 2008-2012 NTT DOCOMO, Inc. All Rights Reserved.
● コード認識機能はカメラ制御機能と同じカメラデバイスを使用するため、アプリケーションプログラムが 同一のカメラIDでこれらの機能を同時に使用しようとすると、開発者の意図しない結果を引き起こす場 合があります。例えば、Cameraオブジェクトが画像を保持している状態でCodeReader.read()メソッ ドを呼び出すと、Cameraオブジェクトが保持していた画像は破棄されることがあります。
● JANコードを読み取る場合、読み取った結果はチェックディジットを含めた全ての文字がアプリケーショ ンプログラムに返されます。つまり、JANコード標準タイプでは13桁、JANコード短縮タイプでは8桁 の数字文字列がアプリケーションプログラムに返されます。
● QRコードについては、以下の仕様に従ったものを取り扱うことができます。
- バージョン :1~10(バージョン11以上の使用可否はメーカーにより異なります)
- モデル :モデル2(モデル1、およびMicroQRはサポートしません)
- 誤り訂正レベル :L、M、Q、H
また、漢字データを扱う際には、iアプリ実行環境のデフォルトエンコーディングであるShift-JISコード を使用することができます。
● CodeReader.getResultType()メソッドにより、読み取ったデータのデータ型がどれだけ詳細に得ら れるかは、メーカーにより異なります。例えば数字文字列を読み込ませた場合、あるメーカーの携帯電話 ではその型を詳細にCodeReader.TYPE_NUMBERと判断するかもしれませんが、別のメーカーの携帯電 話では文字列の内容判定までは行わずCodeReader.TYPE_ASCIIやCodeReader.TYPE_STRINGと判 定するかもしれません。このメソッドの返す値は、コード認識の結果得られたデータをアプリケーション プログラムが解析する上でのヒントとして使用するようにしてください。
なお、 DoJa-3.5 プロファイル以降に対応した携帯電話では、特定の情報を含む 2 次元バーコードを
携帯電話ネイティブのコード認識アプリケーションに読み取らせることによりその携帯電話内に ダウンロードされている特定のiアプリを連携起動する機能が搭載されています。
iアプリを連携起動するための 2 次元バーコードに含まれる情報(iアプリ起動情報)は、以下 の例に示すようなテキストデータです。 2 次元バーコード化されたiアプリ起動情報をネイティブ のコード認識アプリケーションで読み取ると、対応するiアプリを起動する旨の確認画面が表示 されます。
<iアプリ起動情報のテキスト例>
LAPL:
ADFURL:http¥://www.nttdocomo.co.jp/java/a.jam;
CMD:startup_Application_A;
PARAM:param1,i-mode;
PARAM:param2,iappli;
;
※便宜上折り返し表示を行なっていますが、テキスト内に改行コードは含みません。
以下に、iアプリ起動情報の書式および記法を解説します。
LAPL:
ADFURL:<起動対象iアプリのADF URL(*1)>;
CMD:<起動コマンド(*1)>;
PARAM:<パラメータ名(*2)>, <パラメータ値(*2)>;
:(必要に応じてPARAMを繰り返し)
;
※記述例同様、便宜上折り返し表示を行なっていますがテキスト内に改行コードは含みません。
(*1) これらに現れる特殊文字 '¥' ':' ';' には、直前にエスケープ文字 '¥' を付加します。
(*2) これらに現れる特殊文字 '¥' ':' ';' ',' には、直前にエスケープ文字 '¥' を付加します。
Copyright Ⓒ 2008-2012 NTT DOCOMO, Inc. All Rights Reserved.
● LAPL:
iアプリ起動情報の開始を表す識別子です。
● ADFURL:<起動対象iアプリのADF URL>;
このiアプリ起動情報で起動させたいiアプリに対応するADFのURLをASCII形式で指定します(最大255 バイト)。末尾には必ずセミコロンを指定します。起動対象iアプリは、あらかじめその携帯電話内にダウ ンロードされている必要があります。
● CMD:<起動コマンド>;
起動コマンドをASCII形式で指定します(最大250バイト)。末尾には必ずセミコロンを指定します。ここ で指定されている起動コマンド(末尾のセミコロンは除きます)と、iアプリのADFのAllowPushByキー で起動許可が与えられている起動コマンド(AllowPushByキーの値として"Code:"以降に指定されるコマ ンド文字列)が完全に一致していなければ、iアプリを起動することはできません。ADFのAllowPushBy キーについては、15.5.1項を参照してください。
● PARAM:<パラメータ名>, <パラメータ値>;
起動されたiアプリに引き渡すパラメータを指定します(オプショナル)。1つのパラメータは以下のフォ ーマットを取ります。
PARAM <パラメータ名>, <パラメータ値>;
※末尾には必ずセミコロンを指定します。
パラメータ名およびパラメータ値は、iアプリ起動時にIApplication.getParameter()メソッドによ り取得できるパラメータを指定するために使用されます。パラメータ指定は1つのiアプリ起動情報に最大 16個まで指定することができます。ただし、全てのパラメータの名前と値の合計長は255バイトに制限され ます。またパラメータの名前および値にはASCII文字のみ使用可能です。
● ;
iアプリ起動情報の終了を表す識別子です。開始識別子(LAPL:)と対となります。
これらの規定に従って作成したiアプリ起動情報のテキストを 2 次元バーコードに変換する方法 については、2 次元バーコード編集のための各ツールのマニュアル等を参照してください。
注意事項:
● 携帯電話ユーザーは、携帯電話の設定により2次元バーコードからのiアプリ起動を禁止することができま す。2次元バーコードからの起動が禁止されている場合、2次元バーコードを読み取らせてもiアプリの起動 は行われません。
● 2次元バーコードから起動されたiアプリの動作が終了すると、iアプリ起動前の状態(コード認識結果表 示)に復帰します。ただし、2次元バーコードから起動されたiアプリをユーザーが強制終了した場合、i アプリ終了後にどのような状態に移るかはメーカーにより異なります
● 2次元バーコードは人間が視覚的に直接解読することは困難ですが、対応機器(読み取り専用機器だけでな く2次元バーコード対応の一般的な携帯電話なども含みます)を介することで容易に読み取ることができま す。機密の保持が求められるようなデータは、iアプリ起動情報の起動コマンドやパラメータには設定しな いなどの配慮が必要です。