iOSアプリケーションからQRコードをスキャンして認識します

今日のQRコードは、想像できるほぼすべての場所で使用されています。 多くの開発者が、モバイルデバイス用のアプリケーションでQRコードのスキャンと認識を整理する方法に興味があることは明らかです。

独自のiOSアプリケーションを開発する過程で、ロシア語ではインターネットでQRコードを処理することに関する情報がほとんどないという事実に直面しました。 アプリケーション自体を処理したので、私はこのひどく不公平な状況を修正する必要があると判断しました。 カットの下には、QRコードを認識し、iOSの初心者開発者にとって興味深い非常にシンプルなアプリケーションの開発プロセスの説明があります。 このメモは、Xcodeでの作業とiOS向けのプログラミングの機能に関する基本的な知識を前提としています。

Xcode 4.1の開発が行われ、 Xcodeの以前のバージョン(バージョン3.2.3以降 )のプロセスはほぼ同じになります。
一般的に、スキャンとパターン認識のタスクは、数学的および技術的な実装の観点から非常に複雑です。 つまり、バーコードまたはQRコードをゼロから認識するアプリケーションを開発することは非常に困難です。 幸いなことに、進歩は止まっておらず、誰かがスキャンと認識の複雑な作業の大部分をすでに決定している場合もあります。 これを使用します。
したがって、仕事には以下が必要です。

Xcodeで配布されるiOSデバイスのエミュレーターはカメラをエミュレートする方法を知らないため、アプリケーションをテストするには、 iPhoneiPod 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アクションを対応するフォーム要素に関連付けます。

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.次に、プロジェクトにいくつかのライブラリを追加する必要があります。 プロジェクトの[ ターゲット ]プロパティで、[ ビルドフェーズ ]タブを開き、[ ライブラリとバイナリをリンク ]ドロップダウンリストを開き、このリストの左下にあるプラス記号をクリックして、次のライブラリを追加します。

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{ //  ,     ZBarReaderViewController *reader = [ZBarReaderViewController new]; reader.readerDelegate = self; reader.supportedOrientationsMask = ZBarOrientationMaskAll; ZBarImageScanner *scanner = reader.scanner; /*     QR-.          -… */ [scanner setSymbology:0 config:ZBAR_CFG_ENABLE to:0]; /* …     QR-: */ [scanner setSymbology:ZBAR_QRCODE config:ZBAR_CFG_ENABLE to:1]; reader.readerView.zoom = 1.0; /*        (),  QR-: */ [self presentModalViewController:reader animated:YES]; [reader release]; } 

これで、アプリケーションのボタンをクリックした後、このメソッドが呼び出され、カメラからの画像が表示されるビューを直接呼び出します。 ユーザーがカメラをQRコードに向けるだけで十分です。その後、ユーザーは読み取られて処理されます。

14.ただし、QRコードを読み取って処理するだけでは不十分であり、処理結果をユーザーに示す必要もあります。 これを行うには、次のデリゲートメソッドを実装する必要があります(すべて同じQR_ScannerViewController.mにあります )。
 - (void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { /*     info     - «»: */ id<NSFastEnumeration> results = [info objectForKey:ZBarReaderControllerResults]; /*         ,          QR-: */ ZBarSymbol *symbol = nil; for(symbol in results) //     break; /*             resultText: */ resultText.text = symbol.data; /*    QR-    UIImageView   resultImage: */ resultImage.image = [info objectForKey: UIImagePickerControllerOriginalImage]; //  ,     QR- [picker dismissModalViewControllerAnimated:YES]; } 

このメソッドが機能すると、QRコードを撮影したビューが画面から削除され、ファイルQR_ScannerViewController.xibで開発された元のビューが表示されます。 このプレゼンテーションでは、QRコードの写真とこのQRコードのテキストが表示されます。

15. 以上です! 次に、プロジェクトを保存し、コンパイルし、デバイスで実行します。

16. QRコードをスキャンするには、 「QRコードをスキャン」ボタンをクリックし、カメラをQRコード画像に向けます。 プログラムは自動的にQRコードを「認識」し、その写真を撮影して認識します。その後、それに含まれる情報を表示します。

第一に、説明の観点からはかなり長いプロセスであり、第二に、この記事では読者がXcodeの操作に関する何らかの情報ベースを持っていることを前提としているため、これは、物理デバイス上で開発されたアプリケーションを実行する機能を暗黙的に意味します。 それでも、読者が望んでいるのであれば、物理デバイス上で開発されたアプリケーションの起動を整理するプロセスを別のメモで説明できます。

また、使用したライブラリにより、QRコードだけでなく、他の多くのタイプの2次元コードも認識できることに注意してください。 QRコードを認識するタスクに集中するため、および関心のある人によるこのライブラリの独立した研究を刺激するために、この機能を意図的に考慮から除外しました。

結論として、このノートのトピックに関するいくつかの有用なリンク:
1. ZBarSDKライブラリの開発者のサイト
2. QRコードに関するウィキペディア

Source: https://habr.com/ru/post/J130814/


All Articles