2017-05-04 26 views
3

ライブカメラと画像の両方からqrとバーコードをスキャンします。以前はZBarライブラリを使ってコードをスキャンしていました。特定の種類のqrとバーコードはスキャンされません。また、AppleのAVFoundationフレームワークは、ライブカメラからコードをスキャンする際に、より高速で正確なように見えます。CIDetectorを使用してバーコードをスキャンする(1と2次元)

私はZBarを使いたくありません。ギャラリーから選んだ画像からコードをスキャンするために、私はCIDetectorを使用しています。しかし、CIDetectorは画像からバーコードをスキャンできないようです。画像はCIDetectorを使用して、ギャラリーから選ん形成私はScanning barcode from UIImage natively (i.e., not using ZBar)

、流れCIDetector For other Barcode Types上のすべてのスタック上 を検索しましたが、私はバーコードをスキャンする方法を発見していません。 CIDetectorを使用してUIImagesからバーコードをスキャンすることは可能ですか?

他のサードパーティのライブラリを提案しないでください。私はリンゴのデフォルトのフレームワークを使って仕事をしたいと思っています。

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info 
{ 

    [picker dismissViewControllerAnimated:YES completion:nil]; 

    UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage]; 
    CIImage *img = [[CIImage alloc]initWithImage:image]; 

    CIDetector* detector = [CIDetector detectorOfType:CIDetectorTypeQRCode context:nil options:@{CIDetectorAccuracy:CIDetectorAccuracyHigh}]; 
    if (detector) 
    { 
     NSArray* featuresR = [detector featuresInImage:img]; 
     NSString* decodeR; 
     for (CIQRCodeFeature* featureR in featuresR) 
     { 
      NSLog(@"decode %@ ",featureR.messageString); 
      decodeR = featureR.messageString; 

      [self showAlertWithTitle:@"Success" withMessage:decodeR]; 
      return; 
     } 

    [self showAlertWithTitle:@"Error" withMessage:@"Invalid Image"]; 
    } 

} 
+0

あなたはすでにUIImagesでスキャンしていますか?それらをCIImage([[CIImage alloc] initWithImage:image])に変換し、CIDetectorに渡します。 – Lepidopteron

+0

これはQRコードをスキャンするだけで、バーコードはスキャンしません。バーコードを含む画像については、 'featuresInImage'を呼び出すときに空の配列が得られます。 –

答えて

0

これまでリンゴのAVFoundation Frameworkでは、イメージライブラリから取得したバーコードをスキャンする方法は提供されていません。

ライブカメラのQRとバーコードをスキャンするためにAVFoundation Frameworkを使用して問題を解決しましたが、ギャラリーのユーザー写真の写真では、ZBarフレームワークを使用してqrとバーコードをスキャンします。 iOSの11 CIDetector今のよう

0

使用ZXing ライブラリ。

ZXingObjCは、Javaバーコード画像処理ライブラリであるZXingの完全なObjective-Cポート(「Zebra Crossing」)です。 iOSデバイスとMacアプリケーションの両方で使用するように設計されています。

+0

スキャンを行うためにサードパーティのライブラリを使用したくないです。 –

0

は画像のみから検出するために、種類を、次のい

  • CIDetectorTypeFace
  • CIDetectorTypeRectange
  • CIDetectorTypeQRCode
  • CIDetectorTypeTextあなたの要求ごとのよう

、我々本当にに依存することはできません画像からバーコードとQRコードを読み取ることができます。しかし、AVFoundationフレームワークAVCaptureMetadataOutputのような他のオプションがありますが、バーコードとQRコードを検出するにはライブカメラビューが必要です。

将来の読者のために、Swift Camreaブログの投稿でカスタムカメラからのメタデータを検出することができます。あなたがiOS11をターゲットにして上記されている場合は


、我々は画像からバーコードを読み取るためのVision APIの新しいセットを持っています。 VNDetectBarcodesRequestを作成し、バーコードの結果を取得するだけです。 GithubのiOS 11 QR Code Exampleプロジェクトをチェックしてください。視力APIのドキュメントは、iOS 11がベータ段階にあるため十分に成熟していないことに注意してください。

関連する問題