4

我想从实时摄像头和图像中扫描二维码和条形码。我之前使用 ZBar 库来扫描代码。它不扫描特定类型的二维码和条形码。此外,在从实时摄像头扫描代码时,Apple 的 AVFoundation 框架似乎更加快速和准确。

所以我不想使用ZBar。为了从从图库中挑选的图像中扫描代码,我使用了 CIDetector。但似乎 CIDetector 无法从图像中扫描条形码。我已经在整个堆栈中搜索了流CIDetector 对于其他条形码类型从 UIImage 本地扫描条形码(即,不使用 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"];
     }

}
4

3 回答 3

1

到目前为止,Apple 的 AVFoundation 框架还没有提供一种方法来扫描从图像库中挑选的条形码。

所以我通过使用 AVFoundation 框架在实时相机中扫描二维码和条形码来解决我的问题,而当用户从图库中拍摄照片时,我使用 ZBar 框架来扫描二维码和条形码。

于 2017-07-11T09:15:29.917 回答
1

截至目前,iOS 11CIDetector只有以下类型可以从图像中检测

  • CIDetectorTypeFace
  • CIDetectorTypeRectange
  • CIDetectorTypeQRCode
  • CIDetectorTypeText

因此,根据您的要求,我们不能真正依赖CIDectector从图像中读取条形码和 QR 码。但是,我们确实有其他选择,例如AVFoundation框架,AVCaptureMetadataOutput但我们需要有实时摄像头视图来检测条形码和 QR 码。

对于未来的读者,您可以查看Swift Camrea博客文章以检测来自自定义相机的元数据。


如果您的目标是 iOS11 及更高版本,我们确实有一组新的Vision API 可以从图像中读取条形码。只需创建一个VNDetectBarcodesRequest并获取条形码结果。从 Github查看iOS 11 QR 代码示例项目。请注意,由于 iOS 11 仅处于测试阶段,因此视觉 API 的文档还不够成熟。

于 2017-07-12T04:28:45.417 回答
0

Use ZXing library.

ZXingObjC is a full Objective-C port of ZXing ("Zebra Crossing"), a Java barcode image processing library. It is designed to be used on both iOS devices and in Mac applications.

于 2017-05-04T13:21:59.117 回答