Ios AVMetadataObjectTypePDF417代码无法读取马里兰驾驶执照

Ios AVMetadataObjectTypePDF417代码无法读取马里兰驾驶执照,ios,objective-c,avmetadataitem,Ios,Objective C,Avmetadataitem,我已经发布了一段时间的应用程序,它使用AVFoundation Framwork读取驾照上的PDF417条形码以捕获数据。适用于许多不同的州驾照。然而,我一直无法让它阅读来自马里兰州的任何许可证。我的应用程序还可以使用霍尼韦尔或无限外围设备的可选附件,这些附件可以使用激光扫描仪读取条形码。这些附件能够轻松读取相同的马里兰条形码 应该做的是回调到: - (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObj

我已经发布了一段时间的应用程序,它使用AVFoundation Framwork读取驾照上的PDF417条形码以捕获数据。适用于许多不同的州驾照。然而,我一直无法让它阅读来自马里兰州的任何许可证。我的应用程序还可以使用霍尼韦尔或无限外围设备的可选附件,这些附件可以使用激光扫描仪读取条形码。这些附件能够轻松读取相同的马里兰条形码

应该做的是回调到:

- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection
但在扫描马里兰许可证上的条形码时,不会发生回调。它适用于我迄今为止尝试过的任何其他州许可证。我还没有遇到任何其他州颁发的许可证的问题,但我还没有尝试所有这些许可证

还有其他人看到过这个问题吗

更新:这不是关于如何使用AVFoundation框架读取条形码的问题。我在app store中有多个这样做的产品,包括PDF417代码。所讨论的条形码肯定是PDF417条形码,因为美国要求所有50个州和波多黎各在其许可证上放置PDF417条形码

最后状态:
我能够扫描MD许可证。事实证明,它们包含的数据比我一直使用的其他许可证格式多得多。因此,与其他密度较低的条形码相比,使用相机扫描条形码需要更好的照明和更稳定的手。这是可以做到的,而且确实有效。我已决定将此问题留待讨论,以便有此问题的任何其他人都可以看到下面发布的解决方案,并理解这是可能的。

我可以使用下面的代码成功扫描PDF417代码

编辑:在追踪到一个MD许可证样本后,我确实可以使用AVCapture成功扫描它,但只有在Photoshop中编辑图像之后

-(void)setupBarcode
{
    AVCaptureDevice *videoDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
    NSError *error = nil;

    _input = [AVCaptureDeviceInput deviceInputWithDevice:videoDevice error:&error];
    [self.captureSession addInput:_input];

    _output = [[AVCaptureMetadataOutput alloc] init];
    [_output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];
    [self.captureSession addOutput:_output];

    _output.metadataObjectTypes = [_output availableMetadataObjectTypes];
    self.previewLayer = [AVCaptureVideoPreviewLayer layerWithSession:self.captureSession];
}

-(void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection
{
    AVMetadataMachineReadableCodeObject *barCodeObject;
    NSString *detectionString = nil;
    for (AVMetadataObject *metadata in metadataObjects) 
    {
        if ([metadata.type isEqualToString:AVMetadataObjectTypePDF417Code])
        {
            barCodeObject = (AVMetadataMachineReadableCodeObject *)[self.previewLayer transformedMetadataObjectForMetadataObject:(AVMetadataMachineReadableCodeObject *)metadata];
            detectionString = [(AVMetadataMachineReadableCodeObject *)metadata stringValue];
           break;
        }
        else
        {
            //What do you get for this line if it doesn't decode?
            NSLog(@"%@",metadata.type);
        }
    }
    NSLog(@"%@",detectionString);
}
为了让MD许可证正确扫描,我必须将许可证的图像导入Photoshop,调整对比度、分辨率和抗锯齿,然后它完美地扫描,并返回正确的字符串和所有适当的驾照字段


我相信这是由于相机的分辨率加上打印的DL的分辨率。某些字段(如左行指示器)未被清晰读取。

MD dl/id的有效样本在哪里?@BradBrighton我有某人实际许可证的条形码。我不能分享这一点,原因很明显。我想我只是在问是否有人见过这个问题,他们是否以及如何克服它。我的产品能够识别许多不同州许可证上的条形码,但OP中提到的api根本无法识别我尝试过的马里兰许可证上的条形码。当然,你不能共享真正的许可证。但是,如果有正式的示例,您可以确定是许可证还是国家标准给您带来了问题。我也有多个州的代码,但MD还不是我所知道的,相关的标准对兼容性非常清楚。@BradBrighton-我还没有在网上找到任何为马里兰提供参考标准的东西。如果你知道一个来源,请分享。我找到了大约20个不同州的参考样本,但不是MD。我记录了苹果的一个bug。根据霍尼韦尔和无限外围设备附件的结果,这是一个PDF417条形码,这些设备能够扫描它。正如我告诉@Brad的,我已经做了一段时间了,并且成功地扫描了我的产品中的条形码,这些产品在iOS 7发布后不久就开始发货了。我的代码也可以工作。然而,我从来没有收到来自马里兰州的AVFoundation framework关于这个特定条形码的回电。这不是我的代码,这是由于某种原因无法识别的框架。所有美国和加拿大驾驶执照都使用PDF417条形码。看,条形码是最肯定的PDF417,但可能有一些变化的规格,苹果的图书馆无法解释。PDF417的规格非常复杂,包括纠错选项和其他参数,在这种情况下可能会导致问题。@ChuckKrutsinger唯一的问题是条形码对于相机来说可能太大,如果它有很多字符,iPhone相机可能没有识别像素所需的分辨率。我能够复制这里列出的问题,在这里我无法扫描第一个PDF417,直到它被重新定位,然后它扫描良好。这可能是个问题,但我不这么认为。在实际许可证上扫描失败。确定。无事生非。事实证明,马里兰许可证条形码的密度使得用相机扫描变得非常棘手。只要有一只稳定的手,适量的光线,再加上一些耐心,它确实能起作用。