2017-05-04 37 views
3

我想從實時相機和圖像中掃描qr和條形碼。我以前使用ZBar庫來掃描代碼。它不掃描特定類型的qr和條形碼。此外,蘋果的AVFoundation框架在從實時相機掃描代碼時看起來更加快速準確。使用CIDetector掃描條形碼(1和2維)

所以我不想使用ZBar。爲了掃描從圖庫中挑選的圖像中的代碼,我使用了CIDetector。但似乎CIDetector無法掃描圖像中的條形碼。我已經找遍了堆過流CIDetector For other Barcode TypesScanning barcode from UIImage natively (i.e., not using ZBar)

,但我還沒有找到一種方法來掃描條形碼形成圖像使用CIDetector從畫廊挑選。是否可以使用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還沒有提供掃描圖像庫中條形碼的方法。

因此,我通過使用AVFoundation Framework在實時相機中掃描QR和條形碼來解決我的問題,而當用戶從圖片庫中照片圖片時,我使用ZBar Framework掃描qr和條形碼。

0

使用ZXing 庫。

ZXingObjC是ZXing(「Zebra Crossing」)的完整Objective-C端口,是一款Java條碼圖像處理庫。它旨在用於iOS設備和Mac應用程序。

+0

我不想用任何第三方庫進行掃描。 –

0

截至目前iOS的11 CIDetector只以下類型的圖像來檢測

  • CIDetectorTypeFace
  • CIDetectorTypeRectange
  • CIDetectorTypeQRCode
  • CIDetectorTypeText

所以按照您的要求,我們不能真正依靠CIDectector從圖像讀取條形碼和QR碼。但是,我們還有其他選項,如AVFoundation框架AVCaptureMetadataOutput,但我們需要有一個實時相機視圖來檢測條形碼和QR碼。

對於未來的讀者,您可以查看Swift Camrea博客文章,以從自定義相機中檢測元數據。


如果你的目標iOS11以上,我們確實有一組新的API Vision的從圖像讀取條形碼。只需創建一個VNDetectBarcodesRequest並獲取條形碼結果。查看Github的iOS 11 QR Code Example項目。請注意,由於iOS 11僅處於測試階段,所以視覺API的文檔還不夠成熟。