我可以使用下面的代码成功扫描 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 的分辨率相结合。某些字段(如左行指示器)没有被清楚地阅读。