今日のQRコードは、想像できるほぼすべての場所で使用されています。 多くの開発者が、モバイルデバイス用のアプリケーションでQRコードのスキャンと認識を整理する方法に興味があることは明らかです。
独自のiOSアプリケーションを開発する過程で、ロシア語ではインターネットでQRコードを処理することに関する情報がほとんどないという事実に直面しました。 アプリケーション自体を処理したので、私はこのひどく不公平な状況を修正する必要があると判断しました。 カットの下には、QRコードを認識し、iOSの初心者開発者にとって興味深い非常にシンプルなアプリケーションの開発プロセスの説明があります。 このメモは、Xcodeでの作業とiOS向けのプログラミングの機能に関する基本的な知識を前提としています。
Xcode 4.1の開発が行われ、
Xcodeの以前のバージョン(バージョン
3.2.3以降 )のプロセスはほぼ同じになります。
一般的に、スキャンとパターン認識のタスクは、数学的および技術的な実装の観点から非常に複雑です。 つまり、バーコードまたはQRコードをゼロから認識するアプリケーションを開発することは非常に困難です。 幸いなことに、進歩は止まっておらず、誰かがスキャンと認識の複雑な作業の大部分をすでに決定している場合もあります。 これを使用します。
したがって、仕事には以下が必要です。
- Mac OS X> = 10.6.x(Snow Leopard) 、それぞれ10.7.2 Lionです。
- Xcode> = 3.2.3 、バージョン4.1で作業しました。
- iPhone> = 3GS 、iPhone 3GSおよびiPad 2でテストしました。
- デバイス上のiOS 4.0以降 (実際、3.1も可能です)。
- IOS開発者アカウント それなしでは、開発したアプリケーションを物理デバイスでテストすることはできません。
Xcodeで配布されるiOSデバイスのエミュレーターはカメラをエミュレートする方法を知らないため、アプリケーションをテストするには、
iPhone 、
iPod Touch、または
iPad 2のような実際のデバイスが必要です。 過去2年間にリリースされたカメラ付きのデバイスは、それ自体に非常に適しています。
また、作業のために、SDKを使用してQRコードをスキャンおよび認識します。これにより、QRコードのグラフィックイメージの処理とテキスト情報への変換が行われます。 同様の機能を提供する既製のオープンソースライブラリがいくつかあります
。ZBariPhone SDK SDKバージョン1.2(1.2より上のバージョンも適しています)を
使用します 。
こちらからダウンロードでき
ます 。
指定されたリンクを使用して、
ZBarSDK-1.2.dmg imageをダウンロードします。その中に、必要なライブラリを含む
ZBarSDKフォルダーがあります。
それでは始めましょう。
1. Xcodeを起動し、その中に新しい
「View-based Application」プロジェクト
を作成し、
QR Scannerと呼び、ディスク上の都合の良い場所に保存します。
2.プロジェクトナビゲータで、
QR_ScannerViewController.xibを開き
ます 。
3.
Round Rect Buttonフォームに配置して、たとえば
「Scan QR code」というテキストを配置します。
4.
画像ビュー要素をフォームの上部に配置し、オブジェクトインスペクターのアスペクトフィットでビューモードプロパティを設定します。
5.フォームの下部に
テキストビュー要素を配置し、スタブテキストを削除し、代わりに、たとえば
「QRコードのスキャンを開始するには、画面下部のボタンをクリックします
」というテキスト
を配置します 。 [オブジェクトインスペクター]の[ユーザーインタラクションを有効にする]チェックボックスをオフにします。
6.コントローラーコードにアウトレットを追加しますこれを行うには、
QR_ScannerViewController.hを開き、次のフォームに移動します。
#import <UIKit/UIKit.h> @interface QR_ScannerViewController : UIViewController { UITextView *resultText; UIImageView *resultImage; } @property (nonatomic, retain) IBOutlet UIImageView *resultImage; @property (nonatomic, retain) IBOutlet UITextView *resultText; - (IBAction)scanButtonTapped; @end
コードからわかるように、フォームに配置した
UITextViewコントロールと
UIImageViewコントロールの 2つの
アウトレットを発表しました。 さらに、ボタンのクリックを処理してQRコードをスキャンするIBActionを発表しました。
7.
QR_ScannerViewController.xibを開き、作成した
アウトレットと
scanButtonTappedアクションを対応するフォーム要素に関連付けます。
- resultImageアウトレットをImageView要素に接続します。
- resultTextアウトレットをTextView要素に接続します。
- scanButtonTappedアクションをRound Rect ButtonのTouchUpInsideイベントに関連付けます。
8.ここで、
QR_ScannerViewControllerクラスのヘッダーファイルで宣言されたオブジェクトの実装を作成する必要があります。 ファイル
QR_ScannerViewController.mを開き、次のフォームに移動します。
#import "QR_ScannerViewController.h" @implementation QR_ScannerViewController @synthesize resultImage; @synthesize resultText; - (IBAction)scanButtonTapped{ NSLog(@"Now we are scanning QR-code..."); } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning];} - (void)viewDidUnload { [super viewDidUnload]; self.resultText = nil; self.resultImage = nil; } - (BOOL)shouldAutorotateToInterfaceOrientation: (UIInterfaceOrientation)interfaceOrientation { return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);} - (void) dealloc { [resultImage release]; [resultText release]; [super dealloc]; }
Xcodeでのアプリケーション開発に慣れていない場合でも、心配しないでください。開発環境がこのファイル自体にコードの大部分を追加しています。 ヘッダーファイルで宣言されたオブジェクトとアクションを実装しました。
@synthesize resultImage; @synthesize resultText; - (IBAction)scanButtonTapped{ NSLog(@"Now we are scanning QR-code..."); }
さらに、メモリからフォームをアンロードする際に、フリーアウトレットにコードを追加しました(viewDidUnload):
self.resultText = nil; self.resultImage = nil;
deallocのメモリも解放します。
[resultImage release]; [resultText release];
9.ここで、以前に
ダウンロードしたZBarSDKライブラリをアプリケーションに直接含める必要があります。 これを行うには、
ZBarSDK-1.2.dmgディスクイメージを開き、その中の
ZBarSDKフォルダーを見つけて、FinderからXcodeのプロジェクトにドラッグします。
10.次に、プロジェクトにいくつかのライブラリを追加する必要があります。 プロジェクトの[
ターゲット ]プロパティで、[
ビルドフェーズ ]タブを開き、[
ライブラリとバイナリをリンク ]ドロップダウンリストを開き、このリストの左下にあるプラス記号をクリックして、次のライブラリを追加します。
- AVFoundation.framework
- Coremedia.framework
- CoreVideo.framework
- QuartzCore.framework
- libiconv.dylib
11. SDKのヘッダーファイルをインポートします。 これを行うには、ファイル
「QR Scanner-Prefix.pch」を開き、次の行を追加します。
#import "ZBarSDK.h"
12.コントローラークラス
QR_ScannerViewControllerの場合 、デリゲートプロトコル
<ZBarReaderDelegate>のサポート
を宣言します。このため、ファイル
QR_ScannerViewController.hでクラス宣言
を修正します 。
@interface QR_ScannerViewController : UIViewController <ZBarReaderDelegate>{ UITextView *resultText; UIImageView *resultImage; }
13.これで、アプリケーションが何か有用なことを開始できるようにする準備が整いました。 ファイル
QR_ScannerViewController.mで 、
scanButtonTappedコードを次のように変更します。
- (IBAction)scanButtonTapped{
これで、アプリケーションのボタンをクリックした後、このメソッドが呼び出され、カメラからの画像が表示されるビューを直接呼び出します。 ユーザーがカメラをQRコードに向けるだけで十分です。その後、ユーザーは読み取られて処理されます。
14.ただし、QRコードを読み取って処理するだけでは不十分であり、処理結果をユーザーに示す必要もあります。 これを行うには、次のデリゲートメソッドを実装する必要があります(すべて同じ
QR_ScannerViewController.mにあります )。
- (void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { id<NSFastEnumeration> results = [info objectForKey:ZBarReaderControllerResults]; ZBarSymbol *symbol = nil; for(symbol in results)
このメソッドが機能すると、QRコードを撮影したビューが画面から削除され、ファイル
QR_ScannerViewController.xibで開発された元のビューが表示されます。 このプレゼンテーションでは、QRコードの写真とこのQRコードのテキストが表示されます。
15.
以上です! 次に、プロジェクトを保存し、コンパイルし、デバイスで実行します。
16. QRコードをスキャンするには、
「QRコードをスキャン」ボタンをクリックし、カメラをQRコード画像に向けます。 プログラムは自動的にQRコードを「認識」し、その写真を撮影して認識します。その後、それに含まれる情報を表示します。
第一に、説明の観点からはかなり長いプロセスであり、第二に、この記事では読者がXcodeの操作に関する何らかの情報ベースを持っていることを前提としているため、これは、物理デバイス上で開発されたアプリケーションを実行する機能を暗黙的に意味します。 それでも、読者が望んでいるのであれば、物理デバイス上で開発されたアプリケーションの起動を整理するプロセスを別のメモで説明できます。
また、使用したライブラリにより、QRコードだけでなく、他の多くのタイプの2次元コードも認識できることに注意してください。 QRコードを認識するタスクに集中するため、および関心のある人によるこのライブラリの独立した研究を刺激するために、この機能を意図的に考慮から除外しました。
結論として、このノートのトピックに関するいくつかの有用なリンク:
1.
ZBarSDKライブラリの開発者のサイト 。
2.
QRコードに関するウィキペディア