2015-03-13 2 views
3

Я отправляю приложение в течение некоторого времени, которое использует AVFoundation Framwork для чтения штрих-кода PDF417 на основе водительских прав для сбора данных. Прекрасно работает с несколькими лицензиями государственных водителей. Тем не менее, я не смог заставить его прочитать какую-либо лицензию из штата Мэриленд. Мое приложение также может использовать дополнительные вложения от Honeywell или Infinite Peripherals, которые читают штрих-коды с помощью лазерного сканера. Эти приложения могут легко считывать штрих-коды в Maryland.AVMetadataObjectTypePDF417Code не умеет читать драйверы драйверов штата Мэриленд

Что должно произойти, это обратный вызов:

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

Но обратного вызова не происходит при сканировании штрих-код на получение лицензии штата Мэриленд. Это делается для любой другой государственной лицензии, которую я до сих пор пробовал. У меня еще не было этой проблемы с любыми другими лицензиями, выдаваемыми государством, но я еще не пробовал их всех.

Кто-нибудь еще видел эту проблему?

Обновление: это не вопрос о том, как использовать среду AVFoundation для чтения штрих-кода. У меня есть несколько продуктов в магазине приложений, которые делают именно это, включая коды PDF417. И этот штрих-код, безусловно, является штрих-кодом PDF417, потому что США требуют, чтобы все 50 штатов и Пуэрто-Рико помещали штрих-код PDF417 в свои лицензии.

Заключительный статус: Я смог проверить лицензии MD. Оказывается, они содержат немного больше данных, чем другие форматы лицензий, с которыми я работал. В результате сканирование их с использованием камеры требует лучшего освещения и более устойчивой руки, чем другие менее плотные штрих-коды. Это можно сделать и действительно работает. Я решил оставить этот вопрос таким образом, чтобы любой, у кого есть эта проблема, мог увидеть решение, размещенное ниже, и может понять, что это возможно.

+1

Где действительный образец MD dl/id? –

+0

@BradBrighton У меня есть штрих-код от чьей-то фактической лицензии. Я не могу поделиться этим по понятным причинам. Наверное, я просто спрашиваю, видел ли кто-нибудь еще эту проблему, и если и как они смогли ее преодолеть. Мой продукт способен распознавать штрих-коды на нескольких разных государственных лицензиях, но api, упомянутый в OP, просто не распознает штрих-код на лицензиях штата Мэриленд, которые я пробовал. –

+0

Конечно, вы не можете поделиться реальной лицензией. Однако, если есть формальная выборка, вы можете определить, дает ли вам лицензию или государственный стандарт. У меня также есть код для нескольких состояний, но MD не тот, которого я еще получил, и соответствующие стандарты довольно понятны в отношении совместимости. –

ответ

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

В соответствии с результатами приложений Honeywell и Infinite Peripherals это штрих-код PDF417, и эти устройства могут сканировать его. Как я сказал @Brad, я делал это некоторое время и успешно просматривал штрих-коды в своих продуктах, которые были отправлены с момента выхода iOS 7. Мой код также работает. Тем не менее, я никогда не получаю обратный вызов из структуры AVFoundation на этом конкретном штрих-коде из штата Мэриленд. Это не мой код, это основа, которая почему-то не узнала ее. –

+0

Все водительские удостоверения США и Канады используют штрих-коды PDF417. См. Http://www.aamva.org/Driver-Licensing-Identification/. Штрих-код является, безусловно, PDF417, но, возможно, имеет некоторые различия в спецификации, которую библиотека Apple не в состоянии интерпретировать. Спецификация для PDF417 очень сложна и включает в себя выбор исправления ошибок и другие параметры, которые могут вызвать проблемы в этом случае. –

+1

@ChuckKrutsinger. Другое дело, что штрих-код может быть большим для камеры, если у него есть много символов, у камеры iPhones может не быть разрешения, необходимого для идентификации пикселей. Я смог реплицировать проблему, указанную здесь, где я не мог отсканировать первый PDF417 до тех пор, пока он не был перезагружен, тогда он отлично сканировался. https://github.com/PDF417/pdf417-android/issues/1 – zimmryan