2015-03-13 24 views
3

我已經運送了一段時間的應用程序,使用AVFoundation Framwork讀取驅動程序的許可證上的PDF417條形碼以捕獲數據。與許多不同的州司機的執照很好地合作。但是,我一直無法從馬里蘭州讀取任何許可證。我的應用程序還可以使用霍尼韋爾的可選附件或使用激光掃描儀讀取條形碼的無限外設。這些附件能夠輕鬆閱讀相同的馬里蘭條形碼。AVMetadataObjectTypePDF417Code無法讀取馬里蘭州駕駛執照

發生的事情是回調到:

- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection 

但在美國馬里蘭州執照掃描條形碼時不會發生回調。它適用於我迄今嘗試的任何其他州牌照。我還沒有任何其他州頒發的許可證的問題,但我還沒有嘗試過。

有其他人看過這個問題嗎?

更新:這不是一個關於如何使用AVFoundation框架來讀取條形碼的問題。我在應用商店中有多種產品,包括PDF417代碼。而有關條形碼絕對是PDF417條形碼,因爲美國要求所有50個州和波多黎各在其許可證上放置PDF417條形碼。

最終狀態: 我能夠掃描MD許可證。事實證明,它們包含的數據比我一直在使用的其他許可證格式要多得多。因此,使用相機掃描它們需要更好的照明和比其他密度較低的條碼更穩定的手。它可以完成並且工作。我決定留下這個問題,以便任何有此問題的人都可以看到下面發佈的解決方案,並且可以理解這是可能的。

+1

MD dl/id的有效樣本在哪裏? – 2015-03-16 00:19:42

+0

@BradBrighton我從某人的實際許可中獲得條形碼。我無法分享,原因很明顯。我想我只是問是否有其他人看過這個問題,以及他們是否以及如何能夠克服它。我的產品能夠識別許多不同州許可證上的條形碼,但OP中提到的API並不能識別我嘗試過的馬里蘭州許可證上的條形碼。 – 2015-03-16 03:43:39

+0

當然,你不能分享真正的許可證。但是,如果有正式的樣本,您可以確定是否是許可證或州標準給您帶來問題。我也有多種狀態的代碼,但是MD還不是我所知道的,並且相關的標準對於兼容性非常明確。 – 2015-03-16 03:46:06

回答

3

我可以使用下面的代碼成功掃描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的分辨率相結合。某些字段(如左行指示符)未被清晰地讀取。

+0

根據霍尼韋爾和無限外設附件的結果,這是一個PDF417條形碼,這些設備能夠掃描它。正如我對@Brad所說的那樣,我一直這樣做了一段時間,併成功掃描了iOS 7發佈後很快發佈的產品中的條形碼。我的代碼也可以。但是,我從來沒有從AVLoundation框架回復馬里蘭州的特定條形碼。這不是我的代碼,它是由於某種原因未能識別它的框架。 – 2015-03-21 02:59:33

+0

所有美國和加拿大駕駛執照都使用PDF417條形碼。請參閱http://www.aamva.org/Driver-Licensing-Identification/條形碼絕對是PDF417,但可能有一些與蘋果圖書館無法解釋的規格有關的變體。 PDF417的規範非常複雜,包括糾錯和其他可能導致此類問題的參數的選擇。 – 2015-03-23 02:09:31

+1

@ChuckKrutsinger唯一的另一件事是條形碼可能對於相機來說很大,如果它有很多字符,iPhones相機可能不具有識別像素所需的分辨率。我能夠複製這裏列出的問題,在那裏我無法掃描第一個PDF417,直到它被重新掃描,然後掃描得很好。 https://github.com/PDF417/pdf417-android/issues/1 – zimmryan 2015-03-23 14:18:30